From 4a18727ea97fbb676b90183c2154d4cc316133a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= 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 d865e6e25b..889dc18797 100644 --- a/js/ui/windowPreview.js +++ b/js/ui/windowPreview.js @@ -133,6 +133,12 @@ export const 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, @@ -234,6 +240,16 @@ export const 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