[gtk+] x11: Store toplevel list in GdkDisplay
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] x11: Store toplevel list in GdkDisplay
- Date: Mon, 13 Nov 2017 21:48:26 +0000 (UTC)
commit 5999b1c73a6cf69bd552ee026bc0d74aced88acf
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Nov 13 16:32:34 2017 -0500
x11: Store toplevel list in GdkDisplay
This will let us get rid of the root window.
gdk/x11/gdkdevice-core-x11.c | 2 --
gdk/x11/gdkdevice-xi2.c | 1 -
gdk/x11/gdkdisplay-x11.c | 18 +-----------------
gdk/x11/gdkdisplay-x11.h | 1 +
gdk/x11/gdkdnd-x11.c | 1 -
gdk/x11/gdkmonitor-x11.c | 2 --
gdk/x11/gdkscreen-x11.c | 2 --
gdk/x11/gdkxid.c | 14 ++++++++++++--
8 files changed, 14 insertions(+), 27 deletions(-)
---
diff --git a/gdk/x11/gdkdevice-core-x11.c b/gdk/x11/gdkdevice-core-x11.c
index 6176f6c..b166ba8 100644
--- a/gdk/x11/gdkdevice-core-x11.c
+++ b/gdk/x11/gdkdevice-core-x11.c
@@ -523,8 +523,6 @@ gdk_x11_device_core_window_at_position (GdkDevice *device,
}
}
- g_list_free (toplevels);
-
xwindow = pointer_window;
}
diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
index 210c72b..733b652 100644
--- a/gdk/x11/gdkdevice-xi2.c
+++ b/gdk/x11/gdkdevice-xi2.c
@@ -606,7 +606,6 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
}
}
- g_list_free (toplevels);
if (pointer_window != None)
break;
}
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index a9f4e2e..a165917 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -3160,23 +3160,7 @@ gdk_x11_display_get_root_window (GdkDisplay *display)
GList *
gdk_x11_display_get_toplevel_windows (GdkDisplay *display)
{
- GdkWindow * root_window;
- GList *new_list = NULL;
- GList *tmp_list;
-
- root_window = gdk_x11_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;
+ return GDK_X11_DISPLAY (display)->toplevels;
}
static void
diff --git a/gdk/x11/gdkdisplay-x11.h b/gdk/x11/gdkdisplay-x11.h
index 87b5f7f..3ddc777 100644
--- a/gdk/x11/gdkdisplay-x11.h
+++ b/gdk/x11/gdkdisplay-x11.h
@@ -40,6 +40,7 @@ struct _GdkX11Display
Display *xdisplay;
GdkScreen *screen;
GList *screens;
+ GList *toplevels;
GSource *event_source;
diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c
index 71e8c29..fc6ea69 100644
--- a/gdk/x11/gdkdnd-x11.c
+++ b/gdk/x11/gdkdnd-x11.c
@@ -600,7 +600,6 @@ gdk_window_cache_new (GdkDisplay *display)
height * impl->window_scale,
gdk_window_is_visible (window));
}
- g_list_free (toplevel_windows);
return result;
}
diff --git a/gdk/x11/gdkmonitor-x11.c b/gdk/x11/gdkmonitor-x11.c
index 8cfddfe..9de9060 100644
--- a/gdk/x11/gdkmonitor-x11.c
+++ b/gdk/x11/gdkmonitor-x11.c
@@ -55,8 +55,6 @@ gdk_monitor_has_fullscreen_window (GdkMonitor *monitor)
}
}
- g_list_free (toplevels);
-
return has_fullscreen;
}
diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c
index e5c0f2c..c16107e 100644
--- a/gdk/x11/gdkscreen-x11.c
+++ b/gdk/x11/gdkscreen-x11.c
@@ -840,8 +840,6 @@ _gdk_x11_screen_set_window_scale (GdkX11Screen *x11_screen,
_gdk_x11_window_set_window_scale (window, scale);
}
- g_list_free (toplevels);
-
for (i = 0; i < x11_display->monitors->len; i++)
{
GdkMonitor *monitor = GDK_MONITOR (x11_display->monitors->pdata[i]);
diff --git a/gdk/x11/gdkxid.c b/gdk/x11/gdkxid.c
index 8302e74..1a8171e 100644
--- a/gdk/x11/gdkxid.c
+++ b/gdk/x11/gdkxid.c
@@ -61,6 +61,9 @@ _gdk_x11_display_add_window (GdkDisplay *display,
g_warning ("XID collision, trouble ahead");
g_hash_table_insert (display_x11->xid_ht, xid, data);
+
+ if (gdk_window_get_parent (GDK_WINDOW (data)) == NULL)
+ display_x11->toplevels = g_list_prepend (display_x11->toplevels, data);
}
void
@@ -68,13 +71,20 @@ _gdk_x11_display_remove_window (GdkDisplay *display,
XID xid)
{
GdkX11Display *display_x11;
+ GdkWindow *window;
g_return_if_fail (GDK_IS_DISPLAY (display));
display_x11 = GDK_X11_DISPLAY (display);
- if (display_x11->xid_ht)
- g_hash_table_remove (display_x11->xid_ht, &xid);
+ if (!display_x11->xid_ht)
+ return;
+
+ window = g_hash_table_lookup (display_x11->xid_ht, &xid);
+ if (window && gdk_window_get_parent (window) == NULL)
+ display_x11->toplevels = g_list_remove (display_x11->toplevels, window);
+
+ g_hash_table_remove (display_x11->xid_ht, &xid);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]