]> Pileus Git - ~andy/gtk/commitdiff
Move global window list to per-display
authorAlexander Larsson <alexl@redhat.com>
Wed, 24 Nov 2010 18:41:19 +0000 (19:41 +0100)
committerAlexander Larsson <alexl@redhat.com>
Thu, 25 Nov 2010 21:09:32 +0000 (22:09 +0100)
gdk/broadway/gdkdisplay-broadway.h
gdk/broadway/gdkwindow-broadway.c

index c4c0056f752df22b7626055691b4c5425d2384fd..0f90ff01cb49768ff169d5ea0aee38a00b037b72 100644 (file)
@@ -50,6 +50,7 @@ struct _GdkDisplayBroadway
   GdkScreen **screens;
 
   GHashTable *id_ht;
+  GList *toplevels;
 
   GSource *event_source;
   GdkWindow *mouse_in_toplevel;
index 274064ff99f86829f14b38cc6e0e05c13270325e..6283f3fdf14644d220e841efe50a8f0552814f21 100644 (file)
@@ -74,8 +74,6 @@ G_DEFINE_TYPE_WITH_CODE (GdkWindowImplBroadway,
                          G_IMPLEMENT_INTERFACE (GDK_TYPE_WINDOW_IMPL,
                                                 gdk_window_impl_iface_init));
 
-static GList *all_windows;
-
 GType
 _gdk_window_impl_get_type (void)
 {
@@ -171,7 +169,7 @@ dirty_flush_idle (gpointer data)
   if (client == NULL)
     return FALSE;
 
-  for (l = all_windows; l != NULL; l = l->next)
+  for (l = display->toplevels; l != NULL; l = l->next)
     {
       GdkWindowImplBroadway *impl = l->data;
 
@@ -204,7 +202,7 @@ _gdk_broadway_resync_windows (void)
 
   display = GDK_DISPLAY_BROADWAY (gdk_display_get_default ());
 
-  for (l = all_windows; l != NULL; l = l->next)
+  for (l = display->toplevels; l != NULL; l = l->next)
     {
       GdkWindowImplBroadway *impl = l->data;
       GdkWindowObject *private;
@@ -235,7 +233,6 @@ _gdk_broadway_resync_windows (void)
 static void
 gdk_window_impl_broadway_init (GdkWindowImplBroadway *impl)
 {
-  all_windows = g_list_prepend (all_windows, impl);
   impl->toplevel_window_type = -1;
   impl->device_cursor = g_hash_table_new_full (NULL, NULL, NULL,
                                                (GDestroyNotify) gdk_cursor_unref);
@@ -272,7 +269,7 @@ gdk_window_impl_broadway_finalize (GObject *object)
 
   g_hash_table_destroy (window_impl->device_cursor);
 
-  all_windows = g_list_remove (all_windows, window_impl);
+  display_broadway->toplevels = g_list_remove (display_broadway->toplevels, window_impl);
 
   G_OBJECT_CLASS (gdk_window_impl_broadway_parent_class)->finalize (object);
 }
@@ -334,7 +331,6 @@ _gdk_window_impl_new (GdkWindow     *window,
   screen_broadway = GDK_SCREEN_BROADWAY (screen);
   display_broadway = GDK_DISPLAY_BROADWAY (GDK_SCREEN_DISPLAY (screen));
 
-
   impl = g_object_new (_gdk_window_impl_get_type (), NULL);
   private->impl = (GdkDrawable *)impl;
   impl->id = current_id++;
@@ -348,6 +344,8 @@ _gdk_window_impl_new (GdkWindow     *window,
            private->window_type == GDK_WINDOW_TEMP);
   g_assert (GDK_WINDOW_TYPE (private->parent) == GDK_WINDOW_ROOT);
 
+  display_broadway->toplevels = g_list_prepend (display_broadway->toplevels, impl);
+
   /* Instead of window manager placement we have this mini hack
      so that the main/first window is not covered in the demos. */
   if (impl->id > 1)