mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 02:50:41 -05:00
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
(cherry picked from commit bbcb66ddf4
)
This commit is contained in:
parent
c60c2f997c
commit
b0267c1a4e
@ -507,4 +507,8 @@ void meta_display_notify_pad_group_switch (MetaDisplay *display,
|
|||||||
guint n_mode,
|
guint n_mode,
|
||||||
guint n_modes);
|
guint n_modes);
|
||||||
|
|
||||||
|
MetaWindow *meta_display_get_window_from_id (MetaDisplay *display,
|
||||||
|
uint64_t window_id);
|
||||||
|
uint64_t meta_display_generate_window_id (MetaDisplay *display);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -3269,3 +3269,35 @@ meta_display_notify_pad_group_switch (MetaDisplay *display,
|
|||||||
|
|
||||||
g_string_free (message, TRUE);
|
g_string_free (message, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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++);
|
||||||
|
}
|
||||||
|
@ -153,6 +153,7 @@ struct _MetaWindow
|
|||||||
|
|
||||||
MetaDisplay *display;
|
MetaDisplay *display;
|
||||||
MetaScreen *screen;
|
MetaScreen *screen;
|
||||||
|
uint64_t id;
|
||||||
guint64 stamp;
|
guint64 stamp;
|
||||||
MetaLogicalMonitor *monitor;
|
MetaLogicalMonitor *monitor;
|
||||||
MetaWorkspace *workspace;
|
MetaWorkspace *workspace;
|
||||||
|
@ -1142,6 +1142,8 @@ _meta_window_shared_new (MetaDisplay *display,
|
|||||||
window->has_resize_func = FALSE;
|
window->has_resize_func = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window->id = meta_display_generate_window_id (display);
|
||||||
|
|
||||||
META_WINDOW_GET_CLASS (window)->manage (window);
|
META_WINDOW_GET_CLASS (window)->manage (window);
|
||||||
|
|
||||||
if (!window->override_redirect)
|
if (!window->override_redirect)
|
||||||
@ -8466,3 +8468,17 @@ meta_window_is_stackable (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
return META_WINDOW_GET_CLASS (window)->is_stackable (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;
|
||||||
|
}
|
||||||
|
@ -260,4 +260,6 @@ gboolean meta_window_is_client_decorated (MetaWindow *window);
|
|||||||
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
|
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
|
||||||
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
|
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
|
||||||
|
|
||||||
|
uint64_t meta_window_get_id (MetaWindow *window);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user