wxapp_install_idle_handler();
if (win->IsEnabled() &&
- (g_openDialogs == 0 || (win->GetExtraStyle() & wxTOPLEVEL_EX_DIALOG)))
+ (g_openDialogs == 0 || (win->GetExtraStyle() & wxTOPLEVEL_EX_DIALOG) ||
+ win->IsGrabbed()))
win->Close();
return TRUE;
m_miniTitle = 0;
m_mainWidget = (GtkWidget*) NULL;
m_insertInClientArea = TRUE;
- m_isFrame = TRUE;
m_isIconized = FALSE;
m_fsIsShowing = FALSE;
m_themeEnabled = TRUE;
m_gdkDecor = m_gdkFunc = 0;
+ m_grabbed = FALSE;
}
bool wxTopLevelWindowGTK::Create( wxWindow *parent,
wxTopLevelWindowGTK::~wxTopLevelWindowGTK()
{
+ if (m_grabbed)
+ {
+ wxASSERT_MSG( FALSE, "Window still grabbed");
+ RemoveGrab();
+ }
+
m_isBeingDeleted = TRUE;
// it may also be GtkScrolledWindow in the case of an MDI child
// set the focus if not done yet and if we can already do it
if ( GTK_WIDGET_REALIZED(m_wxwindow) )
{
- if ( g_delayedFocus && wxGetTopLevelParent(g_delayedFocus) == this )
+ if ( g_delayedFocus &&
+ wxGetTopLevelParent((wxWindow*)g_delayedFocus) == this )
{
g_delayedFocus->SetFocus();
g_delayedFocus = NULL;
}
}
+void wxTopLevelWindowGTK::AddGrab()
+{
+ if (!m_grabbed)
+ {
+ m_grabbed = TRUE;
+ gtk_grab_add( m_widget );
+ gtk_main();
+ gtk_grab_remove( m_widget );
+ }
+}
+
+void wxTopLevelWindowGTK::RemoveGrab()
+{
+ if (m_grabbed)
+ {
+ gtk_main_quit();
+ m_grabbed = FALSE;
+ }
+}