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
// GTK callbacks
virtual void OnInternalIdle();
// 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);
// do *not* call this to iconize the frame, this is a private function!
void SetIconizeState(bool iconic);
void GTKHandleFocusOutNoDeferring();
static void GTKHandleDeferredFocusOut();
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
protected:
// for controls composed of multiple GTK widgets, return true to eliminate
// spurious focus events if the focus changes between GTK+ children within
// we cannot the WM hints and icons before the widget has been realized,
// so we do this directly after realization
// 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
// 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
#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);
- const wxIconBundle& icons = win->GetIcons();
+ const wxIconBundle& icons = GetIcons();
if (icons.GetIconCount())
if (icons.GetIconCount())
if (win->HasFlag(wxFRAME_SHAPED))
win->SetShape(win->m_shape); // it will really set the window shape now
}
if (win->HasFlag(wxFRAME_SHAPED))
win->SetShape(win->m_shape); // it will really set the window shape now
}
//-----------------------------------------------------------------------------
// "map_event" from m_widget
//-----------------------------------------------------------------------------
// "map_event" from m_widget
gtk_widget_set_uposition( m_widget, m_x, m_y );
#endif
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);
// for some reported size corrections
g_signal_connect (m_widget, "map_event",
G_CALLBACK (gtk_frame_map_callback), this);
//-----------------------------------------------------------------------------
static void
//-----------------------------------------------------------------------------
static void
-gtk_window_realized_callback(GtkWidget* widget, wxWindow* win)
+gtk_window_realized_callback(GtkWidget* WXUNUSED(widget), wxWindow* win)
+ 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
}
// 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);
}
//-----------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------