Add gdk_display_get_toplevel_windows
authorMatthias Clasen <mclasen@redhat.com>
Wed, 1 Nov 2017 00:26:42 +0000 (20:26 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 1 Nov 2017 00:29:48 +0000 (20:29 -0400)
This is replacing the corresponding GdkScreen api, which
is going away. To implement this, we need to add a
get_root_window vfunc to GdkDisplay.

13 files changed:
gdk/broadway/gdkdisplay-broadway.c
gdk/gdkdisplay.c
gdk/gdkdisplayprivate.h
gdk/quartz/gdkdisplay-quartz.c
gdk/wayland/gdkdisplay-wayland.c
gdk/wayland/gdkprivate-wayland.h
gdk/wayland/gdkscreen-wayland.c
gdk/win32/gdkdisplay-win32.c
gdk/win32/gdkprivate-win32.h
gdk/win32/gdkscreen-win32.c
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkscreen-x11.c
gdk/x11/gdkscreen-x11.h

index 194b0cfc872a4c3298fde514b7923dfaafdea2b6..7aff3a9f8153b6b422b9605f57e708e60285b4ee 100644 (file)
@@ -316,6 +316,14 @@ gdk_broadway_display_get_setting (GdkDisplay *display,
   return FALSE;
 }
 
+static GdkWindow *
+gdk_broadway_display_get_root_window (GdkDisplay *display)
+{
+  GdkBroadwayDisplay *broadway_display = GDK_BROADWAY_DISPLAY (display);
+
+  return gdk_broadway_screen_get_root_window (broadway_display->default_screen);
+}
+
 static void
 gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
 {
@@ -365,5 +373,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
   display_class->get_monitor = gdk_broadway_display_get_monitor;
   display_class->get_primary_monitor = gdk_broadway_display_get_primary_monitor;
   display_class->get_setting = gdk_broadway_display_get_setting;
+  display_class->get_root_window = gdk_broadway_display_get_root_window;
 }
 
index 8ac18262a40eb44fd1452f71622e827dc042fc90..3af5dc50259cb5e915331de0167937bd3fac97ee 100644 (file)
@@ -2249,3 +2249,25 @@ gdk_display_setting_changed (GdkDisplay       *display,
 {
   g_signal_emit (display, signals[SETTING_CHANGED], 0, name);
 }
+
+GList *
+gdk_display_get_toplevel_windows (GdkDisplay *display)
+{
+  GdkWindow * root_window;
+  GList *new_list = NULL;
+  GList *tmp_list;
+
+  root_window = GDK_DISPLAY_GET_CLASS (display)->get_root_window (display);
+
+  tmp_list = root_window->children;
+  while (tmp_list)
+    {
+      GdkWindow *w = tmp_list->data;
+
+      if (w->window_type != GDK_WINDOW_FOREIGN)
+        new_list = g_list_prepend (new_list, w);
+      tmp_list = tmp_list->next;
+    }
+
+  return new_list;
+}
index c0b9aa5b37e82dbeefb0b36cf822fc92b1f933b5..463a6199ce3bc12b730d31887d005f703eb98738 100644 (file)
@@ -224,6 +224,7 @@ struct _GdkDisplayClass
   gboolean               (*get_setting)                (GdkDisplay     *display,
                                                         const char     *name,
                                                         GValue         *value);
+  GdkWindow *            (*get_root_window)            (GdkDisplay     *display);
 
   /* Signals */
   void                   (*opened)                     (GdkDisplay     *display);
@@ -307,6 +308,8 @@ void                gdk_display_emit_opened           (GdkDisplay       *display
 void                gdk_display_setting_changed       (GdkDisplay       *display,
                                                        const char       *name);
 
+GList *             gdk_display_get_toplevel_windows  (GdkDisplay       *display);
+
 G_END_DECLS
 
 #endif  /* __GDK_DISPLAY_PRIVATE_H__ */
index 3376cbb27ca2e7b995bbb62eda6387eb844bf1ef..944212bf8c18b0056dc2528bd5bf2ad080a83466 100644 (file)
@@ -248,6 +248,12 @@ gdk_quartz_display_finalize (GObject *object)
   G_OBJECT_CLASS (gdk_quartz_display_parent_class)->finalize (object);
 }
 
+static GdkWindow *
+gdk_quartz_display_get_root_window (GdkDisplay *display)
+{
+  return _gdk_root;
+}
+`
 static void
 gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
 {
@@ -297,6 +303,7 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
   display_class->get_monitor = gdk_quartz_display_get_monitor;
   display_class->get_primary_monitor = gdk_quartz_display_get_primary_monitor;
   display_class->get_setting = gdk_quartz_display_get_setting;
+  display_class->get_root_window = gdk_quartz_display_get_root_window;
 
   ProcessSerialNumber psn = { 0, kCurrentProcess };
 
index 98cf1c2a0d22df27666b3df0b529c052c946133c..5c6fcdc19b1ccdfd287faa6441330f0967cbb854 100644 (file)
@@ -989,6 +989,12 @@ gdk_wayland_display_get_setting (GdkDisplay  *display,
   return gdk_wayland_screen_get_setting (GDK_WAYLAND_DISPLAY (display)->screen, name, value);
 }
 
+static GdkWindow *
+gdk_wayland_display_get_root_window (GdkDisplay *display)
+{
+  return gdk_wayland_screen_get_root_window (GDK_WAYLAND_DISPLAY (display)->screen);
+}
+
 static void
 gdk_wayland_display_class_init (GdkWaylandDisplayClass *class)
 {
@@ -1048,6 +1054,7 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass *class)
   display_class->get_monitor = gdk_wayland_display_get_monitor;
   display_class->get_monitor_at_window = gdk_wayland_display_get_monitor_at_window;
   display_class->get_setting = gdk_wayland_display_get_setting;
+  display_class->get_root_window = gdk_wayland_display_get_root_window;
 }
 
 static void
index 6bf992584c130ff90ab2ee76491e960692081d04..1a45bad0ecfb7ec29cd3cee57860aed95be554e0 100644 (file)
@@ -213,6 +213,7 @@ GdkWindow *_gdk_wayland_screen_create_root_window (GdkScreen *screen,
 gboolean gdk_wayland_screen_get_setting (GdkScreen   *screen,
                                          const gchar *name,
                                          GValue      *value);
+GdkWindow *gdk_wayland_screen_get_root_window (GdkScreen *screen);
 
 GdkScreen *_gdk_wayland_screen_new (GdkDisplay *display);
 void _gdk_wayland_screen_add_output (GdkScreen        *screen,
index 3c468522a2f4922f0b74765669dca98a13ef4530..0778225ecf6483015b201f42f6774088901d4c12 100644 (file)
@@ -105,7 +105,7 @@ gdk_wayland_screen_get_display (GdkScreen *screen)
   return GDK_WAYLAND_SCREEN (screen)->display;
 }
 
-static GdkWindow *
+GdkWindow *
 gdk_wayland_screen_get_root_window (GdkScreen *screen)
 {
   return GDK_WAYLAND_SCREEN (screen)->root_window;
index 71ffe7166c47d7ca0e205ad42bb1ca3a624dd795..ac196070fb38d8323ee99b55e726b9d4dc79a43d 100644 (file)
@@ -1238,6 +1238,12 @@ gdk_win32_display_get_setting (GdkDisplay  *display,
                                         value);
 }
 
+static GdkWindow *
+gdk_win32_display_get_root_window (GdkDisplay *display)
+{
+  return gdk_win32_screen_get_root_window (GDK_WIN32_DISPLAY (display)->screen);
+}
+
 static void
 gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
 {
@@ -1300,6 +1306,7 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
 #endif
 
   display_class->get_setting = gdk_win32_display_get_setting;
+  display_class->get_root_window = gdk_win32_display_get_root_window;
 
   _gdk_win32_windowing_init ();
 }
index ef51184be13c0918fcc5255f8724ce730e682d7e..ae44ba4f401ab28375d2cc6ba7615734e1dd0ff7 100644 (file)
@@ -504,6 +504,7 @@ void _gdk_win32_window_delete_property (GdkWindow *window, GdkAtom    property);
 /* Stray GdkWin32Screen members */
 gboolean _gdk_win32_screen_get_setting (GdkScreen   *screen, const gchar *name, GValue *value);
 void _gdk_win32_screen_on_displaychange_event (GdkWin32Screen *screen);
+GdkWindow *gdk_win32_screen_get_root_window (GdkScreen *screen);
 
 /* Distributed display manager implementation */
 GdkDisplay *_gdk_win32_display_open (const gchar *display_name);
index addfe01c5941d80a63e5b4326087e1a7707c6dee..a174b9eed875052f4f2f253f553ae5bfd47937ee 100644 (file)
@@ -183,7 +183,7 @@ gdk_win32_screen_get_display (GdkScreen *screen)
   return _gdk_display;
 }
 
-static GdkWindow *
+GdkWindow *
 gdk_win32_screen_get_root_window (GdkScreen *screen)
 {
   return GDK_WIN32_SCREEN (screen)->root_window;
index 2c3cf7fd50a7ac3041f97d0d93041d73f9f7fc60..768d91dd244e8acf9a7a824d6bd545a53fb74ca9 100644 (file)
@@ -3135,6 +3135,12 @@ gdk_x11_display_get_setting (GdkDisplay  *display,
   return gdk_x11_screen_get_setting (GDK_X11_DISPLAY (display)->screen, name, value);
 }
 
+static GdkWindow *
+gdk_x11_display_get_root_window (GdkDisplay *display)
+{
+  return gdk_x11_screen_get_root_window (GDK_X11_DISPLAY (display)->screen);
+}
+
 static void
 gdk_x11_display_class_init (GdkX11DisplayClass * class)
 {
@@ -3196,6 +3202,7 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
   display_class->get_monitor = gdk_x11_display_get_monitor;
   display_class->get_primary_monitor = gdk_x11_display_get_primary_monitor;
   display_class->get_setting = gdk_x11_display_get_setting;
+  display_class->get_root_window = gdk_x11_display_get_root_window;
 
   _gdk_x11_windowing_init ();
 }
index 7633e23b42b3d758aca578ca6d880149cb8f8ea8..9ae140855214e08c2d3062bdf21631d954b634f4 100644 (file)
@@ -79,7 +79,7 @@ gdk_x11_screen_get_display (GdkScreen *screen)
   return GDK_X11_SCREEN (screen)->display;
 }
 
-static GdkWindow *
+GdkWindow *
 gdk_x11_screen_get_root_window (GdkScreen *screen)
 {
   return GDK_X11_SCREEN (screen)->root_window;
index 81c1781e8770e5bfba316f6bff805e47bce01d10..e40670afe631ffcdfece1ddda3980a04ebf1eaff 100644 (file)
@@ -117,6 +117,7 @@ void gdk_x11_screen_get_work_area           (GdkScreen    *screen,
 gboolean gdk_x11_screen_get_setting         (GdkScreen    *screen,
                                              const char   *name,
                                              GValue       *value);
+GdkWindow *gdk_x11_screen_get_root_window   (GdkScreen *screen);
 
 G_END_DECLS