]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/toplevel.cpp
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / src / gtk / toplevel.cpp
index 4027023d7c3eeac5dfacd5244a17b73a49b9cd49..0fb82f4d64fa6274556ccd09434b6ef4d33e106f 100644 (file)
@@ -269,7 +269,7 @@ gtk_frame_configure_callback( GtkWidget* widget,
                               GdkEventConfigure *WXUNUSED(event),
                               wxTopLevelWindowGTK *win )
 {
                               GdkEventConfigure *WXUNUSED(event),
                               wxTopLevelWindowGTK *win )
 {
-    if (!win->m_hasVMT || !win->IsShown())
+    if (!win->IsShown())
         return FALSE;
 
     wxPoint point;
         return FALSE;
 
     wxPoint point;
@@ -377,11 +377,14 @@ gtk_frame_window_state_callback( GtkWidget* WXUNUSED(widget),
     // if maximized bit changed and it is now set
     if (event->changed_mask & event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
     {
     // if maximized bit changed and it is now set
     if (event->changed_mask & event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
     {
-        wxMaximizeEvent event(win->GetId());
-        event.SetEventObject(win);
-        win->HandleWindowEvent(event);
+        wxMaximizeEvent evt(win->GetId());
+        evt.SetEventObject(win);
+        win->HandleWindowEvent(evt);
     }
 
     }
 
+    if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
+        win->m_fsIsShowing = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) != 0;
+
     return false;
 }
 }
     return false;
 }
 }
@@ -640,6 +643,14 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent,
     g_signal_connect_after (m_widget, "focus_out_event",
                       G_CALLBACK (gtk_frame_focus_out_callback), this);
 
     g_signal_connect_after (m_widget, "focus_out_event",
                       G_CALLBACK (gtk_frame_focus_out_callback), this);
 
+    // GTK processes key events at the top level first, which handles for
+    // menu accelerators and shortcuts before passing the event on to the
+    // focus child window to begin propagation. We want to propagate
+    // first, so we connect gtk_window_propagate_key_event to
+    // key_press_event.
+    g_signal_connect (m_widget, "key_press_event",
+                      G_CALLBACK (gtk_window_propagate_key_event), NULL);
+
 #ifdef GDK_WINDOWING_X11
 #ifdef __WXGTK3__
     if (GDK_IS_X11_SCREEN(gtk_window_get_screen(GTK_WINDOW(m_widget))))
 #ifdef GDK_WINDOWING_X11
 #ifdef __WXGTK3__
     if (GDK_IS_X11_SCREEN(gtk_window_get_screen(GTK_WINDOW(m_widget))))
@@ -1022,8 +1033,6 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
 {
     wxCHECK_RET( m_widget, wxT("invalid frame") );
 
 {
     wxCHECK_RET( m_widget, wxT("invalid frame") );
 
-    m_deferShowAllowed = true;
-
     // deal with the position first
     int old_x = m_x;
     int old_y = m_y;
     // deal with the position first
     int old_x = m_x;
     int old_y = m_y;
@@ -1057,6 +1066,8 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
     if (m_height < 1) m_height = 1;
     if (m_width != oldSize.x || m_height != oldSize.y)
     {
     if (m_height < 1) m_height = 1;
     if (m_width != oldSize.x || m_height != oldSize.y)
     {
+        m_deferShowAllowed = true;
+
         int w, h;
         GTKDoGetSize(&w, &h);
         gtk_window_resize(GTK_WINDOW(m_widget), w, h);
         int w, h;
         GTKDoGetSize(&w, &h);
         gtk_window_resize(GTK_WINDOW(m_widget), w, h);