]> git.saurik.com Git - wxWidgets.git/commitdiff
Added SetActive to wxEventLoop
authorJulian Smart <julian@anthemion.co.uk>
Sun, 24 Mar 2002 21:19:27 +0000 (21:19 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sun, 24 Mar 2002 21:19:27 +0000 (21:19 +0000)
Ensured Yield has a wxEventLoop (wxX11)
Process size event explicitly in top-level SetSize (wxX11)
Added wxYield to wxTopLevelWindow::Show (wxX11)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14763 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/evtloop.h
src/x11/app.cpp
src/x11/toplevel.cpp
src/x11/window.cpp

index 2a71defd7a741c8144070a3012d04452708aa5f5..4ff934f8a719fb431bd037c35510cee125a22d13 100644 (file)
@@ -47,6 +47,9 @@ public:
     // return currently active (running) event loop, may be NULL
     static wxEventLoop *GetActive() { return ms_activeLoop; }
 
+    // set currently active (running) event loop
+    static void SetActive(wxEventLoop* loop) { ms_activeLoop = loop; }
+
 protected:
     // the pointer to the port specific implementation class
     class WXDLLEXPORT wxEventLoopImpl *m_impl;
index b41f8955e75124c41c6ba2441d6569a196d0b7b7..8d9e58933ba0acd13636d36ef6358d798d492851 100644 (file)
@@ -991,6 +991,16 @@ bool wxApp::Yield(bool onlyIfNeeded)
 
     s_inYield = TRUE;
 
+    // Make sure we have an event loop object,
+    // or Pending/Dispatch will fail
+    wxEventLoop* eventLoop = wxEventLoop::GetActive();
+    wxEventLoop* newEventLoop = NULL;
+    if (!eventLoop)
+    {
+        newEventLoop = new wxEventLoop;
+        wxEventLoop::SetActive(newEventLoop);
+    }
+
     while (wxTheApp && wxTheApp->Pending())
         wxTheApp->Dispatch();
 
@@ -999,6 +1009,12 @@ bool wxApp::Yield(bool onlyIfNeeded)
 #endif
     ProcessIdle();
 
+    if (newEventLoop)
+    {
+        wxEventLoop::SetActive(NULL);
+        delete newEventLoop;
+    }
+
     s_inYield = FALSE;
 
     return TRUE;
index b26cd7994746f6d22bc7eb93b3f5f553db473173..1e84bc6b1c3286d52d3b30594d5c9d353892a642 100644 (file)
@@ -280,7 +280,6 @@ bool wxTopLevelWindowX11::Show(bool show)
         
         m_needResizeInIdle = FALSE;
     }
-
     if (show)
     {
         // This does the layout _before_ the
@@ -292,8 +291,10 @@ bool wxTopLevelWindowX11::Show(bool show)
             Layout();
         }
     }
+    wxYield();
 
-    return wxWindowX11::Show(show);
+    bool ret = wxWindowX11::Show(show);
+    return ret;
 }
 
 // ----------------------------------------------------------------------------
@@ -637,8 +638,9 @@ void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
 
 void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
+    //    wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height);
+
 #if 0
-    // wxLogDebug( "Setting pos: %d, %d", x, y );
     wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
 #endif
     XSync(wxGlobalDisplay(), False);
@@ -715,6 +717,11 @@ void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int siz
     XSync(wxGlobalDisplay(), False);
     XSync(wxGlobalDisplay(), False);
 #endif
+#if 1
+    wxSizeEvent event(wxSize(width, height), GetId());
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
+#endif
 }
 
 void wxTopLevelWindowX11::DoGetPosition(int *x, int *y) const
index 7568f13c88bdbea196311864151f52842ebf57d3..9533b1d1a84dd493cec30ce35ef5c69c69ddbf51 100644 (file)
@@ -735,6 +735,8 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const
 
 void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
+    //    wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height);
+
     Window xwindow = (Window) GetMainWindow();
 
     wxCHECK_RET( xwindow, wxT("invalid window") );
@@ -775,10 +777,18 @@ void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     }
     
     DoMoveWindow( new_x, new_y, new_w, new_h );
+
+#if 0
+    wxSizeEvent event(wxSize(new_w, new_h), GetId());
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
+#endif
 }
 
 void wxWindowX11::DoSetClientSize(int width, int height)
 {
+    //    wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height);
+
     Window xwindow = (Window) GetMainWindow();
 
     wxCHECK_RET( xwindow, wxT("invalid window") );
@@ -787,6 +797,12 @@ void wxWindowX11::DoSetClientSize(int width, int height)
 
     XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
 
+#if 0
+    wxSizeEvent event(wxSize(width, height), GetId());
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
+#endif
+    
 #else
 
     XWindowAttributes attr;
@@ -1053,6 +1069,8 @@ void wxWindowX11::SendEraseEvents()
 
 void wxWindowX11::SendPaintEvents()
 {
+    //    wxLogDebug("SendPaintEvents: %s (%ld)", GetClassInfo()->GetClassName(), GetId());
+
     m_clipPaintRegion = TRUE;
     
     wxNcPaintEvent nc_paint_event( GetId() );