]> Pileus Git - ~andy/gtk/commitdiff
[broadway] Correctly track remote visible state
authorAlexander Larsson <alexl@redhat.com>
Mon, 11 Apr 2011 09:56:22 +0000 (11:56 +0200)
committerAlexander Larsson <alexl@redhat.com>
Mon, 11 Apr 2011 10:09:43 +0000 (12:09 +0200)
GDK_WINDOW_IS_MAPPED is not false for withdrawn windows, so we need
to track real visibility ourselves.

gdk/broadway/gdkwindow-broadway.c
gdk/broadway/gdkwindow-broadway.h

index fd663a1d2ee49452f6303db2a6573159a94649e3..1cd54255967e1b2bb439d154610430490c7ce24c 100644 (file)
@@ -229,7 +229,9 @@ _gdk_broadway_resync_windows (void)
                                   window->window_type == GDK_WINDOW_TEMP);
       if (impl->transient_for)
        broadway_output_set_transient_for (display->output, impl->id, impl->transient_for);
-      if (GDK_WINDOW_IS_MAPPED (window))
+      /* Can't check GDK_WINDOW_IS_MAPPED here, because that doesn't correctly handle
+        withdrawn windows like menus */
+      if (impl->visible)
        {
          broadway_output_show_surface (display->output, impl->id);
          window_data_send (display->output, impl);
@@ -521,6 +523,7 @@ gdk_window_broadway_show (GdkWindow *window, gboolean already_mapped)
   GdkBroadwayDisplay *broadway_display;
 
   impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
+  impl->visible = TRUE;
 
   if (window->event_mask & GDK_STRUCTURE_MASK)
     _gdk_make_event (GDK_WINDOW (window), GDK_MAP, NULL, FALSE);
@@ -543,6 +546,7 @@ gdk_window_broadway_hide (GdkWindow *window)
   GdkBroadwayDisplay *broadway_display;
 
   impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
+  impl->visible = FALSE;
 
   if (window->event_mask & GDK_STRUCTURE_MASK)
     _gdk_make_event (GDK_WINDOW (window), GDK_UNMAP, NULL, FALSE);
index 0b3c8574296e0668c025f74f5be2e6440b87d771..a104b28b97487a598096602c2dc2035c7e951085 100644 (file)
@@ -60,6 +60,7 @@ struct _GdkWindowImplBroadway
 
   int id;
 
+  gboolean visible;
   int transient_for;
 
   gint8 toplevel_window_type;