// delete before the widgets to avoid a crash on solaris
delete m_imData;
+ // avoid problem with GTK+ 2.18 where a frozen window causes the whole
+ // TLW to be frozen, and if the window is then destroyed, nothing ever
+ // gets painted again
+ if (IsFrozen())
+ DoThaw();
+
if (m_widget)
{
// Note that gtk_widget_destroy() does not destroy the widget, it just
#if wxUSE_MENUS_NATIVE
-static void SetInvokingWindow( wxMenu *menu, wxWindow* win )
-{
- menu->SetInvokingWindow( win );
-
- wxMenuItemList::compatibility_iterator node = menu->GetMenuItems().GetFirst();
- while (node)
- {
- wxMenuItem *menuitem = node->GetData();
- if (menuitem->IsSubMenu())
- {
- SetInvokingWindow( menuitem->GetSubMenu(), win );
- }
-
- node = node->GetNext();
- }
-}
-
extern "C" {
static
void wxPopupMenuPositionCallback( GtkMenu *menu,
{
wxCHECK_MSG( m_widget != NULL, false, wxT("invalid window") );
- wxCHECK_MSG( menu != NULL, false, wxT("invalid popup-menu") );
-
- SetInvokingWindow( menu, this );
-
menu->UpdateUI();
wxPoint pos;
win
);
- GdkWindow* window = win->GTKGetDrawingWindow();
- if (window == NULL)
- window = w->window;
+ GdkWindow* window = w->window;
+ if (w == win->m_wxwindow)
+ window = win->GTKGetDrawingWindow();
gdk_window_freeze_updates(window);
}
return;
}
- GdkWindow* window = GTKGetDrawingWindow();
- if (window == NULL)
- window = w->window;
+ GdkWindow* window = w->window;
+ if (w == m_wxwindow)
+ window = GTKGetDrawingWindow();
gdk_window_freeze_updates(window);
}
return;
}
- GdkWindow* window = GTKGetDrawingWindow();
- if (window == NULL)
- window = w->window;
+ GdkWindow* window = w->window;
+ if (w == m_wxwindow)
+ window = GTKGetDrawingWindow();
gdk_window_thaw_updates(window);
}