[mutter] window: Add window id
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Add window id
- Date: Fri, 14 Dec 2018 13:23:34 +0000 (UTC)
commit bbcb66ddf4f5eeff379f250b361de0366459b4a3
Author: Olivier Fourdan <ofourdan redhat com>
Date: Fri Sep 21 17:49:36 2018 +0200
window: Add window id
Generate a unique 64bit window-id which is unrelated to any windowing
backend.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/306
src/core/display-private.h | 4 ++++
src/core/display.c | 32 ++++++++++++++++++++++++++++++++
src/core/window-private.h | 1 +
src/core/window.c | 16 ++++++++++++++++
src/meta/window.h | 2 ++
5 files changed, 55 insertions(+)
---
diff --git a/src/core/display-private.h b/src/core/display-private.h
index bff48e782..576a4254e 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -427,4 +427,8 @@ void meta_display_queue_check_fullscreen (MetaDisplay *display);
MetaWindow *meta_display_get_pointer_window (MetaDisplay *display,
MetaWindow *not_this_one);
+MetaWindow *meta_display_get_window_from_id (MetaDisplay *display,
+ uint64_t window_id);
+uint64_t meta_display_generate_window_id (MetaDisplay *display);
+
#endif
diff --git a/src/core/display.c b/src/core/display.c
index 1531fc945..f96f36b38 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3597,3 +3597,35 @@ meta_display_get_startup_notification (MetaDisplay *display)
{
return display->startup_notification;
}
+
+MetaWindow *
+meta_display_get_window_from_id (MetaDisplay *display,
+ uint64_t window_id)
+{
+ g_autoptr (GSList) windows = NULL;
+ GSList *l;
+
+ windows = meta_display_list_windows (display, META_LIST_DEFAULT);
+ for (l = windows; l; l = l->next)
+ {
+ MetaWindow *window = l->data;
+
+ if (window->id == window_id)
+ return window;
+ }
+
+ return NULL;
+}
+
+uint64_t
+meta_display_generate_window_id (MetaDisplay *display)
+{
+ static uint64_t base_window_id;
+ static uint64_t last_window_id;
+
+ if (!base_window_id)
+ base_window_id = g_random_int () + 1;
+
+ /* We can overflow here, that's fine */
+ return (base_window_id + last_window_id++);
+}
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 01cb1d659..1babd307f 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -151,6 +151,7 @@ struct _MetaWindow
GObject parent_instance;
MetaDisplay *display;
+ uint64_t id;
guint64 stamp;
MetaLogicalMonitor *monitor;
MetaWorkspace *workspace;
diff --git a/src/core/window.c b/src/core/window.c
index 3018c1b7b..904b2866f 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1161,6 +1161,8 @@ _meta_window_shared_new (MetaDisplay *display,
window->has_resize_func = FALSE;
}
+ window->id = meta_display_generate_window_id (display);
+
META_WINDOW_GET_CLASS (window)->manage (window);
if (!window->override_redirect)
@@ -8515,3 +8517,17 @@ meta_window_is_stackable (MetaWindow *window)
{
return META_WINDOW_GET_CLASS (window)->is_stackable (window);
}
+
+/**
+ * meta_window_get_id:
+ * @window: a #MetaWindow
+ *
+ * Returns the window id associated with window.
+ *
+ * Returns: (transfer none): The window id
+ */
+uint64_t
+meta_window_get_id (MetaWindow *window)
+{
+ return window->id;
+}
diff --git a/src/meta/window.h b/src/meta/window.h
index 068f773af..d4df32b00 100644
--- a/src/meta/window.h
+++ b/src/meta/window.h
@@ -259,4 +259,6 @@ gboolean meta_window_is_client_decorated (MetaWindow *window);
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
+uint64_t meta_window_get_id (MetaWindow *window);
+
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]