From 46260aa9f30ed5a6797addf9f8f15a892219b0fb Mon Sep 17 00:00:00 2001 From: Daniel Stolpmann Date: Sat, 30 Apr 2022 13:11:24 +0200 Subject: [PATCH 1/2] Hide minimized windows in screenshot UI --- extension.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/extension.js b/extension.js index 26cbac3..54e634e 100644 --- a/extension.js +++ b/extension.js @@ -2,6 +2,9 @@ const isOverviewWindow = imports.ui.workspace.Workspace.prototype._isOverviewWin const { Workspace } = imports.ui.workspace; const { altTab } = imports.ui; const { getWindows } = altTab; +const capture = imports.ui.screenshot.UIWindowSelector.prototype.capture; +const { UIWindowSelector, UIWindowSelectorWindow } = imports.ui.screenshot; +const Main = imports.ui.main; function init() { } @@ -18,9 +21,46 @@ function enable() { const windows = getWindows(workspace); return windows.filter((w, i, a) => !w.minimized); }; + // Patched version of original function from: + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/screenshot.js + UIWindowSelector.prototype.capture = function() { + for (const actor of global.get_window_actors()) { + let window = actor.metaWindow; + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + if (window.is_override_redirect() || + !window.located_on_workspace(activeWorkspace) || + window.get_monitor() !== this._monitorIndex || + window.minimized) + continue; + + const widget = new UIWindowSelectorWindow( + actor, + { + style_class: 'screenshot-ui-window-selector-window', + reactive: true, + can_focus: true, + toggle_mode: true, + } + ); + + widget.connect('key-focus-in', win => { + Main.screenshotUI.grab_key_focus(); + win.checked = true; + }); + + if (window.has_focus()) { + widget.checked = true; + widget.toggle_mode = false; + } + + this._layoutManager.addWindow(widget); + } + }; } function disable() { Workspace.prototype._isOverviewWindow = isOverviewWindow; altTab.getWindows = getWindows; + UIWindowSelector.prototype.capture = capture; } From 971225c23d38a875e4f7f9ab2e653730706044c8 Mon Sep 17 00:00:00 2001 From: Daniel Stolpmann Date: Sat, 30 Apr 2022 16:00:58 +0200 Subject: [PATCH 2/2] Execute screenshot UI related code only on GNOME 42 and higher --- extension.js | 82 +++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 36 deletions(-) mode change 100644 => 100755 extension.js diff --git a/extension.js b/extension.js old mode 100644 new mode 100755 index 54e634e..0c468cb --- a/extension.js +++ b/extension.js @@ -1,10 +1,16 @@ +const Config = imports.misc.config; +const [major] = Config.PACKAGE_VERSION.split('.'); +const shellVersion = Number.parseInt(major); + const isOverviewWindow = imports.ui.workspace.Workspace.prototype._isOverviewWindow; const { Workspace } = imports.ui.workspace; const { altTab } = imports.ui; const { getWindows } = altTab; -const capture = imports.ui.screenshot.UIWindowSelector.prototype.capture; -const { UIWindowSelector, UIWindowSelectorWindow } = imports.ui.screenshot; -const Main = imports.ui.main; +if(shellVersion >= 42) { + var capture = imports.ui.screenshot.UIWindowSelector.prototype.capture; + var { UIWindowSelector, UIWindowSelectorWindow } = imports.ui.screenshot; + var Main = imports.ui.main; +} function init() { } @@ -21,46 +27,50 @@ function enable() { const windows = getWindows(workspace); return windows.filter((w, i, a) => !w.minimized); }; - // Patched version of original function from: - // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/screenshot.js - UIWindowSelector.prototype.capture = function() { - for (const actor of global.get_window_actors()) { - let window = actor.metaWindow; - let workspaceManager = global.workspace_manager; - let activeWorkspace = workspaceManager.get_active_workspace(); - if (window.is_override_redirect() || - !window.located_on_workspace(activeWorkspace) || - window.get_monitor() !== this._monitorIndex || - window.minimized) - continue; + if(shellVersion >= 42) { + // Patched version of original function from: + // https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/screenshot.js + UIWindowSelector.prototype.capture = function() { + for (const actor of global.get_window_actors()) { + let window = actor.metaWindow; + let workspaceManager = global.workspace_manager; + let activeWorkspace = workspaceManager.get_active_workspace(); + if (window.is_override_redirect() || + !window.located_on_workspace(activeWorkspace) || + window.get_monitor() !== this._monitorIndex || + window.minimized) + continue; - const widget = new UIWindowSelectorWindow( - actor, - { - style_class: 'screenshot-ui-window-selector-window', - reactive: true, - can_focus: true, - toggle_mode: true, - } - ); + const widget = new UIWindowSelectorWindow( + actor, + { + style_class: 'screenshot-ui-window-selector-window', + reactive: true, + can_focus: true, + toggle_mode: true, + } + ); - widget.connect('key-focus-in', win => { - Main.screenshotUI.grab_key_focus(); - win.checked = true; - }); + widget.connect('key-focus-in', win => { + Main.screenshotUI.grab_key_focus(); + win.checked = true; + }); - if (window.has_focus()) { - widget.checked = true; - widget.toggle_mode = false; - } + if (window.has_focus()) { + widget.checked = true; + widget.toggle_mode = false; + } - this._layoutManager.addWindow(widget); - } - }; + this._layoutManager.addWindow(widget); + } + }; + } } function disable() { Workspace.prototype._isOverviewWindow = isOverviewWindow; altTab.getWindows = getWindows; - UIWindowSelector.prototype.capture = capture; + if(shellVersion >= 42) { + UIWindowSelector.prototype.capture = capture; + } }