]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/toplevel.cpp
corrected printf format strings
[wxWidgets.git] / src / gtk / toplevel.cpp
index 9f5beeea7c234aaac0c55790d7dcd81a6b83d37f..0edae9fb0ee0ac288c6472c3d09c9e5e42a9db18 100644 (file)
@@ -111,7 +111,8 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
         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;
@@ -248,10 +249,6 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW
 // wxTopLevelWindowGTK itself
 // ----------------------------------------------------------------------------
 
-BEGIN_EVENT_TABLE(wxTopLevelWindowGTK, wxTopLevelWindowBase)
-    EVT_SET_FOCUS(wxTopLevelWindowGTK::OnSetFocus)
-END_EVENT_TABLE()
-
 //-----------------------------------------------------------------------------
 // InsertChild for wxTopLevelWindowGTK
 //-----------------------------------------------------------------------------
@@ -302,11 +299,11 @@ void wxTopLevelWindowGTK::Init()
     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,
@@ -477,6 +474,12 @@ 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
@@ -765,7 +768,8 @@ void wxTopLevelWindowGTK::OnInternalIdle()
     // 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;
@@ -775,19 +779,6 @@ void wxTopLevelWindowGTK::OnInternalIdle()
     wxWindow::OnInternalIdle();
 }
 
-void wxTopLevelWindowGTK::OnSetFocus(wxFocusEvent& event)
-{
-#if 0
-    if ( !g_delayedFocus || wxGetTopLevelParent(g_delayedFocus) != this )
-    {
-        // let the base class version set the focus to the first child which
-        // accepts it
-        event.Skip();
-    }
-    //else: the focus will be really set from OnInternalIdle() later
-#endif
-}
-
 // ----------------------------------------------------------------------------
 // frame title/icon
 // ----------------------------------------------------------------------------
@@ -886,3 +877,22 @@ void wxTopLevelWindowGTK::SetIconizeState(bool iconize)
     }
 }
 
+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;
+    }
+}