summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2022-10-09 23:17:30 +0300
committerMarco Trevisan <mail@3v1n0.net>2022-11-28 17:46:53 +0000
commitb416f9b3465e90a68c4961778622bb7b3278d19c (patch)
treeb452296c6372ea6c16e576c3084a049778ef289f
parentad69fe45d7692319ead0d9d98b23b30071262a9e (diff)
downloadlibwnck-b416f9b3465e90a68c4961778622bb7b3278d19c.tar.gz
application: use res_class as app name when group is not set
-rw-r--r--libwnck/application.c4
-rw-r--r--libwnck/private.h3
-rw-r--r--libwnck/screen.c6
-rw-r--r--libwnck/window.c11
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)
{