[gnome-shell] app: Use better icon for wayland window-backed apps



commit d9b3d6745ce48288ee51b1503bcb2d659b9f810a
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Jan 23 17:15:08 2020 +0100

    app: Use better icon for wayland window-backed apps
    
    For window-backed apps (read: windows we can't match to a .desktop
    file), we use the window's icon property as icon. However there is
    no such property on wayland (at least in the protocols we support),
    so we end up with a blank actor in that case.
    
    Do better than that, and pick a generic fallback icon instead.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/1779

 src/shell-app.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)
---
diff --git a/src/shell-app.c b/src/shell-app.c
index 5704f75b1c..0d314bbb3c 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -186,7 +186,7 @@ window_backed_app_get_icon (ShellApp *app,
 {
   MetaWindow *window = NULL;
   StWidget *widget;
-  gint scale;
+  int scale, scaled_size;
   ShellGlobal *global;
   StThemeContext *context;
 
@@ -194,7 +194,7 @@ window_backed_app_get_icon (ShellApp *app,
   context = st_theme_context_get_for_stage (shell_global_get_stage (global));
   g_object_get (context, "scale-factor", &scale, NULL);
 
-  size *= scale;
+  scaled_size = size * scale;
 
   /* During a state transition from running to not-running for
    * window-backend apps, it's possible we get a request for the icon.
@@ -208,14 +208,28 @@ window_backed_app_get_icon (ShellApp *app,
       ClutterActor *actor;
 
       actor = clutter_actor_new ();
-      g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
+      g_object_set (actor,
+                    "opacity", 0,
+                    "width", (float) scaled_size,
+                    "height", (float) scaled_size,
+                    NULL);
       return actor;
     }
 
-  widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
-                                                         G_OBJECT (window),
-                                                         "icon",
-                                                         size);
+  if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_X11)
+    {
+      widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
+                                                             G_OBJECT (window),
+                                                             "icon",
+                                                             scaled_size);
+    }
+  else
+    {
+      widget = g_object_new (ST_TYPE_ICON,
+                             "icon-size", size,
+                             "icon-name", "application-x-executable",
+                             NULL);
+    }
   st_widget_add_style_class_name (widget, "fallback-app-icon");
 
   return CLUTTER_ACTOR (widget);


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