summaryrefslogtreecommitdiff
path: root/0001-windowPreview-Override-with-window-icon-if-available.patch
blob: c4cc0e9fc12f30aa29405e2543c746b60f1fb5a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
From 1cad6c8d47fb9f0b17a2c47f93e5f923d1cb32c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 7 Mar 2024 18:22:32 +0100
Subject: [PATCH] windowPreview: Override with window icon if available

---
 js/ui/windowPreview.js | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/js/ui/windowPreview.js b/js/ui/windowPreview.js
index e67ec9ec0f..db325258b4 100644
--- a/js/ui/windowPreview.js
+++ b/js/ui/windowPreview.js
@@ -123,6 +123,12 @@ var WindowPreview = GObject.registerClass({
         const tracker = Shell.WindowTracker.get_default();
         const app = tracker.get_window_app(this.metaWindow);
         this._icon = app.create_icon_texture(ICON_SIZE);
+        // Override with window icon if available
+        if (this._hasWindowIcon()) {
+            const textureCache = St.TextureCache.get_default();
+            this._icon.gicon = textureCache.bind_cairo_surface_property(
+                this.metaWindow, 'icon');
+        }
         this._icon.add_style_class_name('icon-dropshadow');
         this._icon.set({
             reactive: true,
@@ -226,6 +232,16 @@ var WindowPreview = GObject.registerClass({
         });
     }
 
+    _hasWindowIcon() {
+        // HACK: GI cannot handle CairoSurface, so this
+        // will throw if the icon property is non-null
+        try {
+            return this.metaWindow.icon !== null;
+        } catch (e) {
+            return true;
+        }
+    }
+
     _updateIconScale() {
         const { ControlsState } = OverviewControls;
         const { currentState, initialState, finalState } =
-- 
2.44.0