[libwnck/wip/muktupavels/issue-146: 2/2] application: use res_class as app name when group is not set




commit 6b86ba278214615f03dd78b61dce1ef1a6beb584
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sun Oct 9 23:17:30 2022 +0300

    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 9ab7f489..5b1ae203 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 d5e48d93..bf876195 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 42f0c764..a690f7cc 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -1410,7 +1410,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 35bb37c1..ca55596a 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)
         {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]