From b416f9b3465e90a68c4961778622bb7b3278d19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= Date: Sun, 9 Oct 2022 23:17:30 +0300 Subject: application: use res_class as app name when group is not set --- libwnck/application.c | 4 +++- libwnck/private.h | 3 +++ libwnck/screen.c | 6 +++++- libwnck/window.c | 11 +++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libwnck/application.c b/libwnck/application.c index 31005ba..094cd9e 100644 --- a/libwnck/application.c +++ b/libwnck/application.c @@ -499,6 +499,7 @@ wnck_application_get_startup_id (WnckApplication *app) /* xwindow is a group leader */ WnckApplication* _wnck_application_create (Window xwindow, + gboolean has_group_leader, WnckScreen *screen) { WnckHandle *handle; @@ -516,7 +517,8 @@ _wnck_application_create (Window xwindow, application->priv->xwindow = xwindow; application->priv->screen = screen; - application->priv->name = _wnck_get_name (xscreen, xwindow); + if (has_group_leader) + application->priv->name = _wnck_get_name (xscreen, xwindow); if (application->priv->name == NULL) application->priv->name = _wnck_get_res_class_utf8 (xscreen, xwindow); diff --git a/libwnck/private.h b/libwnck/private.h index d5e48d9..bf87619 100644 --- a/libwnck/private.h +++ b/libwnck/private.h @@ -61,6 +61,8 @@ const char* _wnck_window_get_startup_id (WnckWindow *window); time_t _wnck_window_get_needs_attention_time (WnckWindow *window); time_t _wnck_window_or_transient_get_needs_attention_time (WnckWindow *window); +gboolean _wnck_window_get_has_group_leader (WnckWindow *window); + WnckWorkspace* _wnck_workspace_create (int number, WnckScreen *screen); void _wnck_workspace_destroy (WnckWorkspace *space); @@ -82,6 +84,7 @@ void _wnck_application_remove_window (WnckApplication *app, WnckWindow *window); WnckApplication* _wnck_application_create (Window xwindow, + gboolean has_group_leader, WnckScreen *screen); void _wnck_application_destroy (WnckApplication *app); void _wnck_application_load_icons (WnckApplication *app); diff --git a/libwnck/screen.c b/libwnck/screen.c index 1d3c040..a138167 100644 --- a/libwnck/screen.c +++ b/libwnck/screen.c @@ -1409,7 +1409,11 @@ update_client_list (WnckScreen *screen) if (app == NULL) { - app = _wnck_application_create (leader, screen); + gboolean has_group_leader; + + has_group_leader = _wnck_window_get_has_group_leader (window); + + app = _wnck_application_create (leader, has_group_leader, screen); created_apps = g_list_prepend (created_apps, app); } diff --git a/libwnck/window.c b/libwnck/window.c index 229b4cb..6e23d01 100644 --- a/libwnck/window.c +++ b/libwnck/window.c @@ -72,6 +72,7 @@ struct _WnckWindowPrivate WnckScreen *screen; WnckApplication *app; WnckClassGroup *class_group; + gboolean has_group_leader; Window group_leader; Window transient_for; int orig_event_mask; @@ -504,6 +505,7 @@ _wnck_window_create (Window xwindow, /* Default the group leader to the window itself; it is set in * update_wmhints() if a different group leader is specified. */ + window->priv->has_group_leader = FALSE; window->priv->group_leader = window->priv->xwindow; window->priv->session_id = @@ -767,6 +769,12 @@ wnck_window_get_group_leader (WnckWindow *window) return window->priv->group_leader; } +gboolean +_wnck_window_get_has_group_leader (WnckWindow *window) +{ + return window->priv->has_group_leader; +} + /** * wnck_window_get_xid: * @window: a #WnckWindow. @@ -3188,7 +3196,10 @@ update_wmhints (WnckWindow *window) _wnck_atom_get ("WM_HINTS")); if (hints->flags & WindowGroupHint) + { + window->priv->group_leader = TRUE; window->priv->group_leader = hints->window_group; + } if (hints->flags & XUrgencyHint) { -- cgit v1.2.1