summaryrefslogtreecommitdiffstats
path: root/extensions/vertical-workspaces/workspace.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-18 13:38:38 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-18 13:38:38 +0000
commita2afeba6545be9307f6505fd7a29375e89a9075e (patch)
treec598c70f26a350073352322c6d2d4da6952945fa /extensions/vertical-workspaces/workspace.js
parentReleasing debian version 20230205-2. (diff)
downloadgnome-shell-extensions-extra-a2afeba6545be9307f6505fd7a29375e89a9075e.tar.xz
gnome-shell-extensions-extra-a2afeba6545be9307f6505fd7a29375e89a9075e.zip
Merging upstream version 20230618.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'extensions/vertical-workspaces/workspace.js')
-rw-r--r--extensions/vertical-workspaces/workspace.js146
1 files changed, 0 insertions, 146 deletions
diff --git a/extensions/vertical-workspaces/workspace.js b/extensions/vertical-workspaces/workspace.js
deleted file mode 100644
index 84ca696..0000000
--- a/extensions/vertical-workspaces/workspace.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Vertical Workspaces
- * workspace.js
- *
- * @author GdH <G-dH@github.com>
- * @copyright 2022 - 2023
- * @license GPL-3.0
- *
- */
-
-'use strict';
-
-const { Clutter, St, Graphene } = imports.gi;
-
-const Main = imports.ui.main;
-const Util = imports.misc.util;
-const Workspace = imports.ui.workspace;
-
-const ExtensionUtils = imports.misc.extensionUtils;
-const Me = ExtensionUtils.getCurrentExtension();
-
-const _Util = Me.imports.util;
-let _overrides;
-
-let opt;
-
-const BACKGROUND_CORNER_RADIUS_PIXELS = 40;
-
-
-function update(reset = false) {
- if (_overrides) {
- _overrides.removeAll();
- }
-
- if (reset) {
- imports.ui.workspace.WINDOW_PREVIEW_MAXIMUM_SCALE = 0.95;
- _overrides = null;
- opt = null;
- return;
- }
-
- opt = Me.imports.settings.opt;
-
- _overrides = new _Util.Overrides();
-
- _overrides.addOverride('WorkspaceBackground', Workspace.WorkspaceBackground.prototype, WorkspaceBackground);
- // fix window scaling in workspace state 0
- _overrides.addInjection('WorkspaceLayout', Workspace.WorkspaceLayout.prototype, WorkspaceLayoutInjections);
-
- // fix overlay base for Vertical Workspaces
- _overrides.addOverride('WorkspaceLayout', Workspace.WorkspaceLayout.prototype, WorkspaceLayout);
-}
-
-
-// workaround for upstream bug (that is not that invisible in default shell)
-// smaller window cannot be scaled below 0.95 (WINDOW_PREVIEW_MAXIMUM_SCALE)
-// when its target scale for spread windows view (workspace state 1) is bigger than the scale needed for ws state 0.
-// in workspace state 0 where windows are not spread and window scale should follow workspace scale,
-// this window follows proper top left corner position, but doesn't scale with the workspace
-// so it looks bad and the window can exceed border of the workspace
-// extremely annoying in OVERVIEW_MODE 1 with single smaller window on the workspace, also affects appGrid transition animation
-var WorkspaceLayoutInjections = {
- _init: function() {
- this._stateAdjustment.connect('notify::value', () => {
- if (opt.OVERVIEW_MODE !== 1) return;
- // scale 0.1 for window state 0 just needs to be smaller then possible scale of any window in spread view
- const scale = this._stateAdjustment.value ? 0.95 : 0.1;
- if (scale !== Workspace.WINDOW_PREVIEW_MAXIMUM_SCALE || this._stateAdjustment.value === 1) {
- // when transition to ws state 1 begins, replace the constant with the original one
- // disadvantage - the value changes for all workspaces, so one affects others
- // that can be visible in certain situations but not a big deal.
- Workspace.WINDOW_PREVIEW_MAXIMUM_SCALE = scale;
- // and force recalculation of the target layout, so the transition will be smooth
- this._needsLayout = true;
- }
- });
- }
-}
-
-var WorkspaceLayout = {
- // this fixes wrong size and position calculation of window clones while moving overview to the next (+1) workspace if vertical ws orientation is enabled in GS
- _adjustSpacingAndPadding: function(rowSpacing, colSpacing, containerBox) {
- if (this._sortedWindows.length === 0)
- return [rowSpacing, colSpacing, containerBox];
-
- // All of the overlays have the same chrome sizes,
- // so just pick the first one.
- const window = this._sortedWindows[0];
-
- const [topOversize, bottomOversize] = window.chromeHeights();
- const [leftOversize, rightOversize] = window.chromeWidths();
-
- const oversize = Math.max(topOversize, bottomOversize, leftOversize, rightOversize);
-
- if (rowSpacing !== null)
- rowSpacing += oversize;
- if (colSpacing !== null)
- colSpacing += oversize;
-
- if (containerBox) {
- const vertical = global.workspaceManager.layout_rows === -1;
-
- const monitor = Main.layoutManager.monitors[this._monitorIndex];
-
- const bottomPoint = new Graphene.Point3D();
- if (vertical) {
- bottomPoint.x = containerBox.x2;
- } else {
- bottomPoint.y = containerBox.y2;
- }
-
- const transformedBottomPoint =
- this._container.apply_transform_to_point(bottomPoint);
- const bottomFreeSpace = vertical
- ? (monitor.x + monitor.height) - transformedBottomPoint.x
- : (monitor.y + monitor.height) - transformedBottomPoint.y;
-
- const [, bottomOverlap] = window.overlapHeights();
-
- if ((bottomOverlap + oversize) > bottomFreeSpace && !vertical) {
- containerBox.y2 -= (bottomOverlap + oversize) - bottomFreeSpace;
- }
- }
-
- return [rowSpacing, colSpacing, containerBox];
- }
-}
-
-var WorkspaceBackground = {
- _updateBorderRadius: function(value = false) {
- // don't round already rounded corners during exposing windows
- if (value === false && opt.OVERVIEW_MODE === 1) {
- return;
- }
- const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
- const cornerRadius = scaleFactor * BACKGROUND_CORNER_RADIUS_PIXELS;
-
- const backgroundContent = this._bgManager.backgroundActor.content;
- value = (value !==false)
- ? value
- : this._stateAdjustment.value;
-
- backgroundContent.rounded_clip_radius =
- Util.lerp(0, cornerRadius, value);
- }
-}