m_isBeingDeleted = true;
m_hasVMT = false;
+ // destroy children before destroying this window itself
+ DestroyChildren();
+
+ // unhook focus handlers to prevent stray events being
+ // propagated to this (soon to be) dead object
+ if (m_focusWidget != NULL)
+ {
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_focusWidget),
+ (GtkSignalFunc) gtk_window_focus_in_callback, (gpointer) this );
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_focusWidget),
+ (GtkSignalFunc) gtk_window_focus_out_callback, (gpointer) this );
+ }
+
if (m_widget)
Show( false );
- DestroyChildren();
-
#ifdef HAVE_XIM
if (m_ic)
gdk_ic_destroy (m_ic);
m_clipPaintRegion = false;
-#ifndef __WXUNIVERSAL__
-#ifndef __WXGTK20__
+#if !defined(__WXUNIVERSAL__) && !defined(__WXGTK20__)
// The following code will result in all window-less widgets
// being redrawn because the wxWidgets class is allowed to
// paint over the window-less widgets.
gdk_event.type = GDK_EXPOSE;
gdk_event.window = pizza->bin_window;
gdk_event.count = 0;
+ gdk_event.send_event = TRUE;
wxRegionIterator upd( m_updateRegion );
while (upd)
}
}
}
-#endif
-#endif
+#endif // native GTK 1
m_updateRegion.Clear();
}
return gtk_widget_get_pango_context( m_widget );
}
+// MR: Returns the same as GtkGetPangoDefaultContext until the symbol can be removed in 2.7.x
PangoContext *wxWindowGTK::GtkGetPangoX11Context()
{
- if (!m_x11Context)
- m_x11Context = pango_x_get_context( gdk_display );
-
- return m_x11Context;
+ return gtk_widget_get_pango_context( m_widget );
}
#endif
#if wxUSE_MENUS_NATIVE
-extern "C"
+extern "C" WXDLLIMPEXP_CORE
void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
{
*is_waiting = FALSE;
}
-void SetInvokingWindow( wxMenu *menu, wxWindow* win )
+WXDLLIMPEXP_CORE void SetInvokingWindow( wxMenu *menu, wxWindow* win )
{
menu->SetInvokingWindow( win );
}
}
-extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu,
- gint *x, gint *y,
+extern "C" WXDLLIMPEXP_CORE
+void wxPopupMenuPositionCallback( GtkMenu *menu,
+ gint *x, gint *y,
#ifdef __WXGTK20__
- gboolean * WXUNUSED(whatever),
+ gboolean * WXUNUSED(whatever),
#endif
- gpointer user_data )
+ gpointer user_data )
{
// ensure that the menu appears entirely on screen
GtkRequisition req;