summaryrefslogtreecommitdiffstats
path: root/extensions/47/vertical-workspaces/lib/overview.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/47/vertical-workspaces/lib/overview.js')
-rw-r--r--extensions/47/vertical-workspaces/lib/overview.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/extensions/47/vertical-workspaces/lib/overview.js b/extensions/47/vertical-workspaces/lib/overview.js
new file mode 100644
index 0000000..30cc5db
--- /dev/null
+++ b/extensions/47/vertical-workspaces/lib/overview.js
@@ -0,0 +1,162 @@
+/**
+ * V-Shell (Vertical Workspaces)
+ * overview.js
+ *
+ * @author GdH <G-dH@github.com>
+ * @copyright 2022 - 2024
+ * @license GPL-3.0
+ *
+ */
+
+'use strict';
+
+import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+import * as Overview from 'resource:///org/gnome/shell/ui/overview.js';
+import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js';
+
+let Me;
+let opt;
+
+export const OverviewModule = class {
+ constructor(me) {
+ Me = me;
+ opt = Me.opt;
+
+ this._firstActivation = true;
+ this.moduleEnabled = false;
+ this._overrides = null;
+ }
+
+ cleanGlobals() {
+ Me = null;
+ opt = null;
+ }
+
+ update(reset) {
+ this.moduleEnabled = true;
+ const conflict = false;
+
+ reset = reset || !this.moduleEnabled || conflict;
+
+ // don't touch the original code if module disabled
+ if (reset && !this._firstActivation) {
+ this._disableModule();
+ } else if (!reset) {
+ this._firstActivation = false;
+ this._activateModule();
+ }
+ if (reset && this._firstActivation)
+ console.debug(' OverviewModule - Keeping untouched');
+ }
+
+ _activateModule() {
+ if (!this._overrides)
+ this._overrides = new Me.Util.Overrides();
+
+ this._overrides.addOverride('Overview', Overview.Overview.prototype, OverviewCommon);
+ console.debug(' OverviewModule - Activated');
+ }
+
+ _disableModule() {
+ if (this._overrides)
+ this._overrides.removeAll();
+ this._overrides = null;
+
+ console.debug(' OverviewModule - Disabled');
+ }
+};
+
+const OverviewCommon = {
+ show(state = OverviewControls.ControlsState.WINDOW_PICKER, customOverviewMode) {
+ if (!customOverviewMode)
+ this.resetOverviewMode();
+
+ if (state === OverviewControls.ControlsState.HIDDEN)
+ throw new Error('Invalid state, use hide() to hide');
+
+ if (this.isDummy)
+ return;
+ if (this._shown)
+ return;
+ this._shown = true;
+
+ if (!this._syncGrab())
+ return;
+
+ Main.layoutManager.showOverview();
+ this._animateVisible(state);
+ },
+
+ toggle(customOverviewMode) {
+ if (this.isDummy)
+ return;
+
+ if (this._visible)
+ this.hide();
+ else
+ this.show(OverviewControls.ControlsState.WINDOW_PICKER, customOverviewMode);
+ },
+
+ resetOverviewMode() {
+ // reset Overview Mode do default
+ opt.OVERVIEW_MODE = opt.get('overviewMode');
+ opt.OVERVIEW_MODE2 = opt.OVERVIEW_MODE === 2;
+ opt.WORKSPACE_MODE = opt.OVERVIEW_MODE > 0 ? 0 : 1;
+ },
+
+ _showDone() {
+ this._animationInProgress = false;
+ this._coverPane.hide();
+
+ if (this._shownState !== 'SHOWN')
+ this._changeShownState('SHOWN');
+
+ // Handle any calls to hide* while we were showing
+ if (!this._shown)
+ this._animateNotVisible();
+
+ // if user activates overview during startup animation, transition needs to be shifted to the state 2 here
+ const controls = this._overview._controls;
+ if (controls._searchController._searchActive && controls._stateAdjustment.value === 1) {
+ if (opt.SEARCH_VIEW_ANIMATION)
+ controls._onSearchChanged();
+ else if (!opt.OVERVIEW_MODE2)
+ controls._stateAdjustment.value = 2;
+ }
+
+ this._syncGrab();
+ },
+
+ // Workaround - should probably be fixed elsewhere in the upstream code
+ // If a new window is opened from the overview
+ // and is realized before the overview animation is complete,
+ // the new window will not get focus
+ after__hideDone() {
+ if (!opt.FIX_NEW_WINDOW_FOCUS)
+ return;
+
+ const workspace = global.workspace_manager.get_active_workspace();
+ const recentDesktopWin = global.display.get_tab_list(1, workspace)[0];
+ let recentNormalWin = null;
+ const tabList = global.display.get_tab_list(0, workspace);
+
+ for (let i = 0; i < tabList.length; i++) {
+ if (tabList[i].minimized === false) {
+ recentNormalWin = tabList[i];
+ break;
+ }
+ }
+
+ let recentWin = recentNormalWin;
+ if (recentNormalWin && recentDesktopWin) {
+ recentWin = recentNormalWin.get_user_time() > recentDesktopWin.get_user_time()
+ ? recentNormalWin
+ : recentDesktopWin;
+ }
+
+ const focusedWin = global.display.focus_window;
+
+ if (recentWin && focusedWin !== recentWin)
+ recentWin.activate(global.get_current_time());
+ },
+};