]> git.saurik.com Git - wxWidgets.git/commitdiff
return size without decorations from size_request GTK callback in wxTLW
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 15 Feb 2007 12:38:55 +0000 (12:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 15 Feb 2007 12:38:55 +0000 (12:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/toplevel.h
src/gtk/toplevel.cpp
src/gtk/window.cpp

index c5d99c5de4d601b7f3c7d3940a26a821b18c0f09..7e0a51d9813c219a17b8361f9175309ca875946f 100644 (file)
@@ -114,6 +114,9 @@ public:
                                  int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
                                  int incW = wxDefaultCoord, int incH = wxDefaultCoord );
 
+    // return the full size of the window without WM decorations
+    void GTKDoGetSize(int *width, int *height) const;
+
 protected:
     // common part of all ctors
     void Init();
index 062f13429a2bb791cc1619dceeecae560e6eeef9..e3e320f77ee2eaa6d8ead0cb28ef92f9adc08ac9 100644 (file)
@@ -248,6 +248,24 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation*
 }
 }
 
+// ----------------------------------------------------------------------------
+// "size_request"
+// ----------------------------------------------------------------------------
+
+extern "C" {
+void wxgtk_tlw_size_request_callback(GtkWidget * WXUNUSED(widget),
+                                     GtkRequisition *requisition,
+                                     wxTopLevelWindowGTK *win)
+{
+    // we must return the size of the window without WM decorations, otherwise
+    // GTK+ gets confused, so don't call just GetSize() here
+    int w, h;
+    win->GTKDoGetSize(&w, &h);
+
+    requisition->height = h;
+    requisition->width = w;
+}
+}
 //-----------------------------------------------------------------------------
 // "delete_event"
 //-----------------------------------------------------------------------------
@@ -586,6 +604,8 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
     g_signal_connect (m_widget, "size_allocate",
                       G_CALLBACK (gtk_frame_size_callback), this);
 
+    g_signal_connect (m_widget, "size_request",
+                      G_CALLBACK (wxgtk_tlw_size_request_callback), this);
     PostCreation();
 
     if ((m_x != -1) || (m_y != -1))
@@ -849,6 +869,11 @@ void wxTopLevelWindowGTK::DoMoveWindow(int WXUNUSED(x), int WXUNUSED(y), int WXU
 // window geometry
 // ----------------------------------------------------------------------------
 
+void wxTopLevelWindowGTK::GTKDoGetSize(int *width, int *height) const
+{
+    return wxTopLevelWindowBase::DoGetSize(width, height);
+}
+
 void wxTopLevelWindowGTK::GTKDoSetSize(int width, int height)
 {
     // avoid recursions
@@ -938,7 +963,7 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
 
         int wUndec,
             hUndec;
-        wxTopLevelWindowBase::DoGetSize(&wUndec, &hUndec);
+        GTKDoGetSize(&wUndec, &hUndec);
 
         if ( width != -1 )
             width -= wTotal - wUndec;
@@ -957,7 +982,7 @@ void wxTopLevelWindowGTK::DoGetSize(int *width, int *height) const
     {
         // this can happen if we're called before the window is realized, so
         // don't assert but just return the stored values
-        wxTopLevelWindowBase::DoGetSize(width, height);
+        GTKDoGetSize(width, height);
         return;
     }
 
index 35aa3f62426d9ac0da5298d00912439fb458f774..dd6be8cf368ad8fbe93b045e2e5c1b345df0f843 100644 (file)
@@ -2556,7 +2556,7 @@ void wxWindowGTK::PostCreation()
         // FIXME: what should be done here ?
     }
 #endif
-    else
+    else if ( !IsTopLevel() ) // top level windows use their own callback
     {
         // This is needed if we want to add our windows into native
         // GTK controls, such as the toolbar. With this callback, the