Updating 47/vertical-workspaces to version 47.5+20250210 [b14ba3cf].
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
297ae772ab
commit
6b0458069f
26 changed files with 5479 additions and 3202 deletions
|
@ -1,5 +1,84 @@
|
||||||
## Changelog:
|
## Changelog:
|
||||||
### v46.4 for GNOME 45.2+ (), v44.14 for GNOME 42-44 (not yet released)
|
### v48.1 (2025-02-07)
|
||||||
|
**Fixed:**
|
||||||
|
- *Workspace Switcher Mode* > *Current Monitor* buggy in GNOME 48
|
||||||
|
|
||||||
|
### v48.0 (2025-02-02)
|
||||||
|
**Added:**
|
||||||
|
- GNOME 48 support
|
||||||
|
- Panel overview style option
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
- Panel not being visible when set to *Overview Only* and *Static Workspace* overview mode is activated while the global overview mode configuration differs
|
||||||
|
|
||||||
|
|
||||||
|
### v47.5 (2025-01-27)
|
||||||
|
**Added:**
|
||||||
|
- The maximum number of search results can now be set to less than 5
|
||||||
|
- New workspace animation options: *All Workspaces* and *Active Workspace Only*. Previously, V-Shell only supported the *Active Workspace Only* animation
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
- Search results lose focus when the overview animation finishes
|
||||||
|
- App grid becomes invisible when *Filtered App Grid View* search is activated during the overview animation
|
||||||
|
- When static workspace mode is enabled, changing the workspace mode (using *arrow* or *Tab* keys) during the overview animation is not possible
|
||||||
|
- *Show WS Thumbnail Label on Hover* option causes thumbnails to crash
|
||||||
|
- Default search result is not selected when *WSP* extension is activated from V-Shell
|
||||||
|
- Secondary monitor workspace thumbnails animation ends (and begins) before reaching the edge of the monitor
|
||||||
|
- Search entry style switching in Static Overview mode
|
||||||
|
|
||||||
|
**Changed:**
|
||||||
|
- Search view transitions have been refactored and improved
|
||||||
|
- WS 40+ profile overview transitions have been adjusted to behave more similarly to the default GNOME Shell
|
||||||
|
|
||||||
|
|
||||||
|
### v47.4 (2025-01-14)
|
||||||
|
**Added:**
|
||||||
|
- Options to control added app menu items (#210)
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
- Workspace thumbnails may change size when searching for apps in the app grid with *Filtered App Grid View* option enabled
|
||||||
|
|
||||||
|
|
||||||
|
### v47.3 (2025-01-10 e.g.o)
|
||||||
|
**Fixed:**
|
||||||
|
- Dash: Overview closes after moving app windows to the current workspace using Shift+Click
|
||||||
|
- Dash: Unexpected behavior when clicking an app icon with Isolate workspace or Click action > Prefer workspace options enabled
|
||||||
|
|
||||||
|
|
||||||
|
### v47.2 (2025-01-08 e.g.o)
|
||||||
|
**Fixed:**
|
||||||
|
- Overview background transition in Static Workspace mode
|
||||||
|
- Overview and app folder animations not starting from the beginning
|
||||||
|
- Workspace thumbnails changing size at the end of a trackpad gesture
|
||||||
|
- Dash app label spacing when GNOME Shell 3.x style is disabled in vertical orientation
|
||||||
|
- Sorting of search results in the app grid view when the *Filtered App Grid View* option is enabled
|
||||||
|
- Secondary monitor workspace preview position when *Shift Overview by Panel Height* enabled
|
||||||
|
- Secondary button click on app folder icon closes overview when *Click Emty Space to Close* option enabled
|
||||||
|
- Clicking on workspace thumbnails closes overview when *Click Empty Space to Close* option is enabled
|
||||||
|
- Clicking on the last workspace thumbnail in static workspace mode not exposing windows
|
||||||
|
- Window preview middle button action set to *Create Window Thumbnail* only works when the secondary button is set the same
|
||||||
|
|
||||||
|
**Added**
|
||||||
|
- Activate current window after entering overview
|
||||||
|
|
||||||
|
**Changed:**
|
||||||
|
- Removed spacing between workspaces in workspace switcher animation
|
||||||
|
|
||||||
|
|
||||||
|
### v47.1 (2024-11-21)
|
||||||
|
**Added:**
|
||||||
|
- Italian translation
|
||||||
|
- Czech translation
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
- Visual glitch in dash icons
|
||||||
|
- Spacing in the Profie page of the Settings window
|
||||||
|
|
||||||
|
### v47.0 (2024-09-27)
|
||||||
|
**Added:**
|
||||||
|
- GNOME 47 support
|
||||||
|
|
||||||
|
### v46.4 for GNOME 45.2+ (moved to 47.0), v44.14 for GNOME 42-44 (not yet released)
|
||||||
**Fixed:**
|
**Fixed:**
|
||||||
- App grid: Inconsistent grid size on the same monitor when switching monitors (#160)
|
- App grid: Inconsistent grid size on the same monitor when switching monitors (#160)
|
||||||
- App grid: The grid layout manager's current page being out of sync with the grid's current page causes page shifts while dragging app icons and incorrect page navigation controls (#160, upstream bug)
|
- App grid: The grid layout manager's current page being out of sync with the grid's current page causes page shifts while dragging app icons and incorrect page navigation controls (#160, upstream bug)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
A GNOME Shell extension that lets you customize your GNOME Shell UX to suit your workflow, whether you like horizontally or vertically stacked workspaces.
|
A GNOME Shell extension that lets you customize your GNOME Shell UX to suit your workflow, whether you like horizontally or vertically stacked workspaces.
|
||||||
|
|
||||||
Currently supported GNOME versions: 42 - 46
|
Currently supported GNOME versions: 42 - 47
|
||||||
|
|
||||||
[<img alt="" height="100" src="https://raw.githubusercontent.com/andyholmes/gnome-shell-extensions-badge/master/get-it-on-ego.svg?sanitize=true">](https://extensions.gnome.org/extension/5177/vertical-workspaces/)
|
[<img alt="" height="100" src="https://raw.githubusercontent.com/andyholmes/gnome-shell-extensions-badge/master/get-it-on-ego.svg?sanitize=true">](https://extensions.gnome.org/extension/5177/vertical-workspaces/)
|
||||||
|
|
||||||
|
|
|
@ -540,6 +540,7 @@ export default class VShell extends Extension.Extension {
|
||||||
_updateSettings(settings, key) {
|
_updateSettings(settings, key) {
|
||||||
// update settings cache and option variables
|
// update settings cache and option variables
|
||||||
opt._updateSettings();
|
opt._updateSettings();
|
||||||
|
this._resetShellProperties();
|
||||||
|
|
||||||
// avoid overload while loading profile - update only once
|
// avoid overload while loading profile - update only once
|
||||||
// delayed gsettings writes are processed alphabetically
|
// delayed gsettings writes are processed alphabetically
|
||||||
|
|
|
@ -71,6 +71,12 @@ export const AppDisplayModule = class {
|
||||||
this._appGridLayoutConId = 0;
|
this._appGridLayoutConId = 0;
|
||||||
this._origAppViewItemAcceptDrop = null;
|
this._origAppViewItemAcceptDrop = null;
|
||||||
this._updateFolderIcons = 0;
|
this._updateFolderIcons = 0;
|
||||||
|
|
||||||
|
// By default appDisplay.name (which can be used to address styling) is not set
|
||||||
|
// In GS 46+ we need to adapt the appDisplay style even if the appDisplay module is disabled,
|
||||||
|
// to allow the use of wallpaper in the overview
|
||||||
|
if (shellVersion46)
|
||||||
|
Main.overview._overview.controls._appDisplay.name = 'app-display';
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanGlobals() {
|
cleanGlobals() {
|
||||||
|
@ -78,6 +84,7 @@ export const AppDisplayModule = class {
|
||||||
opt = null;
|
opt = null;
|
||||||
_ = null;
|
_ = null;
|
||||||
_appDisplay = null;
|
_appDisplay = null;
|
||||||
|
Main.overview._overview.controls._appDisplay.name = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
update(reset) {
|
update(reset) {
|
||||||
|
@ -111,7 +118,6 @@ export const AppDisplayModule = class {
|
||||||
|
|
||||||
this._applyOverrides();
|
this._applyOverrides();
|
||||||
this._updateAppDisplay();
|
this._updateAppDisplay();
|
||||||
_appDisplay.add_style_class_name('app-display-46');
|
|
||||||
|
|
||||||
console.debug(' AppDisplayModule - Activated');
|
console.debug(' AppDisplayModule - Activated');
|
||||||
}
|
}
|
||||||
|
@ -127,8 +133,6 @@ export const AppDisplayModule = class {
|
||||||
this._updateAppDisplay(reset);
|
this._updateAppDisplay(reset);
|
||||||
this._restoreOverviewGroup();
|
this._restoreOverviewGroup();
|
||||||
|
|
||||||
_appDisplay.remove_style_class_name('app-display-46');
|
|
||||||
|
|
||||||
console.debug(' AppDisplayModule - Disabled');
|
console.debug(' AppDisplayModule - Disabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,7 +367,7 @@ const AppDisplayCommon = {
|
||||||
},
|
},
|
||||||
|
|
||||||
// apps load adapted for custom sorting and including dash items
|
// apps load adapted for custom sorting and including dash items
|
||||||
_loadApps() {
|
_loadApps(results) {
|
||||||
let appIcons = [];
|
let appIcons = [];
|
||||||
const runningApps = Shell.AppSystem.get_default().get_running().map(a => a.id);
|
const runningApps = Shell.AppSystem.get_default().get_running().map(a => a.id);
|
||||||
|
|
||||||
|
@ -387,7 +391,7 @@ const AppDisplayCommon = {
|
||||||
|
|
||||||
const appsInsideFolders = new Set();
|
const appsInsideFolders = new Set();
|
||||||
this._folderIcons = [];
|
this._folderIcons = [];
|
||||||
if (!opt.APP_GRID_USAGE) {
|
if (!(opt.APP_GRID_USAGE || results)) {
|
||||||
let folders = this._folderSettings.get_strv('folder-children');
|
let folders = this._folderSettings.get_strv('folder-children');
|
||||||
folders.forEach(id => {
|
folders.forEach(id => {
|
||||||
let path = `${this._folderSettings.path}folders/${id}/`;
|
let path = `${this._folderSettings.path}folders/${id}/`;
|
||||||
|
@ -589,9 +593,15 @@ const BaseAppViewCommon = {
|
||||||
this._swipeTracker.orientation = orientation;
|
this._swipeTracker.orientation = orientation;
|
||||||
this._swipeTracker._reset();
|
this._swipeTracker._reset();
|
||||||
|
|
||||||
this._adjustment = vertical
|
if (this._scrollView.get_vadjustment) {
|
||||||
? this._scrollView.get_vscroll_bar().adjustment
|
this._adjustment = vertical
|
||||||
: this._scrollView.get_hscroll_bar().adjustment;
|
? this._scrollView.get_vadjustment()
|
||||||
|
: this._scrollView.get_hadjustment();
|
||||||
|
} else {
|
||||||
|
this._adjustment = vertical
|
||||||
|
? this._scrollView.get_vscroll_bar().adjustment
|
||||||
|
: this._scrollView.get_hscroll_bar().adjustment;
|
||||||
|
}
|
||||||
|
|
||||||
this._prevPageArrow.pivot_point = new Graphene.Point({ x: 0.5, y: 0.5 });
|
this._prevPageArrow.pivot_point = new Graphene.Point({ x: 0.5, y: 0.5 });
|
||||||
this._prevPageArrow.rotation_angle_z = vertical ? 90 : 0;
|
this._prevPageArrow.rotation_angle_z = vertical ? 90 : 0;
|
||||||
|
@ -680,8 +690,8 @@ const BaseAppViewCommon = {
|
||||||
this._grid.layoutManager._shouldEaseItems = false;
|
this._grid.layoutManager._shouldEaseItems = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Adds sorting options
|
// Adds sorting options / support app search provider
|
||||||
_redisplay() {
|
_redisplay(results) {
|
||||||
// different options for main app grid and app folders
|
// different options for main app grid and app folders
|
||||||
const thisIsFolder = this instanceof AppDisplay.FolderView;
|
const thisIsFolder = this instanceof AppDisplay.FolderView;
|
||||||
const thisIsAppDisplay = !thisIsFolder;
|
const thisIsAppDisplay = !thisIsFolder;
|
||||||
|
@ -699,7 +709,7 @@ const BaseAppViewCommon = {
|
||||||
const oldApps = this._orderedItems.slice();
|
const oldApps = this._orderedItems.slice();
|
||||||
const oldAppIds = oldApps.map(icon => icon.id);
|
const oldAppIds = oldApps.map(icon => icon.id);
|
||||||
|
|
||||||
const newApps = this._loadApps();
|
const newApps = this._loadApps(results);
|
||||||
const newAppIds = newApps.map(icon => icon.id);
|
const newAppIds = newApps.map(icon => icon.id);
|
||||||
|
|
||||||
const addedApps = newApps.filter(icon => !oldAppIds.includes(icon.id));
|
const addedApps = newApps.filter(icon => !oldAppIds.includes(icon.id));
|
||||||
|
@ -719,7 +729,10 @@ const BaseAppViewCommon = {
|
||||||
let allowIncompletePages = thisIsAppDisplay && opt.APP_GRID_ALLOW_INCOMPLETE_PAGES;
|
let allowIncompletePages = thisIsAppDisplay && opt.APP_GRID_ALLOW_INCOMPLETE_PAGES;
|
||||||
|
|
||||||
const customOrder = !((opt.APP_GRID_ORDER && thisIsAppDisplay) || (opt.APP_FOLDER_ORDER && thisIsFolder));
|
const customOrder = !((opt.APP_GRID_ORDER && thisIsAppDisplay) || (opt.APP_FOLDER_ORDER && thisIsFolder));
|
||||||
if (!customOrder) {
|
|
||||||
|
if (results) {
|
||||||
|
newApps.sort((a, b) => results.indexOf(a.app?.id) - results.indexOf(b.app?.id));
|
||||||
|
} else if (!customOrder) {
|
||||||
allowIncompletePages = false;
|
allowIncompletePages = false;
|
||||||
|
|
||||||
// Sort by name
|
// Sort by name
|
||||||
|
@ -770,7 +783,7 @@ const BaseAppViewCommon = {
|
||||||
});
|
});
|
||||||
// When a placeholder icon was added to the custom sorted grid during DND from a folder
|
// When a placeholder icon was added to the custom sorted grid during DND from a folder
|
||||||
// update its initial position on the page
|
// update its initial position on the page
|
||||||
if (customOrder)
|
if (customOrder && !results)
|
||||||
newApps.sort(this._compareItems.bind(this));
|
newApps.sort(this._compareItems.bind(this));
|
||||||
|
|
||||||
this._orderedItems = newApps;
|
this._orderedItems = newApps;
|
||||||
|
@ -1086,11 +1099,7 @@ const AppGridCommon = {
|
||||||
|
|
||||||
const FolderIcon = {
|
const FolderIcon = {
|
||||||
after__init() {
|
after__init() {
|
||||||
this.button_mask = St.ButtonMask.ONE | St.ButtonMask.TWO;
|
this.button_mask = St.ButtonMask.ONE | St.ButtonMask.TWO | St.ButtonMask.THREE;
|
||||||
if (shellVersion46)
|
|
||||||
this.add_style_class_name('app-folder-46');
|
|
||||||
else
|
|
||||||
this.add_style_class_name('app-folder-45');
|
|
||||||
},
|
},
|
||||||
|
|
||||||
open() {
|
open() {
|
||||||
|
@ -1368,6 +1377,9 @@ const AppFolderDialog = {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.child.add_action(clickAction);
|
this.child.add_action(clickAction);
|
||||||
|
// Redundant, added just because of extensions.gnome.org rules
|
||||||
|
this.connect('destroy', this._removePopdownTimeout.bind(this));
|
||||||
|
this._viewBox.add_style_class_name('app-folder-dialog-translucent');
|
||||||
},
|
},
|
||||||
|
|
||||||
after__addFolderNameEntry() {
|
after__addFolderNameEntry() {
|
||||||
|
@ -1496,6 +1508,14 @@ const AppFolderDialog = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_removePopdownTimeout() {
|
||||||
|
if (this._popdownTimeoutId === 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
GLib.source_remove(this._popdownTimeoutId);
|
||||||
|
this._popdownTimeoutId = 0;
|
||||||
|
},
|
||||||
|
|
||||||
vfunc_allocate(box) {
|
vfunc_allocate(box) {
|
||||||
this._updateFolderSize();
|
this._updateFolderSize();
|
||||||
|
|
||||||
|
@ -1788,7 +1808,11 @@ const AppFolderDialog = {
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add a short delay to account for the dialog update time
|
||||||
|
// and prevent incomplete animation that disrupts the user experience
|
||||||
|
const delay = 20;
|
||||||
this.child.ease({
|
this.child.ease({
|
||||||
|
delay,
|
||||||
translation_x: dialogOffsetX,
|
translation_x: dialogOffsetX,
|
||||||
translation_y: dialogOffsetY,
|
translation_y: dialogOffsetY,
|
||||||
scale_x: 1,
|
scale_x: 1,
|
||||||
|
@ -1799,6 +1823,7 @@ const AppFolderDialog = {
|
||||||
});
|
});
|
||||||
|
|
||||||
appDisplay.ease({
|
appDisplay.ease({
|
||||||
|
delay,
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
duration: FOLDER_DIALOG_ANIMATION_TIME,
|
duration: FOLDER_DIALOG_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
|
|
@ -362,13 +362,13 @@ const DashItemContainerCommon = {
|
||||||
y = stageY - this.label.height - yOffset;
|
y = stageY - this.label.height - yOffset;
|
||||||
} else if (opt.DASH_RIGHT) {
|
} else if (opt.DASH_RIGHT) {
|
||||||
const yOffset = Math.floor((itemHeight - labelHeight) / 2);
|
const yOffset = Math.floor((itemHeight - labelHeight) / 2);
|
||||||
xOffset = shellVersion46 ? 8 : 4;
|
xOffset = shellVersion46 && opt.DASH_BG_GS3_STYLE ? 12 : 0;
|
||||||
|
|
||||||
x = stageX - xOffset - this.label.width;
|
x = stageX - xOffset - this.label.width;
|
||||||
y = Math.clamp(stageY + yOffset, 0, global.stage.height - labelHeight);
|
y = Math.clamp(stageY + yOffset, 0, global.stage.height - labelHeight);
|
||||||
} else if (opt.DASH_LEFT) {
|
} else if (opt.DASH_LEFT) {
|
||||||
const yOffset = Math.floor((itemHeight - labelHeight) / 2);
|
const yOffset = Math.floor((itemHeight - labelHeight) / 2);
|
||||||
xOffset = shellVersion46 ? 8 : 4;
|
xOffset = shellVersion46 && opt.DASH_BG_GS3_STYLE ? 12 : 0;
|
||||||
|
|
||||||
x = stageX + this.width + xOffset;
|
x = stageX + this.width + xOffset;
|
||||||
y = Math.clamp(stageY + yOffset, 0, global.stage.height - labelHeight);
|
y = Math.clamp(stageY + yOffset, 0, global.stage.height - labelHeight);
|
||||||
|
@ -864,60 +864,53 @@ const AppIconCommon = {
|
||||||
activate(button) {
|
activate(button) {
|
||||||
const event = Clutter.get_current_event();
|
const event = Clutter.get_current_event();
|
||||||
const state = event ? event.get_state() : 0;
|
const state = event ? event.get_state() : 0;
|
||||||
const isMiddleButton = button && button === Clutter.BUTTON_MIDDLE;
|
|
||||||
const isCtrlPressed = Me.Util.isCtrlPressed(state);
|
|
||||||
const isShiftPressed = Me.Util.isShiftPressed(state);
|
const isShiftPressed = Me.Util.isShiftPressed(state);
|
||||||
|
const isCtrlPressed = Me.Util.isCtrlPressed(state);
|
||||||
const currentWS = global.workspace_manager.get_active_workspace();
|
const appIsRunning = this.app.state === Shell.AppState.RUNNING;
|
||||||
const appRecentWorkspace = this._getAppRecentWorkspace(this.app);
|
const appRecentWorkspace = this._getAppRecentWorkspace(this.app);
|
||||||
// this feature shouldn't affect search results, dash icons don't have labels, so we use them as a condition
|
const targetWindowOnCurrentWs = this._isTargetWindowOnCurrentWs(appRecentWorkspace);
|
||||||
const showWidowsBeforeActivation = opt.DASH_CLICK_ACTION === 1 && !this.icon.label;
|
|
||||||
|
|
||||||
let targetWindowOnCurrentWs = false;
|
const openNewWindow = this._shouldOpenNewWindow(appIsRunning, button, isShiftPressed, isCtrlPressed, targetWindowOnCurrentWs);
|
||||||
if (opt.DASH_FOLLOW_RECENT_WIN) {
|
const staticWorkspace = !opt.WORKSPACE_MODE;
|
||||||
targetWindowOnCurrentWs = appRecentWorkspace === currentWS;
|
const nWindows = appIsRunning ? this.app.get_n_windows() : 0;
|
||||||
} else {
|
// This feature shouldn't affect search results. Dash icons lack labels, so their absence is used as a condition
|
||||||
this.app.get_windows().forEach(
|
const showWidowsBeforeActivation =
|
||||||
w => {
|
opt.DASH_CLICK_ACTION === 1 && !this.icon.label &&
|
||||||
targetWindowOnCurrentWs = targetWindowOnCurrentWs || (w.get_workspace() === currentWS);
|
!isShiftPressed && nWindows > 1;/* &&
|
||||||
}
|
!(opt.DASH_ISOLATE_WS || opt.DASH_CLICK_OPEN_NEW_WIN || opt.DASH_CLICK_PREFER_WORKSPACE);*/
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const openNewWindow = this.app.can_open_new_window() &&
|
if ((!appIsRunning || openNewWindow) && !isShiftPressed)
|
||||||
this.app.state === Shell.AppState.RUNNING &&
|
|
||||||
(((isCtrlPressed || isMiddleButton) && !opt.DASH_CLICK_OPEN_NEW_WIN) ||
|
|
||||||
(opt.DASH_CLICK_OPEN_NEW_WIN && !this._selectedMetaWin && !isMiddleButton) ||
|
|
||||||
((opt.DASH_CLICK_PREFER_WORKSPACE || opt.DASH_ISOLATE_WS) && !targetWindowOnCurrentWs));
|
|
||||||
|
|
||||||
if ((this.app.state === Shell.AppState.STOPPED || openNewWindow) && !isShiftPressed)
|
|
||||||
this.animateLaunch();
|
this.animateLaunch();
|
||||||
|
|
||||||
if (openNewWindow) {
|
if (openNewWindow) {
|
||||||
this.app.open_new_window(-1);
|
this.app.open_new_window(-1);
|
||||||
// if DASH_CLICK_ACTION == "SHOW_WINS_BEFORE", the app has more than one window and has no window on the current workspace,
|
|
||||||
// don't activate the app immediately, only move the overview to the workspace with the app's recent window
|
|
||||||
} else if (showWidowsBeforeActivation && !isShiftPressed && this.app.get_n_windows() > 1 && !targetWindowOnCurrentWs/* && !(opt.OVERVIEW_MODE && !opt.WORKSPACE_MODE)*/) {
|
|
||||||
|
|
||||||
Main.wm.actionMoveWorkspace(appRecentWorkspace);
|
|
||||||
Main.overview.dash.showAppsButton.checked = false;
|
|
||||||
return;
|
|
||||||
} else if (this._selectedMetaWin) {
|
} else if (this._selectedMetaWin) {
|
||||||
this._selectedMetaWin.activate(global.get_current_time());
|
this._selectedMetaWin.activate(global.get_current_time());
|
||||||
} else if (showWidowsBeforeActivation && opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && !isShiftPressed && this.app.get_n_windows() > 1) {
|
// if DASH_CLICK_ACTION == "SHOW_WINS_BEFORE", the app has more than one window and has no window on the current workspace,
|
||||||
// expose windows
|
// don't activate the app immediately, only move the overview to the workspace with the app's recent window
|
||||||
Main.overview._overview._controls._thumbnailsBox._activateThumbnailAtPoint(0, 0, global.get_current_time(), true);
|
} else if (showWidowsBeforeActivation) {
|
||||||
return;
|
if (!targetWindowOnCurrentWs) {
|
||||||
} else if (((opt.DASH_SHIFT_CLICK_MV && isShiftPressed) || ((opt.DASH_CLICK_PREFER_WORKSPACE || opt.DASH_ISOLATE_WS) && !openNewWindow)) && this.app.get_windows().length) {
|
Main.wm.actionMoveWorkspace(appRecentWorkspace);
|
||||||
|
Main.overview.dash.showAppsButton.checked = false;
|
||||||
|
// Activate the app to ensure it appears above all other apps in static workspace mode
|
||||||
|
this.app.activate();
|
||||||
|
return;
|
||||||
|
} else if (staticWorkspace) {
|
||||||
|
// spread windows
|
||||||
|
Me.Util.exposeWindows();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
this.app.activate();
|
||||||
|
}
|
||||||
|
} else if (this._shouldMoveToCurrentWorkspace(isShiftPressed, openNewWindow, targetWindowOnCurrentWs, nWindows)) {
|
||||||
this._moveAppToCurrentWorkspace();
|
this._moveAppToCurrentWorkspace();
|
||||||
if (opt.DASH_ISOLATE_WS) {
|
if ((opt.DASH_ISOLATE_WS || opt.DASH_CLICK_PREFER_WORKSPACE) && !isShiftPressed) {
|
||||||
this.app.activate();
|
this.app.activate();
|
||||||
// hide the overview after the window is re-created
|
// hide the overview after the window is re-created
|
||||||
GLib.idle_add(GLib.PRIORITY_LOW, () => Main.overview.hide());
|
GLib.idle_add(GLib.PRIORITY_LOW, () => Main.overview.hide());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (isShiftPressed) {
|
|
||||||
return;
|
|
||||||
} else {
|
} else {
|
||||||
this.app.activate();
|
this.app.activate();
|
||||||
}
|
}
|
||||||
|
@ -925,6 +918,35 @@ const AppIconCommon = {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_shouldOpenNewWindow(appIsRunning, button, isShiftPressed, isCtrlPressed, targetWindowOnCurrentWs) {
|
||||||
|
const isMiddleButton = button && button === Clutter.BUTTON_MIDDLE;
|
||||||
|
return this.app.can_open_new_window() &&
|
||||||
|
appIsRunning && !isShiftPressed &&
|
||||||
|
(((isCtrlPressed || isMiddleButton) && !opt.DASH_CLICK_OPEN_NEW_WIN) ||
|
||||||
|
(opt.DASH_CLICK_OPEN_NEW_WIN && !isMiddleButton) ||
|
||||||
|
((opt.DASH_CLICK_PREFER_WORKSPACE || opt.DASH_ISOLATE_WS) && !targetWindowOnCurrentWs));
|
||||||
|
},
|
||||||
|
|
||||||
|
_isTargetWindowOnCurrentWs(appRecentWorkspace) {
|
||||||
|
const currentWS = global.workspace_manager.get_active_workspace();
|
||||||
|
if (opt.DASH_FOLLOW_RECENT_WIN)
|
||||||
|
return appRecentWorkspace === currentWS;
|
||||||
|
|
||||||
|
let targetWindowOnCurrentWs = false;
|
||||||
|
this.app.get_windows().forEach(
|
||||||
|
w => {
|
||||||
|
targetWindowOnCurrentWs = targetWindowOnCurrentWs || (w.get_workspace() === currentWS);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return targetWindowOnCurrentWs;
|
||||||
|
},
|
||||||
|
|
||||||
|
_shouldMoveToCurrentWorkspace(isShiftPressed, openNewWindow, targetWindowOnCurrentWs, nWindows) {
|
||||||
|
return ((opt.DASH_SHIFT_CLICK_MV && isShiftPressed) ||
|
||||||
|
((opt.DASH_CLICK_PREFER_WORKSPACE || opt.DASH_ISOLATE_WS) && !openNewWindow && !targetWindowOnCurrentWs)) &&
|
||||||
|
nWindows > 0;
|
||||||
|
},
|
||||||
|
|
||||||
_moveAppToCurrentWorkspace() {
|
_moveAppToCurrentWorkspace() {
|
||||||
this.app.get_windows().forEach(w => w.change_workspace(global.workspace_manager.get_active_workspace()));
|
this.app.get_windows().forEach(w => w.change_workspace(global.workspace_manager.get_active_workspace()));
|
||||||
},
|
},
|
||||||
|
@ -972,51 +994,55 @@ const AppIconCommon = {
|
||||||
if (this._addedMenuItems && this._addedMenuItems.length)
|
if (this._addedMenuItems && this._addedMenuItems.length)
|
||||||
this._addedMenuItems.forEach(i => i.destroy());
|
this._addedMenuItems.forEach(i => i.destroy());
|
||||||
|
|
||||||
|
this._addedMenuItems = [];
|
||||||
const popupItems = [];
|
|
||||||
|
|
||||||
const separator = new PopupMenu.PopupSeparatorMenuItem();
|
|
||||||
this._menu.addMenuItem(separator);
|
|
||||||
|
|
||||||
if (this.app.get_n_windows()) {
|
if (this.app.get_n_windows()) {
|
||||||
// if (/* opt.APP_MENU_FORCE_QUIT*/true) {}
|
if (opt.APP_MENU_FORCE_QUIT) {
|
||||||
popupItems.push([_('Force Quit'), () => {
|
const item = new PopupMenu.PopupMenuItem(_('Force Quit'));
|
||||||
this.app.get_windows()[0].kill();
|
item.connect('activate', () => this.app.get_windows()[0].kill());
|
||||||
}]);
|
this._menu.addMenuItem(item);
|
||||||
|
this._addedMenuItems.push(item);
|
||||||
// if (opt.APP_MENU_CLOSE_WS) {}
|
}
|
||||||
const nWin = this._getWindowsOnCurrentWs().length;
|
|
||||||
if (nWin) {
|
if (opt.APP_MENU_CLOSE_WINS_WS) {
|
||||||
popupItems.push([_(`Close ${nWin} Windows on Current Workspace`), () => {
|
const nWin = this._getWindowsOnCurrentWs().length;
|
||||||
const windows = this._getWindowsOnCurrentWs();
|
if (nWin) {
|
||||||
let time = global.get_current_time();
|
const item = new PopupMenu.PopupMenuItem(_(`Close ${nWin} Windows on Current Workspace`));
|
||||||
for (let win of windows) {
|
item.connect('activate', () => {
|
||||||
// increase time by 1 ms for each window to avoid errors from GS
|
const windows = this._getWindowsOnCurrentWs();
|
||||||
win.delete(time++);
|
let time = global.get_current_time();
|
||||||
}
|
for (let win of windows) {
|
||||||
}]);
|
// increase time by 1 ms for each window to avoid errors from GS
|
||||||
|
win.delete(time++);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._menu.addMenuItem(item);
|
||||||
|
this._addedMenuItems.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const separator = new PopupMenu.PopupSeparatorMenuItem();
|
||||||
|
this._menu.addMenuItem(separator);
|
||||||
|
this._addedMenuItems.push(separator);
|
||||||
|
|
||||||
|
if (opt.APP_MENU_MOVE_APP) {
|
||||||
|
const item = new PopupMenu.PopupMenuItem(_('Move App to Current Workspace [Shift + Click]'));
|
||||||
|
item.connect('activate', this._moveAppToCurrentWorkspace.bind(this));
|
||||||
|
this._menu.addMenuItem(item);
|
||||||
|
this._addedMenuItems.push(item);
|
||||||
|
if (!this._windowsOnOtherWs())
|
||||||
|
item.setSensitive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
popupItems.push([_('Move App to Current Workspace ( Shift + Click )'), this._moveAppToCurrentWorkspace]);
|
|
||||||
// WTMB (Windows Thumbnails) extension required
|
// WTMB (Windows Thumbnails) extension required
|
||||||
if (global.windowThumbnails) {
|
if (opt.APP_MENU_WINDOW_TMB && global.windowThumbnails) {
|
||||||
popupItems.push([_('Create Window Thumbnail/PiP'), () => {
|
const item = new PopupMenu.PopupMenuItem(_('Create Window Thumbnail (PiP)'));
|
||||||
global.windowThumbnails?.createThumbnail(this.app.get_windows()[0]);
|
item.connect('activate', () => global.windowThumbnails?.createThumbnail(this.app.get_windows()[0]));
|
||||||
}]);
|
this._menu.addMenuItem(item);
|
||||||
|
this._addedMenuItems.push(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._addedMenuItems = [];
|
|
||||||
this._addedMenuItems.push(separator);
|
|
||||||
popupItems.forEach(i => {
|
|
||||||
let item = new PopupMenu.PopupMenuItem(i[0]);
|
|
||||||
this._menu.addMenuItem(item);
|
|
||||||
item.connect('activate', i[1].bind(this));
|
|
||||||
if (i[1] === this._moveAppToCurrentWorkspace && !this._windowsOnOtherWs())
|
|
||||||
item.setSensitive(false);
|
|
||||||
this._addedMenuItems.push(item);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.emit('menu-state-changed', true);
|
this.emit('menu-state-changed', true);
|
||||||
|
|
||||||
this._menu.open(BoxPointer.PopupAnimation.FULL);
|
this._menu.open(BoxPointer.PopupAnimation.FULL);
|
||||||
|
|
|
@ -280,7 +280,7 @@ export const ItemFactory = class ItemFactory {
|
||||||
box.is_profile_box = true;
|
box.is_profile_box = true;
|
||||||
|
|
||||||
const entry = new Gtk.Entry({
|
const entry = new Gtk.Entry({
|
||||||
width_chars: 40,
|
width_chars: 45,
|
||||||
halign: Gtk.Align.END,
|
halign: Gtk.Align.END,
|
||||||
valign: Gtk.Align.CENTER,
|
valign: Gtk.Align.CENTER,
|
||||||
hexpand: true,
|
hexpand: true,
|
||||||
|
|
|
@ -125,16 +125,20 @@ const OverviewCommon = {
|
||||||
}
|
}
|
||||||
|
|
||||||
this._syncGrab();
|
this._syncGrab();
|
||||||
|
if (controls._stateAdjustment.value <= 1 && !controls._searchController.searchActive)
|
||||||
|
Me.Util.activateKeyboardForWorkspaceView();
|
||||||
},
|
},
|
||||||
|
|
||||||
// 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() {
|
after__hideDone() {
|
||||||
|
this.resetOverviewMode();
|
||||||
|
|
||||||
if (!opt.FIX_NEW_WINDOW_FOCUS)
|
if (!opt.FIX_NEW_WINDOW_FOCUS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// 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
|
||||||
const workspace = global.workspace_manager.get_active_workspace();
|
const workspace = global.workspace_manager.get_active_workspace();
|
||||||
const recentDesktopWin = global.display.get_tab_list(1, workspace)[0];
|
const recentDesktopWin = global.display.get_tab_list(1, workspace)[0];
|
||||||
let recentNormalWin = null;
|
let recentNormalWin = null;
|
||||||
|
@ -160,3 +164,4 @@ const OverviewCommon = {
|
||||||
recentWin.activate(global.get_current_time());
|
recentWin.activate(global.get_current_time());
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ const FitMode = WorkspacesView.FitMode;
|
||||||
|
|
||||||
const STARTUP_ANIMATION_TIME = 500;
|
const STARTUP_ANIMATION_TIME = 500;
|
||||||
const ANIMATION_TIME = Overview.ANIMATION_TIME;
|
const ANIMATION_TIME = Overview.ANIMATION_TIME;
|
||||||
|
const SIDE_CONTROLS_ANIMATION_TIME = 250; // OverviewControls.SIDE_CONTROLS_ANIMATION_TIME = Overview.ANIMATION_TIME = 250
|
||||||
const DASH_MAX_SIZE_RATIO = 0.35;
|
const DASH_MAX_SIZE_RATIO = 0.35;
|
||||||
|
|
||||||
let _timeouts;
|
let _timeouts;
|
||||||
|
@ -157,9 +158,16 @@ export const OverviewControlsModule = class {
|
||||||
this._clickEmptyConId = 0;
|
this._clickEmptyConId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._tmbBoxClickConnection) {
|
||||||
|
Main.overview._overview.controls._thumbnailsBox.disconnect(this._tmbBoxClickConnection);
|
||||||
|
this._tmbBoxClickConnection = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (reset || !opt.CLICK_EMPTY_CLOSE)
|
if (reset || !opt.CLICK_EMPTY_CLOSE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._tmbBoxClickConnection = Main.overview._overview.controls._thumbnailsBox.connect('button-release-event', () => Clutter.EVENT_STOP);
|
||||||
|
|
||||||
overview.reactive = true;
|
overview.reactive = true;
|
||||||
this._clickEmptyConId = overview.connect('button-release-event', (actor, event) => {
|
this._clickEmptyConId = overview.connect('button-release-event', (actor, event) => {
|
||||||
const button = event.get_button();
|
const button = event.get_button();
|
||||||
|
@ -181,6 +189,9 @@ const ControlsManagerCommon = {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
prepareToEnterOverview() {
|
prepareToEnterOverview() {
|
||||||
|
// set
|
||||||
|
this.set_child_above_sibling(this._workspacesDisplay, null);
|
||||||
|
|
||||||
this._searchController.prepareToEnterOverview();
|
this._searchController.prepareToEnterOverview();
|
||||||
this._workspacesDisplay.prepareToEnterOverview();
|
this._workspacesDisplay.prepareToEnterOverview();
|
||||||
// Workaround for thumbnailsBox not re-scaling after switching workspace outside of overview using a trackpad
|
// Workaround for thumbnailsBox not re-scaling after switching workspace outside of overview using a trackpad
|
||||||
|
@ -194,8 +205,14 @@ const ControlsManagerCommon = {
|
||||||
else if (this._bgManagers && !(opt.SHOW_BG_IN_OVERVIEW || !opt.SHOW_WS_PREVIEW_BG))
|
else if (this._bgManagers && !(opt.SHOW_BG_IN_OVERVIEW || !opt.SHOW_WS_PREVIEW_BG))
|
||||||
this._setBackground(true);
|
this._setBackground(true);
|
||||||
|
|
||||||
|
// Force updating the app grid order
|
||||||
|
if (opt.APP_GRID_USAGE)
|
||||||
|
this._appDisplay._redisplay();
|
||||||
|
|
||||||
// store pointer X coordinate for OVERVIEW_MODE 1 - to prevent immediate switch to WORKSPACE_MODE 1 if the mouse pointer is steady
|
// store pointer X coordinate for OVERVIEW_MODE 1 - to prevent immediate switch to WORKSPACE_MODE 1 if the mouse pointer is steady
|
||||||
opt.showingPointerX = global.get_pointer()[0];
|
opt.showingPointerX = global.get_pointer()[0];
|
||||||
|
|
||||||
|
this._updateSearchStyle();
|
||||||
},
|
},
|
||||||
|
|
||||||
// this function has duplicate in WorkspaceView so we use one function for both to avoid issues with syncing them
|
// this function has duplicate in WorkspaceView so we use one function for both to avoid issues with syncing them
|
||||||
|
@ -274,10 +291,12 @@ const ControlsManagerCommon = {
|
||||||
const skipDash = Me.Util.dashNotDefault();
|
const skipDash = Me.Util.dashNotDefault();
|
||||||
|
|
||||||
// OVERVIEW_MODE 2 should animate dash and wsTmbBox only if WORKSPACE_MODE === 0 (windows not spread)
|
// OVERVIEW_MODE 2 should animate dash and wsTmbBox only if WORKSPACE_MODE === 0 (windows not spread)
|
||||||
const animateOverviewMode2 = opt.OVERVIEW_MODE2 && !(finalState === 1 && opt.WORKSPACE_MODE);
|
const animateOverviewMode2 = opt.OVERVIEW_MODE2 && !(finalState === 1 && opt.WORKSPACE_MODE && !Main.overview.animationInProgress);
|
||||||
if (!Main.layoutManager._startingUp && ((!opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2) || animateOverviewMode2)) {
|
if (!Main.layoutManager._startingUp && ((!opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2) || animateOverviewMode2)) {
|
||||||
if (!tmbBox._translationOriginal || Math.abs(tmbBox._translationOriginal[0]) > 500) { // swipe gesture can call this calculation before tmbBox is realized, giving nonsense width
|
if (!tmbBox._translationOriginal || Math.abs(tmbBox._translationOriginal[0]) > 500) {
|
||||||
const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] = this._getOverviewTranslations(dash, tmbBox, searchEntryBin);
|
// swipe gesture can call this calculation before tmbBox gets its allocation, giving nonsense width
|
||||||
|
const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] =
|
||||||
|
this._getOverviewTranslations(dash, tmbBox, searchEntryBin);
|
||||||
tmbBox._translationOriginal = [tmbTranslationX, tmbTranslationY];
|
tmbBox._translationOriginal = [tmbTranslationX, tmbTranslationY];
|
||||||
dash._translationOriginal = [dashTranslationX, dashTranslationY];
|
dash._translationOriginal = [dashTranslationX, dashTranslationY];
|
||||||
searchEntryBin._translationOriginal = searchTranslationY;
|
searchEntryBin._translationOriginal = searchTranslationY;
|
||||||
|
@ -322,9 +341,6 @@ const ControlsManagerCommon = {
|
||||||
} else {
|
} else {
|
||||||
this._workspacesDisplay.scale_x = 1;
|
this._workspacesDisplay.scale_x = 1;
|
||||||
}
|
}
|
||||||
if (opt.LEAVING_SEARCH && currentState <= ControlsState.WINDOW_PICKER) {
|
|
||||||
opt.LEAVING_SEARCH = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._workspacesDisplay.setPrimaryWorkspaceVisible(workspacesDisplayVisible);
|
this._workspacesDisplay.setPrimaryWorkspaceVisible(workspacesDisplayVisible);
|
||||||
|
|
||||||
|
@ -361,16 +377,14 @@ const ControlsManagerCommon = {
|
||||||
stateTransitionParams = this._stateAdjustment.getStateTransitionParams();
|
stateTransitionParams = this._stateAdjustment.getStateTransitionParams();
|
||||||
|
|
||||||
const { currentState } = stateTransitionParams;
|
const { currentState } = stateTransitionParams;
|
||||||
if (this.dash.showAppsButton.checked)
|
|
||||||
this._searchTransition = false;
|
|
||||||
|
|
||||||
// if !APP_GRID_ANIMATION, appGrid needs to be hidden in WINDOW_PICKER mode (1)
|
// if !APP_GRID_ANIMATION, appGrid needs to be hidden in WINDOW_PICKER mode (1)
|
||||||
// but needs to be visible for transition from HIDDEN (0) to APP_GRID (2)
|
// but needs to be visible for transition from HIDDEN (0) to APP_GRID (2)
|
||||||
this._appDisplay.visible =
|
this._appDisplay.visible =
|
||||||
currentState > ControlsState.HIDDEN &&
|
currentState > ControlsState.HIDDEN && this._appDisplay.opacity > 0 &&
|
||||||
!this._searchController.searchActive &&
|
(!this._searchController.searchActive || (opt.SEARCH_APP_GRID_MODE && this.dash.showAppsButton.checked)) &&
|
||||||
!(currentState === ControlsState.WINDOW_PICKER && !opt.APP_GRID_ANIMATION) &&
|
!(currentState === ControlsState.WINDOW_PICKER && !opt.APP_GRID_ANIMATION) &&
|
||||||
!this._searchTransition;
|
!this._searchInProgress;
|
||||||
},
|
},
|
||||||
|
|
||||||
_activateSearchAppGridMode() {
|
_activateSearchAppGridMode() {
|
||||||
|
@ -387,7 +401,6 @@ const ControlsManagerCommon = {
|
||||||
opt.APP_GRID_EXCLUDE_FAVORITES = false;
|
opt.APP_GRID_EXCLUDE_FAVORITES = false;
|
||||||
opt.APP_GRID_EXCLUDE_RUNNING = false;
|
opt.APP_GRID_EXCLUDE_RUNNING = false;
|
||||||
this._appDisplay._grid.layoutManager.allowIncompletePages = false;
|
this._appDisplay._grid.layoutManager.allowIncompletePages = false;
|
||||||
this._appDisplay._redisplay();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -405,19 +418,79 @@ const ControlsManagerCommon = {
|
||||||
this._appDisplay._grid.layoutManager.allowIncompletePages = this._origAppGridContent.incompletePages;
|
this._appDisplay._grid.layoutManager.allowIncompletePages = this._origAppGridContent.incompletePages;
|
||||||
this._origAppGridContent = null;
|
this._origAppGridContent = null;
|
||||||
this._appDisplay._redisplay();
|
this._appDisplay._redisplay();
|
||||||
|
this._searchInProgress = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_searchAppGridMode(searchActive) {
|
||||||
|
const appSearchModeActive = opt.SEARCH_APP_GRID_MODE && this.dash.showAppsButton.checked;
|
||||||
|
if (searchActive && appSearchModeActive)
|
||||||
|
this._activateSearchAppGridMode();
|
||||||
|
else
|
||||||
|
this._deactivateSearchAppGridMode();
|
||||||
|
return appSearchModeActive;
|
||||||
|
},
|
||||||
|
|
||||||
_onSearchChanged() {
|
_onSearchChanged() {
|
||||||
// something is somewhere setting the opacity to 0 if V-Shell is rebased while in overview / search
|
const { finalState } = this._stateAdjustment.getStateTransitionParams();
|
||||||
this._searchController.opacity = 255;
|
|
||||||
|
|
||||||
const { finalState, currentState } = this._stateAdjustment.getStateTransitionParams();
|
|
||||||
|
|
||||||
const { searchActive } = this._searchController;
|
const { searchActive } = this._searchController;
|
||||||
const SIDE_CONTROLS_ANIMATION_TIME = 250; // OverviewControls.SIDE_CONTROLS_ANIMATION_TIME = Overview.ANIMATION_TIME = 250
|
|
||||||
|
|
||||||
|
this._updateSearchEntryVisibility(searchActive);
|
||||||
|
|
||||||
|
// If the user starts typing or activates the search provider during the overview animation,
|
||||||
|
// this function will be called again after the overview animation finishes
|
||||||
|
if (opt.SEARCH_VIEW_ANIMATION && Main.overview._animationInProgress && finalState === ControlsState.WINDOW_PICKER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._updateSearchStyle();
|
||||||
|
this._searchInProgress = true;
|
||||||
|
|
||||||
|
if (this._searchAppGridMode(searchActive) && searchActive)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (opt.SHOW_BG_IN_OVERVIEW && this._bgManagers)
|
||||||
|
this._updateBackground(this._bgManagers[0]);
|
||||||
|
|
||||||
|
this._fadeWorkspaces(searchActive);
|
||||||
|
this._fadeSearchResults(searchActive);
|
||||||
|
this._fadeAppDisplay(searchActive);
|
||||||
|
// reuse overview transition, just replace APP_GRID with the search view
|
||||||
|
this._shiftOverviewStateIfNeeded(searchActive, finalState);
|
||||||
|
this._animateSearchResultsIfNeeded(searchActive);
|
||||||
|
},
|
||||||
|
|
||||||
|
_shiftOverviewStateIfNeeded(searchActive, finalState) {
|
||||||
|
if ((opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) ||
|
||||||
|
Main.overview._animationInProgress ||
|
||||||
|
finalState === ControlsState.HIDDEN ||
|
||||||
|
this.dash.showAppsButton.checked)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Delay to allow the workspace preview to fade out instead of animating
|
||||||
|
const delay = searchActive && !opt.SEARCH_VIEW_ANIMATION ? opt.SEARCH_DELAY : 0;
|
||||||
|
// duration: 0 skips the delay for some reason
|
||||||
|
// Animation needs to be shorter than the search delay to avoid stuttering
|
||||||
|
const inDuration = 1;
|
||||||
|
const outDuration = opt.SEARCH_VIEW_ANIMATION ? SIDE_CONTROLS_ANIMATION_TIME : 1;
|
||||||
|
this._stateAdjustment.ease(searchActive ? ControlsState.APP_GRID : ControlsState.WINDOW_PICKER, {
|
||||||
|
// shorter animation time when entering search view can avoid stuttering in transition
|
||||||
|
// collecting search results take some time and the problematic part is the realization of the object on the screen
|
||||||
|
// if the ws animation ends before this event, the whole transition is smoother
|
||||||
|
// removing the ws transition (duration: 0) seems like the best solution here
|
||||||
|
delay,
|
||||||
|
duration: searchActive ? inDuration : outDuration,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onStopped: () => {
|
||||||
|
this._searchInProgress = searchActive;
|
||||||
|
this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateSearchEntryVisibility(searchActive) {
|
||||||
const entry = this._searchEntry;
|
const entry = this._searchEntry;
|
||||||
|
|
||||||
|
entry.remove_all_transitions();
|
||||||
if (opt.SHOW_SEARCH_ENTRY) {
|
if (opt.SHOW_SEARCH_ENTRY) {
|
||||||
entry.visible = true;
|
entry.visible = true;
|
||||||
entry.opacity = 255;
|
entry.opacity = 255;
|
||||||
|
@ -429,141 +502,121 @@ const ControlsManagerCommon = {
|
||||||
opacity: searchActive ? 255 : 0,
|
opacity: searchActive ? 255 : 0,
|
||||||
duration: SIDE_CONTROLS_ANIMATION_TIME / 2,
|
duration: SIDE_CONTROLS_ANIMATION_TIME / 2,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
onComplete: () => {
|
onStopped: () => {
|
||||||
entry.visible = searchActive;
|
entry.visible = searchActive;
|
||||||
|
entry.opacity = 255;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// if user start typing or activated search provider during overview animation, this switcher will be called again after animation ends
|
_fadeSearchResults(searchActive) {
|
||||||
if (opt.SEARCH_VIEW_ANIMATION && Main.overview._animationInProgress && finalState !== ControlsState.HIDDEN)
|
this._searchController.opacity = 255;
|
||||||
return;
|
this._searchController._searchResults.opacity = searchActive ? 0 : 255;
|
||||||
|
if (searchActive)
|
||||||
|
this._searchController.visible = searchActive;
|
||||||
|
else // hide "No search results" during transition
|
||||||
|
this._searchController.opacity = 1;
|
||||||
|
|
||||||
if (!searchActive) {
|
this._searchController._searchResults.ease({
|
||||||
if (!this.dash.showAppsButton.checked)
|
opacity: searchActive ? 255 : 0,
|
||||||
opt.LEAVING_SEARCH = true;
|
duration: SIDE_CONTROLS_ANIMATION_TIME / 2,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onStopped: () => {
|
||||||
|
this._searchController.visible = searchActive;
|
||||||
|
if ((opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) || this.dash.showAppsButton.checked)
|
||||||
|
this._searchInProgress = searchActive;
|
||||||
|
this._updateAppDisplayVisibility();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
if (this._origAppGridContent)
|
_fadeWorkspaces(searchActive) {
|
||||||
this._deactivateSearchAppGridMode();
|
if (/* searchActive &&*/ !opt.SEARCH_VIEW_ANIMATION && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) {
|
||||||
|
this._workspacesDisplay.reactive = false;
|
||||||
this._workspacesDisplay.reactive = true;
|
this._workspacesDisplay.ease({
|
||||||
this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
|
opacity: searchActive ? 0 : 255,
|
||||||
|
// duration needs to be short enough to complete before the search results load, preventing stuttering
|
||||||
|
duration: searchActive ? opt.SEARCH_DELAY : 150,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
if (opt.SEARCH_APP_GRID_MODE && this.dash.showAppsButton.checked) {
|
this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
|
||||||
this._activateSearchAppGridMode();
|
this._workspacesDisplay.opacity = 255;
|
||||||
return;
|
this._workspacesDisplay.reactive = true;
|
||||||
}
|
|
||||||
|
|
||||||
if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
|
|
||||||
this._searchController._searchResults._statusText.add_style_class_name('search-statustext-om2');
|
|
||||||
else
|
|
||||||
this._searchController._searchResults._statusText.remove_style_class_name('search-statustext-om2');
|
|
||||||
this._searchController.show();
|
|
||||||
entry.visible = true;
|
|
||||||
entry.opacity = 255;
|
|
||||||
opt.LEAVING_SEARCH = false;
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
if (opt.SHOW_BG_IN_OVERVIEW && this._bgManagers)
|
|
||||||
this._updateBackground(this._bgManagers[0]);
|
|
||||||
this._searchTransition = true;
|
|
||||||
|
|
||||||
this._searchController._searchResults.translation_x = 0;
|
_fadeAppDisplay(searchActive) {
|
||||||
this._searchController._searchResults.translation_y = 0;
|
if (this.dash.showAppsButton.checked) {
|
||||||
this._searchController.visible = true;
|
this._appDisplay.visible = true;
|
||||||
|
|
||||||
if (opt.SEARCH_VIEW_ANIMATION && ![4, 8].includes(opt.WS_TMB_POSITION)) {
|
this._appDisplay.ease({
|
||||||
this._updateAppDisplayVisibility();
|
opacity: searchActive ? 1 : 255,
|
||||||
this._searchController._searchResults._statusBin.opacity = 1;
|
|
||||||
|
|
||||||
let translationX = 0;
|
|
||||||
let translationY = 0;
|
|
||||||
const geometry = global.display.get_monitor_geometry(global.display.get_primary_monitor());
|
|
||||||
|
|
||||||
switch (opt.SEARCH_VIEW_ANIMATION) {
|
|
||||||
case 1:
|
|
||||||
// make it longer to cover the delay before results appears
|
|
||||||
translationX = geometry.width;
|
|
||||||
translationY = 0;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
translationX = -geometry.width;
|
|
||||||
translationY = 0;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
translationX = 0;
|
|
||||||
translationY = geometry.height;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
translationX = 0;
|
|
||||||
translationY = -geometry.height;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchActive) {
|
|
||||||
this._searchController._searchResults.translation_x = translationX;
|
|
||||||
this._searchController._searchResults.translation_y = translationY;
|
|
||||||
} else {
|
|
||||||
this._searchController._searchResults.translation_x = 0;
|
|
||||||
this._searchController._searchResults.translation_y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._searchController._searchResults.ease({
|
|
||||||
delay: 150, // wait for results
|
|
||||||
opacity: searchActive ? 255 : 0,
|
|
||||||
translation_x: searchActive ? 0 : translationX,
|
|
||||||
translation_y: searchActive ? 0 : translationY,
|
|
||||||
duration: SIDE_CONTROLS_ANIMATION_TIME,
|
duration: SIDE_CONTROLS_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
onComplete: () => {
|
|
||||||
this._searchController.visible = searchActive;
|
|
||||||
this._searchTransition = false;
|
|
||||||
this._searchController._searchResults._statusBin.opacity = 255;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
this._workspacesDisplay.opacity = 255;
|
|
||||||
} else {
|
|
||||||
this._appDisplay.ease({
|
|
||||||
opacity: searchActive || currentState < 2 ? 0 : 255,
|
|
||||||
duration: SIDE_CONTROLS_ANIMATION_TIME / 2,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => {
|
|
||||||
this._updateAppDisplayVisibility();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
|
|
||||||
|
|
||||||
this._searchController._searchResults.ease({
|
|
||||||
opacity: searchActive ? 255 : 0,
|
|
||||||
duration: searchActive ? SIDE_CONTROLS_ANIMATION_TIME / 2 : 0,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: () => (this._searchController.visible = searchActive),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// reuse already tuned overview transition, just replace APP_GRID with the search view
|
_animateSearchResultsIfNeeded(searchActive) {
|
||||||
if (!(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) && !Main.overview._animationInProgress && finalState !== ControlsState.HIDDEN && !this.dash.showAppsButton.checked) {
|
if (!opt.SEARCH_VIEW_ANIMATION) {
|
||||||
this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2');
|
this._searchController._searchResults.translation_x = 0;
|
||||||
this._searchEntry.remove_style_class_name('search-entry-om2');
|
this._searchController._searchResults.translation_y = 0;
|
||||||
const duration = opt.SEARCH_VIEW_ANIMATION ? 140 : 0;
|
return;
|
||||||
this._stateAdjustment.ease(searchActive ? ControlsState.APP_GRID : ControlsState.WINDOW_PICKER, {
|
}
|
||||||
// shorter animation time when entering search view can avoid stuttering in transition
|
|
||||||
// collecting search results take some time and the problematic part is the realization of the object on the screen
|
this._searchController._searchResults._statusBin.opacity = 1;
|
||||||
// if the ws animation ends before this event, the whole transition is smoother
|
|
||||||
// removing the ws transition (duration: 0) seems like the best solution here
|
let translationX = 0;
|
||||||
duration: searchActive ? duration : SIDE_CONTROLS_ANIMATION_TIME,
|
let translationY = 0;
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
const geometry = global.display.get_monitor_geometry(global.display.get_primary_monitor());
|
||||||
onComplete: () => {
|
|
||||||
this._workspacesDisplay.setPrimaryWorkspaceVisible(!searchActive);
|
switch (opt.SEARCH_VIEW_ANIMATION) {
|
||||||
// Set the delay before processing a new search entry to 150 on deactivation, so search providers can't make make the workspace animation stuttering
|
case 1:
|
||||||
// set it back to 0 after in-animation, so the search can be snappy
|
// make it longer to cover the delay before results appears
|
||||||
opt.SEARCH_DELAY = searchActive || !opt.SEARCH_VIEW_ANIMATION ? 0 : 150;
|
translationX = geometry.width;
|
||||||
},
|
translationY = 0;
|
||||||
});
|
break;
|
||||||
} else if (opt.OVERVIEW_MODE2 && !(opt.WORKSPACE_MODE || this.dash.showAppsButton.checked)) {
|
case 2:
|
||||||
// add background to search results and make searchEntry border thicker for better visibility
|
translationX = -geometry.width;
|
||||||
|
translationY = 0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
translationX = 0;
|
||||||
|
translationY = geometry.height;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
translationX = 0;
|
||||||
|
translationY = -geometry.height;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (searchActive) {
|
||||||
|
this._searchController._searchResults.translation_x = translationX;
|
||||||
|
this._searchController._searchResults.translation_y = translationY;
|
||||||
|
} else {
|
||||||
|
this._searchController._searchResults.translation_x = 0;
|
||||||
|
this._searchController._searchResults.translation_y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._searchController._searchResults.ease({
|
||||||
|
delay: 150, // wait for results
|
||||||
|
opacity: searchActive ? 255 : 0,
|
||||||
|
translation_x: searchActive ? 0 : translationX,
|
||||||
|
translation_y: searchActive ? 0 : translationY,
|
||||||
|
duration: SIDE_CONTROLS_ANIMATION_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onComplete: () => {
|
||||||
|
this._searchController.visible = searchActive;
|
||||||
|
this._searchController._searchResults._statusBin.opacity = 255;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateSearchStyle(reset) {
|
||||||
|
if (!reset && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && !this.dash.showAppsButton.checked)) {
|
||||||
this._searchController._searchResults._content.add_style_class_name('search-section-content-bg-om2');
|
this._searchController._searchResults._content.add_style_class_name('search-section-content-bg-om2');
|
||||||
this._searchEntry.add_style_class_name('search-entry-om2');
|
this._searchEntry.add_style_class_name('search-entry-om2');
|
||||||
} else {
|
} else {
|
||||||
|
@ -618,9 +671,9 @@ const ControlsManagerCommon = {
|
||||||
const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] =
|
const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] =
|
||||||
this._getOverviewTranslations(dash, tmbBox, searchEntryBin);
|
this._getOverviewTranslations(dash, tmbBox, searchEntryBin);
|
||||||
|
|
||||||
const onComplete = function () {
|
const onStopped = function () {
|
||||||
// running init callback again causes issues (multiple connections)
|
// running init callback again causes issues (multiple connections)
|
||||||
if (!Main.overview._startupInitComplete)
|
if (callback && !Main.overview._startupInitComplete)
|
||||||
callback();
|
callback();
|
||||||
|
|
||||||
const appDisplayModule = Me.Modules.appDisplayModule;
|
const appDisplayModule = Me.Modules.appDisplayModule;
|
||||||
|
@ -632,34 +685,6 @@ const ControlsManagerCommon = {
|
||||||
Main.overview._startupInitComplete = true;
|
Main.overview._startupInitComplete = true;
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
|
|
||||||
if (dash.visible && !Me.Util.dashNotDefault()) {
|
|
||||||
dash.translation_x = dashTranslationX;
|
|
||||||
dash.translation_y = dashTranslationY;
|
|
||||||
dash.opacity = 255;
|
|
||||||
dash.ease({
|
|
||||||
translation_x: 0,
|
|
||||||
translation_y: 0,
|
|
||||||
delay: STARTUP_ANIMATION_TIME / 2,
|
|
||||||
duration: STARTUP_ANIMATION_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// set dash opacity to make it visible if user enable it later
|
|
||||||
dash.opacity = 255;
|
|
||||||
// if dash is hidden, substitute the ease timeout with GLib.timeout
|
|
||||||
_timeouts.startupAnim2 = GLib.timeout_add(
|
|
||||||
GLib.PRIORITY_DEFAULT,
|
|
||||||
// delay + animation time
|
|
||||||
STARTUP_ANIMATION_TIME * 2 * St.Settings.get().slow_down_factor,
|
|
||||||
() => {
|
|
||||||
onComplete();
|
|
||||||
_timeouts.startupAnim2 = 0;
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchEntryBin.visible) {
|
if (searchEntryBin.visible) {
|
||||||
searchEntryBin.translation_y = searchTranslationY;
|
searchEntryBin.translation_y = searchTranslationY;
|
||||||
searchEntryBin.ease({
|
searchEntryBin.ease({
|
||||||
|
@ -710,6 +735,69 @@ const ControlsManagerCommon = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dash.visible && !Me.Util.dashNotDefault()) {
|
||||||
|
dash.translation_x = dashTranslationX;
|
||||||
|
dash.translation_y = dashTranslationY;
|
||||||
|
dash.opacity = 255;
|
||||||
|
|
||||||
|
if (!callback) { // GS 47+
|
||||||
|
return new Promise(resolve => {
|
||||||
|
dash.ease({
|
||||||
|
translation_x: 0,
|
||||||
|
translation_y: 0,
|
||||||
|
delay: STARTUP_ANIMATION_TIME / 2,
|
||||||
|
duration: STARTUP_ANIMATION_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onStopped: () => {
|
||||||
|
onStopped();
|
||||||
|
resolve();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
dash.ease({
|
||||||
|
translation_x: 0,
|
||||||
|
translation_y: 0,
|
||||||
|
delay: STARTUP_ANIMATION_TIME / 2,
|
||||||
|
duration: STARTUP_ANIMATION_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onStopped,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// set dash opacity to make it visible if user enable it later
|
||||||
|
dash.opacity = 255;
|
||||||
|
// if dash is hidden, substitute the ease timeout with GLib.timeout
|
||||||
|
|
||||||
|
if (!callback) { // GS 47+
|
||||||
|
return new Promise(resolve => {
|
||||||
|
_timeouts.startupAnim2 = GLib.timeout_add(
|
||||||
|
GLib.PRIORITY_DEFAULT,
|
||||||
|
// delay + animation time
|
||||||
|
STARTUP_ANIMATION_TIME * 2 * St.Settings.get().slow_down_factor,
|
||||||
|
() => {
|
||||||
|
onStopped();
|
||||||
|
resolve();
|
||||||
|
_timeouts.startupAnim2 = 0;
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_timeouts.startupAnim2 = GLib.timeout_add(
|
||||||
|
GLib.PRIORITY_DEFAULT,
|
||||||
|
// delay + animation time
|
||||||
|
STARTUP_ANIMATION_TIME * 2 * St.Settings.get().slow_down_factor,
|
||||||
|
() => {
|
||||||
|
onStopped();
|
||||||
|
_timeouts.startupAnim2 = 0;
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_realizeAppDisplayAndFinishSequence() {
|
_realizeAppDisplayAndFinishSequence() {
|
||||||
|
@ -832,7 +920,7 @@ const ControlsManagerCommon = {
|
||||||
|
|
||||||
animateToOverview(state, callback) {
|
animateToOverview(state, callback) {
|
||||||
this._ignoreShowAppsButtonToggle = true;
|
this._ignoreShowAppsButtonToggle = true;
|
||||||
this._searchTransition = false;
|
this._searchInProgress = false;
|
||||||
|
|
||||||
this._stateAdjustment.value = ControlsState.HIDDEN;
|
this._stateAdjustment.value = ControlsState.HIDDEN;
|
||||||
|
|
||||||
|
@ -843,7 +931,7 @@ const ControlsManagerCommon = {
|
||||||
// even if it takes little more time, than jumping frames
|
// even if it takes little more time, than jumping frames
|
||||||
let delay = 0;
|
let delay = 0;
|
||||||
if (opt.DELAY_OVERVIEW_ANIMATION)
|
if (opt.DELAY_OVERVIEW_ANIMATION)
|
||||||
delay = global.display.get_tab_list(0, global.workspace_manager.get_active_workspace()).length * 3;
|
delay = global.display.get_tab_list(0, null).length * opt.DELAY_PER_WINDOW;
|
||||||
|
|
||||||
this._stateAdjustment.ease(state, {
|
this._stateAdjustment.ease(state, {
|
||||||
delay,
|
delay,
|
||||||
|
@ -900,106 +988,120 @@ const ControlsManagerCommon = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateBackground(bgManager, stateValue = 2, stateAdjustment = null) {
|
_updateBackground(bgManager, stateValue = 2/* , stateAdjustment = null*/) {
|
||||||
|
if (this._checkConflict())
|
||||||
|
return;
|
||||||
|
|
||||||
|
const searchActive = this._searchController.searchActive;
|
||||||
|
const staticWorkspace = opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && !this.dash.showAppsButton.checked;
|
||||||
|
|
||||||
|
if (!opt.SHOW_BG_IN_OVERVIEW && !opt.SHOW_WS_PREVIEW_BG) {
|
||||||
|
if (!(staticWorkspace && stateValue <= 1))
|
||||||
|
this._fadeWallpaper(bgManager, stateValue, staticWorkspace);
|
||||||
|
} else {
|
||||||
|
this._setBgBrightness(bgManager, stateValue, staticWorkspace, searchActive);
|
||||||
|
if (opt.OVERVIEW_BG_BLUR_SIGMA || opt.APP_GRID_BG_BLUR_SIGMA)
|
||||||
|
this._setBlurEffect(bgManager, stateValue, staticWorkspace, searchActive);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_setBgBrightness(bgManager, stateValue, staticWorkspace, searchActive) {
|
||||||
|
bgManager.backgroundActor.opacity = 255;
|
||||||
|
const overviewBrightness = !opt.SHOW_WS_PREVIEW_BG && staticWorkspace ? 1 : opt.OVERVIEW_BG_BRIGHTNESS;
|
||||||
|
let secBrightness = searchActive ? opt.SEARCH_BG_BRIGHTNESS : opt.OVERVIEW_BG_BRIGHTNESS;
|
||||||
|
if (staticWorkspace && !this._appDisplay.visible)
|
||||||
|
secBrightness = overviewBrightness;
|
||||||
|
|
||||||
|
const vignette = !opt.SHOW_WS_PREVIEW_BG && staticWorkspace ? 0 : 0.2;
|
||||||
|
|
||||||
|
let currentBrightness = 1;
|
||||||
|
let currentVignette = 0;
|
||||||
|
if ((opt.SHOW_WS_PREVIEW_BG && stateValue < 1) || (opt.SHOW_WS_PREVIEW_BG && staticWorkspace)) {
|
||||||
|
// No need to animate transition unless appGrid state is involved, static bg is covered by the ws preview bg
|
||||||
|
currentBrightness = overviewBrightness;
|
||||||
|
currentVignette = vignette;
|
||||||
|
} else if (stateValue === 1 || (stateValue > 1 && !bgManager._primary)) {
|
||||||
|
currentBrightness = overviewBrightness;
|
||||||
|
currentVignette = vignette;
|
||||||
|
} else if (stateValue === 0) {
|
||||||
|
currentBrightness = 1;
|
||||||
|
currentVignette = 0;
|
||||||
|
} else if (stateValue < 1 /* && !searchActive*/) {
|
||||||
|
currentBrightness = Util.lerp(1, overviewBrightness, stateValue);
|
||||||
|
currentVignette = Util.lerp(0, vignette, stateValue);
|
||||||
|
} else if (stateValue > 1 && bgManager._primary) {
|
||||||
|
currentBrightness = Util.lerp(overviewBrightness, secBrightness, stateValue - 1);
|
||||||
|
currentVignette = vignette;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgManager.backgroundActor.content.vignette_sharpness = currentVignette;
|
||||||
|
bgManager.backgroundActor.content.brightness = currentBrightness;
|
||||||
|
},
|
||||||
|
|
||||||
|
_setBlurEffect(bgManager, stateValue, staticWorkspace) {
|
||||||
|
const blurEffect = this._getBlurEffect(bgManager);
|
||||||
|
// In GNOME 46 the "sigma" property has been renamed to "radius"
|
||||||
|
const radiusProperty = blurEffect.sigma === undefined ? 'radius' : 'sigma';
|
||||||
|
|
||||||
|
// reduce number of steps of blur transition to improve performance
|
||||||
|
const step = opt.SMOOTH_BLUR_TRANSITIONS ? 0.05 : 0.2;
|
||||||
|
const progress = stateValue - (stateValue % step);
|
||||||
|
|
||||||
|
const overviewBlurRadius = !opt.SHOW_WS_PREVIEW_BG && staticWorkspace ? 0 : opt.OVERVIEW_BG_BLUR_SIGMA;
|
||||||
|
const appGridBlurRadius = staticWorkspace && !blurEffect[radiusProperty] && !this._appDisplay.visible ? overviewBlurRadius : opt.APP_GRID_BG_BLUR_SIGMA;
|
||||||
|
let radius = overviewBlurRadius;
|
||||||
|
|
||||||
|
if ((opt.SHOW_WS_PREVIEW_BG && stateValue < 1) || (opt.SHOW_WS_PREVIEW_BG && staticWorkspace)) {
|
||||||
|
// No need to animate transition unless appGrid state is involved, static bg is covered by the ws preview bg
|
||||||
|
radius = overviewBlurRadius;
|
||||||
|
} else if (stateValue === 0) {
|
||||||
|
radius = 0;
|
||||||
|
} else if (stateValue === 1 || (stateValue > 1 && !bgManager._primary)) {
|
||||||
|
radius = overviewBlurRadius;
|
||||||
|
} else if (stateValue === 2) {
|
||||||
|
radius = appGridBlurRadius;
|
||||||
|
} else if (stateValue < 1) {
|
||||||
|
radius = Math.round(Util.lerp(0, overviewBlurRadius, progress));
|
||||||
|
} else if (stateValue > 1 && bgManager._primary) {
|
||||||
|
radius = Math.round(Util.lerp(overviewBlurRadius, appGridBlurRadius, progress - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blurEffect[radiusProperty] !== radius)
|
||||||
|
blurEffect[radiusProperty] = radius;
|
||||||
|
},
|
||||||
|
|
||||||
|
_fadeWallpaper(bgManager, stateValue, staticWorkspace) {
|
||||||
|
// if no bg shown in the overview, fade out the wallpaper
|
||||||
|
if (bgManager.backgroundActor.get_effect('blur'))
|
||||||
|
bgManager.backgroundActor.remove_effect_by_name('blur');
|
||||||
|
let value = stateValue;
|
||||||
|
if (staticWorkspace && stateValue > 1)
|
||||||
|
value = stateValue - 1;
|
||||||
|
bgManager.backgroundActor.opacity = Util.lerp(255, 0, Math.min(value, 1));
|
||||||
|
},
|
||||||
|
|
||||||
|
_getBlurEffect(bgManager) {
|
||||||
|
let blurEffect = bgManager.backgroundActor.get_effect('blur');
|
||||||
|
if (!blurEffect) {
|
||||||
|
blurEffect = new Shell.BlurEffect({
|
||||||
|
brightness: 1,
|
||||||
|
mode: Shell.BlurMode.ACTOR,
|
||||||
|
});
|
||||||
|
bgManager.backgroundActor.add_effect_with_name('blur', blurEffect);
|
||||||
|
}
|
||||||
|
return blurEffect;
|
||||||
|
},
|
||||||
|
|
||||||
|
_checkConflict() {
|
||||||
// Just in case something destroys our background (like older versions of Blur My Shell)
|
// Just in case something destroys our background (like older versions of Blur My Shell)
|
||||||
if (this._bgManagers[0] && !Main.layoutManager.overviewGroup.get_children().includes(this._bgManagers[0].backgroundActor)) {
|
if (this._bgManagers[0] && !Main.layoutManager.overviewGroup.get_children().includes(this._bgManagers[0].backgroundActor)) {
|
||||||
console.error(`[${Me.metadata.name}]`, 'Error: The overview background has been destroyed, possibly by another incompatible extension');
|
console.error(`[${Me.metadata.name}]`, 'Error: The overview background has been destroyed, possibly by another incompatible extension');
|
||||||
// remove and disconnect our destroyed backgrounds to avoid further errors
|
// remove and disconnect our destroyed backgrounds to avoid further errors
|
||||||
this._setBackground(true);
|
this._setBackground(true);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const finalState = stateAdjustment?.getStateTransitionParams().finalState;
|
return false;
|
||||||
if (!opt.SHOW_BG_IN_OVERVIEW && !opt.SHOW_WS_PREVIEW_BG) {
|
|
||||||
// if no bg shown in the overview, fade out the wallpaper
|
|
||||||
if (bgManager.backgroundActor.get_effect('blur'))
|
|
||||||
bgManager.backgroundActor.remove_effect_by_name('blur');
|
|
||||||
if (!(opt.OVERVIEW_MODE2 && opt.WORKSPACE_MODE && finalState === 1))
|
|
||||||
bgManager.backgroundActor.opacity = Util.lerp(255, 0, Math.min(stateValue, 1));
|
|
||||||
} else {
|
|
||||||
bgManager.backgroundActor.opacity = 255;
|
|
||||||
let VIGNETTE, BRIGHTNESS, bgValue;
|
|
||||||
if (opt.OVERVIEW_MODE2 && stateValue <= 1 && !opt.WORKSPACE_MODE) {
|
|
||||||
VIGNETTE = 0;
|
|
||||||
BRIGHTNESS = 1;
|
|
||||||
bgValue = stateValue;
|
|
||||||
} else {
|
|
||||||
VIGNETTE = 0.2;
|
|
||||||
BRIGHTNESS = opt.OVERVIEW_BG_BRIGHTNESS;
|
|
||||||
if (opt.OVERVIEW_MODE2 && stateValue > 1 && !opt.WORKSPACE_MODE)
|
|
||||||
bgValue = stateValue - 1;
|
|
||||||
else
|
|
||||||
bgValue = stateValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let blurEffect = bgManager.backgroundActor.get_effect('blur');
|
|
||||||
if (!blurEffect) {
|
|
||||||
blurEffect = new Shell.BlurEffect({
|
|
||||||
brightness: 1,
|
|
||||||
mode: Shell.BlurMode.ACTOR,
|
|
||||||
});
|
|
||||||
bgManager.backgroundActor.add_effect_with_name('blur', blurEffect);
|
|
||||||
}
|
|
||||||
|
|
||||||
// In GNOME 46 the "sigma" property has been renamed to "radius"
|
|
||||||
const radius = blurEffect.sigma !== undefined ? 'sigma' : 'radius';
|
|
||||||
|
|
||||||
const searchActive = this._searchController.searchActive;
|
|
||||||
if (searchActive)
|
|
||||||
BRIGHTNESS = opt.SEARCH_BG_BRIGHTNESS;
|
|
||||||
|
|
||||||
bgManager.backgroundActor.content.vignette_sharpness = VIGNETTE;
|
|
||||||
bgManager.backgroundActor.content.brightness = BRIGHTNESS;
|
|
||||||
|
|
||||||
let vignetteInit, brightnessInit;// , sigmaInit;
|
|
||||||
if (opt.SHOW_BG_IN_OVERVIEW && opt.SHOW_WS_PREVIEW_BG) {
|
|
||||||
vignetteInit = VIGNETTE;
|
|
||||||
brightnessInit = BRIGHTNESS;
|
|
||||||
// sigmaInit = opt.OVERVIEW_BG_BLUR_SIGMA;
|
|
||||||
} else {
|
|
||||||
vignetteInit = 0;
|
|
||||||
brightnessInit = 1;
|
|
||||||
// sigmaInit = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) {
|
|
||||||
bgManager.backgroundActor.content.vignette_sharpness = Util.lerp(vignetteInit, VIGNETTE, bgValue);
|
|
||||||
bgManager.backgroundActor.content.brightness = Util.lerp(brightnessInit, BRIGHTNESS, bgValue);
|
|
||||||
} else {
|
|
||||||
bgManager.backgroundActor.content.vignette_sharpness = Util.lerp(vignetteInit, VIGNETTE, Math.min(stateValue, 1));
|
|
||||||
bgManager.backgroundActor.content.brightness = Util.lerp(brightnessInit, BRIGHTNESS, Math.min(stateValue, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opt.OVERVIEW_BG_BLUR_SIGMA || opt.APP_GRID_BG_BLUR_SIGMA) {
|
|
||||||
// reduce number of steps of blur transition to improve performance
|
|
||||||
const step = opt.SMOOTH_BLUR_TRANSITIONS ? 0.05 : 0.2;
|
|
||||||
const progress = stateValue - (stateValue % step);
|
|
||||||
if (opt.SHOW_WS_PREVIEW_BG && stateValue < 1 && !searchActive) { // no need to animate transition, unless appGrid state is involved, static bg is covered by the ws preview bg
|
|
||||||
if (blurEffect[radius] !== opt.OVERVIEW_BG_BLUR_SIGMA)
|
|
||||||
blurEffect[radius] = opt.OVERVIEW_BG_BLUR_SIGMA;
|
|
||||||
} else if (stateValue < 1 && !searchActive && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) {
|
|
||||||
const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress));
|
|
||||||
if (sigma !== blurEffect[radius])
|
|
||||||
blurEffect[radius] = sigma;
|
|
||||||
} else if (stateValue < 1 && !searchActive && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && blurEffect[radius])) {
|
|
||||||
const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress));
|
|
||||||
if (sigma !== blurEffect[radius])
|
|
||||||
blurEffect[radius] = sigma;
|
|
||||||
} else if (stateValue > 1 && !searchActive && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && finalState === 1)) {
|
|
||||||
const sigma = Math.round(Util.lerp(0, opt.OVERVIEW_BG_BLUR_SIGMA, progress % 1));
|
|
||||||
if (sigma !== blurEffect[radius])
|
|
||||||
blurEffect[radius] = sigma;
|
|
||||||
} else if ((stateValue > 1 && bgManager._primary) || searchActive) {
|
|
||||||
const sigma = Math.round(Util.lerp(opt.OVERVIEW_BG_BLUR_SIGMA, opt.APP_GRID_BG_BLUR_SIGMA, progress % 1));
|
|
||||||
if (sigma !== blurEffect[radius])
|
|
||||||
blurEffect[radius] = sigma;
|
|
||||||
} else if (stateValue === 1 && !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)) {
|
|
||||||
blurEffect[radius] = opt.OVERVIEW_BG_BLUR_SIGMA;
|
|
||||||
} else if (stateValue === 0 || (stateValue === 1 && (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE))) {
|
|
||||||
blurEffect[radius] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1221,15 +1323,16 @@ const ControlsManagerLayoutVertical = {
|
||||||
let wsTmbHeight = 0;
|
let wsTmbHeight = 0;
|
||||||
|
|
||||||
if (opt.SHOW_WS_TMB) {
|
if (opt.SHOW_WS_TMB) {
|
||||||
const searchActive = this._searchController.searchActive;
|
let maxWsTmbScale = this._dash.showAppsButton.checked
|
||||||
let maxWsTmbScale = this._dash.showAppsButton.checked && !(searchActive && !opt.SEARCH_APP_GRID_MODE)
|
|
||||||
? opt.MAX_THUMBNAIL_SCALE_APPGRID
|
? opt.MAX_THUMBNAIL_SCALE_APPGRID
|
||||||
: opt.MAX_THUMBNAIL_SCALE;
|
: opt.MAX_THUMBNAIL_SCALE;
|
||||||
if (transitionParams.currentState % 1 && !opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive && !opt.LEAVING_SEARCH) {
|
const searchActive = Main.overview._overview.controls._searchInProgress;
|
||||||
|
if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) {
|
||||||
const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
||||||
const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
||||||
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
|
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
wsTmbWidth = Math.round(width * maxWsTmbScale);
|
wsTmbWidth = Math.round(width * maxWsTmbScale);
|
||||||
|
|
||||||
let totalTmbSpacing;
|
let totalTmbSpacing;
|
||||||
|
@ -1274,28 +1377,29 @@ const ControlsManagerLayoutVertical = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
|
let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
|
||||||
let dashY = opt.DASH_TOP ? startY : startY + height - dashHeight;
|
let dashY = opt.DASH_TOP ? 0 : height - dashHeight;
|
||||||
|
|
||||||
if (!opt.DASH_VERTICAL) {
|
if (!opt.DASH_VERTICAL) {
|
||||||
const dashLeftOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_LEFT ? wsTmbWidth + spacing : 0;
|
const dashLeftOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_LEFT ? wsTmbWidth + spacing : 0;
|
||||||
const dashRightOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_RIGHT ? wsTmbWidth + spacing : 0;
|
const dashRightOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_RIGHT ? wsTmbWidth + spacing : 0;
|
||||||
let offset = (width - dashWidth - (opt.CENTER_DASH_WS && !this._xAlignCenter ? dashLeftOffset + dashRightOffset : 0)) / 2;
|
let offset = (width - dashWidth - (opt.CENTER_DASH_WS && !this._xAlignCenter ? dashLeftOffset + dashRightOffset : 0)) / 2;
|
||||||
offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
|
offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
|
||||||
dashX = startX + (opt.CENTER_DASH_WS ? dashLeftOffset : 0) + offset;
|
dashX = (opt.CENTER_DASH_WS ? dashLeftOffset : 0) + offset;
|
||||||
if (opt.WS_TMB_FULL) // Limit the adjustment while keeping the center of adjustment on the screen center
|
if (opt.WS_TMB_FULL) // Limit the adjustment while keeping the center of adjustment on the screen center
|
||||||
dashX = Math.clamp(startX + dashLeftOffset + spacing, dashX, startX + width - dashRightOffset - spacing - dashWidth);
|
dashX = Math.clamp(dashLeftOffset + spacing, dashX, width - dashRightOffset - spacing - dashWidth);
|
||||||
} else {
|
} else {
|
||||||
const offset = (height - dashHeight) / 2;
|
const offset = (height - dashHeight) / 2;
|
||||||
dashY = startY + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing));
|
dashY = offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
|
||||||
}
|
}
|
||||||
dashY = Math.round(dashY);
|
dashX = Math.round(startX + dashX);
|
||||||
|
dashY = Math.round(startY + dashY);
|
||||||
|
|
||||||
childBox.set_origin(startX + dashX, dashY);
|
childBox.set_origin(dashX, dashY);
|
||||||
childBox.set_size(dashWidth, dashHeight);
|
childBox.set_size(dashWidth, dashHeight);
|
||||||
this._dash.allocate(childBox);
|
this._dash.allocate(childBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
// View box offsets
|
// Main view offsets
|
||||||
const leftBoxOffset = (opt.DASH_LEFT ? dashWidth : spacing) + (opt.WS_TMB_LEFT ? wsTmbWidth + spacing : 0);
|
const leftBoxOffset = (opt.DASH_LEFT ? dashWidth : spacing) + (opt.WS_TMB_LEFT ? wsTmbWidth + spacing : 0);
|
||||||
const rightBoxOffset = (opt.DASH_RIGHT ? dashWidth : spacing) + (opt.WS_TMB_RIGHT ? wsTmbWidth + spacing : 0);
|
const rightBoxOffset = (opt.DASH_RIGHT ? dashWidth : spacing) + (opt.WS_TMB_RIGHT ? wsTmbWidth + spacing : 0);
|
||||||
let topBoxOffset = (opt.DASH_TOP ? dashHeight : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0);
|
let topBoxOffset = (opt.DASH_TOP ? dashHeight : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0);
|
||||||
|
@ -1338,7 +1442,16 @@ const ControlsManagerLayoutVertical = {
|
||||||
topBoxOffset += opt.SHOW_SEARCH_ENTRY ? searchEntryHeight + spacing : 0;
|
topBoxOffset += opt.SHOW_SEARCH_ENTRY ? searchEntryHeight + spacing : 0;
|
||||||
|
|
||||||
// workspace
|
// workspace
|
||||||
let params = [box, wsTmbWidth, wsTmbHeight, leftBoxOffset, rightBoxOffset, topBoxOffset, bottomBoxOffset, centeredBoxOffset];
|
let params = [
|
||||||
|
box,
|
||||||
|
wsTmbWidth,
|
||||||
|
wsTmbHeight,
|
||||||
|
leftBoxOffset,
|
||||||
|
rightBoxOffset,
|
||||||
|
topBoxOffset,
|
||||||
|
bottomBoxOffset,
|
||||||
|
centeredBoxOffset,
|
||||||
|
];
|
||||||
|
|
||||||
// Update cached boxes
|
// Update cached boxes
|
||||||
for (const state of Object.values(ControlsState)) {
|
for (const state of Object.values(ControlsState)) {
|
||||||
|
@ -1446,11 +1559,11 @@ const ControlsManagerLayoutHorizontal = {
|
||||||
let wsTmbHeight = 0;
|
let wsTmbHeight = 0;
|
||||||
|
|
||||||
if (opt.SHOW_WS_TMB) {
|
if (opt.SHOW_WS_TMB) {
|
||||||
const searchActive = this._searchController.searchActive;
|
let maxWsTmbScale = this._dash.showAppsButton.checked
|
||||||
let maxWsTmbScale = this._dash.showAppsButton.checked && !(searchActive && !opt.SEARCH_APP_GRID_MODE)
|
|
||||||
? opt.MAX_THUMBNAIL_SCALE_APPGRID
|
? opt.MAX_THUMBNAIL_SCALE_APPGRID
|
||||||
: opt.MAX_THUMBNAIL_SCALE;
|
: opt.MAX_THUMBNAIL_SCALE;
|
||||||
if (transitionParams.currentState % 1 && !opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive && !opt.LEAVING_SEARCH) {
|
const searchActive = Main.overview._overview.controls._searchInProgress;
|
||||||
|
if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) {
|
||||||
const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
const initState = transitionParams.initialState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
||||||
const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
const finalState = transitionParams.finalState === ControlsState.APP_GRID ? opt.MAX_THUMBNAIL_SCALE_APPGRID : opt.MAX_THUMBNAIL_SCALE;
|
||||||
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
|
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
|
||||||
|
@ -1498,23 +1611,24 @@ const ControlsManagerLayoutHorizontal = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
|
let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
|
||||||
let dashY = opt.DASH_TOP ? startY : startY + height - dashHeight;
|
let dashY = opt.DASH_TOP ? 0 : height - dashHeight;
|
||||||
|
|
||||||
if (opt.DASH_VERTICAL) {
|
if (opt.DASH_VERTICAL) {
|
||||||
const dashTopOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0;
|
const dashTopOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0;
|
||||||
const dashBottomOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_BOTTOM ? wsTmbHeight + spacing : 0;
|
const dashBottomOffset = (opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && opt.WS_TMB_BOTTOM ? wsTmbHeight + spacing : 0;
|
||||||
let offset = (height - dashHeight - (opt.CENTER_DASH_WS ? dashTopOffset + dashBottomOffset : 0)) / 2;
|
let offset = (height - dashHeight - (opt.CENTER_DASH_WS ? dashTopOffset + dashBottomOffset : 0)) / 2;
|
||||||
offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
|
offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
|
||||||
dashY = startY + (opt.CENTER_DASH_WS ? dashTopOffset : 0) + offset;
|
dashY = (opt.CENTER_DASH_WS ? dashTopOffset : 0) + offset;
|
||||||
if (opt.WS_TMB_FULL) // Limit the adjustment while keeping the center of adjustment on the screen center
|
if (opt.WS_TMB_FULL) // Limit the adjustment while keeping the center of adjustment on the screen center
|
||||||
dashY = Math.clamp(startY + dashTopOffset + spacing, dashY, startY + height - dashBottomOffset - spacing - dashHeight);
|
dashY = Math.clamp(dashTopOffset + spacing, dashY, height - dashBottomOffset - spacing - dashHeight);
|
||||||
} else {
|
} else {
|
||||||
const offset = (width - dashWidth) / 2;
|
const offset = (width - dashWidth) / 2;
|
||||||
dashX = startX + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing));
|
dashX = startX + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing));
|
||||||
}
|
}
|
||||||
dashX = Math.round(dashX);
|
dashX = Math.round(startX + dashX);
|
||||||
|
dashY = Math.round(startY + dashY);
|
||||||
|
|
||||||
childBox.set_origin(startX + dashX, dashY);
|
childBox.set_origin(dashX, dashY);
|
||||||
childBox.set_size(dashWidth, dashHeight);
|
childBox.set_size(dashWidth, dashHeight);
|
||||||
this._dash.allocate(childBox);
|
this._dash.allocate(childBox);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* panel.js
|
* panel.js
|
||||||
*
|
*
|
||||||
* @author GdH <G-dH@github.com>
|
* @author GdH <G-dH@github.com>
|
||||||
* @copyright 2022 - 2024
|
* @copyright 2022 - 2025
|
||||||
* @license GPL-3.0
|
* @license GPL-3.0
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -67,6 +67,7 @@ export const PanelModule = class {
|
||||||
this._overrides = new Me.Util.Overrides();
|
this._overrides = new Me.Util.Overrides();
|
||||||
|
|
||||||
const panelBox = Main.layoutManager.panelBox;
|
const panelBox = Main.layoutManager.panelBox;
|
||||||
|
panelBox.scale_y = 1;
|
||||||
|
|
||||||
this._setPanelPosition();
|
this._setPanelPosition();
|
||||||
this._updateStyleChangedConnection();
|
this._updateStyleChangedConnection();
|
||||||
|
@ -80,29 +81,23 @@ export const PanelModule = class {
|
||||||
} else if (opt.PANEL_OVERVIEW_ONLY) {
|
} else if (opt.PANEL_OVERVIEW_ONLY) {
|
||||||
if (opt.SHOW_WS_PREVIEW_BG) {
|
if (opt.SHOW_WS_PREVIEW_BG) {
|
||||||
this._reparentPanel(true);
|
this._reparentPanel(true);
|
||||||
if (opt.OVERVIEW_MODE2) {
|
|
||||||
// in OM2 if the panel has been moved to the overviewGroup move panel above all
|
|
||||||
Main.layoutManager.overviewGroup.set_child_above_sibling(panelBox, null);
|
|
||||||
this._updateOverviewConnection();
|
|
||||||
} else {
|
|
||||||
this._updateOverviewConnection(true);
|
|
||||||
}
|
|
||||||
this._showPanel(true);
|
this._showPanel(true);
|
||||||
} else {
|
} else {
|
||||||
// if ws preview bg is disabled, panel can stay in uiGroup
|
// if ws preview bg is disabled, panel can stay in uiGroup
|
||||||
this._reparentPanel(false);
|
this._reparentPanel(false);
|
||||||
this._showPanel(false);
|
this._showPanel(false);
|
||||||
this._updateOverviewConnection();
|
|
||||||
}
|
}
|
||||||
|
this._updateOverviewConnection();
|
||||||
// _connectPanel();
|
// _connectPanel();
|
||||||
} else if (opt.PANEL_DISABLED) {
|
} else if (opt.PANEL_DISABLED) {
|
||||||
this._updateOverviewConnection(true);
|
this._updateOverviewConnection(true);
|
||||||
this._reparentPanel(false);
|
this._reparentPanel(false);
|
||||||
this._showPanel(false);
|
panelBox.scale_y = 0;
|
||||||
// _connectPanel();
|
// _connectPanel();
|
||||||
}
|
}
|
||||||
this._setPanelStructs(!opt.PANEL_MODE);
|
this._setPanelStructs(!opt.PANEL_MODE);
|
||||||
Main.layoutManager._updateHotCorners();
|
Main.layoutManager._updateHotCorners();
|
||||||
|
Main.overview._overview.controls.layoutManager._updateWorkAreaBox();
|
||||||
|
|
||||||
this._overrides.addOverride('ActivitiesButton', Main.panel.statusArea.activities, ActivitiesButton);
|
this._overrides.addOverride('ActivitiesButton', Main.panel.statusArea.activities, ActivitiesButton);
|
||||||
|
|
||||||
|
@ -118,6 +113,7 @@ export const PanelModule = class {
|
||||||
this._updateStyleChangedConnection(reset);
|
this._updateStyleChangedConnection(reset);
|
||||||
|
|
||||||
const panelBox = Main.layoutManager.panelBox;
|
const panelBox = Main.layoutManager.panelBox;
|
||||||
|
panelBox.scale_y = 1;
|
||||||
panelBox.translation_y = 0;
|
panelBox.translation_y = 0;
|
||||||
Main.panel.opacity = 255;
|
Main.panel.opacity = 255;
|
||||||
this._setPanelStructs(true);
|
this._setPanelStructs(true);
|
||||||
|
@ -147,14 +143,18 @@ export const PanelModule = class {
|
||||||
}
|
}
|
||||||
} else if (!this._styleChangedConId) {
|
} else if (!this._styleChangedConId) {
|
||||||
this._styleChangedConId = Main.panel.connect('style-changed', () => {
|
this._styleChangedConId = Main.panel.connect('style-changed', () => {
|
||||||
if (opt.PANEL_OVERVIEW_ONLY && !opt.OVERVIEW_MODE2)
|
this._updateStyle();
|
||||||
Main.panel.add_style_pseudo_class('overview');
|
|
||||||
else if (opt.OVERVIEW_MODE2)
|
|
||||||
Main.panel.remove_style_pseudo_class('overview');
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_updateStyle() {
|
||||||
|
if (opt.OVERVIEW_MODE2 || !opt.PANEL_OVERVIEW_STYLE)
|
||||||
|
Main.panel.remove_style_pseudo_class('overview');
|
||||||
|
else if (opt.PANEL_OVERVIEW_ONLY && !opt.OVERVIEW_MODE2)
|
||||||
|
Main.panel.add_style_pseudo_class('overview');
|
||||||
|
}
|
||||||
|
|
||||||
_updateOverviewConnection(reset = false) {
|
_updateOverviewConnection(reset = false) {
|
||||||
if (reset) {
|
if (reset) {
|
||||||
if (this._hidingOverviewConId) {
|
if (this._hidingOverviewConId) {
|
||||||
|
@ -168,16 +168,15 @@ export const PanelModule = class {
|
||||||
} else {
|
} else {
|
||||||
if (!this._hidingOverviewConId) {
|
if (!this._hidingOverviewConId) {
|
||||||
this._hidingOverviewConId = Main.overview.connect('hiding', () => {
|
this._hidingOverviewConId = Main.overview.connect('hiding', () => {
|
||||||
if (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2)
|
this._showPanel(false);
|
||||||
this._showPanel(false);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!this._showingOverviewConId) {
|
if (!this._showingOverviewConId) {
|
||||||
this._showingOverviewConId = Main.overview.connect('showing', () => {
|
this._showingOverviewConId = Main.overview.connect('showing', () => {
|
||||||
if (Main.layoutManager._startingUp)
|
if (Main.layoutManager._startingUp)
|
||||||
return;
|
return;
|
||||||
if (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2 || Main.layoutManager.panelBox.translation_y)
|
this._updateStyle();
|
||||||
this._showPanel(true);
|
this._showPanel(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -211,9 +210,29 @@ export const PanelModule = class {
|
||||||
}
|
}
|
||||||
|
|
||||||
_showPanel(show = true) {
|
_showPanel(show = true) {
|
||||||
|
const panelBox = Main.layoutManager.panelBox;
|
||||||
|
const panelHeight = Main.panel.height;
|
||||||
|
const overviewGroup = Main.layoutManager.overviewGroup;
|
||||||
|
|
||||||
|
if (panelBox.get_parent() === overviewGroup) {
|
||||||
|
if (opt.OVERVIEW_MODE2)
|
||||||
|
overviewGroup.set_child_above_sibling(panelBox, null);
|
||||||
|
else
|
||||||
|
overviewGroup.set_child_below_sibling(panelBox, Main.overview._overview);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2 && !Main.layoutManager.panelBox.translation_y)
|
||||||
|
return;
|
||||||
|
|
||||||
if (show) {
|
if (show) {
|
||||||
|
panelBox.translation_y = opt.PANEL_POSITION_TOP ? -panelHeight : panelHeight;
|
||||||
Main.panel.opacity = 255;
|
Main.panel.opacity = 255;
|
||||||
Main.layoutManager.panelBox.ease({
|
let delay = 0;
|
||||||
|
// Panel animation needs to wait until overview is visible
|
||||||
|
if (opt.DELAY_OVERVIEW_ANIMATION)
|
||||||
|
delay = global.display.get_tab_list(0, null).length * opt.DELAY_PER_WINDOW + 50;
|
||||||
|
panelBox.ease({
|
||||||
|
delay,
|
||||||
duration: ANIMATION_TIME,
|
duration: ANIMATION_TIME,
|
||||||
translation_y: 0,
|
translation_y: 0,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
|
@ -221,10 +240,10 @@ export const PanelModule = class {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} else if (!Main.layoutManager._startingUp) {
|
} else if (!Main.layoutManager._startingUp) {
|
||||||
const panelHeight = Main.panel.height;
|
panelBox.translation_y = 0;
|
||||||
Main.layoutManager.panelBox.ease({
|
panelBox.ease({
|
||||||
duration: ANIMATION_TIME,
|
duration: ANIMATION_TIME,
|
||||||
translation_y: opt.PANEL_POSITION_TOP ? -panelHeight + 1 : panelHeight - 1,
|
translation_y: opt.PANEL_POSITION_TOP ? -panelHeight : panelHeight,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
Main.panel.opacity = 0;
|
Main.panel.opacity = 0;
|
||||||
this._setPanelStructs(!opt.PANEL_MODE);
|
this._setPanelStructs(!opt.PANEL_MODE);
|
||||||
|
|
|
@ -211,7 +211,13 @@ const AppSearchProvider = {
|
||||||
},
|
},
|
||||||
|
|
||||||
_filterAppGrid(results) {
|
_filterAppGrid(results) {
|
||||||
const icons = Main.overview._overview.controls._appDisplay._orderedItems;
|
const appDisplay = Main.overview._overview.controls._appDisplay;
|
||||||
|
let icons = appDisplay._orderedItems;
|
||||||
|
icons.forEach(icon => {
|
||||||
|
icon.visible = true;
|
||||||
|
});
|
||||||
|
appDisplay._redisplay(results);
|
||||||
|
icons = appDisplay._orderedItems;
|
||||||
icons.forEach(icon => {
|
icons.forEach(icon => {
|
||||||
icon.visible = results.includes(icon.id);
|
icon.visible = results.includes(icon.id);
|
||||||
});
|
});
|
||||||
|
@ -245,8 +251,6 @@ const SystemActionIcon = GObject.registerClass({
|
||||||
}, class SystemActionIcon extends Search.GridSearchResult {
|
}, class SystemActionIcon extends Search.GridSearchResult {
|
||||||
_init(provider, metaInfo, resultsView) {
|
_init(provider, metaInfo, resultsView) {
|
||||||
super._init(provider, metaInfo, resultsView);
|
super._init(provider, metaInfo, resultsView);
|
||||||
if (!Clutter.Container)
|
|
||||||
this.add_style_class_name('grid-search-result-46');
|
|
||||||
this.icon._setSizeManually = true;
|
this.icon._setSizeManually = true;
|
||||||
this.icon.setIconSize(provider._iconSize);
|
this.icon.setIconSize(provider._iconSize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,9 +113,14 @@ export const Options = class Options {
|
||||||
dashShowWindowsBeforeActivation: ['int', 'dash-show-windows-before-activation'],
|
dashShowWindowsBeforeActivation: ['int', 'dash-show-windows-before-activation'],
|
||||||
dashIconScroll: ['int', 'dash-icon-scroll'],
|
dashIconScroll: ['int', 'dash-icon-scroll'],
|
||||||
dashIsolateWorkspaces: ['boolean', 'dash-isolate-workspaces'],
|
dashIsolateWorkspaces: ['boolean', 'dash-isolate-workspaces'],
|
||||||
|
appMenuForceQuit: ['boolean', 'app-menu-force-quit'],
|
||||||
|
appMenuCloseWinsWs: ['boolean', 'app-menu-close-wins-ws'],
|
||||||
|
appMenuMoveApp: ['boolean', 'app-menu-move-app'],
|
||||||
|
appMenuWindowTmb: ['boolean', 'app-menu-window-tmb'],
|
||||||
searchWindowsIconScroll: ['int', 'search-windows-icon-scroll'],
|
searchWindowsIconScroll: ['int', 'search-windows-icon-scroll'],
|
||||||
panelVisibility: ['int', 'panel-visibility'],
|
panelVisibility: ['int', 'panel-visibility'],
|
||||||
panelPosition: ['int', 'panel-position'],
|
panelPosition: ['int', 'panel-position'],
|
||||||
|
panelOverviewStyle: ['int', 'panel-overview-style'],
|
||||||
windowAttentionMode: ['int', 'window-attention-mode'],
|
windowAttentionMode: ['int', 'window-attention-mode'],
|
||||||
wsSwPopupHPosition: ['int', 'ws-sw-popup-h-position'],
|
wsSwPopupHPosition: ['int', 'ws-sw-popup-h-position'],
|
||||||
wsSwPopupVPosition: ['int', 'ws-sw-popup-v-position'],
|
wsSwPopupVPosition: ['int', 'ws-sw-popup-v-position'],
|
||||||
|
@ -331,11 +336,15 @@ export const Options = class Options {
|
||||||
|
|
||||||
this.MAX_ICON_SIZE = this.get('dashMaxIconSize');
|
this.MAX_ICON_SIZE = this.get('dashMaxIconSize');
|
||||||
|
|
||||||
|
this.APP_MENU_FORCE_QUIT = this.get('appMenuForceQuit');
|
||||||
|
this.APP_MENU_CLOSE_WINS_WS = this.get('appMenuCloseWinsWs');
|
||||||
|
this.APP_MENU_MOVE_APP = this.get('appMenuMoveApp');
|
||||||
|
this.APP_MENU_WINDOW_TMB = this.get('appMenuWindowTmb');
|
||||||
|
|
||||||
this.WS_TMB_POSITION = this.get('workspaceThumbnailsPosition');
|
this.WS_TMB_POSITION = this.get('workspaceThumbnailsPosition');
|
||||||
this.ORIENTATION = this.WS_TMB_POSITION > 4 ? 0 : 1;
|
this.ORIENTATION = this.WS_TMB_POSITION > 4 ? 0 : 1;
|
||||||
this.WORKSPACE_MAX_SPACING = this.get('wsMaxSpacing');
|
this.WORKSPACE_MAX_SPACING = this.get('wsMaxSpacing');
|
||||||
this.WS_MAX_SPACING_OFF_SCREEN = 350;
|
this.WS_MAX_SPACING_OFF_SCREEN = 350;
|
||||||
this.FORCE_SINGLE_WS_TRANSITION = false;
|
|
||||||
// ORIENTATION || DASH_LEFT || DASH_RIGHT ? 350 : 80;
|
// ORIENTATION || DASH_LEFT || DASH_RIGHT ? 350 : 80;
|
||||||
this.SHOW_WS_TMB = ![4, 9].includes(this.WS_TMB_POSITION); // 4, 9 - disable
|
this.SHOW_WS_TMB = ![4, 9].includes(this.WS_TMB_POSITION); // 4, 9 - disable
|
||||||
this.WS_TMB_FULL = this.get('wsThumbnailsFull');
|
this.WS_TMB_FULL = this.get('wsThumbnailsFull');
|
||||||
|
@ -362,7 +371,6 @@ export const Options = class Options {
|
||||||
|
|
||||||
this.MAX_THUMBNAIL_SCALE = this.get('wsThumbnailScale') / 100 + 0.01;
|
this.MAX_THUMBNAIL_SCALE = this.get('wsThumbnailScale') / 100 + 0.01;
|
||||||
this.MAX_THUMBNAIL_SCALE_APPGRID = this.get('wsThumbnailScaleAppGrid') / 100 + 0.01;
|
this.MAX_THUMBNAIL_SCALE_APPGRID = this.get('wsThumbnailScaleAppGrid') / 100 + 0.01;
|
||||||
this.SHOW_WS_TMB_APPGRID = true;
|
|
||||||
this.MAX_THUMBNAIL_SCALE_STABLE = this.MAX_THUMBNAIL_SCALE === this.MAX_THUMBNAIL_SCALE_APPGRID;
|
this.MAX_THUMBNAIL_SCALE_STABLE = this.MAX_THUMBNAIL_SCALE === this.MAX_THUMBNAIL_SCALE_APPGRID;
|
||||||
this.SEC_MAX_THUMBNAIL_SCALE = this.get('secWsThumbnailScale') / 100 + 0.01;
|
this.SEC_MAX_THUMBNAIL_SCALE = this.get('secWsThumbnailScale') / 100 + 0.01;
|
||||||
|
|
||||||
|
@ -411,8 +419,8 @@ export const Options = class Options {
|
||||||
this.SEARCH_VIEW_SCALE = this.get('searchViewScale') / 100;
|
this.SEARCH_VIEW_SCALE = this.get('searchViewScale') / 100;
|
||||||
this.SEARCH_MAX_ROWS = this.get('searchMaxResultsRows');
|
this.SEARCH_MAX_ROWS = this.get('searchMaxResultsRows');
|
||||||
this.SEARCH_FUZZY = this.get('searchFuzzy');
|
this.SEARCH_FUZZY = this.get('searchFuzzy');
|
||||||
this.SEARCH_DELAY = 0;
|
this.SEARCH_DELAY = this.SEARCH_VIEW_ANIMATION ? 100 : 0;
|
||||||
this.SEARCH_APP_GRID_MODE = this.get('searchAppGridMode');
|
this.SEARCH_APP_GRID_MODE = this.get('searchAppGridMode') && this.get('appDisplayModule');
|
||||||
|
|
||||||
this.APP_GRID_ALLOW_INCOMPLETE_PAGES = this.get('appGridIncompletePages');
|
this.APP_GRID_ALLOW_INCOMPLETE_PAGES = this.get('appGridIncompletePages');
|
||||||
this.APP_GRID_ICON_SIZE = this.get('appGridIconSize');
|
this.APP_GRID_ICON_SIZE = this.get('appGridIconSize');
|
||||||
|
@ -469,6 +477,7 @@ export const Options = class Options {
|
||||||
this.PANEL_MODE = this.get('panelVisibility');
|
this.PANEL_MODE = this.get('panelVisibility');
|
||||||
this.PANEL_DISABLED = this.PANEL_MODE === 2;
|
this.PANEL_DISABLED = this.PANEL_MODE === 2;
|
||||||
this.PANEL_OVERVIEW_ONLY = this.PANEL_MODE === 1;
|
this.PANEL_OVERVIEW_ONLY = this.PANEL_MODE === 1;
|
||||||
|
this.PANEL_OVERVIEW_STYLE = this.get('panelOverviewStyle');
|
||||||
|
|
||||||
this.WINDOW_ATTENTION_MODE = this.get('windowAttentionMode');
|
this.WINDOW_ATTENTION_MODE = this.get('windowAttentionMode');
|
||||||
this.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS = this.WINDOW_ATTENTION_MODE === 1;
|
this.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS = this.WINDOW_ATTENTION_MODE === 1;
|
||||||
|
@ -479,6 +488,8 @@ export const Options = class Options {
|
||||||
this.WS_SW_POPUP_MODE = this.get('wsSwPopupMode');
|
this.WS_SW_POPUP_MODE = this.get('wsSwPopupMode');
|
||||||
|
|
||||||
this.WS_ANIMATION = this.get('workspaceAnimation');
|
this.WS_ANIMATION = this.get('workspaceAnimation');
|
||||||
|
this.WS_ANIMATION_SINGLE = this.WS_ANIMATION === 1;
|
||||||
|
this.WS_ANIMATION_ALL = this.WS_ANIMATION === 2;
|
||||||
this.WS_WRAPAROUND = this.get('wsSwitcherWraparound');
|
this.WS_WRAPAROUND = this.get('wsSwitcherWraparound');
|
||||||
this.WS_IGNORE_LAST = this.get('wsSwitcherIgnoreLast');
|
this.WS_IGNORE_LAST = this.get('wsSwitcherIgnoreLast');
|
||||||
this.WS_SWITCHER_CURRENT_MONITOR = this.get('wsSwitcherMode') === 1;
|
this.WS_SWITCHER_CURRENT_MONITOR = this.get('wsSwitcherMode') === 1;
|
||||||
|
@ -528,6 +539,8 @@ export const Options = class Options {
|
||||||
this.HIGHLIGHT_NONE = this.HIGHLIGHTING_STYLE === 2;
|
this.HIGHLIGHT_NONE = this.HIGHLIGHTING_STYLE === 2;
|
||||||
|
|
||||||
this.DELAY_STARTUP = this.get('delayStartup');
|
this.DELAY_STARTUP = this.get('delayStartup');
|
||||||
|
this.DELAY_OVERVIEW_ANIMATION = true;
|
||||||
|
this.DELAY_PER_WINDOW = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
_getAnimationDirection() {
|
_getAnimationDirection() {
|
||||||
|
|
|
@ -131,7 +131,7 @@ export function openPreferences(metadata) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!metaWin || (metaWin && !isMe)) {
|
if (!metaWin || (metaWin && !isMe)) {
|
||||||
// delay to avoid errors if previous prefs window has been colsed
|
// delay to avoid errors if previous prefs window has been closed
|
||||||
GLib.idle_add(GLib.PRIORITY_LOW, () => {
|
GLib.idle_add(GLib.PRIORITY_LOW, () => {
|
||||||
try {
|
try {
|
||||||
Main.extensionManager.openExtensionPrefs(metadata.uuid, '', {});
|
Main.extensionManager.openExtensionPrefs(metadata.uuid, '', {});
|
||||||
|
@ -144,12 +144,14 @@ export function openPreferences(metadata) {
|
||||||
|
|
||||||
export function activateSearchProvider(prefix = '') {
|
export function activateSearchProvider(prefix = '') {
|
||||||
const searchEntry = Main.overview.searchEntry;
|
const searchEntry = Main.overview.searchEntry;
|
||||||
if (!searchEntry.get_text() || !searchEntry.get_text().startsWith(prefix)) {
|
const searchEntryText = searchEntry.get_text();
|
||||||
|
if (!searchEntryText || (searchEntryText && !searchEntry.get_text().startsWith(prefix))) {
|
||||||
prefix = `${prefix} `;
|
prefix = `${prefix} `;
|
||||||
const position = prefix.length;
|
const position = prefix.length;
|
||||||
searchEntry.set_text(prefix);
|
searchEntry.set_text(prefix);
|
||||||
searchEntry.get_first_child().set_cursor_position(position);
|
searchEntry.get_first_child().set_cursor_position(position);
|
||||||
searchEntry.get_first_child().set_selection(position, position);
|
searchEntry.get_first_child().set_selection(position, position);
|
||||||
|
searchEntry.grab_key_focus();
|
||||||
} else {
|
} else {
|
||||||
searchEntry.set_text('');
|
searchEntry.set_text('');
|
||||||
}
|
}
|
||||||
|
@ -172,34 +174,51 @@ export function reorderWorkspace(direction = 0) {
|
||||||
global.workspace_manager.reorder_workspace(activeWs, targetIdx);
|
global.workspace_manager.reorder_workspace(activeWs, targetIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In WINDOW_PICKER mode, enable keyboard navigation
|
||||||
|
// by focusing on the active window's preview
|
||||||
export function activateKeyboardForWorkspaceView() {
|
export function activateKeyboardForWorkspaceView() {
|
||||||
Main.ctrlAltTabManager._items.forEach(i => {
|
const currentWindowActor = global.display.focus_window?.get_compositor_private();
|
||||||
if (i.sortGroup === 1 && i.name === 'Windows')
|
if (!currentWindowActor)
|
||||||
Main.ctrlAltTabManager.focusGroup(i);
|
return;
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function exposeWindows(adjustment, activateKeyboard) {
|
const activeWorkspace = global.workspace_manager.get_active_workspace().index();
|
||||||
// expose windows for static overview modes
|
const nMonitors = global.display.get_n_monitors();
|
||||||
if (!adjustment.value && !Main.overview._animationInProgress) {
|
for (let monitor = 0; monitor < nMonitors; monitor++) {
|
||||||
if (adjustment.value === 0) {
|
// secondary monitor
|
||||||
adjustment.value = 0;
|
let windows = Main.overview._overview.controls._workspacesDisplay._workspacesViews[monitor]._workspacesView?._workspaces[activeWorkspace]._windows;
|
||||||
adjustment.ease(1, {
|
if (!windows) // primary monitor
|
||||||
duration: 200,
|
windows = Main.overview._overview.controls._workspacesDisplay._workspacesViews[monitor]._workspaces[activeWorkspace]._windows;
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
for (const win of windows) {
|
||||||
onComplete: () => {
|
if (win._windowActor === currentWindowActor) {
|
||||||
if (activateKeyboard) {
|
win.grab_key_focus();
|
||||||
Main.ctrlAltTabManager._items.forEach(i => {
|
break;
|
||||||
if (i.sortGroup === 1 && i.name === 'Windows')
|
}
|
||||||
Main.ctrlAltTabManager.focusGroup(i);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function exposeWindows() {
|
||||||
|
Main.overview._overview.controls._workspacesDisplay._workspacesViews.forEach(
|
||||||
|
view => {
|
||||||
|
view.exposeWindows();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function exposeWindowsWithOverviewTransition() {
|
||||||
|
// in OVERVIEW MODE 2 windows are not spread and workspace is not scaled
|
||||||
|
// we need to repeat transition to the overview state 1 (window picker), but with spreading windows animation
|
||||||
|
const stateAdjustment = Main.overview._overview.controls._stateAdjustment;
|
||||||
|
Me.opt.WORKSPACE_MODE = 1;
|
||||||
|
// setting value to 0 would reset WORKSPACE_MODE
|
||||||
|
stateAdjustment.value = 0.01;
|
||||||
|
stateAdjustment.ease(1, {
|
||||||
|
duration: 200,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onComplete: () => activateKeyboardForWorkspaceView(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export function isShiftPressed(state = null) {
|
export function isShiftPressed(state = null) {
|
||||||
if (state === null)
|
if (state === null)
|
||||||
[,, state] = global.get_pointer();
|
[,, state] = global.get_pointer();
|
||||||
|
|
|
@ -375,6 +375,9 @@ const WorkspaceAnimationController = {
|
||||||
switchData.monitors.push(group);
|
switchData.monitors.push(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
if (Meta.disable_unredirect_for_display)
|
||||||
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
|
else // new in GS 48
|
||||||
|
global.compositor.disable_unredirect();
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -112,18 +112,18 @@ const WindowPreviewCommon = {
|
||||||
|
|
||||||
const ICON_SIZE = opt.WIN_PREVIEW_ICON_SIZE;
|
const ICON_SIZE = opt.WIN_PREVIEW_ICON_SIZE;
|
||||||
|
|
||||||
|
const windowContainer = new Clutter.Actor({
|
||||||
|
pivot_point: new Graphene.Point({ x: 0.5, y: 0.5 }),
|
||||||
|
});
|
||||||
|
|
||||||
Shell.WindowPreview.prototype._init.bind(this)({
|
Shell.WindowPreview.prototype._init.bind(this)({
|
||||||
reactive: true,
|
reactive: true,
|
||||||
can_focus: true,
|
can_focus: true,
|
||||||
accessible_role: Atk.Role.PUSH_BUTTON,
|
accessible_role: Atk.Role.PUSH_BUTTON,
|
||||||
offscreen_redirect: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY,
|
offscreen_redirect: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY,
|
||||||
|
windowContainer,
|
||||||
});
|
});
|
||||||
|
|
||||||
const windowContainer = new Clutter.Actor({
|
|
||||||
pivot_point: new Graphene.Point({ x: 0.5, y: 0.5 }),
|
|
||||||
});
|
|
||||||
this.window_container = windowContainer;
|
|
||||||
|
|
||||||
windowContainer.connect('notify::scale-x',
|
windowContainer.connect('notify::scale-x',
|
||||||
() => this._adjustOverlayOffsets());
|
() => this._adjustOverlayOffsets());
|
||||||
// gjs currently can't handle setting an actors layout manager during
|
// gjs currently can't handle setting an actors layout manager during
|
||||||
|
@ -186,7 +186,7 @@ const WindowPreviewCommon = {
|
||||||
} else if (opt.WIN_PREVIEW_MID_BTN_ACTION === 2) {
|
} else if (opt.WIN_PREVIEW_MID_BTN_ACTION === 2) {
|
||||||
this._searchAppWindowsAction();
|
this._searchAppWindowsAction();
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
} else if (opt.WIN_PREVIEW_SEC_BTN_ACTION === 3 && global.windowThumbnails) {
|
} else if (opt.WIN_PREVIEW_MID_BTN_ACTION === 3 && global.windowThumbnails) {
|
||||||
this._removeLaters();
|
this._removeLaters();
|
||||||
global.windowThumbnails?.createThumbnail(metaWindow);
|
global.windowThumbnails?.createThumbnail(metaWindow);
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
|
@ -382,13 +382,13 @@ const WindowPreviewCommon = {
|
||||||
if (opt.OVERVIEW_MODE === 1) {
|
if (opt.OVERVIEW_MODE === 1) {
|
||||||
// spread windows on hover
|
// spread windows on hover
|
||||||
this._wsStateConId = this.connect('enter-event', () => {
|
this._wsStateConId = this.connect('enter-event', () => {
|
||||||
// don't spread windows if user don't use pointer device at this moment
|
// prevent spreading windows immediately after entering overview
|
||||||
if (global.get_pointer()[0] === opt.showingPointerX || Main.overview._overview._controls._stateAdjustment.value < 1)
|
if (global.get_pointer()[0] === opt.showingPointerX || Main.overview._overview._controls._stateAdjustment.value < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
opt.WORKSPACE_MODE = 1;
|
opt.WORKSPACE_MODE = 1;
|
||||||
const view = this._workspace.get_parent();
|
const view = this._workspace.get_parent();
|
||||||
view.exposeWindows(this._workspace.metaWorkspace.index());
|
view.exposeWindows();
|
||||||
this.disconnect(this._wsStateConId);
|
this.disconnect(this._wsStateConId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -500,8 +500,7 @@ const WindowPreviewCommon = {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._overlayShown = true;
|
this._overlayShown = true;
|
||||||
if (opt.WIN_TITLES_POSITION === 2)
|
this._restack();
|
||||||
this._restack();
|
|
||||||
|
|
||||||
// If we're supposed to animate and an animation in our direction
|
// If we're supposed to animate and an animation in our direction
|
||||||
// is already happening, let that one continue
|
// is already happening, let that one continue
|
||||||
|
@ -550,11 +549,15 @@ const WindowPreviewCommon = {
|
||||||
return;
|
return;
|
||||||
this._overlayShown = false;
|
this._overlayShown = false;
|
||||||
|
|
||||||
if (opt.ALWAYS_ACTIVATE_SELECTED_WINDOW && Main.overview._overview.controls._stateAdjustment.value < 1)
|
// When leaving overview, mark the window for activation if needed
|
||||||
|
// The marked window is activated during _onDestroy()
|
||||||
|
const leavingOverview = Main.overview._overview.controls._stateAdjustment.value < 1;
|
||||||
|
if (opt.ALWAYS_ACTIVATE_SELECTED_WINDOW && leavingOverview)
|
||||||
this._activateSelected = true;
|
this._activateSelected = true;
|
||||||
|
|
||||||
|
// Prevent restacking the preview if it should remain on top
|
||||||
if (opt.WIN_TITLES_POSITION === 2)
|
// while leaving overview
|
||||||
|
if (!(opt.ALWAYS_ACTIVATE_SELECTED_WINDOW && leavingOverview))
|
||||||
this._restack();
|
this._restack();
|
||||||
|
|
||||||
// If we're supposed to animate and an animation in our direction
|
// If we're supposed to animate and an animation in our direction
|
||||||
|
|
|
@ -78,17 +78,19 @@ export const WorkspaceModule = class {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// workaround for upstream bug (that is not that invisible in default shell)
|
// Workaround for an upstream bug affecting window scaling and positioning:
|
||||||
// smaller window cannot be scaled below 0.95 (WINDOW_PREVIEW_MAXIMUM_SCALE)
|
//
|
||||||
// when its target scale for exposed windows view (workspace state 1) is bigger than the scale needed for ws state 0.
|
// Issue:
|
||||||
// in workspace state 0 where windows are not spread and window scale should follow workspace scale,
|
// - Smaller windows cannot scale below 0.95 (WINDOW_PREVIEW_MAXIMUM_SCALE)
|
||||||
// this window follows proper top left corner position, but doesn't scale with the workspace
|
// when their target scale for the spread windows view (workspace state 1)
|
||||||
// so it looks bad and the window can exceed border of the workspace
|
// exceeds the scale needed for workspace state 0.
|
||||||
// extremely annoying in OVERVIEW_MODE 1 with single smaller window on the workspace, also affects appGrid transition animation
|
// - In workspace state 0 (where windows are not spread and scale matches the workspace),
|
||||||
|
// the window aligns correctly to the top-left corner but does not scale with the workspace,
|
||||||
// disadvantage of following workaround - the WINDOW_PREVIEW_MAXIMUM_SCALE value is common for every workspace,
|
// causing visual issues and the window may exceed the workspace border.
|
||||||
// on multi-monitor system can be visible unwanted scaling of windows on workspace in WORKSPACE_MODE 0 (windows not spread)
|
//
|
||||||
// when leaving overview while any other workspace is in the WORKSPACE_MODE 1.
|
// Effects:
|
||||||
|
// - Particularly noticeable in OVERVIEW_MODE 1 with a single smaller window on the workspace.
|
||||||
|
// - Also impacts the appGrid transition animation.
|
||||||
const WorkspaceLayout = {
|
const WorkspaceLayout = {
|
||||||
// injection to _init()
|
// injection to _init()
|
||||||
after__init() {
|
after__init() {
|
||||||
|
@ -96,14 +98,18 @@ const WorkspaceLayout = {
|
||||||
WINDOW_PREVIEW_MAXIMUM_SCALE = 0.95;
|
WINDOW_PREVIEW_MAXIMUM_SCALE = 0.95;
|
||||||
if (opt.OVERVIEW_MODE === 1) {
|
if (opt.OVERVIEW_MODE === 1) {
|
||||||
this._stateAdjustment.connect('notify::value', () => {
|
this._stateAdjustment.connect('notify::value', () => {
|
||||||
// scale 0.1 for window state 0 just needs to be smaller then possible scale of any window in spread view
|
// When transitioning to workspace state 1 (WINDOW_PICKER),
|
||||||
|
// replace the constant with the original value.
|
||||||
|
// Ensure that the scale for workspace state 0 is smaller
|
||||||
|
// than the minimum possible scale of any window on the workspace,
|
||||||
|
// so they stay at their real size relative to ws preview
|
||||||
const scale = this._stateAdjustment.value ? 0.95 : 0.1;
|
const scale = this._stateAdjustment.value ? 0.95 : 0.1;
|
||||||
if (scale !== WINDOW_PREVIEW_MAXIMUM_SCALE) {
|
if (scale !== WINDOW_PREVIEW_MAXIMUM_SCALE)
|
||||||
WINDOW_PREVIEW_MAXIMUM_SCALE = scale;
|
WINDOW_PREVIEW_MAXIMUM_SCALE = scale;
|
||||||
// when transition to ws state 1 (WINDOW_PICKER) begins, replace the constant with the original one
|
// Force recalculation of the target layout
|
||||||
// and force recalculation of the target layout, so the transition will be smooth
|
// to ensure that the new WINDOW_PREVIEW_MAXIMUM_SCALE is applied
|
||||||
|
if (this._stateAdjustment.value < 0.5)
|
||||||
this._needsLayout = true;
|
this._needsLayout = true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -67,6 +67,7 @@ export const WorkspaceAnimationModule = class {
|
||||||
|
|
||||||
this._overrides.addOverride('MonitorGroup', WorkspaceAnimation.MonitorGroup.prototype, MonitorGroup);
|
this._overrides.addOverride('MonitorGroup', WorkspaceAnimation.MonitorGroup.prototype, MonitorGroup);
|
||||||
this._connectWsAnimationSwipeTracker();
|
this._connectWsAnimationSwipeTracker();
|
||||||
|
this._overrideMonitorGroupProperty();
|
||||||
|
|
||||||
console.debug(' WorkspaceAnimationModule - Activated');
|
console.debug(' WorkspaceAnimationModule - Activated');
|
||||||
}
|
}
|
||||||
|
@ -77,6 +78,7 @@ export const WorkspaceAnimationModule = class {
|
||||||
this._overrides = null;
|
this._overrides = null;
|
||||||
const reset = true;
|
const reset = true;
|
||||||
this._connectWsAnimationSwipeTracker(reset);
|
this._connectWsAnimationSwipeTracker(reset);
|
||||||
|
this._overrideMonitorGroupProperty(reset);
|
||||||
|
|
||||||
console.debug(' WorkspaceAnimationModule - Disabled');
|
console.debug(' WorkspaceAnimationModule - Disabled');
|
||||||
}
|
}
|
||||||
|
@ -126,6 +128,30 @@ export const WorkspaceAnimationModule = class {
|
||||||
|
|
||||||
Main.wm._workspaceSwitcherPopup.display(wsIndex);
|
Main.wm._workspaceSwitcherPopup.display(wsIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_overrideMonitorGroupProperty(reset = false) {
|
||||||
|
if (!this._origBaseDistance)
|
||||||
|
this._origBaseDistance = Object.getOwnPropertyDescriptor(WorkspaceAnimation.MonitorGroup.prototype, 'baseDistance').get;
|
||||||
|
|
||||||
|
let getter;
|
||||||
|
if (reset) {
|
||||||
|
if (this._origBaseDistance)
|
||||||
|
getter = { get: this._origBaseDistance };
|
||||||
|
} else {
|
||||||
|
getter = {
|
||||||
|
get() {
|
||||||
|
const spacing = 0; // 100 * St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
|
if (global.workspace_manager.layout_rows === -1)
|
||||||
|
return this._monitor.height + spacing + (opt.PANEL_MODE ? Main.panel.height : 0); // compensation for hidden panel
|
||||||
|
else
|
||||||
|
return this._monitor.width + spacing;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getter)
|
||||||
|
Object.defineProperty(WorkspaceAnimation.MonitorGroup.prototype, 'baseDistance', getter);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const MonitorGroup = {
|
const MonitorGroup = {
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
import Gio from 'gi://Gio';
|
||||||
import GLib from 'gi://GLib';
|
import GLib from 'gi://GLib';
|
||||||
import Clutter from 'gi://Clutter';
|
import Clutter from 'gi://Clutter';
|
||||||
import St from 'gi://St';
|
import St from 'gi://St';
|
||||||
|
@ -120,7 +121,7 @@ const WorkspaceThumbnailCommon = {
|
||||||
const wsIndex = this.metaWorkspace.index();
|
const wsIndex = this.metaWorkspace.index();
|
||||||
let label = `${wsIndex + 1}`;
|
let label = `${wsIndex + 1}`;
|
||||||
if (opt.SHOW_WST_LABELS === 2) { // 2 - index + workspace name
|
if (opt.SHOW_WST_LABELS === 2) { // 2 - index + workspace name
|
||||||
const settings = Me.getSettings('org.gnome.desktop.wm.preferences');
|
const settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.preferences' });
|
||||||
const wsLabels = settings.get_strv('workspace-names');
|
const wsLabels = settings.get_strv('workspace-names');
|
||||||
if (wsLabels.length > wsIndex && wsLabels[wsIndex])
|
if (wsLabels.length > wsIndex && wsLabels[wsIndex])
|
||||||
label += `: ${wsLabels[wsIndex]}`;
|
label += `: ${wsLabels[wsIndex]}`;
|
||||||
|
@ -182,6 +183,9 @@ const WorkspaceThumbnailCommon = {
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (opt.SHOW_WST_LABELS_ON_HOVER)
|
||||||
|
this._wsLabel.opacity = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.CLOSE_WS_BUTTON_MODE) {
|
if (opt.CLOSE_WS_BUTTON_MODE) {
|
||||||
|
@ -229,9 +233,6 @@ const WorkspaceThumbnailCommon = {
|
||||||
this._lastCloseClickTime = 0;
|
this._lastCloseClickTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.SHOW_WST_LABELS_ON_HOVER)
|
|
||||||
this._wsLabel.opacity = 0;
|
|
||||||
|
|
||||||
this.connect('enter-event', () => {
|
this.connect('enter-event', () => {
|
||||||
if (opt.CLOSE_WS_BUTTON_MODE && (!Meta.prefs_get_dynamic_workspaces() || (Meta.prefs_get_dynamic_workspaces() && global.workspace_manager.get_n_workspaces() - 1 !== this.metaWorkspace.index())))
|
if (opt.CLOSE_WS_BUTTON_MODE && (!Meta.prefs_get_dynamic_workspaces() || (Meta.prefs_get_dynamic_workspaces() && global.workspace_manager.get_n_workspaces() - 1 !== this.metaWorkspace.index())))
|
||||||
this._closeButton.opacity = 200;
|
this._closeButton.opacity = 200;
|
||||||
|
@ -267,7 +268,7 @@ const WorkspaceThumbnailCommon = {
|
||||||
|
|
||||||
// full brightness of the thumbnail bg draws unnecessary attention
|
// full brightness of the thumbnail bg draws unnecessary attention
|
||||||
// there is a grey bg under the wallpaper
|
// there is a grey bg under the wallpaper
|
||||||
this._bgManager.backgroundActor.opacity = 220;
|
// this._bgManager.backgroundActor.opacity = 220;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.connect('destroy', () => {
|
this.connect('destroy', () => {
|
||||||
|
@ -327,23 +328,12 @@ const WorkspaceThumbnailCommon = {
|
||||||
} else {
|
} else {
|
||||||
this.metaWorkspace.activate(time);
|
this.metaWorkspace.activate(time);
|
||||||
}
|
}
|
||||||
} else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && wsIndex < lastWsIndex) {
|
} else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && wsIndex <= lastWsIndex) {
|
||||||
if (stateAdjustment.value > 1)
|
if (stateAdjustment.value > 1)
|
||||||
stateAdjustment.value = 1;
|
stateAdjustment.value = 1;
|
||||||
|
|
||||||
|
|
||||||
// spread windows
|
|
||||||
// in OVERVIEW MODE 2 windows are not spread and workspace is not scaled
|
|
||||||
// we need to repeat transition to the overview state 1 (window picker), but with spreading windows animation
|
|
||||||
if (this.metaWorkspace.active) {
|
if (this.metaWorkspace.active) {
|
||||||
Main.overview.searchController._setSearchActive(false);
|
Me.Util.exposeWindowsWithOverviewTransition();
|
||||||
opt.WORKSPACE_MODE = 1;
|
|
||||||
// setting value to 0 would reset WORKSPACE_MODE
|
|
||||||
stateAdjustment.value = 0.01;
|
|
||||||
stateAdjustment.ease(1, {
|
|
||||||
duration: 200,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
// switch ws
|
// switch ws
|
||||||
this.metaWorkspace.activate(time);
|
this.metaWorkspace.activate(time);
|
||||||
|
@ -422,6 +412,8 @@ const WorkspaceThumbnailCommon = {
|
||||||
const ThumbnailsBoxCommon = {
|
const ThumbnailsBoxCommon = {
|
||||||
after__init(scrollAdjustment, monitorIndex, orientation = opt.ORIENTATION) {
|
after__init(scrollAdjustment, monitorIndex, orientation = opt.ORIENTATION) {
|
||||||
this._boxOrientation = orientation;
|
this._boxOrientation = orientation;
|
||||||
|
// Block propagation of the button-release-event
|
||||||
|
this.connect('button-release-event', () => Clutter.EVENT_STOP);
|
||||||
},
|
},
|
||||||
|
|
||||||
_activateThumbnailAtPoint(stageX, stageY, time, activateCurrent = false) {
|
_activateThumbnailAtPoint(stageX, stageY, time, activateCurrent = false) {
|
||||||
|
|
|
@ -159,7 +159,6 @@ const WorkspacesViewCommon = {
|
||||||
|
|
||||||
// normal view 0, spread windows 1
|
// normal view 0, spread windows 1
|
||||||
_getWorkspaceModeForOverviewState(state) {
|
_getWorkspaceModeForOverviewState(state) {
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case ControlsState.HIDDEN:
|
case ControlsState.HIDDEN:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -210,8 +209,8 @@ const WorkspacesViewCommon = {
|
||||||
// if we disable workspaces that we can't or don't need to see, transition animations will be noticeably smoother
|
// if we disable workspaces that we can't or don't need to see, transition animations will be noticeably smoother
|
||||||
// only the current ws needs to be visible during overview transition animations
|
// only the current ws needs to be visible during overview transition animations
|
||||||
// and only current and adjacent ws when switching ws
|
// and only current and adjacent ws when switching ws
|
||||||
w.visible =
|
w.visible = opt.WS_ANIMATION_ALL ||
|
||||||
(this._animating && wsScrollProgress && distanceToCurrentWorkspace <= (opt.NUMBER_OF_VISIBLE_NEIGHBORS + 1)) ||
|
((this._animating && wsScrollProgress && distanceToCurrentWorkspace <= (opt.NUMBER_OF_VISIBLE_NEIGHBORS + 1)) ||
|
||||||
scaleProgress === 1 ||
|
scaleProgress === 1 ||
|
||||||
(opt.WORKSPACE_MAX_SPACING >= opt.WS_MAX_SPACING_OFF_SCREEN &&
|
(opt.WORKSPACE_MAX_SPACING >= opt.WS_MAX_SPACING_OFF_SCREEN &&
|
||||||
distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
|
distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
|
||||||
|
@ -222,7 +221,7 @@ const WorkspacesViewCommon = {
|
||||||
(distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
|
(distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
|
||||||
currentState <= ControlsState.WINDOW_PICKER &&
|
currentState <= ControlsState.WINDOW_PICKER &&
|
||||||
(initialState < ControlsState.APP_GRID && finalState < ControlsState.APP_GRID)
|
(initialState < ControlsState.APP_GRID && finalState < ControlsState.APP_GRID)
|
||||||
);
|
));
|
||||||
|
|
||||||
// after transition from APP_GRID to WINDOW_PICKER state,
|
// after transition from APP_GRID to WINDOW_PICKER state,
|
||||||
// adjacent workspaces are hidden and we need them to show up
|
// adjacent workspaces are hidden and we need them to show up
|
||||||
|
@ -263,7 +262,7 @@ const WorkspacesViewCommon = {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
exposeWindows(workspaceIndex = null, callback) {
|
exposeWindows(workspaceIndex = null) {
|
||||||
let adjustments = [];
|
let adjustments = [];
|
||||||
if (workspaceIndex === null) {
|
if (workspaceIndex === null) {
|
||||||
this._workspaces.forEach(ws => {
|
this._workspaces.forEach(ws => {
|
||||||
|
@ -276,14 +275,9 @@ const WorkspacesViewCommon = {
|
||||||
opt.WORKSPACE_MODE = 1;
|
opt.WORKSPACE_MODE = 1;
|
||||||
adjustments.forEach(adj => {
|
adjustments.forEach(adj => {
|
||||||
if (adj.value === 0) {
|
if (adj.value === 0) {
|
||||||
adj.value = 0;
|
|
||||||
adj.ease(1, {
|
adj.ease(1, {
|
||||||
duration: 200,
|
duration: 200,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
onComplete: () => {
|
|
||||||
if (callback)
|
|
||||||
callback();
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -298,7 +292,7 @@ const SecondaryMonitorDisplayCommon = {
|
||||||
|
|
||||||
const SecondaryMonitorDisplayVertical = {
|
const SecondaryMonitorDisplayVertical = {
|
||||||
_getThumbnailParamsForState(state) {
|
_getThumbnailParamsForState(state) {
|
||||||
|
const spacing = opt.SPACING;
|
||||||
let opacity, scale, translationX;
|
let opacity, scale, translationX;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case ControlsState.HIDDEN:
|
case ControlsState.HIDDEN:
|
||||||
|
@ -306,7 +300,7 @@ const SecondaryMonitorDisplayVertical = {
|
||||||
scale = 1;
|
scale = 1;
|
||||||
translationX = 0;
|
translationX = 0;
|
||||||
if (!Main.layoutManager._startingUp && (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2))
|
if (!Main.layoutManager._startingUp && (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2))
|
||||||
translationX = this._thumbnails.width * (opt.SEC_WS_TMB_LEFT ? -1 : 1);
|
translationX = (this._thumbnails.width + spacing) * (opt.SEC_WS_TMB_LEFT ? -1 : 1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ControlsState.WINDOW_PICKER:
|
case ControlsState.WINDOW_PICKER:
|
||||||
|
@ -357,11 +351,11 @@ const SecondaryMonitorDisplayVertical = {
|
||||||
|
|
||||||
let offset = Math.round(width - wsTmbWidth - wsBoxWidth - spacing) / 2;
|
let offset = Math.round(width - wsTmbWidth - wsBoxWidth - spacing) / 2;
|
||||||
|
|
||||||
const wsbX = startX + opt.SEC_WS_TMB_LEFT
|
const wsbX = startX + (opt.SEC_WS_TMB_LEFT
|
||||||
? wsTmbWidth + spacing + offset
|
? wsTmbWidth + spacing + offset
|
||||||
: offset;
|
: offset);
|
||||||
|
|
||||||
const wsbY = Math.round((startY + height - wsBoxHeight) / 2);
|
const wsbY = Math.round(startY + (height - wsBoxHeight) / 2);
|
||||||
|
|
||||||
workspaceBox.set_origin(wsbX, wsbY);
|
workspaceBox.set_origin(wsbX, wsbY);
|
||||||
workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
|
workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
|
||||||
|
@ -532,8 +526,7 @@ const SecondaryMonitorDisplayVertical = {
|
||||||
|
|
||||||
const SecondaryMonitorDisplayHorizontal = {
|
const SecondaryMonitorDisplayHorizontal = {
|
||||||
_getThumbnailParamsForState(state) {
|
_getThumbnailParamsForState(state) {
|
||||||
// const { ControlsState } = OverviewControls;
|
const spacing = opt.SPACING;
|
||||||
|
|
||||||
let opacity, scale, translationY;
|
let opacity, scale, translationY;
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case ControlsState.HIDDEN:
|
case ControlsState.HIDDEN:
|
||||||
|
@ -541,7 +534,7 @@ const SecondaryMonitorDisplayHorizontal = {
|
||||||
scale = 1;
|
scale = 1;
|
||||||
translationY = 0;
|
translationY = 0;
|
||||||
if (!Main.layoutManager._startingUp && (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2))
|
if (!Main.layoutManager._startingUp && (!opt.SHOW_WS_PREVIEW_BG || opt.OVERVIEW_MODE2))
|
||||||
translationY = this._thumbnails.height * (opt.SEC_WS_TMB_TOP ? -1 : 1);
|
translationY = (this._thumbnails.height + spacing) * (opt.SEC_WS_TMB_TOP ? -1 : 1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ControlsState.WINDOW_PICKER:
|
case ControlsState.WINDOW_PICKER:
|
||||||
|
@ -592,11 +585,11 @@ const SecondaryMonitorDisplayHorizontal = {
|
||||||
|
|
||||||
let offset = Math.round(height - wsTmbHeight - wsBoxHeight - spacing) / 2;
|
let offset = Math.round(height - wsTmbHeight - wsBoxHeight - spacing) / 2;
|
||||||
|
|
||||||
const wsbX = Math.round((startX + width - wsBoxWidth) / 2);
|
const wsbX = Math.round(startX + (width - wsBoxWidth) / 2);
|
||||||
|
|
||||||
const wsbY = startY + opt.SEC_WS_TMB_TOP
|
const wsbY = startY + (opt.SEC_WS_TMB_TOP
|
||||||
? wsTmbHeight + spacing + offset
|
? wsTmbHeight + spacing + offset
|
||||||
: offset;
|
: offset);
|
||||||
|
|
||||||
workspaceBox.set_origin(wsbX, wsbY);
|
workspaceBox.set_origin(wsbX, wsbY);
|
||||||
workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
|
workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
|
||||||
|
@ -760,7 +753,6 @@ const ExtraWorkspaceViewCommon = {
|
||||||
const adjustment = this._workspace._background._stateAdjustment;
|
const adjustment = this._workspace._background._stateAdjustment;
|
||||||
opt.WORKSPACE_MODE = 1;
|
opt.WORKSPACE_MODE = 1;
|
||||||
if (adjustment.value === 0) {
|
if (adjustment.value === 0) {
|
||||||
adjustment.value = 0;
|
|
||||||
adjustment.ease(1, {
|
adjustment.ease(1, {
|
||||||
duration: 200,
|
duration: 200,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
@ -934,24 +926,16 @@ const WorkspacesDisplayCommon = {
|
||||||
case Clutter.KEY_Tab:
|
case Clutter.KEY_Tab:
|
||||||
if (Main.overview.searchController.searchActive) {
|
if (Main.overview.searchController.searchActive) {
|
||||||
Main.overview.searchEntry.grab_key_focus();
|
Main.overview.searchEntry.grab_key_focus();
|
||||||
} else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE && state === 1) {
|
} else if (!opt.WORKSPACE_MODE && state <= 1) {
|
||||||
// expose windows by "clicking" on ws thumbnail
|
if (opt.OVERVIEW_MODE2)
|
||||||
// in this case overview stateAdjustment will be used for transition
|
Main.overview._overview.controls._updateSearchStyle(true);
|
||||||
Main.overview._overview.controls._thumbnailsBox._activateThumbnailAtPoint(0, 0, global.get_current_time(), true);
|
// spread windows in OVERVIEW_MODE
|
||||||
Main.ctrlAltTabManager._items.forEach(i => {
|
if (state < 1)
|
||||||
if (i.sortGroup === 1 && i.name === 'Windows')
|
opt.WORKSPACE_MODE = 1;
|
||||||
Main.ctrlAltTabManager.focusGroup(i);
|
else if (opt.OVERVIEW_MODE2)
|
||||||
});
|
Me.Util.exposeWindowsWithOverviewTransition();
|
||||||
} else if (opt.OVERVIEW_MODE && !opt.WORKSPACE_MODE && state === 1) {
|
else
|
||||||
// expose windows for OVERVIEW_MODE 1
|
Me.Util.exposeWindows();
|
||||||
const wsIndex = global.workspace_manager.get_active_workspace().index();
|
|
||||||
// after expose animation activate keyboard for window selection
|
|
||||||
const callback = Me.Util.activateKeyboardForWorkspaceView;
|
|
||||||
this._workspacesViews.forEach(
|
|
||||||
view => {
|
|
||||||
view.exposeWindows(wsIndex, callback);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
if (state === 2)
|
if (state === 2)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
"shell-version": [
|
"shell-version": [
|
||||||
"45",
|
"45",
|
||||||
"46",
|
"46",
|
||||||
"47"
|
"47",
|
||||||
|
"48"
|
||||||
],
|
],
|
||||||
"session-modes": [
|
"session-modes": [
|
||||||
"user",
|
"user",
|
||||||
|
@ -17,6 +18,6 @@
|
||||||
},
|
},
|
||||||
"gettext-domain": "vertical-workspaces",
|
"gettext-domain": "vertical-workspaces",
|
||||||
"settings-schema": "org.gnome.shell.extensions.vertical-workspaces",
|
"settings-schema": "org.gnome.shell.extensions.vertical-workspaces",
|
||||||
"version-name": "46.4"
|
"version-name": "48.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
cs
|
cs
|
||||||
nl
|
nl
|
||||||
|
it
|
||||||
|
|
File diff suppressed because it is too large
Load diff
1761
extensions/47/vertical-workspaces/po/it.po
Normal file
1761
extensions/47/vertical-workspaces/po/it.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -194,8 +194,7 @@ export default class VShell extends ExtensionPreferences {
|
||||||
_('Adjusts the position of the dash on the axis given by the orientation of the workspaces'),
|
_('Adjusts the position of the dash on the axis given by the orientation of the workspaces'),
|
||||||
dashPositionScale,
|
dashPositionScale,
|
||||||
'dashPositionAdjust',
|
'dashPositionAdjust',
|
||||||
null,
|
null
|
||||||
'dashModule'
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -882,7 +881,7 @@ export default class VShell extends ExtensionPreferences {
|
||||||
|
|
||||||
const maxSearchResultsAdjustment = new Gtk.Adjustment({
|
const maxSearchResultsAdjustment = new Gtk.Adjustment({
|
||||||
upper: 50,
|
upper: 50,
|
||||||
lower: 5,
|
lower: 1,
|
||||||
step_increment: 1,
|
step_increment: 1,
|
||||||
page_increment: 5,
|
page_increment: 5,
|
||||||
});
|
});
|
||||||
|
@ -917,6 +916,24 @@ export default class VShell extends ExtensionPreferences {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Panel')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Overview Panel Style'),
|
||||||
|
_('Panel background style in overview'),
|
||||||
|
itemFactory.newDropDown(),
|
||||||
|
'panelOverviewStyle',
|
||||||
|
[
|
||||||
|
[_('Same as Desktop'), 0],
|
||||||
|
[_('Transparent (Default)'), 1],
|
||||||
|
]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
optionList.push(
|
optionList.push(
|
||||||
itemFactory.getRowWidget(
|
itemFactory.getRowWidget(
|
||||||
|
@ -1232,6 +1249,56 @@ export default class VShell extends ExtensionPreferences {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('App Menu')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Add Force Quit'),
|
||||||
|
_('Adds a "Force Quit" menu item to the application menu that appears when right-clicking an app icon'),
|
||||||
|
itemFactory.newSwitch(),
|
||||||
|
'appMenuForceQuit',
|
||||||
|
null,
|
||||||
|
'dashModule'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Add Close Windows on Current Workspace'),
|
||||||
|
_('Adds a "Close Windows on Current Workspace" menu item to the application menu that appears when right-clicking an app icon'),
|
||||||
|
itemFactory.newSwitch(),
|
||||||
|
'appMenuCloseWinsWs',
|
||||||
|
null,
|
||||||
|
'dashModule'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Add Move App to Current Workspace'),
|
||||||
|
_('Adds a "Move App to Current Workspace" menu item to the application menu that appears when right-clicking an app icon'),
|
||||||
|
itemFactory.newSwitch(),
|
||||||
|
'appMenuMoveApp',
|
||||||
|
null,
|
||||||
|
'dashModule'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
optionList.push(
|
||||||
|
itemFactory.getRowWidget(
|
||||||
|
_('Add Create Window Thumbnail'),
|
||||||
|
_('Requires WTMB extension installed and enabled. Adds a "Create Window Thumbnail" menu item to the application menu that appears when right-clicking an app icon'),
|
||||||
|
itemFactory.newSwitch(),
|
||||||
|
'appMenuWindowTmb',
|
||||||
|
null,
|
||||||
|
'dashModule'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
optionList.push(
|
optionList.push(
|
||||||
itemFactory.getRowWidget(
|
itemFactory.getRowWidget(
|
||||||
_('Workspace Thumbnails')
|
_('Workspace Thumbnails')
|
||||||
|
@ -1408,12 +1475,13 @@ export default class VShell extends ExtensionPreferences {
|
||||||
optionList.push(
|
optionList.push(
|
||||||
itemFactory.getRowWidget(
|
itemFactory.getRowWidget(
|
||||||
_('Workspace Preview Animation'),
|
_('Workspace Preview Animation'),
|
||||||
_('When entering / leaving the App Grid / Search view, the workspace preview can animate to/from workspace thumbnail.'),
|
_('When entering or leaving the App Grid, the workspace preview can animate to/from workspace thumbnails'),
|
||||||
itemFactory.newDropDown(),
|
itemFactory.newDropDown(),
|
||||||
'workspaceAnimation',
|
'workspaceAnimation',
|
||||||
[
|
[
|
||||||
[_('Disable'), 0],
|
[_('Disable'), 0],
|
||||||
[_('Enable'), 1],
|
[_('Active Workspace Only'), 1],
|
||||||
|
[_('All Workspaces'), 2],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
@ -226,6 +226,18 @@
|
||||||
<key type="b" name="dash-isolate-workspaces">
|
<key type="b" name="dash-isolate-workspaces">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
</key>
|
</key>
|
||||||
|
<key type="b" name="app-menu-force-quit">
|
||||||
|
<default>true</default>
|
||||||
|
</key>
|
||||||
|
<key type="b" name="app-menu-close-wins-ws">
|
||||||
|
<default>true</default>
|
||||||
|
</key>
|
||||||
|
<key type="b" name="app-menu-move-app">
|
||||||
|
<default>true</default>
|
||||||
|
</key>
|
||||||
|
<key type="b" name="app-menu-window-tmb">
|
||||||
|
<default>true</default>
|
||||||
|
</key>
|
||||||
<key type="i" name="search-windows-icon-scroll">
|
<key type="i" name="search-windows-icon-scroll">
|
||||||
<default>1</default>
|
<default>1</default>
|
||||||
</key>
|
</key>
|
||||||
|
@ -242,7 +254,7 @@
|
||||||
<default>5</default>
|
<default>5</default>
|
||||||
</key>
|
</key>
|
||||||
<key type="i" name="search-app-grid-mode">
|
<key type="i" name="search-app-grid-mode">
|
||||||
<default>0</default>
|
<default>1</default>
|
||||||
</key>
|
</key>
|
||||||
<key type="i" name="panel-visibility">
|
<key type="i" name="panel-visibility">
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
|
@ -250,6 +262,9 @@
|
||||||
<key type="i" name="panel-position">
|
<key type="i" name="panel-position">
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
</key>
|
</key>
|
||||||
|
<key type="i" name="panel-overview-style">
|
||||||
|
<default>1</default>
|
||||||
|
</key>
|
||||||
<key type="i" name="window-attention-mode">
|
<key type="i" name="window-attention-mode">
|
||||||
<default>0</default>
|
<default>0</default>
|
||||||
</key>
|
</key>
|
||||||
|
@ -467,7 +482,7 @@
|
||||||
'searchWindowsOrder': '1',
|
'searchWindowsOrder': '1',
|
||||||
'searchFuzzy': 'false',
|
'searchFuzzy': 'false',
|
||||||
'searchMaxResultsRows': '5',
|
'searchMaxResultsRows': '5',
|
||||||
'searchAppGridMode': '0',
|
'searchAppGridMode': '1',
|
||||||
'dashShowWindowsBeforeActivation': '1',
|
'dashShowWindowsBeforeActivation': '1',
|
||||||
'dashIconScroll': '1',
|
'dashIconScroll': '1',
|
||||||
'dashIsolateWorkspaces': 'false',
|
'dashIsolateWorkspaces': 'false',
|
||||||
|
@ -552,7 +567,7 @@
|
||||||
'dashBgRadius': '0',
|
'dashBgRadius': '0',
|
||||||
'dashBgGS3Style': 'false',
|
'dashBgGS3Style': 'false',
|
||||||
'runningDotStyle': '1',
|
'runningDotStyle': '1',
|
||||||
'showWsSwitcherBg': 'false',
|
'showWsSwitcherBg': 'true',
|
||||||
'showWsPreviewBg': 'true',
|
'showWsPreviewBg': 'true',
|
||||||
'wsPreviewBgRadius': '30',
|
'wsPreviewBgRadius': '30',
|
||||||
'showBgInOverview': 'true',
|
'showBgInOverview': 'true',
|
||||||
|
@ -563,7 +578,7 @@
|
||||||
'smoothBlurTransitions': 'false',
|
'smoothBlurTransitions': 'false',
|
||||||
'appGridAnimation': '4',
|
'appGridAnimation': '4',
|
||||||
'searchViewAnimation': '0',
|
'searchViewAnimation': '0',
|
||||||
'workspaceAnimation': '1',
|
'workspaceAnimation': '2',
|
||||||
'animationSpeedFactor': '100',
|
'animationSpeedFactor': '100',
|
||||||
'winPreviewIconSize': '1',
|
'winPreviewIconSize': '1',
|
||||||
'winTitlePosition': '0',
|
'winTitlePosition': '0',
|
||||||
|
@ -595,7 +610,7 @@
|
||||||
'searchWindowsOrder': '1',
|
'searchWindowsOrder': '1',
|
||||||
'searchFuzzy': 'false',
|
'searchFuzzy': 'false',
|
||||||
'searchMaxResultsRows': '5',
|
'searchMaxResultsRows': '5',
|
||||||
'searchAppGridMode': '0',
|
'searchAppGridMode': '1',
|
||||||
'dashShowWindowsBeforeActivation': '1',
|
'dashShowWindowsBeforeActivation': '1',
|
||||||
'dashIconScroll': '1',
|
'dashIconScroll': '1',
|
||||||
'dashIsolateWorkspaces': 'false',
|
'dashIsolateWorkspaces': 'false',
|
||||||
|
@ -723,7 +738,7 @@
|
||||||
'searchWindowsOrder': '1',
|
'searchWindowsOrder': '1',
|
||||||
'searchFuzzy': 'false',
|
'searchFuzzy': 'false',
|
||||||
'searchMaxResultsRows': '5',
|
'searchMaxResultsRows': '5',
|
||||||
'searchAppGridMode': '0',
|
'searchAppGridMode': '1',
|
||||||
'dashShowWindowsBeforeActivation': '1',
|
'dashShowWindowsBeforeActivation': '1',
|
||||||
'dashIconScroll': '1',
|
'dashIconScroll': '1',
|
||||||
'dashIsolateWorkspaces': 'false',
|
'dashIsolateWorkspaces': 'false',
|
||||||
|
@ -851,7 +866,7 @@
|
||||||
'searchWindowsOrder': '1',
|
'searchWindowsOrder': '1',
|
||||||
'searchFuzzy': 'false',
|
'searchFuzzy': 'false',
|
||||||
'searchMaxResultsRows': '5',
|
'searchMaxResultsRows': '5',
|
||||||
'searchAppGridMode': '0',
|
'searchAppGridMode': '1',
|
||||||
'dashShowWindowsBeforeActivation': '1',
|
'dashShowWindowsBeforeActivation': '1',
|
||||||
'dashIconScroll': '1',
|
'dashIconScroll': '1',
|
||||||
'dashIsolateWorkspaces': 'false',
|
'dashIsolateWorkspaces': 'false',
|
||||||
|
|
|
@ -315,24 +315,32 @@ StButton#vhandle,
|
||||||
#dash.dash-46 .show-apps,
|
#dash.dash-46 .show-apps,
|
||||||
#dash.dash-46 .overview-tile,
|
#dash.dash-46 .overview-tile,
|
||||||
#dash.dash-46 .overview-icon,
|
#dash.dash-46 .overview-icon,
|
||||||
.app-folder-45 .overview-icon, /* 45 only */
|
/*#dash .overview-tile:hover,
|
||||||
.app-folder-46 .overview-icon,
|
#dash .overview-tile:focus,
|
||||||
|
#dash .overview-tile:selected,*/
|
||||||
|
#app-display .app-folder .overview-icon,
|
||||||
|
/*#app-display .overview-tile:hover,
|
||||||
|
#app-display .overview-tile:focus,
|
||||||
|
#app-display .overview-tile:selected,*/
|
||||||
.page-navigation-arrow,
|
.page-navigation-arrow,
|
||||||
.search-provider-icon,
|
.search-provider-icon,
|
||||||
.list-search-result,
|
.list-search-result,
|
||||||
.grid-search-result,
|
.grid-search-result,
|
||||||
.overview-tile {
|
.overview-tile {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Needed only for 46+, but doesn't hurt 45 */
|
/* GS 47 removed the top margin that V-Shell expects */
|
||||||
|
#dash.dash-46 {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
#dash.dash-46 .overview-tile:hover .overview-icon,
|
#dash.dash-46 .overview-tile:hover .overview-icon,
|
||||||
#dash.dash-46 .overview-tile:focus .overview-icon,
|
#dash.dash-46 .overview-tile:focus .overview-icon,
|
||||||
#dash.dash-46 .overview-tile:selected .overview-icon,
|
#dash.dash-46 .overview-tile:selected .overview-icon,
|
||||||
#dash.dash-46 .show-apps:hover .overview-icon,
|
#dash.dash-46 .show-apps:hover .overview-icon,
|
||||||
#dash.dash-46 .show-apps:focus .overview-icon,
|
#dash.dash-46 .show-apps:focus .overview-icon,
|
||||||
#dash.dash-46 .show-apps:selected .overview-icon,
|
#dash.dash-46 .show-apps:selected .overview-icon,
|
||||||
.edit-folder-button:hover,
|
|
||||||
.page-navigation-arrow:hover,
|
.page-navigation-arrow:hover,
|
||||||
.search-provider-icon:hover,
|
.search-provider-icon:hover,
|
||||||
.search-provider-icon:focus,
|
.search-provider-icon:focus,
|
||||||
|
@ -340,34 +348,32 @@ StButton#vhandle,
|
||||||
.list-search-result:hover,
|
.list-search-result:hover,
|
||||||
.list-search-result:focus,
|
.list-search-result:focus,
|
||||||
.list-search-result:selected,
|
.list-search-result:selected,
|
||||||
.app-display-46 .overview-tile:hover,
|
|
||||||
.app-display-46 .overview-tile:focus,
|
|
||||||
.app-display-46 .overview-tile:selected,
|
|
||||||
.app-folder-46:hover,
|
|
||||||
.app-folder-45:hover .overview-icon,
|
|
||||||
.app-folder-45:focus .overview-icon,
|
|
||||||
#searchResults .overview-tile:hover,
|
#searchResults .overview-tile:hover,
|
||||||
#searchResults .overview-tile:focus,
|
#searchResults .overview-tile:focus,
|
||||||
#searchResults .overview-tile:selected,
|
#searchResults .overview-tile:selected,
|
||||||
.grid-search-result-46:hover,
|
.grid-search-result:hover,
|
||||||
.grid-search-result-46:focus,
|
.grid-search-result:focus,
|
||||||
.grid-search-result-46:selected,
|
.grid-search-result:selected,
|
||||||
|
#app-display .overview-tile:hover,
|
||||||
|
#app-display .overview-tile:focus,
|
||||||
|
#app-display .overview-tile:selected,
|
||||||
|
#app-display .app-folder:hover,
|
||||||
|
#app-display .app-folder:focus,
|
||||||
|
#app-display .app-folder:selected,
|
||||||
.app-folder-dialog .overview-tile:hover,
|
.app-folder-dialog .overview-tile:hover,
|
||||||
.app-folder-dialog .overview-tile:focus,
|
.app-folder-dialog .overview-tile:focus,
|
||||||
.app-folder-dialog .overview-tile:selected,
|
.app-folder-dialog .overview-tile:selected,
|
||||||
.overview-icon:hover,
|
.edit-folder-button:hover {
|
||||||
.overview-icon:focus,
|
|
||||||
.overview-icon:selected {
|
|
||||||
background-color: rgba(200, 200, 200, 0.15);
|
background-color: rgba(200, 200, 200, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.overview-tile:drop, /* 46 needs to add color so the highlighting style is visible on the app folder preview */
|
.overview-tile:drop, /* 46 needs to add color so the highlighting style is visible on the app folder preview */
|
||||||
.app-folder-dialog,
|
.app-folder-dialog-translucent,
|
||||||
.edit-folder-button,
|
.edit-folder-button,
|
||||||
.folder-name-entry,
|
.folder-name-entry,
|
||||||
.app-folder-46,
|
#app-display .app-folder,
|
||||||
.app-folder-46 .overview-tile,
|
#app-display .app-folder,
|
||||||
.app-folder-45 .overview-icon,
|
#app-display .app-folder .overview-tile,
|
||||||
.edit-folder-button,
|
.edit-folder-button,
|
||||||
.folder-name-entry {
|
.folder-name-entry {
|
||||||
background-color: rgba(200, 200, 200, 0.08);
|
background-color: rgba(200, 200, 200, 0.08);
|
||||||
|
|
Loading…
Add table
Reference in a new issue