]> git.saurik.com Git - wxWidgets.git/commitdiff
Send size events from top level windows in idle time,
authorRobert Roebling <robert@roebling.de>
Wed, 13 Mar 2002 18:25:11 +0000 (18:25 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 13 Mar 2002 18:25:11 +0000 (18:25 +0000)
   this significantly improves the opaque resizing look
   and feel and seems to speed up dialog show up time.

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

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

index 1488491844ddc4341e415f6076e49dd1363a69b9..4ca3ac2df1b4df41dde43328a61b410b7f062325 100644 (file)
@@ -57,28 +57,29 @@ public:
     virtual void SetIcon(const wxIcon& icon);
     virtual void Restore();
 
-    virtual bool Show(bool show = TRUE);
+    virtual bool Show( bool show = TRUE );
 
-    virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
+    virtual bool ShowFullScreen( bool show, long style = wxFULLSCREEN_ALL );
     virtual bool IsFullScreen() const { return m_fsIsShowing; }
 
     virtual void SetTitle( const wxString& title);
     virtual wxString GetTitle() const;
     
-    // implementation from now on
-    // --------------------------
+    // implementation
+    void SetNeedResizeInIdle( bool set = TRUE ) { m_needResizeInIdle = set; }
     
-    void SetFocusWidget( wxWindow *focus )   { m_focusWidget = focus; }
-    wxWindow *GetFocusWidget() const         { return m_focusWidget; }
-
 protected:
     // common part of all ctors
     void Init();
 
-    // For implementation purposes - sometimes decorations make the client area
-    // smaller
+    // For implementation purposes - sometimes decorations make the
+    // client area smaller
     virtual wxPoint GetClientAreaOrigin() const;
 
+    // For implementation of delayed resize events
+    bool m_needResizeInIdle;
+    virtual void OnInternalIdle();
+
     virtual void DoGetClientSize( int *width, int *height ) const;
     virtual void DoSetClientSize(int width, int height);
     virtual void DoSetSize(int x, int y,
@@ -99,9 +100,6 @@ protected:
     bool                  m_fsIsMaximized;
     bool                  m_fsIsShowing;
     wxString              m_title;
-    
-    // This widget gets the key input
-    wxWindow*             m_focusWidget;
 };
 
 // list of all frames and modeless dialogs
index 56b32f21aa1b0f9be3b882b36d7ccb0899c833f6..a35a1e05460430a375f23d335163914b0b3020f8 100644 (file)
@@ -526,10 +526,18 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
 #endif
             {
                 //wxLogDebug("ConfigureNotify: %s", windowClass.c_str());
-                wxSizeEvent sizeEvent( wxSize(XConfigureEventGetWidth(event), XConfigureEventGetHeight(event)), win->GetId() );
-                sizeEvent.SetEventObject( win );
+                if (win->IsTopLevel())
+                {
+                    wxTopLevelWindowX11 *tlw = (wxTopLevelWindowX11 *) win;
+                    tlw->SetNeedResizeInIdle();
+                }
+                else
+                {
+                    wxSizeEvent sizeEvent( wxSize(XConfigureEventGetWidth(event), XConfigureEventGetHeight(event)), win->GetId() );
+                    sizeEvent.SetEventObject( win );
                 
-                return win->GetEventHandler()->ProcessEvent( sizeEvent );
+                    return win->GetEventHandler()->ProcessEvent( sizeEvent );
+                }
             }
             return FALSE;
             break;
index e585e1557adeefaf814f8a58506475ee619b8d0c..1f683ae6cd697707f9791f59ba214fce93699530 100644 (file)
@@ -62,7 +62,7 @@ void wxTopLevelWindowX11::Init()
     m_fsIsMaximized = FALSE;
     m_fsIsShowing = FALSE;
     
-    m_focusWidget = NULL;
+    m_needResizeInIdle = FALSE;
 }
 
 bool wxTopLevelWindowX11::Create(wxWindow *parent,
@@ -225,6 +225,18 @@ wxTopLevelWindowX11::~wxTopLevelWindowX11()
     }
 }
 
+void wxTopLevelWindowX11::OnInternalIdle()
+{
+    wxWindow::OnInternalIdle();
+    
+    if (m_needResizeInIdle)
+    {
+        wxSizeEvent event( GetClientSize(), GetId() );
+        event.SetEventObject( this );
+        GetEventHandler()->ProcessEvent( event );
+    }
+}
+
 // ----------------------------------------------------------------------------
 // wxTopLevelWindowX11 showing
 // ----------------------------------------------------------------------------
@@ -235,12 +247,14 @@ bool wxTopLevelWindowX11::Show(bool show)
     // else there's no initial size.
 #if wxUSE_NANOX
     if (show)
+#else
+    if (show && m_needResizeInIdle)
+#endif
     {
         wxSizeEvent event(GetSize(), GetId());
         event.SetEventObject(this);
         GetEventHandler()->ProcessEvent(event);
     }
-#endif
 
     return wxWindowX11::Show(show);
 }