]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxWindow::GTKHandleRealized() virtual method to wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 12 Oct 2011 16:22:14 +0000 (16:22 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 12 Oct 2011 16:22:14 +0000 (16:22 +0000)
This allows to easily do something in the derived classes when the widget is
realized, without having to deal with GTK+ signals. In particular, get rid of
another "realize" signal handler in wxTopLevelWindow and simply override this
virtual method there.

It also incidentally makes the callback code simpler as the window doesn't
need to be constantly dereferenced.

This shouldn't result in any changes to behaviour.

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

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

index bd58083b8a6c1a24a8d8c17ded041a0d6fb8a5c6..a84cf8a87e1a09ed0f3d9bc8bc5c65d347f9c71a 100644 (file)
@@ -95,6 +95,8 @@ public:
     // GTK callbacks
     virtual void OnInternalIdle();
 
+    virtual void GTKHandleRealized();
+
     // do *not* call this to iconize the frame, this is a private function!
     void SetIconizeState(bool iconic);
 
index 8155d2430513128898dcfdad0e86571b36fcbc36..5af2602f75db93a461812615d3c75d82769330f9 100644 (file)
@@ -187,6 +187,10 @@ public:
     void GTKHandleFocusOutNoDeferring();
     static void GTKHandleDeferredFocusOut();
 
+    // Called when m_widget becomes realized. Derived classes must call the
+    // base class method if they override it.
+    virtual void GTKHandleRealized();
+
 protected:
     // for controls composed of multiple GTK widgets, return true to eliminate
     // spurious focus events if the focus changes between GTK+ children within
index 506233552535b0542c4be902c677e8111bd06545..4a8bd7c5d8cd52d2ab3241a88a12b57fa2e320e5 100644 (file)
@@ -308,32 +308,30 @@ gtk_frame_configure_callback( GtkWidget* widget,
 // we cannot the WM hints and icons before the widget has been realized,
 // so we do this directly after realization
 
-extern "C" {
-static void
-gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget),
-                             wxTopLevelWindowGTK *win )
+void wxTopLevelWindowGTK::GTKHandleRealized()
 {
-    gdk_window_set_decorations(gtk_widget_get_window(win->m_widget),
-                               (GdkWMDecoration)win->m_gdkDecor);
-    gdk_window_set_functions(gtk_widget_get_window(win->m_widget),
-                               (GdkWMFunction)win->m_gdkFunc);
+    wxNonOwnedWindow::GTKHandleRealized();
+
+    gdk_window_set_decorations(gtk_widget_get_window(m_widget),
+                               (GdkWMDecoration)m_gdkDecor);
+    gdk_window_set_functions(gtk_widget_get_window(m_widget),
+                               (GdkWMFunction)m_gdkFunc);
 
     // GTK's shrinking/growing policy
-    if ( !(win->m_gdkFunc & GDK_FUNC_RESIZE) )
-        gtk_window_set_resizable(GTK_WINDOW(win->m_widget), FALSE);
+    if ( !(m_gdkFunc & GDK_FUNC_RESIZE) )
+        gtk_window_set_resizable(GTK_WINDOW(m_widget), FALSE);
 #if !GTK_CHECK_VERSION(3,0,0) && !defined(GTK_DISABLE_DEPRECATED)
     else
-        gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
+        gtk_window_set_policy(GTK_WINDOW(m_widget), 1, 1, 1);
 #endif
 
-    const wxIconBundle& icons = win->GetIcons();
+    const wxIconBundle& icons = GetIcons();
     if (icons.GetIconCount())
-        win->SetIcons(icons);
+        SetIcons(icons);
 
     if (win->HasFlag(wxFRAME_SHAPED))
         win->SetShape(win->m_shape); // it will really set the window shape now
 }
-}
 
 //-----------------------------------------------------------------------------
 // "map_event" from m_widget
@@ -632,11 +630,6 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
         gtk_widget_set_uposition( m_widget, m_x, m_y );
 #endif
 
-    //  we cannot set MWM hints and icons before the widget has
-    //  been realized, so we do this directly after realization
-    g_signal_connect (m_widget, "realize",
-                      G_CALLBACK (gtk_frame_realized_callback), this);
-
     // for some reported size corrections
     g_signal_connect (m_widget, "map_event",
                       G_CALLBACK (gtk_frame_map_callback), this);
index f710cce243b84a3122e1d2da5b2c22e1a3533fa5..a7ff360ffd03ecaa587cff9e269dc8bca97cee60 100644 (file)
@@ -1914,29 +1914,38 @@ gtk_scrollbar_button_release_event(GtkRange* range, GdkEventButton*, wxWindow* w
 //-----------------------------------------------------------------------------
 
 static void
-gtk_window_realized_callback(GtkWidget* widget, wxWindow* win)
+gtk_window_realized_callback(GtkWidget* WXUNUSED(widget), wxWindow* win)
 {
-    if (win->m_imData)
+    win->GTKHandleRealized();
+}
+
+void wxWindowGTK::GTKHandleRealized()
+{
+    if (m_imData)
     {
-        gtk_im_context_set_client_window( win->m_imData->context,
-            win->m_wxwindow ? win->GTKGetDrawingWindow() : gtk_widget_get_window(widget));
+        gtk_im_context_set_client_window
+        (
+            m_imData->context,
+            m_wxwindow ? GTKGetDrawingWindow()
+                       : gtk_widget_get_window(m_widget)
+        );
     }
 
     // We cannot set colours and fonts before the widget
     // been realized, so we do this directly after realization
     // or otherwise in idle time
 
-    if (win->m_needsStyleChange)
+    if (m_needsStyleChange)
     {
-        win->SetBackgroundStyle(win->GetBackgroundStyle());
-        win->m_needsStyleChange = false;
+        SetBackgroundStyle(GetBackgroundStyle());
+        m_needsStyleChange = false;
     }
 
-    wxWindowCreateEvent event( win );
-    event.SetEventObject( win );
-    win->GTKProcessEvent( event );
+    wxWindowCreateEvent event( this );
+    event.SetEventObject( this );
+    GTKProcessEvent( event );
 
-    win->GTKUpdateCursor(true, false);
+    GTKUpdateCursor(true, false);
 }
 
 //-----------------------------------------------------------------------------