summaryrefslogtreecommitdiffstats
path: root/extensions/46
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-16 17:26:47 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-16 17:26:47 +0000
commit2a95917e152d60e9ecc80f953907293f409b4984 (patch)
tree3e4a3df9af670ba2bbbb2493deefa9ef32e30b7d /extensions/46
parentAdding upstream version 20240414. (diff)
downloadgnome-shell-extensions-extra-upstream.tar.xz
gnome-shell-extensions-extra-upstream.zip
Adding upstream version 20240916.upstream/20240916upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--extensions/46/middleclickclose/README.md29
-rw-r--r--extensions/46/vertical-workspaces/README.md87
-rw-r--r--extensions/46/vertical-workspaces/lib/appDisplay.js1694
-rw-r--r--extensions/46/vertical-workspaces/po/cs.po1553
-rw-r--r--extensions/47/disable-workspace-switcher.mk (renamed from extensions/46/disable-workspace-switcher.mk)0
-rw-r--r--extensions/47/disable-workspace-switcher/LICENSE (renamed from extensions/46/disable-workspace-switcher/LICENSE)0
-rw-r--r--extensions/47/disable-workspace-switcher/README.md (renamed from extensions/46/disable-workspace-switcher/README.md)0
-rw-r--r--extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js (renamed from extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js)0
-rw-r--r--extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json (renamed from extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json)2
-rw-r--r--extensions/47/hibernate-status.mk (renamed from extensions/46/hibernate-status.mk)0
-rw-r--r--extensions/47/hibernate-status/.editorconfig (renamed from extensions/46/hibernate-status/.editorconfig)0
-rw-r--r--extensions/47/hibernate-status/.github/workflows/release.yaml (renamed from extensions/46/hibernate-status/.github/workflows/release.yaml)0
-rw-r--r--extensions/47/hibernate-status/.gitignore (renamed from extensions/46/hibernate-status/.gitignore)0
-rw-r--r--extensions/47/hibernate-status/.prettierrc (renamed from extensions/46/hibernate-status/.prettierrc)0
-rw-r--r--extensions/47/hibernate-status/LICENSE (renamed from extensions/46/hibernate-status/LICENSE)0
-rw-r--r--extensions/47/hibernate-status/Makefile (renamed from extensions/46/hibernate-status/Makefile)0
-rw-r--r--extensions/47/hibernate-status/README.md (renamed from extensions/46/hibernate-status/README.md)0
-rwxr-xr-xextensions/47/hibernate-status/buildforupload.sh (renamed from extensions/46/hibernate-status/buildforupload.sh)0
-rw-r--r--extensions/47/hibernate-status/extension.js (renamed from extensions/46/hibernate-status/extension.js)17
-rw-r--r--extensions/47/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po (renamed from extensions/46/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po)0
-rw-r--r--extensions/47/hibernate-status/metadata.json (renamed from extensions/46/hibernate-status/metadata.json)2
-rw-r--r--extensions/47/hibernate-status/prefs.js (renamed from extensions/46/hibernate-status/prefs.js)3
-rw-r--r--extensions/47/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml (renamed from extensions/46/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml)0
-rw-r--r--extensions/47/middleclickclose.mk (renamed from extensions/46/middleclickclose.mk)0
-rw-r--r--extensions/47/middleclickclose/.gitignore (renamed from extensions/46/middleclickclose/.gitignore)0
-rw-r--r--extensions/47/middleclickclose/LICENSE (renamed from extensions/46/middleclickclose/LICENSE)0
-rw-r--r--extensions/47/middleclickclose/Makefile (renamed from extensions/46/middleclickclose/Makefile)0
-rw-r--r--extensions/47/middleclickclose/src/extension.js (renamed from extensions/46/middleclickclose/src/extension.js)91
-rw-r--r--extensions/47/middleclickclose/src/metadata.json (renamed from extensions/46/middleclickclose/src/metadata.json)3
-rw-r--r--extensions/47/middleclickclose/src/po/de.po (renamed from extensions/46/middleclickclose/src/po/de.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/el.po (renamed from extensions/46/middleclickclose/src/po/el.po)40
-rw-r--r--extensions/47/middleclickclose/src/po/fr.po (renamed from extensions/46/middleclickclose/src/po/fr.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/it.po (renamed from extensions/46/middleclickclose/src/po/it.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/nl.po (renamed from extensions/46/middleclickclose/src/po/nl.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/pt.po (renamed from extensions/46/middleclickclose/src/po/pt.po)34
-rw-r--r--extensions/47/middleclickclose/src/po/sk.po (renamed from extensions/46/middleclickclose/src/po/sk.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/sr.po (renamed from extensions/46/middleclickclose/src/po/sr.po)30
-rw-r--r--extensions/47/middleclickclose/src/po/sr@latin.po (renamed from extensions/46/middleclickclose/src/po/sr@latin.po)36
-rw-r--r--extensions/47/middleclickclose/src/po/template.pot (renamed from extensions/46/middleclickclose/src/po/template.pot)30
-rw-r--r--extensions/47/middleclickclose/src/po/uk.po (renamed from extensions/46/middleclickclose/src/po/uk.po)34
-rw-r--r--extensions/47/middleclickclose/src/prefs.js (renamed from extensions/46/middleclickclose/src/prefs.js)24
-rw-r--r--extensions/47/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml (renamed from extensions/46/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml)5
-rw-r--r--extensions/47/middleclickclose/src/settingsWatch.js (renamed from extensions/46/middleclickclose/src/settingsWatch.js)0
-rw-r--r--extensions/47/no-overview.mk (renamed from extensions/46/no-overview.mk)0
-rw-r--r--extensions/47/no-overview/LICENSE (renamed from extensions/46/no-overview/LICENSE)0
-rw-r--r--extensions/47/no-overview/README.md (renamed from extensions/46/no-overview/README.md)0
-rw-r--r--extensions/47/no-overview/extension.js (renamed from extensions/46/no-overview/extension.js)0
-rw-r--r--extensions/47/no-overview/metadata.json (renamed from extensions/46/no-overview/metadata.json)2
-rw-r--r--extensions/47/vertical-workspaces.mk (renamed from extensions/46/vertical-workspaces.mk)0
-rw-r--r--extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md (renamed from extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md)0
-rw-r--r--extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md (renamed from extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md)0
-rw-r--r--extensions/47/vertical-workspaces/CHANGELOG.md (renamed from extensions/46/vertical-workspaces/CHANGELOG.md)76
-rw-r--r--extensions/47/vertical-workspaces/LICENSE (renamed from extensions/46/vertical-workspaces/LICENSE)0
-rw-r--r--extensions/47/vertical-workspaces/Makefile (renamed from extensions/46/vertical-workspaces/Makefile)0
-rw-r--r--extensions/47/vertical-workspaces/extension.js (renamed from extensions/46/vertical-workspaces/extension.js)260
-rw-r--r--extensions/47/vertical-workspaces/lib/appFavorites.js (renamed from extensions/46/vertical-workspaces/lib/appFavorites.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/dash.js (renamed from extensions/46/vertical-workspaces/lib/dash.js)119
-rw-r--r--extensions/47/vertical-workspaces/lib/iconGrid.js (renamed from extensions/46/vertical-workspaces/lib/iconGrid.js)185
-rw-r--r--extensions/47/vertical-workspaces/lib/layout.js (renamed from extensions/46/vertical-workspaces/lib/layout.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/messageTray.js (renamed from extensions/46/vertical-workspaces/lib/messageTray.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/optionsFactory.js (renamed from extensions/46/vertical-workspaces/lib/optionsFactory.js)8
-rw-r--r--extensions/47/vertical-workspaces/lib/osdWindow.js (renamed from extensions/46/vertical-workspaces/lib/osdWindow.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/overlayKey.js (renamed from extensions/46/vertical-workspaces/lib/overlayKey.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/overview.js (renamed from extensions/46/vertical-workspaces/lib/overview.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/overviewControls.js (renamed from extensions/46/vertical-workspaces/lib/overviewControls.js)1074
-rw-r--r--extensions/47/vertical-workspaces/lib/panel.js (renamed from extensions/46/vertical-workspaces/lib/panel.js)26
-rw-r--r--extensions/47/vertical-workspaces/lib/recentFilesSearchProvider.js (renamed from extensions/46/vertical-workspaces/lib/recentFilesSearchProvider.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/search.js (renamed from extensions/46/vertical-workspaces/lib/search.js)97
-rw-r--r--extensions/47/vertical-workspaces/lib/searchController.js (renamed from extensions/46/vertical-workspaces/lib/searchController.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/settings.js (renamed from extensions/46/vertical-workspaces/lib/settings.js)54
-rw-r--r--extensions/47/vertical-workspaces/lib/swipeTracker.js (renamed from extensions/46/vertical-workspaces/lib/swipeTracker.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/util.js (renamed from extensions/46/vertical-workspaces/lib/util.js)74
-rw-r--r--extensions/47/vertical-workspaces/lib/windowAttentionHandler.js (renamed from extensions/46/vertical-workspaces/lib/windowAttentionHandler.js)53
-rw-r--r--extensions/47/vertical-workspaces/lib/windowManager.js (renamed from extensions/46/vertical-workspaces/lib/windowManager.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/windowPreview.js (renamed from extensions/46/vertical-workspaces/lib/windowPreview.js)12
-rw-r--r--extensions/47/vertical-workspaces/lib/workspace.js (renamed from extensions/46/vertical-workspaces/lib/workspace.js)43
-rw-r--r--extensions/47/vertical-workspaces/lib/workspaceAnimation.js (renamed from extensions/46/vertical-workspaces/lib/workspaceAnimation.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/workspaceSwitcherPopup.js (renamed from extensions/46/vertical-workspaces/lib/workspaceSwitcherPopup.js)0
-rw-r--r--extensions/47/vertical-workspaces/lib/workspaceThumbnail.js (renamed from extensions/46/vertical-workspaces/lib/workspaceThumbnail.js)49
-rw-r--r--extensions/47/vertical-workspaces/lib/workspacesView.js (renamed from extensions/46/vertical-workspaces/lib/workspacesView.js)299
-rw-r--r--extensions/47/vertical-workspaces/metadata.json (renamed from extensions/46/vertical-workspaces/metadata.json)6
-rw-r--r--extensions/47/vertical-workspaces/po/nl.po (renamed from extensions/46/vertical-workspaces/po/nl.po)0
-rw-r--r--extensions/47/vertical-workspaces/po/vertical-workspaces.pot (renamed from extensions/46/vertical-workspaces/po/vertical-workspaces.pot)1583
-rw-r--r--extensions/47/vertical-workspaces/prefs.js (renamed from extensions/46/vertical-workspaces/prefs.js)840
-rw-r--r--extensions/47/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml (renamed from extensions/46/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml)106
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot.jpg (renamed from extensions/46/vertical-workspaces/screenshots/screenshot.jpg)bin416550 -> 416550 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot0.jpg (renamed from extensions/46/vertical-workspaces/screenshots/screenshot0.jpg)bin290880 -> 290880 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot0.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot0.png)bin1027234 -> 1027234 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot1.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot1.png)bin280303 -> 280303 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot2.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot2.png)bin286557 -> 286557 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot3.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot3.png)bin384363 -> 384363 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot4.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot4.png)bin148233 -> 148233 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/screenshot5.png (renamed from extensions/46/vertical-workspaces/screenshots/screenshot5.png)bin51071 -> 51071 bytes
-rw-r--r--extensions/47/vertical-workspaces/screenshots/vertical-workspaces.gif (renamed from extensions/46/vertical-workspaces/screenshots/vertical-workspaces.gif)bin1213475 -> 1213475 bytes
-rw-r--r--extensions/47/vertical-workspaces/stylesheet.css (renamed from extensions/46/vertical-workspaces/stylesheet.css)203
110 files changed, 3079 insertions, 5954 deletions
diff --git a/extensions/46/middleclickclose/README.md b/extensions/46/middleclickclose/README.md
deleted file mode 100644
index bfb193b..0000000
--- a/extensions/46/middleclickclose/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-Quick Close in Overview
-================
-
-Gnome shell extension for closing apps in overview with a middle (or other) click.
-
-All credit goes to Paolo Tranquilli (http://cs.unibo.it/~tranquil/en/hacking.html), I've merely
-copied its code here to provide Gnome Shell 3.10+ compatibility
-
-This extension is installable from
-https://extensions.gnome.org/extension/352/middle-click-to-close-in-overview/.
-
-Otherwise you may
-
-* download a [zip](https://github.com/p91paul/middleclickclose/archive/master.zip) of this extension
-* extract it
-* run the following command
- ```
- make install
-```
-* reload gnome-shell (Alt-F2, r, Enter) -> on Wayland you need to log out and log in again, there is no in-place reload
-* activate it through the Gnome Extensions application.
-
-## Translations
-
-If you're interested in contributing a translation, import the translation template file under
-`src/po/template.pot` to your favourite po-editing software and create a `*.po` file under `src/po`.
-
-To update all existing translations after changing the code, run `make po`. To regenerate only the
-`template.pot` file, run `make pot`
diff --git a/extensions/46/vertical-workspaces/README.md b/extensions/46/vertical-workspaces/README.md
deleted file mode 100644
index 8adfff2..0000000
--- a/extensions/46/vertical-workspaces/README.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# V-Shell (Vertical 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
-
-[<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/)
-
-![Custom Overview Layout](screenshots/screenshot.jpg)
-![Custom Overview Layout](screenshots/screenshot0.jpg)
-
-## Features
-- Vertically or horizontally stacked workspaces
-- Adjust position, orientation, scale and visibility of overview content
-- Customizable profiles offer predefined configurations for GNOME 3.xx, GNOME 40+ and another 2 custom layouts
-- 2 overview modes with static windows/workspace. The *Static Workspace* option allows you to use dash like a dock with auto-hide, but with all advantages of the activities overview
-- Support for secondary monitors, workspace thumbnails can be placed on the opposite side than on the primary monitor
-- Wallpaper background with adjustable blur effect and brightness in the overview
-- Custom Dash icon size and on-click/scroll behavior
-- Optional workspace isolated Dash
-- Dash background transparency and corner radius adjustments
-- Adjustable app grid icon size, number of columns and rows, content, optional active and draggable icons in folder preview in optional 3x3 grid
-- Custom search view width, app results icons size and number of result lists rows, improved app search
-- Workspace thumbnails can show background wallpaper and labels (always or on mouse hover) with combination of workspace index, workspace name, name of the current application and current window title
-- Title captions of window previews moved into the preview (originally beneath the preview) and can be set as always visible. Adjustable window preview icon
-- Static background in workspace switcher (outside overview). Keeps Conky below, DING desktop icons stay visible (if not covered by windows)
-- Control over transition animations, including speed
-- Recent files search provider with *Ctrl + Space* hotkey
-- Supports WSP (Window search provider) extension with *Space* hotkey that allows quick window navigation
-- Supports ESP (Extensions search provider) with *Ctrl + Shift + Space* hotkey that allows to search for installed extensions, open their settings and enable or disable them
-- Reorder workspaces in overview using *Shift + Scroll* or *Shift + Page Up/Down*
-- Adds *Force Quit*, *Close Windows on Current Workspace* and *Move Windows to Current Workspace* items to app icon menu. The latter action can be activated using *Shift + click* on app icon
-- Change notification banners and OSD popups position
-- Window attention handler options can activate the attention-demanding window immediately or silence its notification
-- Optional position of the hot corner that can follow the dash and expand to hot edge
-- Super key double-press options
-- Supports WTMB (Window Thumbnails) extension that allows you to create Picture-in-Picture thumbnail of the window by clicking on its preview in the overview (secondary mouse buttons or window preview icon)
-
-## Changelog
-[CHANGELOG.md](CHANGELOG.md)
-
-## Installation
-
-### Installation from extensions.gnome.org
-The easiest way to install the latest stable release of V-Shell: go to [extensions.gnome.org](https://extensions.gnome.org/extension/5177/vertical-workspaces/) and toggle the switch.
-
-### Installation from the latest Github release
-Download the latest release archive using following command:
-
- wget https://github.com/G-dH/vertical-workspaces/releases/latest/download/vertical-workspaces@G-dH.github.com.zip
-
-Install the extension (`--force` switch needs to be used only if some version of the extension is already installed):
-
- gnome-extensions install --force vertical-workspaces@G-dH.github.com.zip
-
-### Installation from GitHub repository
-The most recent version in the repository is the one I'm currently using and developing on my own systems, problems may occur, but usually nothing serious. The repository version may change often and doesn't updates automatically on your system. If you want to help me, use this latest version and report bugs.
-You may need to install `git`, `make`, `gettext` and `glib2.0` for successful installation.
-Navigate to the directory you want to download the source code and execute following commands in the terminal:
-
-GNOME 45:
-
- git clone https://github.com/G-dH/vertical-workspaces.git
- cd vertical-workspaces
- make install
-
-GNOME 42 - 44:
-
- git clone https://github.com/G-dH/vertical-workspaces.git
- cd vertical-workspaces
- git checkout gnome-42-44
- make install
-
-If you get `Can't recursively copy directory` error, take a look at issue #51.
-
-### Enabling the extension
-After installation you need to enable the extension and access its settings.
-
-- First restart GNOME Shell (`ALt` + `F2`, `r`, `Enter`, or Log Out/Log In if you use Wayland)
-- Now you should see *Vertical Workspaces* extension in *Extensions* application (re-open the app if needed to load new data), where you can enable it and access its Preferences window by pressing `Settings` button.
-
-## Credits
-This extension uses customized utils and dash modules of the [Vertical Overview extension](https://github.com/RensAlthuis/vertical-overview).
-
-## Buy me a coffee
-If you like my extensions and want to keep me motivated give me some useful feedback, but you can also help me with my coffee expenses:
-[buymeacoffee.com/georgdh](https://buymeacoffee.com/georgdh)
diff --git a/extensions/46/vertical-workspaces/lib/appDisplay.js b/extensions/46/vertical-workspaces/lib/appDisplay.js
deleted file mode 100644
index c33cf0d..0000000
--- a/extensions/46/vertical-workspaces/lib/appDisplay.js
+++ /dev/null
@@ -1,1694 +0,0 @@
-/**
- * V-Shell (Vertical Workspaces)
- * appDisplay.js
- *
- * @author GdH <G-dH@github.com>
- * @copyright 2022 - 2024
- * @license GPL-3.0
- *
- */
-
-'use strict';
-
-import Clutter from 'gi://Clutter';
-import Gio from 'gi://Gio';
-import GLib from 'gi://GLib';
-import GObject from 'gi://GObject';
-import Graphene from 'gi://Graphene';
-import Meta from 'gi://Meta';
-import Pango from 'gi://Pango';
-import Shell from 'gi://Shell';
-import St from 'gi://St';
-
-import * as Main from 'resource:///org/gnome/shell/ui/main.js';
-import * as AppDisplay from 'resource:///org/gnome/shell/ui/appDisplay.js';
-import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
-
-let Me;
-let opt;
-// gettext
-let _;
-
-let _timeouts;
-
-const APP_ICON_TITLE_EXPAND_TIME = 200;
-const APP_ICON_TITLE_COLLAPSE_TIME = 100;
-
-const shellVersion46 = !Clutter.Container; // Container has been removed in 46
-
-function _getCategories(info) {
- let categoriesStr = info.get_categories();
- if (!categoriesStr)
- return [];
- return categoriesStr.split(';');
-}
-
-function _listsIntersect(a, b) {
- for (let itemA of a) {
- if (b.includes(itemA))
- return true;
- }
- return false;
-}
-
-export const AppDisplayModule = class {
- constructor(me) {
- Me = me;
- opt = Me.opt;
- _ = Me.gettext;
-
- this._firstActivation = true;
- this.moduleEnabled = false;
- this._overrides = null;
-
- this._appGridLayoutSettings = null;
- this._appDisplayScrollConId = 0;
- this._appSystemStateConId = 0;
- this._appGridLayoutConId = 0;
- this._origAppViewItemAcceptDrop = null;
- this._updateFolderIcons = 0;
- }
-
- cleanGlobals() {
- Me = null;
- opt = null;
- _ = null;
- }
-
- update(reset) {
- this._removeTimeouts();
- this.moduleEnabled = opt.get('appDisplayModule');
- const conflict = false;
-
- reset = reset || !this.moduleEnabled || conflict;
-
- // don't touch the original code if module disabled
- if (reset && !this._firstActivation) {
- this._disableModule();
- this.moduleEnabled = false;
- } else if (!reset) {
- this._firstActivation = false;
- this._activateModule();
- }
- if (reset && this._firstActivation) {
- this.moduleEnabled = false;
- console.debug(' AppDisplayModule - Keeping untouched');
- }
- }
-
- _activateModule() {
- Me.Modules.iconGridModule.update();
-
- if (!this._overrides)
- this._overrides = new Me.Util.Overrides();
-
- _timeouts = {};
-
- // Common
- // this._overrides.addOverride('BaseAppViewCommon', AppDisplay.BaseAppView.prototype, BaseAppViewCommon);
- // instead of overriding inaccessible BaseAppView class, we override its children - AppDisplay and FolderView
- this._overrides.addOverride('BaseAppViewCommonApp', AppDisplay.AppDisplay.prototype, BaseAppViewCommon);
- this._overrides.addOverride('BaseAppViewCommonFolder', AppDisplay.FolderView.prototype, BaseAppViewCommon);
- this._overrides.addOverride('FolderView', AppDisplay.FolderView.prototype, FolderView);
- this._overrides.addOverride('AppDisplay', AppDisplay.AppDisplay.prototype, AppDisplayCommon);
- this._overrides.addOverride('AppViewItem', AppDisplay.AppViewItem.prototype, AppViewItemCommon);
- this._overrides.addOverride('FolderIcon', AppDisplay.FolderIcon.prototype, FolderIcon);
- if (opt.APP_GRID_ACTIVE_PREVIEW)
- this._overrides.addOverride('ActiveFolderIcon', AppDisplay.FolderIcon, ActiveFolderIcon);
- this._overrides.addOverride('AppIcon', AppDisplay.AppIcon.prototype, AppIcon);
-
- if (opt.ORIENTATION === Clutter.Orientation.VERTICAL) {
- // this._overrides.addOverride('BaseAppViewVertical', AppDisplay.BaseAppView.prototype, BaseAppViewVertical);
- this._overrides.addOverride('BaseAppViewVerticalApp', AppDisplay.AppDisplay.prototype, BaseAppViewVertical);
- this._overrides.addOverride('BaseAppViewVerticalFolder', AppDisplay.FolderView.prototype, BaseAppViewVertical);
- this._overrides.addOverride('AppDisplayVertical', AppDisplay.AppDisplay.prototype, AppDisplayVertical);
- }
-
- // Custom App Grid
- this._overrides.addOverride('AppFolderDialog', AppDisplay.AppFolderDialog.prototype, AppFolderDialog);
-
- // BaseAppViewGridLayout is not exported, we can only access current instance
- this._overrides.addOverride('BaseAppViewGridLayout', Main.overview._overview.controls._appDisplay._appGridLayout, BaseAppViewGridLayout);
- // this._overrides.addOverride('FolderGrid', AppDisplay.FolderGrid.prototype, FolderGrid);
-
- this._setAppDisplayOrientation(opt.ORIENTATION === Clutter.Orientation.VERTICAL);
- this._updateDND();
-
- const appDisplay = Main.overview._overview.controls._appDisplay;
-
- if (!this._originalWorkId)
- this._originalWorkId = appDisplay._redisplayWorkId;
- if (!this._newWorkId) {
- appDisplay._redisplayWorkId = Main.initializeDeferredWork(appDisplay, () => {
- appDisplay._redisplay();
- if (appDisplay._overviewHiddenId === 0)
- appDisplay._overviewHiddenId = Main.overview.connect('hidden', () => appDisplay.goToPage(0));
- });
- this._newWorkId = appDisplay._redisplayWorkId;
- } else {
- appDisplay._redisplayWorkId = this._newWorkId;
- }
-
-
- if (!Main.sessionMode.isGreeter)
- this._updateAppDisplayProperties();
-
- console.debug(' AppDisplayModule - Activated');
- }
-
- _disableModule() {
- Me.Modules.iconGridModule.update(true);
-
- if (this._overrides)
- this._overrides.removeAll();
- this._overrides = null;
-
- const reset = true;
- this._setAppDisplayOrientation(false);
- this._updateAppDisplayProperties(reset);
- this._updateDND(reset);
- this._restoreOverviewGroup();
- this._removeStatusMessage();
-
- // register a new appDisplay workId so the original code will be called from the callback
- const appDisplay = Main.overview._overview.controls._appDisplay;
- appDisplay._redisplayWorkId = this._originalWorkId;
-
- console.debug(' AppDisplayModule - Disabled');
- }
-
- _removeTimeouts() {
- if (_timeouts) {
- Object.values(_timeouts).forEach(t => {
- if (t)
- GLib.source_remove(t);
- });
- _timeouts = null;
- }
- }
-
- _setAppDisplayOrientation(vertical = false) {
- const CLUTTER_ORIENTATION = vertical ? Clutter.Orientation.VERTICAL : Clutter.Orientation.HORIZONTAL;
- // app display to vertical has issues - page indicator not working
- // global appDisplay orientation switch is not built-in
- let appDisplay = Main.overview._overview._controls._appDisplay;
- // following line itself only changes in which axis will operate overshoot detection which switches appDisplay pages while dragging app icon to vertical
- appDisplay._orientation = CLUTTER_ORIENTATION;
- appDisplay._grid.layoutManager._orientation = CLUTTER_ORIENTATION;
- appDisplay._swipeTracker.orientation = CLUTTER_ORIENTATION;
- appDisplay._swipeTracker._reset();
- if (vertical) {
- appDisplay._scrollView.set_policy(St.PolicyType.NEVER, St.PolicyType.EXTERNAL);
-
- // move and change orientation of page indicators
- const pageIndicators = appDisplay._pageIndicators;
- pageIndicators.vertical = true;
- appDisplay._box.vertical = false;
- pageIndicators.x_expand = false;
- pageIndicators.y_align = Clutter.ActorAlign.CENTER;
- pageIndicators.x_align = Clutter.ActorAlign.START;
-
- // moving these bars needs more patching of the appDisplay's code
- // for now we just change bars style to be more like vertically oriented arrows indicating direction to prev/next page
- appDisplay._nextPageIndicator.add_style_class_name('nextPageIndicator');
- appDisplay._prevPageIndicator.add_style_class_name('prevPageIndicator');
-
- // setting their x_scale to 0 removes the arrows and avoid allocation issues compared to .hide() them
- appDisplay._nextPageArrow.scale_x = 0;
- appDisplay._prevPageArrow.scale_x = 0;
- } else {
- appDisplay._scrollView.set_policy(St.PolicyType.EXTERNAL, St.PolicyType.NEVER);
- if (this._appDisplayScrollConId) {
- appDisplay._adjustment.disconnect(this._appDisplayScrollConId);
- this._appDisplayScrollConId = 0;
- }
-
- // restore original page indicators
- const pageIndicators = appDisplay._pageIndicators;
- pageIndicators.vertical = false;
- appDisplay._box.vertical = true;
- pageIndicators.x_expand = true;
- pageIndicators.y_align = Clutter.ActorAlign.END;
- pageIndicators.x_align = Clutter.ActorAlign.CENTER;
-
- // put back touch friendly navigation buttons
- const scrollContainer = appDisplay._scrollView.get_parent();
- if (appDisplay._hintContainer && !appDisplay._hintContainer.get_parent()) {
- scrollContainer.add_child(appDisplay._hintContainer);
- // the hit container covers the entire app grid and added at the top of the stack blocks DND drops
- // so it needs to be pushed below
- scrollContainer.set_child_below_sibling(appDisplay._hintContainer, null);
- }
-
- appDisplay._nextPageArrow.scale_x = 1;
- appDisplay._prevPageArrow.scale_x = 1;
-
- appDisplay._nextPageIndicator.remove_style_class_name('nextPageIndicator');
- appDisplay._prevPageIndicator.remove_style_class_name('prevPageIndicator');
- }
-
- // value for page indicator is calculated from scroll adjustment, horizontal needs to be replaced by vertical
- appDisplay._adjustment = vertical
- ? appDisplay._scrollView.get_vscroll_bar().adjustment
- : appDisplay._scrollView.get_hscroll_bar().adjustment;
-
- // no need to connect already connected signal (wasn't removed the original one before)
- if (!vertical) {
- // reset used appDisplay properties
- Main.overview._overview._controls._appDisplay.scale_y = 1;
- Main.overview._overview._controls._appDisplay.scale_x = 1;
- Main.overview._overview._controls._appDisplay.opacity = 255;
- return;
- }
-
- // update appGrid dot pages indicators
- this._appDisplayScrollConId = appDisplay._adjustment.connect('notify::value', adj => {
- const value = adj.value / adj.page_size;
- appDisplay._pageIndicators.setCurrentPosition(value);
- });
- }
-
- // Set App Grid columns, rows, icon size, incomplete pages
- _updateAppDisplayProperties(reset = false) {
- opt._appGridNeedsRedisplay = false;
- // columns, rows, icon size
- const appDisplay = Main.overview._overview._controls._appDisplay;
- appDisplay.visible = true;
- if (reset) {
- appDisplay._grid.layoutManager.fixedIconSize = -1;
- appDisplay._grid.layoutManager.allow_incomplete_pages = true;
- appDisplay._grid._currentMode = -1;
- appDisplay._grid.setGridModes();
- if (this._appGridLayoutSettings) {
- this._appGridLayoutSettings.disconnect(this._appGridLayoutConId);
- this._appGridLayoutConId = 0;
- this._appGridLayoutSettings = null;
- }
- appDisplay._redisplay();
-
- appDisplay._grid.set_style('');
- this._updateAppGrid(reset);
- } else {
- // update grid on layout reset
- if (!this._appGridLayoutSettings) {
- this._appGridLayoutSettings = Me.getSettings('org.gnome.shell');
- this._appGridLayoutConId = this._appGridLayoutSettings.connect('changed::app-picker-layout', this._updateLayout);
- }
-
- appDisplay._grid.layoutManager.allow_incomplete_pages = opt.APP_GRID_ALLOW_INCOMPLETE_PAGES;
- // appDisplay._grid.set_style(`column-spacing: ${opt.APP_GRID_SPACING}px; row-spacing: ${opt.APP_GRID_SPACING}px;`);
- // APP_GRID_SPACING constant is used for grid dimensions calculation
- // but sometimes the actual grid spacing properties affect/change the calculated size, therefore we set it lower to avoid this problem
- // main app grid always use available space and the spacing is optimized for the grid dimensions
- appDisplay._grid.set_style('column-spacing: 5px; row-spacing: 5px;');
-
- // force redisplay
- appDisplay._grid._currentMode = -1;
- appDisplay._grid.setGridModes();
- appDisplay._grid.layoutManager.fixedIconSize = opt.APP_GRID_ICON_SIZE;
- // avoid resetting appDisplay before startup animation
- // x11 shell restart skips startup animation
- if (!Main.layoutManager._startingUp) {
- this._updateAppGrid();
- } else if (Main.layoutManager._startingUp && (Meta.is_restart() || Me.Util.dashIsDashToDock())) {
- _timeouts.three = GLib.idle_add(GLib.PRIORITY_LOW, () => {
- this._updateAppGrid();
- _timeouts.three = 0;
- return GLib.SOURCE_REMOVE;
- });
- }
- }
- }
-
- _updateDND(reset) {
- if (!reset) {
- if (!this._appSystemStateConId && opt.APP_GRID_INCLUDE_DASH >= 3) {
- this._appSystemStateConId = Shell.AppSystem.get_default().connect(
- 'app-state-changed',
- () => {
- this._updateFolderIcons = true;
- Main.overview._overview.controls._appDisplay._redisplay();
- }
- );
- }
- } else if (this._appSystemStateConId) {
- Shell.AppSystem.get_default().disconnect(this._appSystemStateConId);
- this._appSystemStateConId = 0;
- }
- }
-
- _restoreOverviewGroup() {
- Main.overview.dash.showAppsButton.checked = false;
- Main.layoutManager.overviewGroup.opacity = 255;
- Main.layoutManager.overviewGroup.scale_x = 1;
- Main.layoutManager.overviewGroup.scale_y = 1;
- Main.layoutManager.overviewGroup.hide();
- Main.overview._overview._controls._appDisplay.translation_x = 0;
- Main.overview._overview._controls._appDisplay.translation_y = 0;
- Main.overview._overview._controls._appDisplay.visible = true;
- Main.overview._overview._controls._appDisplay.opacity = 255;
- }
-
- // update all invalid positions that may be result of grid/icon size change
- _updateIconPositions() {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- const layout = JSON.stringify(global.settings.get_value('app-picker-layout').recursiveUnpack());
- // if app grid layout is empty, sort source alphabetically to avoid misplacing
- if (layout === JSON.stringify([]) && appDisplay._sortOrderedItemsAlphabetically)
- appDisplay._sortOrderedItemsAlphabetically();
- const icons = [...appDisplay._orderedItems];
- for (let i = 0; i < icons.length; i++)
- appDisplay._moveItem(icons[i], -1, -1);
- }
-
- _removeIcons() {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- const icons = [...appDisplay._orderedItems];
- for (let i = 0; i < icons.length; i++) {
- const icon = icons[i];
- if (icon._dialog)
- Main.layoutManager.overviewGroup.remove_child(icon._dialog);
- appDisplay._removeItem(icon);
- icon.destroy();
- }
- appDisplay._folderIcons = [];
- }
-
- _removeStatusMessage() {
- if (Me._vShellStatusMessage) {
- if (Me._vShellMessageTimeoutId) {
- GLib.source_remove(Me._vShellMessageTimeoutId);
- Me._vShellMessageTimeoutId = 0;
- }
- Me._vShellStatusMessage.destroy();
- Me._vShellStatusMessage = null;
- }
- }
-
- _updateLayout(settings, key) {
- const currentValue = JSON.stringify(settings.get_value(key).deep_unpack());
- const emptyValue = JSON.stringify([]);
- const customLayout = currentValue !== emptyValue;
- if (!customLayout) {
- this._updateAppGrid();
- }
- }
-
- _updateAppGrid(reset = false, callback) {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- // reset the grid only if called directly without args or if all folders where removed by using reset button in Settings window
- // otherwise this function is called every time a user moves icon to another position as a settings callback
-
- // force update icon size using adaptToSize(), the page size cannot be the same as the current one
- appDisplay._grid.layoutManager._pageWidth += 1;
- appDisplay._grid.layoutManager.adaptToSize(appDisplay._grid.layoutManager._pageWidth - 1, appDisplay._grid.layoutManager._pageHeight);
-
- // don't delay the first screen lock whe extensions are rebased
- // removing icons takes time and with other
- if (!Main.sessionMode.isLocked)
- this._removeIcons();
-
- appDisplay._redisplay();
-
- // don't realize appDisplay on disable, or at startup if disabled
- // always realize appDisplay otherwise to avoid errors while opening folders (that I was unable to trace)
- if (reset || (!opt.APP_GRID_PERFORMANCE && callback)) {
- this._removeStatusMessage();
- if (callback)
- callback();
- return;
- }
-
- // workaround - silently realize appDisplay
- // appDisplay and its content must be "visible" (opacity > 0) on the screen (within monitor geometry)
- // to realize its objects
- // this action takes some time and affects animations during the first use
- // if we do it invisibly before user needs it, it can improve the user's experience
-
- this._exposeAppGrid();
-
- // let the main loop process our changes before continuing
- _timeouts.one = GLib.idle_add(GLib.PRIORITY_LOW, () => {
- this._updateIconPositions();
- if (appDisplay._sortOrderedItemsAlphabetically) {
- appDisplay._sortOrderedItemsAlphabetically();
- appDisplay._grid.layoutManager._pageWidth += 1;
- appDisplay._grid.layoutManager.adaptToSize(appDisplay._grid.layoutManager._pageWidth - 1, appDisplay._grid.layoutManager._pageHeight);
- appDisplay._setLinearPositions(appDisplay._orderedItems);
- }
-
- appDisplay._redisplay();
- // realize also all app folders (by opening them) so the first popup is as smooth as the second one
- // let the main loop process our changes before continuing
- _timeouts.two = GLib.idle_add(GLib.PRIORITY_LOW, () => {
- this._restoreAppGrid();
- Me._resetInProgress = false;
- this._removeStatusMessage();
-
- if (callback)
- callback();
-
- _timeouts.two = 0;
- return GLib.SOURCE_REMOVE;
- });
- _timeouts.one = 0;
- return GLib.SOURCE_REMOVE;
- });
- }
-
- _exposeAppGrid() {
- const overviewGroup = Main.layoutManager.overviewGroup;
- if (!overviewGroup.visible) {
- // scale down the overviewGroup so it don't cover uiGroup
- overviewGroup.scale_y = 0.001;
- // make it invisible to the eye, but visible for the renderer
- overviewGroup.opacity = 1;
- // if overview is hidden, show it
- overviewGroup.visible = true;
- }
-
- const appDisplay = Main.overview._overview._controls._appDisplay;
- appDisplay.opacity = 1;
-
- // find usable value, sometimes it's one, sometime the other...
- let [x, y] = appDisplay.get_position();
- let { x1, y1 } = appDisplay.allocation;
- x = x === Infinity ? 0 : x;
- y = y === Infinity ? 0 : y;
- x1 = x1 === Infinity ? 0 : x1;
- y1 = y1 === Infinity ? 0 : y1;
- appDisplay.translation_x = -(x ? x : x1);
- appDisplay.translation_y = -(y ? y : y1);
- this._exposeAppFolders();
- }
-
- _exposeAppFolders() {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- appDisplay._folderIcons.forEach(d => {
- d._ensureFolderDialog();
- d._dialog._updateFolderSize();
- d._dialog.scale_y = 0.0001;
- d._dialog.show();
- });
- }
-
- _restoreAppGrid() {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- appDisplay.translation_x = 0;
- appDisplay.translation_y = 0;
- // appDisplay.opacity = 0;
- this._hideAppFolders();
-
- const overviewGroup = Main.layoutManager.overviewGroup;
- if (!Main.overview._shown)
- overviewGroup.hide();
- overviewGroup.scale_y = 1;
- overviewGroup.opacity = 255;
-
- this._removeStatusMessage();
- }
-
- _hideAppFolders() {
- const appDisplay = Main.overview._overview._controls._appDisplay;
- appDisplay._folderIcons.forEach(d => {
- if (d._dialog) {
- d._dialog._updateFolderSize();
- d._dialog.hide();
- d._dialog.scale_y = 1;
- }
- });
- }
-
- _getWindowApp(metaWin) {
- const tracker = Shell.WindowTracker.get_default();
- return tracker.get_window_app(metaWin);
- }
-
- _getAppLastUsedWindow(app) {
- let recentWin;
- global.display.get_tab_list(Meta.TabList.NORMAL_ALL, null).forEach(metaWin => {
- const winApp = this._getWindowApp(metaWin);
- if (!recentWin && winApp === app)
- recentWin = metaWin;
- });
- return recentWin;
- }
-
- _getAppRecentWorkspace(app) {
- const recentWin = this._getAppLastUsedWindow(app);
- if (recentWin)
- return recentWin.get_workspace();
-
- return null;
- }
-};
-
-const AppDisplayVertical = {
- // correction of the appGrid size when page indicators were moved from the bottom to the right
- adaptToSize(width, height) {
- const [, indicatorWidth] = this._pageIndicators.get_preferred_width(-1);
- width -= indicatorWidth;
-
- this._grid.findBestModeForSize(width, height);
-
- const adaptToSize = AppDisplay.BaseAppView.prototype.adaptToSize.bind(this);
- adaptToSize(width, height);
- },
-};
-
-function _getViewFromIcon(icon) {
- for (let parent = icon.get_parent(); parent; parent = parent.get_parent()) {
- if (parent instanceof AppDisplay.AppDisplay || parent instanceof AppDisplay.FolderView) {
- return parent;
- }
- }
- return null;
-}
-
-const AppDisplayCommon = {
- _ensureDefaultFolders() {
- // disable creation of default folders if user deleted them
- },
-
- // apps load adapted for custom sorting and including dash items
- _loadApps() {
- let appIcons = [];
- const runningApps = Shell.AppSystem.get_default().get_running().map(a => a.id);
-
- this._appInfoList = Shell.AppSystem.get_default().get_installed().filter(appInfo => {
- try {
- appInfo.get_id(); // catch invalid file encodings
- } catch (e) {
- return false;
- }
-
- const appIsRunning = runningApps.includes(appInfo.get_id());
- const appIsFavorite = this._appFavorites.isFavorite(appInfo.get_id());
- const excludeApp = (opt.APP_GRID_EXCLUDE_RUNNING && appIsRunning) || (opt.APP_GRID_EXCLUDE_FAVORITES && appIsFavorite);
-
- return this._parentalControlsManager.shouldShowApp(appInfo) && !excludeApp;
- });
-
- let apps = this._appInfoList.map(app => app.get_id());
-
- let appSys = Shell.AppSystem.get_default();
-
- const appsInsideFolders = new Set();
- this._folderIcons = [];
- if (!opt.APP_GRID_USAGE) {
- let folders = this._folderSettings.get_strv('folder-children');
- folders.forEach(id => {
- let path = `${this._folderSettings.path}folders/${id}/`;
- let icon = this._items.get(id);
- if (!icon) {
- icon = new AppDisplay.FolderIcon(id, path, this);
- icon.connect('apps-changed', () => {
- this._redisplay();
- this._savePages();
- });
- icon.connect('notify::pressed', () => {
- if (icon.pressed)
- this.updateDragFocus(icon);
- });
- } else if (this._updateFolderIcons && opt.APP_GRID_EXCLUDE_RUNNING) {
- // if any app changed its running state, update folder icon
- icon.icon.update();
- }
-
- // remove empty folder icons
- if (!icon.visible) {
- icon.destroy();
- return;
- }
-
- appIcons.push(icon);
- this._folderIcons.push(icon);
-
- icon.getAppIds().forEach(appId => appsInsideFolders.add(appId));
- });
- }
-
- // reset request to update active icon
- this._updateFolderIcons = false;
-
- // Allow dragging of the icon only if the Dash would accept a drop to
- // change favorite-apps. There are no other possible drop targets from
- // the app picker, so there's no other need for a drag to start,
- // at least on single-monitor setups.
- // This also disables drag-to-launch on multi-monitor setups,
- // but we hope that is not used much.
- const isDraggable =
- global.settings.is_writable('favorite-apps') ||
- global.settings.is_writable('app-picker-layout');
-
- apps.forEach(appId => {
- if (!opt.APP_GRID_USAGE && appsInsideFolders.has(appId))
- return;
-
- let icon = this._items.get(appId);
- if (!icon) {
- let app = appSys.lookup_app(appId);
- icon = new AppDisplay.AppIcon(app, { isDraggable });
- icon.connect('notify::pressed', () => {
- if (icon.pressed)
- this.updateDragFocus(icon);
- });
- }
-
- appIcons.push(icon);
- });
-
- // At last, if there's a placeholder available, add it
- if (this._placeholder)
- appIcons.push(this._placeholder);
-
- return appIcons;
- },
-
- // support active preview icons
- _onDragBegin(overview, source) {
- if (source._sourceItem)
- source = source._sourceItem;
-
- this._dragMonitor = {
- dragMotion: this._onDragMotion.bind(this),
- };
- DND.addDragMonitor(this._dragMonitor);
-
- this._appGridLayout.showPageIndicators();
- this._dragFocus = null;
- this._swipeTracker.enabled = false;
-
- // When dragging from a folder dialog, the dragged app icon doesn't
- // exist in AppDisplay. We work around that by adding a placeholder
- // icon that is either destroyed on cancel, or becomes the effective
- // new icon when dropped.
- if (/* AppDisplay.*/_getViewFromIcon(source) instanceof AppDisplay.FolderView ||
- (opt.APP_GRID_EXCLUDE_FAVORITES && this._appFavorites.isFavorite(source.id)))
- this._ensurePlaceholder(source);
- },
-
- _ensurePlaceholder(source) {
- if (this._placeholder)
- return;
-
- if (source._sourceItem)
- source = source._sourceItem;
-
- const appSys = Shell.AppSystem.get_default();
- const app = appSys.lookup_app(source.id);
-
- const isDraggable =
- global.settings.is_writable('favorite-apps') ||
- global.settings.is_writable('app-picker-layout');
-
- this._placeholder = new AppDisplay.AppIcon(app, { isDraggable });
- this._placeholder.connect('notify::pressed', () => {
- if (this._placeholder?.pressed)
- this.updateDragFocus(this._placeholder);
- });
- this._placeholder.scaleAndFade();
- this._redisplay();
- },
-
- // accept source from active folder preview
- acceptDrop(source) {
- if (opt.APP_GRID_USAGE)
- return false;
- if (source._sourceItem)
- source = source._sourceItem;
-
- if (!this._acceptDropCommon(source))
- return false;
-
- let view = /* AppDisplay.*/_getViewFromIcon(source);
- if (view instanceof AppDisplay.FolderView)
- view.removeApp(source.app);
-
- if (this._currentDialog)
- this._currentDialog.popdown();
-
- if (opt.APP_GRID_EXCLUDE_FAVORITES && this._appFavorites.isFavorite(source.id))
- this._appFavorites.removeFavorite(source.id);
-
- return true;
- },
-};
-
-const BaseAppViewVertical = {
- after__init() {
- this._grid.layoutManager._orientation = Clutter.Orientation.VERTICAL;
- this._scrollView.set_policy(St.PolicyType.NEVER, St.PolicyType.EXTERNAL);
- this._orientation = Clutter.Orientation.VERTICAL;
- this._swipeTracker.orientation = Clutter.Orientation.VERTICAL;
- this._swipeTracker._reset();
- this._pageIndicators.vertical = true;
- this._box.vertical = false;
- this._pageIndicators.x_expand = false;
- this._pageIndicators.y_align = Clutter.ActorAlign.CENTER;
- this._pageIndicators.x_align = Clutter.ActorAlign.START;
- this._pageIndicators.set_style('margin-right: 10px;');
- // moving these bars needs more patching of the this's code
- // for now we just change bars style to be more like vertically oriented arrows indicating direction to prev/next page
- this._nextPageIndicator.add_style_class_name('nextPageIndicator');
- this._prevPageIndicator.add_style_class_name('prevPageIndicator');
-
- // setting their x_scale to 0 removes the arrows and avoid allocation issues compared to .hide() them
- this._nextPageArrow.scale_x = 0;
- this._prevPageArrow.scale_x = 0;
-
- this._adjustment = this._scrollView.get_vscroll_bar().adjustment;
-
- this._adjustment.connect('notify::value', adj => {
- const value = adj.value / adj.page_size;
- this._pageIndicators.setCurrentPosition(value);
- });
- },
-};
-
-const BaseAppViewCommon = {
- _sortOrderedItemsAlphabetically(icons = null) {
- if (!icons)
- icons = this._orderedItems;
- icons.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
- },
-
- _setLinearPositions(icons) {
- const { itemsPerPage } = this._grid;
- icons.forEach((icon, i) => {
- const page = Math.floor(i / itemsPerPage);
- const position = i % itemsPerPage;
- try {
- this._moveItem(icon, page, position);
- } catch (e) {
- console.warn(`Warning:${e}`);
- }
- });
- },
-
- // adds sorting options and option to add favorites and running apps
- _redisplay() {
- if (this._folderIcons) {
- this._folderIcons.forEach(icon => {
- icon.view._redisplay();
- });
- }
- let oldApps = this._orderedItems.slice();
- let oldAppIds = oldApps.map(icon => icon.id);
-
- let newApps = this._loadApps().sort(this._compareItems.bind(this));
- let newAppIds = newApps.map(icon => icon.id);
-
- let addedApps = newApps.filter(icon => !oldAppIds.includes(icon.id));
- let removedApps = oldApps.filter(icon => !newAppIds.includes(icon.id));
-
- // Remove old app icons
- removedApps.forEach(icon => {
- this._removeItem(icon);
- icon.destroy();
- });
-
- // Add new app icons, or move existing ones
- newApps.forEach(icon => {
- const [page, position] = this._getItemPosition(icon);
- if (addedApps.includes(icon)) {
- this._addItem(icon, page, position);
- } else if (page !== -1 && position !== -1) {
- this._moveItem(icon, page, position);
- } else {
- // App is part of a folder
- }
- });
-
- // different options for root app grid and app folders
- const thisIsFolder = this instanceof AppDisplay.FolderView;
- const thisIsAppDisplay = !thisIsFolder;
- if ((opt.APP_GRID_ORDER && thisIsAppDisplay) ||
- (opt.APP_FOLDER_ORDER && thisIsFolder)) {
- // const { itemsPerPage } = this._grid;
- let appIcons = this._orderedItems;
- // sort all alphabetically
- this._sortOrderedItemsAlphabetically(appIcons);
- // appIcons.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
- // then sort used apps by usage
- if ((opt.APP_GRID_USAGE && thisIsAppDisplay) ||
- (opt.APP_FOLDER_USAGE && thisIsFolder))
- appIcons.sort((a, b) => Shell.AppUsage.get_default().compare(a.app.id, b.app.id));
-
- // sort favorites first
- if (opt.APP_GRID_DASH_FIRST) {
- const fav = Object.keys(this._appFavorites._favorites);
- appIcons.sort((a, b) => {
- let aFav = fav.indexOf(a.id);
- if (aFav < 0)
- aFav = 999;
- let bFav = fav.indexOf(b.id);
- if (bFav < 0)
- bFav = 999;
- return bFav < aFav;
- });
- }
-
- // sort running first
- if (opt.APP_GRID_DASH_FIRST && thisIsAppDisplay)
- appIcons.sort((a, b) => a.app.get_state() !== Shell.AppState.RUNNING && b.app.get_state() === Shell.AppState.RUNNING);
-
- if (opt.APP_GRID_FOLDERS_FIRST)
- appIcons.sort((a, b) => b._folder && !a._folder);
- else if (opt.APP_GRID_FOLDERS_LAST)
- appIcons.sort((a, b) => a._folder && !b._folder);
-
- this._setLinearPositions(appIcons);
-
- this._orderedItems = appIcons;
- }
-
- this.emit('view-loaded');
- if (!opt.APP_GRID_ALLOW_INCOMPLETE_PAGES) {
- for (let i = 0; i < this._grid.nPages; i++)
- this._grid.layoutManager._fillItemVacancies(i);
- }
- },
-
- _canAccept(source) {
- return source instanceof AppDisplay.AppViewItem;
- },
-
- // this method is replacing BaseAppVew.acceptDrop which can't be overridden directly
- _acceptDropCommon(source) {
- const dropTarget = this._dropTarget;
- delete this._dropTarget;
-
- if (!this._canAccept(source))
- return false;
-
- if (dropTarget === this._prevPageIndicator ||
- dropTarget === this._nextPageIndicator) {
- let increment;
-
- increment = dropTarget === this._prevPageIndicator ? -1 : 1;
-
- const { currentPage, nPages } = this._grid;
- const page = Math.min(currentPage + increment, nPages);
- const position = page < nPages ? -1 : 0;
-
- this._moveItem(source, page, position);
- this.goToPage(page);
- } else if (this._delayedMoveData) {
- // Dropped before the icon was moved
- const { page, position } = this._delayedMoveData;
-
- try {
- this._moveItem(source, page, position);
- } catch (e) {
- console.warn(`Warning:${e}`);
- }
- this._removeDelayedMove();
- }
-
- return true;
- },
-
- // support active preview icons
- _onDragMotion(dragEvent) {
- if (!(dragEvent.source instanceof AppDisplay.AppViewItem))
- return DND.DragMotionResult.CONTINUE;
-
- if (dragEvent.source._sourceItem)
- dragEvent.source = dragEvent.source._sourceItem;
-
- const appIcon = dragEvent.source;
-
- if (appIcon instanceof AppDisplay.AppViewItem) {
- if (!this._dragMaybeSwitchPageImmediately(dragEvent)) {
- // Two ways of switching pages during DND:
- // 1) When "bumping" the cursor against the monitor edge, we switch
- // page immediately.
- // 2) When hovering over the next-page indicator for a certain time,
- // we also switch page.
-
- const { targetActor } = dragEvent;
-
- if (targetActor === this._prevPageIndicator ||
- targetActor === this._nextPageIndicator)
- this._maybeSetupDragPageSwitchInitialTimeout(dragEvent);
- else
- this._resetDragPageSwitch();
- }
- }
-
- const thisIsFolder = this instanceof AppDisplay.FolderView;
- const thisIsAppDisplay = !thisIsFolder;
- if ((!opt.APP_GRID_ORDER && thisIsAppDisplay) || (!opt.APP_FOLDER_ORDER && thisIsFolder))
- this._maybeMoveItem(dragEvent);
-
- return DND.DragMotionResult.CONTINUE;
- },
-};
-
-const BaseAppViewGridLayout = {
- _getIndicatorsWidth(box) {
- const [width, height] = box.get_size();
- const arrows = [
- this._nextPageArrow,
- this._previousPageArrow,
- ];
-
- const minArrowsWidth = arrows.reduce(
- (previousWidth, accessory) => {
- const [min] = accessory.get_preferred_width(height);
- return Math.max(previousWidth, min);
- }, 0);
-
- const idealIndicatorWidth = (width * 0.1/* PAGE_PREVIEW_RATIO*/) / 2;
-
- return Math.max(idealIndicatorWidth, minArrowsWidth);
- },
-};
-
-const FolderIcon = {
- after__init() {
- /* // If folder preview icons are clickable,
- // disable opening the folder with primary mouse button and enable the secondary one
- const buttonMask = opt.APP_GRID_ACTIVE_PREVIEW
- ? St.ButtonMask.TWO | St.ButtonMask.THREE
- : St.ButtonMask.ONE | St.ButtonMask.TWO;
- this.button_mask = buttonMask;*/
- this.button_mask = St.ButtonMask.ONE | St.ButtonMask.TWO;
- if (shellVersion46)
- this.add_style_class_name('app-folder-46');
- else
- this.add_style_class_name('app-folder-45');
- },
-
- open() {
- this._ensureFolderDialog();
- this._dialog._updateFolderSize();
- // always open folder with the first page
- this.view._scrollView.get_vscroll_bar().adjustment.value = 0;
- this._dialog.popup();
- },
-};
-
-const ActiveFolderIcon = {
- handleDragOver() {
- return DND.DragMotionResult.CONTINUE;
- },
-
- acceptDrop() {
- return false;
- },
-
- _onDragEnd() {
- this._dragging = false;
- this.undoScaleAndFade();
- Main.overview.endItemDrag(this._sourceItem.icon);
- },
-};
-
-const FolderView = {
- _createGrid() {
- let grid = new FolderGrid();
- return grid;
- },
-
- createFolderIcon(size) {
- const layout = new Clutter.GridLayout({
- row_homogeneous: true,
- column_homogeneous: true,
- });
-
- let icon = new St.Widget({
- layout_manager: layout,
- x_align: Clutter.ActorAlign.CENTER,
- style: `width: ${size}px; height: ${size}px;`,
- });
-
- const numItems = this._orderedItems.length;
- // decide what number of icons switch to 3x3 grid
- // APP_GRID_FOLDER_ICON_GRID: 3 -> more than 4
- // : 4 -> more than 8
- const threshold = opt.APP_GRID_FOLDER_ICON_GRID % 3 ? 8 : 4;
- const gridSize = opt.APP_GRID_FOLDER_ICON_GRID > 2 && numItems > threshold ? 3 : 2;
- const FOLDER_SUBICON_FRACTION = gridSize === 2 ? 0.4 : 0.27;
-
- let subSize = Math.floor(FOLDER_SUBICON_FRACTION * size);
- let rtl = icon.get_text_direction() === Clutter.TextDirection.RTL;
- for (let i = 0; i < gridSize * gridSize; i++) {
- const style = `width: ${subSize}px; height: ${subSize}px;`;
- let bin = new St.Bin({ style, reactive: true });
- bin.pivot_point = new Graphene.Point({ x: 0.5, y: 0.5 });
- if (i < numItems) {
- if (!opt.APP_GRID_ACTIVE_PREVIEW) {
- bin.child = this._orderedItems[i].app.create_icon_texture(subSize);
- } else {
- const app = this._orderedItems[i].app;
- const child = new AppDisplay.AppIcon(app, {
- setSizeManually: true,
- showLabel: false,
- });
-
- child._sourceItem = this._orderedItems[i];
- child._sourceFolder = this;
- child.icon.style_class = '';
- child.set_style_class_name('');
- child.icon.set_style('margin: 0; padding: 0;');
- child._dot.set_style('margin-bottom: 1px;');
- child.icon.setIconSize(subSize);
-
- bin.child = child;
-
- bin.connect('enter-event', () => {
- bin.ease({
- duration: 100,
- translation_y: -3,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
- });
- bin.connect('leave-event', () => {
- bin.ease({
- duration: 100,
- translation_y: 0,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
- });
- }
- }
-
- layout.attach(bin, rtl ? (i + 1) % gridSize : i % gridSize, Math.floor(i / gridSize), 1, 1);
- }
-
- // if folder content changed, update folder size, but not if it's empty
- /* if (this._dialog && this._dialog._designCapacity !== this._orderedItems.length && this._orderedItems.length)
- this._dialog._updateFolderSize();*/
-
- return icon;
- },
-
- _loadApps() {
- this._apps = [];
- const excludedApps = this._folder.get_strv('excluded-apps');
- const appSys = Shell.AppSystem.get_default();
- const addAppId = appId => {
- if (excludedApps.includes(appId))
- return;
-
- if (opt.APP_GRID_EXCLUDE_FAVORITES && this._appFavorites.isFavorite(appId))
- return;
-
- const app = appSys.lookup_app(appId);
- if (!app)
- return;
-
- if (opt.APP_GRID_EXCLUDE_RUNNING) {
- const runningApps = Shell.AppSystem.get_default().get_running().map(a => a.id);
- if (runningApps.includes(appId))
- return;
- }
-
- if (!this._parentalControlsManager.shouldShowApp(app.get_app_info()))
- return;
-
- if (this._apps.indexOf(app) !== -1)
- return;
-
- this._apps.push(app);
- };
-
- const folderApps = this._folder.get_strv('apps');
- folderApps.forEach(addAppId);
-
- const folderCategories = this._folder.get_strv('categories');
- const appInfos = this._parentView.getAppInfos();
- appInfos.forEach(appInfo => {
- let appCategories = /* AppDisplay.*/_getCategories(appInfo);
- if (!_listsIntersect(folderCategories, appCategories))
- return;
-
- addAppId(appInfo.get_id());
- });
-
- let items = [];
- this._apps.forEach(app => {
- let icon = this._items.get(app.get_id());
- if (!icon)
- icon = new AppDisplay.AppIcon(app);
-
- items.push(icon);
- });
-
- if (opt.APP_FOLDER_ORDER)
- Main.overview._overview.controls._appDisplay._sortOrderedItemsAlphabetically(items);
-
- if (opt.APP_FOLDER_USAGE)
- items.sort((a, b) => Shell.AppUsage.get_default().compare(a.app.id, b.app.id));
-
- this._appIds = this._apps.map(app => app.get_id());
- return items;
- },
-
- // 42 only - don't apply appGrid scale on folders
- adaptToSize(width, height) {
- if (!opt.ORIENTATION) {
- const [, indicatorHeight] = this._pageIndicators.get_preferred_height(-1);
- height -= indicatorHeight;
- }
- BaseAppViewCommon.adaptToSize.bind(this)(width, height, true);
- },
-
- acceptDrop(source) {
- /* if (!BaseAppViewCommon.acceptDrop.bind(this)(source))
- return false;*/
- if (opt.APP_FOLDER_ORDER)
- return false;
- if (source._sourceItem)
- source = source._sourceItem;
-
- if (!this._acceptDropCommon(source))
- return false;
-
- const folderApps = this._orderedItems.map(item => item.id);
- this._folder.set_strv('apps', folderApps);
-
- return true;
- },
-};
-
-const FolderGrid = GObject.registerClass(
-class FolderGrid extends AppDisplay.AppGrid {
- _init() {
- super._init({
- allow_incomplete_pages: false,
- columns_per_page: opt.APP_GRID_FOLDER_COLUMNS ? opt.APP_GRID_FOLDER_COLUMNS : 20,
- rows_per_page: opt.APP_GRID_FOLDER_ROWS ? opt.APP_GRID_FOLDER_ROWS : 20,
- page_halign: Clutter.ActorAlign.CENTER,
- page_valign: Clutter.ActorAlign.CENTER,
- });
- this.layout_manager._isFolder = true;
- const spacing = opt.APP_GRID_SPACING;
- this.set_style(`column-spacing: ${spacing}px; row-spacing: ${spacing}px;`);
- this.layoutManager.fixedIconSize = opt.APP_GRID_FOLDER_ICON_SIZE;
-
- this.setGridModes([
- {
- columns: opt.APP_GRID_FOLDER_COLUMNS ? opt.APP_GRID_FOLDER_COLUMNS : 3,
- rows: opt.APP_GRID_FOLDER_ROWS ? opt.APP_GRID_FOLDER_ROWS : 3,
- },
- ]);
- }
-
- adaptToSize(width, height) {
- this.layout_manager.adaptToSize(width, height);
- }
-});
-
-
-const FOLDER_DIALOG_ANIMATION_TIME = 200; // AppDisplay.FOLDER_DIALOG_ANIMATION_TIME
-const AppFolderDialog = {
- // injection to _init()
- after__init() {
- this._viewBox.add_style_class_name('app-folder-dialog-vshell');
- // GS 46 changed the aligning to CENTER which restricts max folder dialog size
- this._viewBox.set({
- x_align: Clutter.ActorAlign.FILL,
- y_align: Clutter.ActorAlign.FILL,
- });
-
- // delegate this dialog to the FolderIcon._view
- // so its _createFolderIcon function can update the dialog if folder content changed
- this._view._dialog = this;
-
- // right click into the folder popup should close it
- this.child.reactive = true;
- const clickAction = new Clutter.ClickAction();
- clickAction.connect('clicked', act => {
- if (act.get_button() === Clutter.BUTTON_PRIMARY)
- return Clutter.EVENT_STOP;
- const [x, y] = clickAction.get_coords();
- const actor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
- // if it's not entry for editing folder title
- if (actor !== this._entry)
- this.popdown();
- return Clutter.EVENT_STOP;
- });
-
- this.child.add_action(clickAction);
- },
-
- after__addFolderNameEntry() {
- // edit-folder-button class has been replaced with icon-button class which is not transparent in 46
- this._editButton.add_style_class_name('edit-folder-button');
- if (shellVersion46)
- this._editButton.add_style_class_name('edit-folder-button-46');
-
- // Edit button
- this._removeButton = new St.Button({
- style_class: 'icon-button edit-folder-button',
- button_mask: St.ButtonMask.ONE,
- toggle_mode: false,
- reactive: true,
- can_focus: true,
- x_align: Clutter.ActorAlign.END,
- y_align: Clutter.ActorAlign.CENTER,
- child: new St.Icon({
- icon_name: 'user-trash-symbolic',
- icon_size: 16,
- }),
- });
-
- this._removeButton.connect('clicked', () => {
- if (Date.now() - this._removeButton._lastClick < Clutter.Settings.get_default().double_click_time) {
- this._grabHelper.ungrab({ actor: this });
- // without hiding the dialog, Shell crashes (at least on X11)
- this.hide();
- this._view._deletingFolder = true;
-
- // Resetting all keys deletes the relocatable schema
- let keys = this._folder.settings_schema.list_keys();
- for (const key of keys)
- this._folder.reset(key);
-
- let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
- let folders = settings.get_strv('folder-children');
- folders.splice(folders.indexOf(this._view._id), 1);
-
- // remove all abandoned folders (usually my own garbage and unwanted default folders...)
- /* const appFolders = this._appDisplay._folderIcons.map(icon => icon._id);
- folders.forEach(folder => {
- if (!appFolders.includes(folder)) {
- folders.splice(folders.indexOf(folder._id), 1);
- }
- });*/
- settings.set_strv('folder-children', folders);
-
- this._view._deletingFolder = false;
- return;
- }
- this._removeButton._lastClick = Date.now();
- });
-
- this._entryBox.add_child(this._removeButton);
-
- // Adjust empty actor to center the title
- this._entryBox.get_first_child().width = 82;
- },
-
- popup() {
- if (this._isOpen)
- return;
-
- this._isOpen = this._grabHelper.grab({
- actor: this,
- onUngrab: () => this.popdown(),
- });
-
- if (!this._isOpen)
- return;
-
- this.get_parent().set_child_above_sibling(this, null);
-
- this._needsZoomAndFade = true;
-
- // the first folder dialog realization needs size correction
- // so set the folder size, let it realize and then update the folder content
- if (!this.realized) {
- this._updateFolderSize();
- GLib.idle_add(
- GLib.PRIORITY_DEFAULT,
- () => {
- this._updateFolderSize();
- }
- );
- }
-
- this.show();
- this.emit('open-state-changed', true);
- },
-
- _updateFolderSize() {
- const view = this._view;
- const [firstItem] = view._grid.layoutManager._container;
- if (!firstItem)
- return;
- // adapt folder size according to the settings and number of icons
- const appDisplay = this._source._parentView;
- if (!appDisplay.width || appDisplay.allocation.x2 === Infinity || appDisplay.allocation.x2 === -Infinity) {
- return;
- }
-
- const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
- const itemPadding = 55; // default icon item padding on Fedora 44
- // const dialogMargin = 30;
- const nItems = view._orderedItems.length;
- let columns = opt.APP_GRID_FOLDER_COLUMNS;
- let rows = opt.APP_GRID_FOLDER_ROWS;
- const fullAdaptiveGrid = !columns && !rows;
- let spacing = opt.APP_GRID_SPACING;
- const minItemSize = 48 + itemPadding;
-
- if (fullAdaptiveGrid) {
- columns = Math.ceil(Math.sqrt(nItems));
- rows = columns;
- if (columns * (columns - 1) >= nItems) {
- rows = columns - 1;
- } else if ((columns + 1) * (columns - 1) >= nItems) {
- rows = columns - 1;
- columns += 1;
- }
- } else if (!columns && rows) {
- columns = Math.ceil(nItems / rows);
- } else if (columns && !rows) {
- rows = Math.ceil(nItems / columns);
- }
-
- const iconSize = opt.APP_GRID_FOLDER_ICON_SIZE < 0 ? opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT : opt.APP_GRID_FOLDER_ICON_SIZE;
- view._grid.layoutManager.fixedIconSize = iconSize;
- view._grid.set_style(`column-spacing: ${opt.APP_GRID_SPACING}px; row-spacing: ${opt.APP_GRID_SPACING}px;`);
- view._grid.layoutManager._pageWidth += 1;
- view._grid.layoutManager.adaptToSize(view._grid.layoutManager._pageWidth - 1, view._grid.layoutManager._pageHeight);
-
- let itemSize = iconSize + 55; // icon padding
- // first run sets the grid before we can read the real icon size
- // so we estimate the size from default properties
- // and correct it in the second run
- if (this.realized) {
- firstItem.icon.setIconSize(iconSize);
- const [firstItemWidth] = firstItem.get_preferred_size();
- const realSize = firstItemWidth / scaleFactor;
- // if the preferred item size is smaller than icon plus some padding, ignore it
- // (icons that are not yet realized are returning sizes like 45 or 53)
- if (realSize > (iconSize + 24))
- itemSize = realSize;
- }
-
- let width = columns * (itemSize + spacing) + /* padding for nav arrows*/64;
- width = Math.round(width + (opt.ORIENTATION ? 100 : 160/* space for navigation arrows*/));
- let height = rows * (itemSize + spacing) + /* header*/75 + /* padding*/ 2 * 30 + /* padding + ?page indicator*/(!opt.ORIENTATION || !opt.APP_GRID_FOLDER_COLUMNS ? 100 : 70);
-
- // allocation is more reliable than appDisplay width/height properties
- const appDisplayWidth = appDisplay.allocation.x2 - appDisplay.allocation.x1;
- const appDisplayHeight = appDisplay.allocation.y2 - appDisplay.allocation.y1 + (opt.SHOW_SEARCH_ENTRY ? Main.overview._overview.controls._searchEntryBin.height : 0);
-
- // folder must fit the appDisplay area
- // reduce columns/rows if needed and count with the scaled values
- if (!opt.APP_GRID_FOLDER_ROWS) {
- while ((height * scaleFactor) > appDisplayHeight) {
- height -= itemSize + spacing;
- rows -= 1;
- }
- }
-
- if (!opt.APP_GRID_FOLDER_COLUMNS) {
- while ((width * scaleFactor) > appDisplayWidth) {
- width -= itemSize + spacing;
- columns -= 1;
- }
- }
- // try to compensate for the previous reduction if there is a space
- if (!opt.APP_GRID_FOLDER_COLUMNS) {
- while ((nItems > columns * rows) && ((width * scaleFactor + itemSize + spacing) <= appDisplayWidth)) {
- width += itemSize + spacing;
- columns += 1;
- }
- // remove columns that cannot be displayed
- if ((columns * minItemSize + (columns - 1) * spacing) > appDisplayWidth)
- columns = Math.floor(appDisplayWidth / (minItemSize + spacing));
- }
- if (!opt.APP_GRID_FOLDER_ROWS) {
- while ((nItems > columns * rows) && ((height * scaleFactor + itemSize + spacing) <= appDisplayHeight)) {
- height += itemSize + spacing;
- rows += 1;
- }
- // remove rows that cannot be displayed
- if ((rows * minItemSize + (rows - 1) * spacing) > appDisplayHeight)
- rows = Math.floor(appDisplayWidth / (minItemSize + spacing));
- }
-
- width = Math.clamp(width, 640, appDisplayWidth);
- height = Math.min(height, appDisplayHeight);
-
- const layoutManager = view._grid.layoutManager;
- layoutManager.rows_per_page = rows;
- layoutManager.columns_per_page = columns;
-
- // this line is required by GS 43
- // view._grid.setGridModes([{ columns, rows }]);
-
- this.child.set_style(`
- width: ${width}px;
- height: ${height}px;
- padding: 30px;
- `);
-
- view._redisplay();
- // store original item count
- this._designCapacity = nItems;
- },
-
- _zoomAndFadeIn() {
- let [sourceX, sourceY] =
- this._source.get_transformed_position();
- let [dialogX, dialogY] =
- this.child.get_transformed_position();
-
- const sourceCenterX = sourceX + this._source.width / 2;
- const sourceCenterY = sourceY + this._source.height / 2;
-
- // this. covers the whole screen
- let dialogTargetX = dialogX;
- let dialogTargetY = dialogY;
-
- const appDisplay = this._source._parentView;
-
- const [appDisplayX, appDisplayY] = this._source._parentView.get_transformed_position();
- if (!opt.APP_GRID_FOLDER_CENTER) {
- dialogTargetX = sourceCenterX - this.child.width / 2;
- dialogTargetY = sourceCenterY - this.child.height / 2;
-
- // keep the dialog in appDisplay area if possible
- dialogTargetX = Math.clamp(
- dialogTargetX,
- appDisplayX,
- appDisplayX + appDisplay.width - this.child.width
- );
-
- dialogTargetY = Math.clamp(
- dialogTargetY,
- appDisplayY,
- appDisplayY + appDisplay.height - this.child.height
- );
- } else {
- const searchEntryHeight = opt.SHOW_SEARCH_ENTRY ? Main.overview._overview.controls._searchEntryBin.height : 0;
- dialogTargetX = appDisplayX + appDisplay.width / 2 - this.child.width / 2;
- dialogTargetY = appDisplayY - searchEntryHeight + ((appDisplay.height + searchEntryHeight) / 2 - this.child.height / 2) / 2;
- }
-
- const dialogOffsetX = Math.round(dialogTargetX - dialogX);
- const dialogOffsetY = Math.round(dialogTargetY - dialogY);
-
- this.child.set({
- translation_x: sourceX - dialogX,
- translation_y: sourceY - dialogY,
- scale_x: this._source.width / this.child.width,
- scale_y: this._source.height / this.child.height,
- opacity: 0,
- });
-
- this.child.ease({
- translation_x: dialogOffsetX,
- translation_y: dialogOffsetY,
- scale_x: 1,
- scale_y: 1,
- opacity: 255,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
-
- appDisplay.ease({
- opacity: 0,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
-
- if (opt.SHOW_SEARCH_ENTRY) {
- Main.overview.searchEntry.ease({
- opacity: 0,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
- }
-
- this._needsZoomAndFade = false;
-
- if (this._sourceMappedId === 0) {
- this._sourceMappedId = this._source.connect(
- 'notify::mapped', this._zoomAndFadeOut.bind(this));
- }
- },
-
- _zoomAndFadeOut() {
- if (!this._isOpen)
- return;
-
- if (!this._source.mapped) {
- this.hide();
- return;
- }
-
- // if the dialog was shown silently, skip animation
- if (this.scale_y < 1) {
- this._needsZoomAndFade = false;
- this.hide();
- this._popdownCallbacks.forEach(func => func());
- this._popdownCallbacks = [];
- return;
- }
-
- let [sourceX, sourceY] =
- this._source.get_transformed_position();
- let [dialogX, dialogY] =
- this.child.get_transformed_position();
-
- this.child.ease({
- translation_x: sourceX - dialogX + this.child.translation_x,
- translation_y: sourceY - dialogY + this.child.translation_y,
- scale_x: this._source.width / this.child.width,
- scale_y: this._source.height / this.child.height,
- opacity: 0,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- onComplete: () => {
- this.child.set({
- translation_x: 0,
- translation_y: 0,
- scale_x: 1,
- scale_y: 1,
- opacity: 255,
- });
- this.hide();
-
- this._popdownCallbacks.forEach(func => func());
- this._popdownCallbacks = [];
- },
- });
-
- const appDisplay = this._source._parentView;
- appDisplay.ease({
- opacity: 255,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
-
- if (opt.SHOW_SEARCH_ENTRY) {
- Main.overview.searchEntry.ease({
- opacity: 255,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- });
- }
-
- this._needsZoomAndFade = false;
- },
-
- _setLighterBackground(lighter) {
- if (this._isOpen)
- Main.overview._overview._controls._appDisplay.opacity = lighter ? 20 : 0;
- /* const backgroundColor = lighter
- ? this.DIALOG_SHADE_HIGHLIGHT
- : this.DIALOG_SHADE_NORMAL;
-
- this.ease({
- backgroundColor,
- duration: FOLDER_DIALOG_ANIMATION_TIME,
- mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- }); */
- },
-};
-
-const AppIcon = {
- after__init() {
- // update the app label behavior
- this._updateMultiline();
- },
-
- // avoid accepting by placeholder when dragging active preview
- // and also by icon if alphabet or usage sorting are used
- _canAccept(source) {
- if (source._sourceItem)
- source = source._sourceItem;
- let view = /* AppDisplay.*/_getViewFromIcon(source);
-
- return source !== this &&
- (source instanceof this.constructor) &&
- (view instanceof AppDisplay.AppDisplay &&
- !opt.APP_GRID_USAGE);
- },
-};
-
-const AppViewItemCommon = {
- _updateMultiline() {
- const { label } = this.icon;
- if (label)
- label.opacity = 255;
- if (!this._expandTitleOnHover || !this.icon.label)
- return;
-
- const { clutterText } = label;
-
- const isHighlighted = this.has_key_focus() || this.hover || this._forcedHighlight;
-
- if (opt.APP_GRID_NAMES_MODE === 2 && this._expandTitleOnHover) { // !_expandTitleOnHover indicates search result icon
- label.opacity = isHighlighted || !this.app ? 255 : 0;
- }
- if (isHighlighted)
- this.get_parent()?.set_child_above_sibling(this, null);
-
- if (!opt.APP_GRID_NAMES_MODE) {
- const layout = clutterText.get_layout();
- if (!layout.is_wrapped() && !layout.is_ellipsized())
- return;
- }
-
- label.remove_transition('allocation');
-
- const id = label.connect('notify::allocation', () => {
- label.restore_easing_state();
- label.disconnect(id);
- });
-
- const expand = opt.APP_GRID_NAMES_MODE === 1 || this._forcedHighlight || this.hover || this.has_key_focus();
-
- label.save_easing_state();
- label.set_easing_duration(expand
- ? APP_ICON_TITLE_EXPAND_TIME
- : APP_ICON_TITLE_COLLAPSE_TIME);
- clutterText.set({
- line_wrap: expand,
- line_wrap_mode: expand ? Pango.WrapMode.WORD_CHAR : Pango.WrapMode.NONE,
- ellipsize: expand ? Pango.EllipsizeMode.NONE : Pango.EllipsizeMode.END,
- });
- },
-
- // support active preview icons
- acceptDrop(source, _actor, x) {
- if (opt.APP_GRID_USAGE)
- return DND.DragMotionResult.NO_DROP;
-
- this._setHoveringByDnd(false);
-
- if (!this._canAccept(source))
- return false;
-
- if (this._withinLeeways(x))
- return false;
-
- // added - remove app from the source folder after dnd to other folder
- if (source._sourceItem) {
- const app = source._sourceItem.app;
- source._sourceFolder.removeApp(app);
- }
-
- return true;
- },
-
-};
diff --git a/extensions/46/vertical-workspaces/po/cs.po b/extensions/46/vertical-workspaces/po/cs.po
deleted file mode 100644
index e588c73..0000000
--- a/extensions/46/vertical-workspaces/po/cs.po
+++ /dev/null
@@ -1,1553 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR GdH
-# This file is distributed under the same license as the vertical-workspaces package.
-# FIRST AUTHOR Amerey.eu <info@amerey.eu>, 2023.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: vertical-workspaces\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-08 12:37+0100\n"
-"PO-Revision-Date: 2023-03-09 15:09+0100\n"
-"Last-Translator: Amerey.eu <info@amerey.eu>\n"
-"Language-Team: \n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n"
-"X-Generator: Poedit 3.1.1\n"
-
-#: dash.js:743
-msgid "Search Open Windows (Hotkey: Space)"
-msgstr "Hledat v otevřených oknech (klávesová zkratka: mezerník)"
-
-#: dash.js:816
-msgid "Search Recent Files (Hotkey: Ctrl + Space)"
-msgstr "Hledat v posledních souborech (klávesová zkratka: Ctrl + mezerník)"
-
-#: windowSearchProvider.js:117 windowSearchProvider.js:119
-msgid "Open Windows"
-msgstr "Otevřené okna"
-
-#: windowSearchProvider.js:118
-msgid "List of open windows"
-msgstr "Seznam otevřených oken"
-
-#: appDisplay.js:1317
-msgid "Force Quit"
-msgstr "Vynutit vypnutí"
-
-#: appDisplay.js:1335
-msgid "Move App to Current Workspace ( Shift + Click )"
-msgstr "Přesunout aplikaci do aktuální pracovní plochy (Shift + kliknutí)"
-
-#: prefs.js:47 prefs.js:1465
-msgid "Layout"
-msgstr "Rozložení"
-
-#: prefs.js:53
-msgid "Appearance"
-msgstr "Vzhled"
-
-#: prefs.js:59
-msgid "Behavior"
-msgstr "Vlastnosti"
-
-#: prefs.js:65
-msgid "Misc"
-msgstr "Různé"
-
-#: prefs.js:71
-msgid "About"
-msgstr "O aplikaci"
-
-#: prefs.js:119 prefs.js:517 prefs.js:1030 prefs.js:1456
-msgid "Dash"
-msgstr "Dash"
-
-#: prefs.js:125
-msgid "Dash Position"
-msgstr "Pozice Dash"
-
-#: prefs.js:131
-msgid "Top"
-msgstr "Nahoře"
-
-#: prefs.js:132
-msgid "Right"
-msgstr "Vpravo"
-
-#: prefs.js:133 prefs.js:355
-msgid "Bottom"
-msgstr "Dole"
-
-#: prefs.js:134
-msgid "Left"
-msgstr "Vlevo"
-
-#: prefs.js:135 prefs.js:393 prefs.js:557 prefs.js:572 prefs.js:587
-msgid "Hide"
-msgstr "Skrýt"
-
-#: prefs.js:142
-msgid "Center Horizontal Dash to Workspace"
-msgstr "Vycentrovat horizontální Dash"
-
-#: prefs.js:143
-msgid ""
-"If the Dash Position is set to Top or Bottom, the position will be "
-"recalculated relative to the workspace preview instead of the screen. Works "
-"only with the default Dash."
-msgstr ""
-"Pokud je pozice nastavena na Nahoře nebo Dole, pozice se přepočítá vzhledem "
-"k náhledu pracovního prostoru místo obrazovky. Funguje pouze se standardním "
-"Dash."
-
-#: prefs.js:160
-msgid "Fine Tune Dash Position"
-msgstr "Upravit pozici Dash"
-
-#: prefs.js:161
-msgid ""
-"Adjusts position of the dock on chosen axis. Works only with the default "
-"Dash."
-msgstr "Upraví polohu doku na zvolené ose. Funguje pouze se standardním Dash."
-
-#: prefs.js:170
-msgid "Workspace Thumbnails / Orientation"
-msgstr "Náhledy pracovního prostoru / Orientace"
-
-#: prefs.js:176
-msgid "Thumbnails Position / Workspaces Orientation"
-msgstr "Pozice náhledů / Orientace pracovních ploch"
-
-#: prefs.js:177
-msgid ""
-"Position of the workspace thumbnails on the screen also sets orientation of "
-"the workspaces to vertical or horizontal. You have two options to disable "
-"workspace thumbnails, one sets workspaces to the vertical orientation, the "
-"second one to horizontal."
-msgstr ""
-"Umístění miniatur pracovních ploch na obrazovce také nastavuje orientaci "
-"pracovních ploch na vertikální nebo horizontální. Máte dvě možnosti, jak "
-"zakázat miniatury pracovních ploch, jedna nastaví pracovní plochy na "
-"vertikální orientaci, druhá na horizontální."
-
-#: prefs.js:183
-msgid "Left \t Vertical Orientation"
-msgstr "Svislá orientace \t vlevo"
-
-#: prefs.js:184
-msgid "Right \t Vertical Orientation"
-msgstr "Svislá orientace \t vpravo"
-
-#: prefs.js:185
-msgid "Hide \t Set Vertical Orientation"
-msgstr "Svislá orientace \t skrýt"
-
-#: prefs.js:186
-msgid "Top \t Horizontal Orientation"
-msgstr "Vodorovná orientace \t nahoře"
-
-#: prefs.js:187
-msgid "Bottom \t Horizontal Orientation"
-msgstr "Vodorovná orientace \t dole"
-
-#: prefs.js:188
-msgid "Hide \t Set Horizontal Orientation"
-msgstr "Vodorovná orientace \t skrýt"
-
-#: prefs.js:204 prefs.js:409
-msgid "Fine Tune Workspace Thumbnails Position"
-msgstr "Doladit pozice miniatur pracovního prostoru"
-
-#: prefs.js:205
-msgid "Adjusts workspace thumbnails vertical position."
-msgstr "Upraví vertikální polohu miniatur pracovního prostoru."
-
-#: prefs.js:213
-msgid "Reserve Full Screen Height/Width for Thumbnails"
-msgstr "Vyhradit výšku/šířku celé obrazovky pro miniatury"
-
-#: prefs.js:214
-msgid ""
-"The whole screen height/width will be reserved for workspace thumbnails at "
-"the expense of space available for Dash (if the Dash is oriented in a "
-"different axis)."
-msgstr ""
-"Celá výška/šířka obrazovky bude vyhrazena pro miniatury pracovního prostoru "
-"na úkor místa dostupného pro Dash (pokud je Dash orientován v jiné ose)."
-
-#: prefs.js:231 prefs.js:427
-msgid "Workspace Thumbnails Max Scale"
-msgstr "Miniatury pracovního prostoru Maximální měřítko"
-
-#: prefs.js:232
-msgid ""
-"Adjusts maximum size of the workspace thumbnails (% relative to display "
-"width)."
-msgstr ""
-"Upraví maximální velikost miniatur pracovního prostoru (% vzhledem k šířce "
-"zobrazení)."
-
-#: prefs.js:241 prefs.js:697
-msgid "Workspace Preview"
-msgstr "Náhled pracovního prostoru"
-
-#: prefs.js:256
-msgid "Workspaces Scale"
-msgstr "Měřítko pracovních prostorů"
-
-#: prefs.js:257
-msgid ""
-"Scales down workspace previews so you can fit more of the adjacent "
-"workspaces on the screen. Default size is calculated to use all available "
-"space."
-msgstr ""
-"Zmenšuje náhledy pracovních ploch, takže se na obrazovku vejde více "
-"sousedních pracovních ploch. Výchozí velikost se vypočítá tak, aby využila "
-"veškerý dostupný prostor."
-
-#: prefs.js:274
-msgid "Workspaces Spacing"
-msgstr "Rozestupy pracovních prostorů"
-
-#: prefs.js:275
-msgid ""
-"Adjusts spacing between workspace previews so you can control how much of "
-"the adjacent workspaces overlap to the current workspace overview. Default "
-"value should set the adjacent workspaces out of the screen."
-msgstr ""
-"Upraví rozestupy mezi náhledy pracovního prostoru, takže můžete ovládat, jak "
-"velká část sousedních pracovních prostorů se překrývá s aktuálním přehledem "
-"pracovního prostoru. Výchozí hodnota by měla nastavit sousední pracovní "
-"plochy mimo obrazovku."
-
-#: prefs.js:284 prefs.js:712 prefs.js:1072
-msgid "App Grid"
-msgstr "Mřížka aplikace"
-
-#: prefs.js:290
-msgid "Center App Grid"
-msgstr "Vycentrovat mřížku aplikace"
-
-#: prefs.js:291
-msgid ""
-"App grid in app view page will be centered to the display instead of the "
-"available space. This option may have impact on the size of the grid, more "
-"for narrower and small resolution displays, especially if workspace "
-"thumbnails are bigger."
-msgstr ""
-"Mřížka aplikace na stránce zobrazení aplikace bude vystředěna k displeji "
-"místo dostupného místa. Tato možnost může mít vliv na velikost mřížky, spíše "
-"pro užší displeje a displeje s malým rozlišením, zvláště pokud jsou "
-"miniatury pracovního prostoru větší."
-
-#: prefs.js:300
-msgid "Search View"
-msgstr "Zobrazení vyhledávání"
-
-#: prefs.js:306
-msgid "Center Search View"
-msgstr "Vycentrovat zobrazení vyhledávání"
-
-#: prefs.js:307
-msgid ""
-"Search view will be centered to the display instead of the available space."
-msgstr ""
-"Zobrazení vyhledávání bude vystředěno na displej namísto dostupného místa."
-
-#: prefs.js:315
-msgid "Always Show Search Entry"
-msgstr "Vždy zobrazit pole vyhledávání"
-
-#: prefs.js:316
-msgid ""
-"If disabled, the search entry field will be hidden when not in use, so the "
-"workspace preview and app grid may take up more space."
-msgstr ""
-"Pokud je tato možnost zakázána, pole pro zadání vyhledávání bude skryto, "
-"když se nepoužívá, takže náhled pracovního prostoru a mřížka aplikace mohou "
-"zabírat více místa."
-
-#: prefs.js:333
-msgid "Search Results Width"
-msgstr "Šířka výsledků hledání"
-
-#: prefs.js:334
-msgid ""
-"Adjusts maximum width of search results view (% relative to default). This "
-"allows you to fit more (or less) app icons into the app search result."
-msgstr ""
-"Upraví maximální šířku zobrazení výsledků vyhledávání (% vzhledem k "
-"výchozímu nastavení). To vám umožní umístit více (nebo méně) ikon aplikací "
-"do výsledku vyhledávání aplikací."
-
-#: prefs.js:342 prefs.js:1483
-msgid "Panel"
-msgstr "Panel"
-
-#: prefs.js:348
-msgid "Main Panel Position"
-msgstr "Umístění hlavního panelu"
-
-#: prefs.js:349
-msgid "Allows you to place the main panel at the bottom of your monitor."
-msgstr "Umožňuje umístit hlavní panel na spodní část monitoru."
-
-#: prefs.js:354
-msgid "Top (Default)"
-msgstr "Nahoře (výchozí)"
-
-#: prefs.js:362
-msgid "Main Panel Visibility"
-msgstr "Viditelnost hlavního panelu"
-
-#: prefs.js:363
-msgid "Main panel can be visible always, only in the overview or never."
-msgstr "Hlavní panel může být viditelný vždy, pouze v přehledu nebo nikdy."
-
-#: prefs.js:368
-msgid "Always Visible (Default)"
-msgstr "Vždy viditelný (výchozí)"
-
-#: prefs.js:369
-msgid "Overview Only"
-msgstr "Pouze přehled"
-
-#: prefs.js:370
-msgid "Always Hidden"
-msgstr "Vždy skrytý"
-
-#: prefs.js:378
-msgid "Secondary Monitors"
-msgstr "Sekundární monitory"
-
-#: prefs.js:384
-msgid "Workspace Thumbnails Position"
-msgstr "Pozice miniatur pracovního prostoru"
-
-#: prefs.js:385
-msgid ""
-"Allows you to place workspace thumbnails of secondary monitors on the "
-"opposite side than on the primary monitor."
-msgstr ""
-"Umožňuje umístit miniatury pracovního prostoru sekundárních monitorů na "
-"opačnou stranu než na primárním monitoru."
-
-#: prefs.js:390
-msgid "Same as Primary"
-msgstr "Stejné jako primární"
-
-#: prefs.js:391
-msgid "Left / Top"
-msgstr "Vlevo / Nahoře"
-
-#: prefs.js:392
-msgid "Right / Bottom"
-msgstr "Vpravo / Dole"
-
-#: prefs.js:410
-msgid "Adjusts secondary monitors workspace thumbnails vertical position."
-msgstr ""
-"Upravuje vertikální polohu miniatur pracovního prostoru sekundárních "
-"monitorů."
-
-#: prefs.js:428
-msgid ""
-"Adjusts maximum size of the workspace thumbnails (% relative to display "
-"width) for secondary monitors."
-msgstr ""
-"Upravuje maximální velikost miniatur pracovního prostoru (% vzhledem k šířce "
-"zobrazení) pro sekundární monitory."
-
-#: prefs.js:445
-msgid "Workspace Preview Scale"
-msgstr "Měřítko náhledu pracovního prostoru"
-
-#: prefs.js:446
-msgid "Scales down workspace previews on secondary monitors."
-msgstr "Zmenšuje náhledy pracovního prostoru na sekundárních monitorech."
-
-#: prefs.js:454
-msgid "Shift Workspace Preview by Panel Height"
-msgstr "Posunout náhled pracovního prostoru podle výšky panelu"
-
-#: prefs.js:455
-msgid ""
-"This option can help align overview of the secondary monitor with the "
-"primary monitor."
-msgstr ""
-"Tato možnost může pomoci zarovnat přehled sekundárního monitoru s primárním "
-"monitorem."
-
-#: prefs.js:464
-msgid "Workspace Switcher Popup"
-msgstr "Přepínač pracovního prostoru - vyskakovací okno"
-
-#: prefs.js:480
-msgid "Horizontal Position (% from left)"
-msgstr "Horizontální poloha (% zleva)"
-
-#: prefs.js:481
-msgid ""
-"This popup shows up when you switch workspace using a keyboard shortcut or "
-"gesture outside of the overview. You can disable it on the Behavior tab. If "
-"you want more control over the popup, try Workspace Switcher Manager "
-"extension."
-msgstr ""
-"Toto vyskakovací okno se zobrazí, když přepnete pracovní prostor pomocí "
-"klávesové zkratky nebo gesta mimo přehled. Můžete jej zakázat na kartě "
-"Vlastnosti. Pokud chcete větší kontrolu nad vyskakovacím oknem, vyzkoušejte "
-"rozšíření Workspace Switcher Manager."
-
-#: prefs.js:499
-msgid "Vertical Position (% from top)"
-msgstr "Vertikální pozice (% shora)"
-
-#: prefs.js:523
-msgid "Dash Max Icon Size"
-msgstr "Maximální velikost ikon"
-
-#: prefs.js:524
-msgid "Maximum size of Dash icons in pixels. Works only with default Dash."
-msgstr "Maximální velikost ikon v pixelech. Funguje pouze s výchozím Dash."
-
-#: prefs.js:529 prefs.js:732 prefs.js:752 prefs.js:853
-msgid "128"
-msgstr "128"
-
-#: prefs.js:530 prefs.js:733 prefs.js:753 prefs.js:854
-msgid "112"
-msgstr "112"
-
-#: prefs.js:531 prefs.js:734 prefs.js:754 prefs.js:855
-msgid "96"
-msgstr "96"
-
-#: prefs.js:532 prefs.js:735 prefs.js:755 prefs.js:856
-msgid "80"
-msgstr "80"
-
-#: prefs.js:533 prefs.js:676 prefs.js:736 prefs.js:756 prefs.js:857
-msgid "64"
-msgstr "64"
-
-#: prefs.js:534 prefs.js:677 prefs.js:737 prefs.js:757 prefs.js:858
-msgid "48"
-msgstr "48"
-
-#: prefs.js:535 prefs.js:678 prefs.js:758 prefs.js:859
-msgid "32"
-msgstr "32"
-
-#: prefs.js:536
-msgid "24"
-msgstr "24"
-
-#: prefs.js:537
-msgid "16"
-msgstr "16"
-
-#: prefs.js:551
-msgid "Show Apps Icon Position"
-msgstr "Zobrazit pozici ikony aplikací"
-
-#: prefs.js:552
-msgid "Sets the position of the \"Show Applications\" icon in the Dash."
-msgstr "Nastavuje pozici ikony \"Zobrazit aplikace\"."
-
-#: prefs.js:558 prefs.js:573 prefs.js:588
-msgid "Start"
-msgstr "Začátek"
-
-#: prefs.js:559 prefs.js:574 prefs.js:589
-msgid "End"
-msgstr "Konec"
-
-#: prefs.js:566
-msgid "Open Windows Icon Position"
-msgstr "Pozice ikony „Hledat v otevřených oknech“"
-
-#: prefs.js:567
-msgid ""
-"This option adds \"Search Open Windows\" icon into dash (if window search "
-"provider enabled on the Behavior tab) so you can directly toggle window "
-"search provider results. Even if you disable this icon, you can use the "
-"secondary mouse button click on the Show Apps Icon, or the Space hotkey to "
-"access this feature."
-msgstr ""
-"Tato možnost přidá ikonu „Hledat v otevřených oknech“ (pokud je na kartě "
-"Vlastnosti povolen poskytovatel vyhledávání v okně), takže můžete přímo "
-"přepínat výsledky poskytovatele vyhledávání v okně. I když tuto ikonu "
-"zakážete, můžete pro přístup k této funkci použít sekundární tlačítko myši "
-"na ikonu Zobrazit aplikaci nebo mezerník."
-
-#: prefs.js:581
-msgid "Recent Files Icon Position"
-msgstr "Pozice ikony „Hledat v posledních souborech“"
-
-#: prefs.js:582
-msgid ""
-"This option adds \"Search Recent Files\" icon into dash (if recent files "
-"search provider enabled on the Behavior tab) so you can directly toggle "
-"recent files search provider results. Even if you disable this icon, you can "
-"use Ctrl + Space hotkey to access this feature."
-msgstr ""
-"Tato možnost přidá ikonu „Hledat v posledních souborech“ na pomlčku (pokud "
-"je poskytovatel vyhledávání posledních souborů povolen na kartě Vlastnosti), "
-"takže můžete přímo přepínat výsledky poskytovatele vyhledávání posledních "
-"souborů. I když tuto ikonu zakážete, můžete pro přístup k této funkci použít "
-"klávesovou zkratku Ctrl + mezerník."
-
-#: prefs.js:597
-msgid "Dash Background Opacity"
-msgstr "Průhlednost pozadí"
-
-#: prefs.js:598
-msgid "Adjusts the opacity of the dash background."
-msgstr "Upraví průhlednost pozadí."
-
-#: prefs.js:614
-msgid "Dash Background Radius"
-msgstr "Poloměr pozadí"
-
-#: prefs.js:615
-msgid ""
-"Adjusts the border radius of the dash background in pixels. 0 means default "
-"value."
-msgstr "Upraví poloměr okraje pozadí v pixelech. 0 znamená výchozí hodnotu."
-
-#: prefs.js:623 prefs.js:1050
-msgid "Workspace Thumbnails"
-msgstr "Miniatury pracovního prostoru"
-
-#: prefs.js:629
-msgid "Show Workspace Thumbnail Labels"
-msgstr "Zobrazit štítky miniatur pracovního prostoru"
-
-#: prefs.js:630
-msgid ""
-"Each workspace thumbnail can show its index and name (if defined in the "
-"system settings) or name/title of its most recently used app/window."
-msgstr ""
-"Každá miniatura pracovního prostoru může zobrazovat svůj index a název "
-"(pokud je definován v nastavení systému) nebo jméno/název naposledy použité "
-"aplikace/okna."
-
-#: prefs.js:635 prefs.js:680 prefs.js:1001 prefs.js:1062 prefs.js:1260
-#: prefs.js:1278 prefs.js:1296 prefs.js:1331
-msgid "Disable"
-msgstr "Zakázat"
-
-#: prefs.js:636
-msgid "Index"
-msgstr "Index"
-
-#: prefs.js:637
-msgid "Index + WS Name"
-msgstr "Index + Název WS"
-
-#: prefs.js:638
-msgid "Index + App Name"
-msgstr "Index + Název aplikace"
-
-#: prefs.js:639
-msgid "Index + Window Title"
-msgstr "Rejstřík + Název okna"
-
-#: prefs.js:646
-msgid "Show WS Thumbnail Label on Hover"
-msgstr "Zobrazit štítek miniatur WS při umístění kurzoru myši"
-
-#: prefs.js:647
-msgid "Show label only when the mouse pointer hovers over a thumbnail"
-msgstr "Zobrazit popisek pouze tehdy, když ukazatel myši najede na miniaturu"
-
-#: prefs.js:655
-msgid "Show Wallpaper in Workspace Thumbnails"
-msgstr "Zobrazit tapetu v miniaturách pracovního prostoru"
-
-#: prefs.js:656
-msgid "All workspace thumbnails will include the current desktop background."
-msgstr ""
-"Všechny miniatury pracovního prostoru budou obsahovat aktuální pozadí plochy."
-
-#: prefs.js:664
-msgid "Window Preview"
-msgstr "Náhled okna"
-
-#: prefs.js:670
-msgid "Window Preview App Icon Size"
-msgstr "Velikost ikony aplikace náhledu okna"
-
-#: prefs.js:671
-msgid "Default size is 64."
-msgstr "Výchozí velikost je 64."
-
-#: prefs.js:679
-msgid "22"
-msgstr "22"
-
-#: prefs.js:687
-msgid "Always Show Window Titles"
-msgstr "Vždy zobrazovat názvy oken"
-
-#: prefs.js:688
-msgid ""
-"All windows on the workspace preview will show their titles, not only the "
-"one with the mouse pointer."
-msgstr ""
-"Všechna okna v náhledu pracovní plochy budou zobrazovat své názvy, nejen ty "
-"s ukazatelem myši."
-
-#: prefs.js:703
-msgid "Show Workspace Preview Background"
-msgstr "Zobrazit pozadí náhledu pracovní plochy"
-
-#: prefs.js:704
-msgid "Allows you to hide the scaling background of the workspace preview."
-msgstr "Umožňuje skrýt pozadí náhledu pracovní plochy."
-
-#: prefs.js:718
-msgid "Icon Size"
-msgstr "Velikost ikony"
-
-#: prefs.js:719
-msgid ""
-"Allows to force fixed icon size and bypass the default adaptive algorithm."
-msgstr ""
-"Umožňuje vynutit pevnou velikost ikony a obejít výchozí adaptivní algoritmus."
-
-#: prefs.js:724 prefs.js:751
-msgid "Adaptive (Default)"
-msgstr "Adaptivní (výchozí)"
-
-#: prefs.js:725
-msgid "256"
-msgstr "256"
-
-#: prefs.js:726
-msgid "224"
-msgstr "224"
-
-#: prefs.js:727
-msgid "208"
-msgstr "208"
-
-#: prefs.js:728
-msgid "192"
-msgstr "192"
-
-#: prefs.js:729
-msgid "176"
-msgstr "176"
-
-#: prefs.js:730
-msgid "160"
-msgstr "160"
-
-#: prefs.js:731
-msgid "144"
-msgstr "144"
-
-#: prefs.js:745
-msgid "Folder Icon Size"
-msgstr "Velikost ikony složky"
-
-#: prefs.js:746
-msgid ""
-"Allows to disable the default adaptive algorithm and set a fixed size of "
-"icons inside folders."
-msgstr ""
-"Umožňuje zakázat výchozí adaptivní algoritmus a nastavit pevnou velikost "
-"ikon uvnitř složek."
-
-#: prefs.js:766
-msgid "Max App Folder Icon Grid Size"
-msgstr "Maximální velikost mřížky ikony složky aplikace"
-
-#: prefs.js:767
-msgid ""
-"Each folder icon shows (up to) 4 app icons as a preview of the folder "
-"content, this option allows you to increase the number to 9 icons if folder "
-"contains more than 4 or 8 apps. The latter avoids half empty folder icons."
-msgstr ""
-"Každá ikona složky zobrazuje (až) 4 ikony aplikací jako náhled obsahu "
-"složky. Tato možnost umožňuje zvýšit počet na 9 ikon, pokud složka obsahuje "
-"více než 4 nebo 8 aplikací."
-
-#: prefs.js:772
-msgid "2x2 (Default)"
-msgstr "2x2 (výchozí)"
-
-#: prefs.js:773
-msgid "3x3 for 5+ apps"
-msgstr "3x3 pro 5+ aplikací"
-
-#: prefs.js:774
-msgid "3x3 for 9+ apps"
-msgstr "3x3 pro 9+ aplikací"
-
-#: prefs.js:788
-msgid "Columns per Page (0 for adaptive grid)"
-msgstr "Počet sloupců na stránku (0 pro adaptivní mřížku)"
-
-#: prefs.js:789
-msgid ""
-"Number of columns in application grid. If set to 0 (default setting) the "
-"number will be set automatically to fit available height."
-msgstr ""
-"Počet sloupců v mřížce aplikace. Pokud je nastaveno na 0 (výchozí "
-"nastavení), číslo se nastaví automaticky tak, aby odpovídalo dostupné výšce."
-
-#: prefs.js:803
-msgid "Rows per Page (0 for adaptive grid)"
-msgstr "Počet řádků na stránku (0 pro adaptivní mřížku)"
-
-#: prefs.js:804
-msgid ""
-"Number of rows in application grid. If set to 0 (default setting) the number "
-"will be set automatically to fit available height."
-msgstr ""
-"Počet řádků v mřížce aplikace. Pokud je nastaveno na 0 (výchozí nastavení), "
-"číslo se nastaví automaticky tak, aby odpovídalo dostupné výšce."
-
-#: prefs.js:818
-msgid "Folder Columns per Page (0 for adaptive grid)"
-msgstr "Počet sloupců složek na stránku (0 pro adaptivní mřížku)"
-
-#: prefs.js:819
-msgid ""
-"Number of columns in folder grid. If you leave the value on 0, the number of "
-"columns will be calculated to fit all folder icons."
-msgstr ""
-"Počet sloupců v mřížce složek. Pokud ponecháte hodnotu na 0, počet sloupců "
-"se vypočítá tak, aby se vešly všechny ikony složek."
-
-#: prefs.js:833
-msgid "Folder Rows per Page (0 for adaptive grid)"
-msgstr "Počet řádků složek na stránku (0 pro adaptivní mřížku)"
-
-#: prefs.js:834
-msgid ""
-"Number of rows in folder grid. If you leave the value on 0, the number of "
-"rows will be calculated to fit all folder icons."
-msgstr ""
-"Počet řádků v mřížce složek. Pokud ponecháte hodnotu na 0, počet řádků se "
-"vypočítá tak, aby se vešly všechny ikony složek."
-
-#: prefs.js:841 prefs.js:1174 prefs.js:1492
-msgid "Search"
-msgstr "Vyhledávání"
-
-#: prefs.js:847
-msgid "App Search Icon Size"
-msgstr "Velikost ikony vyhledávání aplikací"
-
-#: prefs.js:848
-msgid "Size of results provided by the App Search Provider."
-msgstr "Velikost ikon aplikací ve výsledcích hledání."
-
-#: prefs.js:878
-msgid "Max Search Results Rows"
-msgstr "Maximální počet řádků výsledků hledání"
-
-#: prefs.js:879
-msgid ""
-"Sets the maximum number of rows for result lists of all search providers "
-"except window search provider which always lists all results."
-msgstr "Nastaví maximální počet řádků pro seznamy výsledků všech vyhledávání."
-
-#: prefs.js:888
-msgid "Overview Background"
-msgstr "Přehled - pozadí"
-
-#: prefs.js:894
-msgid "Show Static Background"
-msgstr "Zobrazit statické pozadí"
-
-#: prefs.js:895
-msgid "Show static background wallpaper instead of the solid grey color."
-msgstr "Zobrazit statickou tapetu na pozadí místo šedé barvy."
-
-#: prefs.js:911
-msgid "Blur Window Picker Background"
-msgstr "Rozostření pozadí"
-
-#: prefs.js:912
-msgid "Blur background wallpaper (if enabled) in the window picker view."
-msgstr "Rozostření tapety na pozadí (pokud je povoleno)."
-
-#: prefs.js:928
-msgid "Blur App Grid/Search View Background"
-msgstr "Rozostření pozadí v mřížce aplikací/hledání"
-
-#: prefs.js:929
-msgid ""
-"Blur background wallpaper (if enabled) in the app grid and search results "
-"views."
-msgstr ""
-"Rozostření tapety na pozadí (je-li povoleno) v mřížce aplikace a zobrazení "
-"výsledků vyhledávání."
-
-#: prefs.js:937
-msgid "Smooth Blur Transitions"
-msgstr "Plynulé přechody rozostření"
-
-#: prefs.js:938
-msgid ""
-"Makes blur transitions smoother but can impact overall smoothness of "
-"overview animations."
-msgstr ""
-"Umožňuje hladší přechody rozostření, ale může ovlivnit celkovou plynulost "
-"animací v přehledu."
-
-#: prefs.js:953 prefs.js:980 prefs.js:1002
-msgid "Overview"
-msgstr "Přehled"
-
-#: prefs.js:959
-msgid "Overview Mode"
-msgstr "Režim přehledu"
-
-#: prefs.js:960
-msgid ""
-"The Expose Windows on Hover mode do not expose the workspace preview windows "
-"until the mouse pointer enters any window.\n"
-"The Static Workspace mode does not scale the workspace preview, it only "
-"shows Dash and workspace thumbnails over the desktop. Clicking on a "
-"workspace thumbnail scales the ws preview and exposes its windows like in "
-"the default overview mode."
-msgstr ""
-"Režim Zobrazit okna při najetí myší neodkryje okna náhledu pracovního "
-"prostoru, dokud ukazatel myši nenajede do jakéhokoli okna.\n"
-"Režim Statická pracovní plocha nemění měřítko náhledu pracovní plochy, "
-"zobrazuje pouze Dash a miniatury pracovní plochy. Kliknutím na miniaturu "
-"pracovního prostoru se změní měřítko náhledu ws a zobrazí se jeho okna jako "
-"ve výchozím režimu přehledu."
-
-#: prefs.js:965 prefs.js:1259 prefs.js:1277 prefs.js:1317
-msgid "Default"
-msgstr "Výchozí"
-
-#: prefs.js:966
-msgid "Expose Windows on Hover"
-msgstr "Zobrazit okna při najetí myší"
-
-#: prefs.js:967
-msgid "Static Workspace"
-msgstr "Statická pracovní plocha"
-
-#: prefs.js:974
-msgid "Startup State"
-msgstr "Stav spuštění"
-
-#: prefs.js:975
-msgid "Allows to change the state in which GNOME Shell starts a session."
-msgstr "Umožňuje změnit stav, ve kterém GNOME Shell zahajuje relaci."
-
-#: prefs.js:981
-msgid "Desktop"
-msgstr "Desktop"
-
-#: prefs.js:982 prefs.js:1003
-msgid "Applications"
-msgstr "Aplikace"
-
-#: prefs.js:989
-msgid ""
-"Hot Corner (Install Custom Hot Corners - Extended extension for more options)"
-msgstr ""
-"Hot Corner (nainstalujte Custom Hot Corners - Extended rozšíření pro více "
-"možností)"
-
-#: prefs.js:995
-msgid "Hot corner Action"
-msgstr "Hot Corner Akce"
-
-#: prefs.js:996
-msgid ""
-"Disable or change behavior of hot corner. Holding down the Ctrl key while "
-"hitting the hot corner switches between Overview/Applications actions."
-msgstr ""
-"Zakázat nebo změnit chování Hot Corner. Podržením klávesy Ctrl při stisknutí "
-"Hot Corner se přepíná mezi akcemi Přehled/Aplikace."
-
-#: prefs.js:1010
-msgid "Enable Hot Corner in Full-Screen mode"
-msgstr "Aktivovat Hot Corner v režimu celé obrazovky"
-
-#: prefs.js:1011
-msgid ""
-"If you often work with full-screen applications and want the hot corner to "
-"be usable."
-msgstr ""
-"Pokud často pracujete s celoobrazovkovými aplikacemi a chcete, aby byl Hot "
-"Corner použitelný."
-
-#: prefs.js:1020
-msgid "Show Ripples Animation"
-msgstr "Zobrazit animaci vlnění"
-
-#: prefs.js:1021
-msgid "Ripples animation shows up when you trigger hot corner."
-msgstr "Animace vlnění se zobrazí, když spustíte Hot Corner."
-
-#: prefs.js:1036
-msgid "Dash Icon Click"
-msgstr "Dash - kliknutí na ikonu"
-
-#: prefs.js:1037
-msgid ""
-"if the app you clicked on has more than one window and the recently used "
-"window is not on the current workspace, the overview can switch to the "
-"workspace with the recent window."
-msgstr ""
-"pokud aplikace, na kterou jste klikli, má více než jedno okno a naposledy "
-"použité okno není na aktuální pracovní ploše, přehled se může přepnout na "
-"pracovní plochu s posledním oknem."
-
-#: prefs.js:1042
-msgid "Activate Last Used Window Immediately"
-msgstr "Okamžitě aktivuje naposledy použité okno"
-
-#: prefs.js:1043
-msgid "Switch to Workspace with Recently Used Window"
-msgstr "Přepnout na plochu s naposledy použitým oknem"
-
-#: prefs.js:1056
-msgid "Close Workspace Button"
-msgstr "Tlačítko Zavřít pracovní plochu"
-
-#: prefs.js:1057
-msgid ""
-"The Close Workspace button appears on the workspace thumbnail when you hover "
-"over it and allows you to close all windows on the workspace. You can choose "
-"a safety lock to prevent accidental use."
-msgstr ""
-"Tlačítko Zavřít pracovní plochu se objeví na miniatuře pracovní plochy, když "
-"na ni umístíte ukazatel myši, a umožní vám zavřít všechna okna na pracovní "
-"ploše. Můžete si vybrat bezpečnostní zámek, který zabrání náhodnému použití."
-
-#: prefs.js:1063
-msgid "Single Click"
-msgstr "Jedno kliknutí"
-
-#: prefs.js:1064
-msgid "Double Click"
-msgstr "Dvojité kliknutí"
-
-#: prefs.js:1065
-msgid "Ctrl Key + Click"
-msgstr "Klávesa Ctrl + kliknutí"
-
-#: prefs.js:1078
-msgid "Apps Order"
-msgstr "Pořadí aplikací"
-
-#: prefs.js:1079
-msgid ""
-"Choose sorting method for the app grid. Note that sorting by alphabet and "
-"usage ignores folders."
-msgstr ""
-"Vyberte metodu řazení pro mřížku aplikace. Řazení podle abecedy a použití "
-"ignoruje složky."
-
-#: prefs.js:1084
-msgid "Custom (Default)"
-msgstr "Vlastní (výchozí)"
-
-#: prefs.js:1085
-msgid "Alphabet"
-msgstr "Abeceda"
-
-#: prefs.js:1086
-msgid "Usage"
-msgstr "Použití"
-
-#: prefs.js:1093
-msgid "App Grid Content"
-msgstr "Obsah mřížky aplikací"
-
-#: prefs.js:1094
-msgid ""
-"The default Shell removes favorite apps, this option lets you duplicate them "
-"in the grid or remove also running applications. Option \"Favorites and "
-"Running First\" only works with the Alphabet and Usage sorting."
-msgstr ""
-"Výchozí prostředí Shell odebere oblíbené aplikace, tato možnost vám umožňuje "
-"duplikovat je v mřížce nebo odebrat také spuštěné aplikace. Možnost "
-"„Oblíbené a spuštěné jako první“ funguje pouze s řazením podle abecedy a "
-"použití."
-
-#: prefs.js:1099
-msgid "Include All"
-msgstr "Zahrnout vše"
-
-#: prefs.js:1100
-msgid "Include All - Favorites and Running First"
-msgstr "Zahrnout vše – Oblíbené a Spuštěné jako první"
-
-#: prefs.js:1101
-msgid "Exclude Favorites (Default)"
-msgstr "Vyloučit oblíbené (výchozí)"
-
-#: prefs.js:1102
-msgid "Exclude Running"
-msgstr "Vyloučit spuštěné"
-
-#: prefs.js:1103
-msgid "Exclude Favorites and Running"
-msgstr "Vyloučit Oblíbené a spuštěné"
-
-#: prefs.js:1110
-msgid "Active Icons in Folder Preview"
-msgstr "Aktivní ikony v náhledu složky"
-
-#: prefs.js:1111
-msgid ""
-"If enabled, clicking an app icon in a folder preview directly opens the app "
-"without having to open the folder first. Middle button opens new window of "
-"the app without closing the overview, so you can open multiple apps in a row "
-"on the current workspace and secondary button opens the folder."
-msgstr ""
-"Pokud je tato možnost povolena, kliknutím na ikonu aplikace v náhledu složky "
-"se aplikace otevře přímo, aniž byste museli nejprve otevřít složku. "
-"Prostřední tlačítko otevře nové okno aplikace bez zavření přehledu, takže na "
-"aktuálním pracovním prostoru můžete otevřít více aplikací v řadě a "
-"sekundární tlačítko otevře složku."
-
-#: prefs.js:1120
-msgid "Center Open Folders"
-msgstr "Vycentrovat otevřené složky"
-
-#: prefs.js:1121
-msgid ""
-"App folder may open in the center of the screen or above the source folder "
-"icon."
-msgstr ""
-"Složka aplikace se může otevřít ve středu obrazovky nebo nad ikonou zdrojové "
-"složky."
-
-#: prefs.js:1130
-msgid "Allow Incomplete Pages"
-msgstr "Povolit neúplné stránky"
-
-#: prefs.js:1131
-msgid ""
-"If disabled, icons from the next page (if any) are automatically moved to "
-"fill any empty slot left after an icon was (re)moved (to a folder for "
-"example)."
-msgstr ""
-"Pokud je zakázáno, ikony z další stránky (pokud existují) se automaticky "
-"přesunou tak, aby zaplnily jakýkoli prázdný slot, který zbyl po (znovu) "
-"přesunutí ikony (například do složky)."
-
-#: prefs.js:1140
-msgid "App Labels Behavior"
-msgstr "Chování štítků aplikací"
-
-#: prefs.js:1141
-msgid "Choose how and when to display app names."
-msgstr "Vyberte, jak a kdy se mají zobrazovat názvy aplikací."
-
-#: prefs.js:1146
-msgid "Ellipsized - Expand Selected (Default)"
-msgstr "Zkrácené – rozbalit vybrané (výchozí)"
-
-#: prefs.js:1147
-msgid "Always Expanded"
-msgstr "Vždy rozbalené"
-
-#: prefs.js:1148
-msgid "Hidden - Show Selected Only"
-msgstr "Skryté - zobrazit pouze vybrané"
-
-#: prefs.js:1154
-msgid "Reset App Grid Layout"
-msgstr "Resetovat rozložení mřížky aplikace"
-
-#: prefs.js:1155
-msgid ""
-"Removes all stored app grid icons positions, after the reset icons will be "
-"ordered alphabetically."
-msgstr ""
-"Odebere všechny uložené pozice mřížky aplikací, po resetování budou ikony "
-"seřazeny podle abecedy."
-
-#: prefs.js:1163
-msgid "Remove App Grid Folders"
-msgstr "Odebrat složky mřížky aplikace"
-
-#: prefs.js:1164
-msgid "Removes all folders, folder apps move to root grid."
-msgstr ""
-"Odebere všechny složky, aplikace složek se přesunou do kořenové mřížky."
-
-#: prefs.js:1186
-msgid "Enable Window Search Provider"
-msgstr "Povolit poskytovatele vyhledávání oken"
-
-#: prefs.js:1187
-msgid ""
-"Activates the window search provider that adds open windows to the search "
-"results. You can search app names and window titles. You can also use \"wq/"
-"\" prefix to suppress results from other search providers."
-msgstr ""
-"Aktivuje poskytovatele vyhledávání oken, který do výsledků vyhledávání "
-"přidává otevřená okna. Můžete vyhledávat názvy aplikací a názvy oken. Můžete "
-"také použít předponu „wq/“ k potlačení výsledků od jiných poskytovatelů "
-"vyhledávání."
-
-#: prefs.js:1195
-msgid "Enable Recent Files Search Provider"
-msgstr "Povolit poskytovatele vyhledávání nedávných souborů"
-
-#: prefs.js:1196
-msgid ""
-"Activates the recent files search provider that can be triggered by a dash "
-"icon, Ctrl + Space hotkey or by typing \"fq//\" prefix in the search entry "
-"field. This option needs File History option enabled in the GNOME Privacy "
-"settings."
-msgstr ""
-"Aktivuje poskytovatele vyhledávání posledních souborů, který lze spustit "
-"ikonou v Dash, klávesovou zkratkou Ctrl + mezerník nebo zadáním předpony "
-"„fq//“ do pole pro zadání vyhledávání. Tato možnost vyžaduje, aby byla v "
-"nastavení ochrany osobních údajů GNOME povolena možnost Historie souborů."
-
-#: prefs.js:1204
-msgid "Enable Fuzzy Match"
-msgstr "Povolit neúplnou shodu"
-
-#: prefs.js:1205
-msgid ""
-"Enabling the fuzzy match allows you to skip letters in the pattern you are "
-"searching for and find \"Firefox\" even if you type \"ffx\". Works only for "
-"the App, Window and Recent files search providers."
-msgstr ""
-"Povolení neúplné shody vám umožní přeskočit písmena v řetězci, který hledáte "
-"(například najde \"Firefox\", i když zadáte \"ffx\"). Funguje pouze pro "
-"poskytovatele vyhledávání aplikací, oken a posledních souborů."
-
-#: prefs.js:1223
-msgid "Animations - General"
-msgstr "Animace - Obecné"
-
-#: prefs.js:1238
-msgid "Animation Speed"
-msgstr "Rychlost animace"
-
-#: prefs.js:1239
-msgid ""
-"Adjusts the global animation speed in % of the default duration - higher "
-"value means slower animation."
-msgstr ""
-"Upraví globální rychlost animace v % u výchozí doby trvání – vyšší hodnota "
-"znamená pomalejší animaci."
-
-#: prefs.js:1247
-msgid "Animations - Overview"
-msgstr "Animace – přehled"
-
-#: prefs.js:1253
-msgid "App Grid Animation"
-msgstr "Animace mřížky aplikací"
-
-#: prefs.js:1254
-msgid ""
-"When entering the App Grid view, the app grid animates from the edge of the "
-"screen. You can choose direction, keep it Default (direction will be chosen "
-"automatically) or disable the animation if you don't like it."
-msgstr ""
-"Mřížka aplikací se animuje od okraje obrazovky. Můžete si vybrat směr, "
-"ponechat výchozí (směr bude vybrán automaticky) nebo vypnout animaci, pokud "
-"se vám nelíbí."
-
-#: prefs.js:1261 prefs.js:1279
-msgid "Right to Left"
-msgstr "Zprava doleva"
-
-#: prefs.js:1262 prefs.js:1280
-msgid "Left to Right"
-msgstr "Zleva doprava"
-
-#: prefs.js:1263 prefs.js:1281
-msgid "Bottom to Top"
-msgstr "Zespodu nahoru"
-
-#: prefs.js:1264 prefs.js:1282
-msgid "Top to Bottom"
-msgstr "Zhora dolů"
-
-#: prefs.js:1271
-msgid "Search View Animation"
-msgstr "Animace zobrazení vyhledávání"
-
-#: prefs.js:1272
-msgid ""
-"When search is activated the search view with search results can animate "
-"from the edge of the screen. You can choose direction, keep it Default "
-"(currently Bottom to Top) or disable the animation if you don't like it."
-msgstr ""
-"Když je aktivováno vyhledávání, zobrazení vyhledávání s výsledky vyhledávání "
-"se může animovat od okraje obrazovky. Můžete si vybrat směr, ponechat "
-"výchozí (aktuálně zdola nahoru) nebo zakázat animaci, pokud se vám nelíbí."
-
-#: prefs.js:1290
-msgid "Workspace Preview Animation"
-msgstr "Animace náhledu pracovního prostoru"
-
-#: prefs.js:1291
-msgid ""
-"When entering / leaving the App Grid / Search view, the workspace preview "
-"can animate to/from workspace thumbnail."
-msgstr ""
-"Při vstupu / opuštění mřížky aplikací / vyhledávání se náhled pracovního "
-"prostoru může animovat do/z miniatury pracovního prostoru."
-
-#: prefs.js:1297
-msgid "Enable"
-msgstr "Povolit"
-
-#: prefs.js:1305
-msgid "Workspace Switcher"
-msgstr "Přepínač pracovního prostoru"
-
-#: prefs.js:1311
-msgid "Workspace Switcher Animation"
-msgstr "Animace"
-
-#: prefs.js:1312
-msgid ""
-"Allows you to disable movement of the desktop background during workspace "
-"switcher animation outside of the overview. The Static Background mode also "
-"keeps Conky and desktop icons on their place during switching."
-msgstr ""
-"Umožňuje zakázat pohyb pozadí plochy během animace přepínače pracovního "
-"prostoru mimo přehled. Režim Statické pozadí také udržuje ikony Conky a "
-"plochy na svém místě během přepínání."
-
-#: prefs.js:1318
-msgid "Static Background"
-msgstr "Statické pozadí"
-
-#: prefs.js:1325
-msgid "Workspace Switcher Popup Mode"
-msgstr "Vyskakovací režim přepínače pracovní plochy"
-
-#: prefs.js:1326
-msgid ""
-"This popup shows up when you switch workspace using a keyboard shortcut or "
-"gesture outside of the overview. You can to disable the popup at all, or "
-"show it on the current monitor (the one with mouse pointer) instead of the "
-"primary."
-msgstr ""
-"Toto vyskakovací okno se zobrazí, když přepnete pracovní prostor pomocí "
-"klávesové zkratky nebo gesta mimo přehled. Vyskakovací okno můžete úplně "
-"zakázat nebo jej zobrazit na aktuálním monitoru (na tom s ukazatelem myši) "
-"místo na primárním."
-
-#: prefs.js:1332
-msgid "Show on Primary Monitor (Default)"
-msgstr "Zobrazit na primárním monitoru (výchozí)"
-
-#: prefs.js:1333
-msgid "Show on Current Monitor"
-msgstr "Zobrazit na aktuálním monitoru"
-
-#: prefs.js:1341
-msgid "Notifications"
-msgstr "Oznámení"
-
-#: prefs.js:1347
-msgid "Notification Banner Position"
-msgstr "Pozice oznamovacího banneru"
-
-#: prefs.js:1348
-msgid "Choose where the notification pop-ups appear on the screen."
-msgstr "Vyberte, kde se na obrazovce zobrazí vyskakovací okna."
-
-#: prefs.js:1353
-msgid "Top Left"
-msgstr "Nahoře vlevo"
-
-#: prefs.js:1354
-msgid "Top Middle"
-msgstr "Nahoře uprostřed"
-
-#: prefs.js:1355
-msgid "Top Right (Default)"
-msgstr "Nahoře vpravo (výchozí)"
-
-#: prefs.js:1356
-msgid "Bottom Left"
-msgstr "Dole vlevo"
-
-#: prefs.js:1357
-msgid "Bottom Middle"
-msgstr "Dole uprostřed"
-
-#: prefs.js:1358
-msgid "Bottom Right"
-msgstr "Dole vpravo"
-
-#: prefs.js:1365
-msgid "Window Attention Handler"
-msgstr "Okno - vyžádání pozornosti"
-
-#: prefs.js:1366
-msgid ""
-"When a window requires attention (often a new window), GNOME Shell shows you "
-"a notification about it. You can disable popups of these messages "
-"(notification will be pushed into the message tray silently) or focus the "
-"source window immediately instead."
-msgstr ""
-"Když okno vyžaduje pozornost (často nové okno), GNOME Shell vám o tom "
-"zobrazí upozornění. Můžete deaktivovat vyskakovací okna těchto zpráv "
-"(oznámení bude do panelu zpráv vloženo tiše) nebo místo toho okamžitě "
-"zvýrazní zdrojové okno."
-
-#: prefs.js:1371 prefs.js:1386
-msgid "Show Notifications (Default)"
-msgstr "Zobrazit oznámení (výchozí)"
-
-#: prefs.js:1372
-msgid "Disable Notification Popups"
-msgstr "Zakázat vyskakovací okna s upozorněním"
-
-#: prefs.js:1373
-msgid "Immediately Focus Window"
-msgstr "Okamžitě zvýraznit okno"
-
-#: prefs.js:1380
-msgid "Favorites"
-msgstr "Oblíbené"
-
-#: prefs.js:1381
-msgid "Disable pin/unpin app notifications."
-msgstr "Zakázat upozornění aplikací připnout/odepnout."
-
-#: prefs.js:1387
-msgid "Disable Notifications"
-msgstr "Zakázat oznámení"
-
-#: prefs.js:1402
-msgid "Keyboard"
-msgstr "Klávesnice"
-
-#: prefs.js:1408
-msgid "Override Page Up/Down Shortcuts"
-msgstr "Přepsat zkratky Page Up/Down"
-
-#: prefs.js:1409
-msgid ""
-"This option automatically overrides the (Shift +) Super + Page Up/Down "
-"keyboard shortcuts for the current workspace orientation. If you encounter "
-"any issues, check the configuration in the dconf editor."
-msgstr ""
-"Tato možnost automaticky přepíše klávesové zkratky (Shift +) Super + Page Up/"
-"Down pro aktuální orientaci pracovního prostoru. Pokud narazíte na nějaké "
-"problémy, zkontrolujte konfiguraci v editoru dconf."
-
-#: prefs.js:1417
-msgid "Compatibility"
-msgstr "Kompatibilita"
-
-#: prefs.js:1423
-msgid "Fix for Dash to Dock"
-msgstr "Oprava pro Dash to Dock"
-
-#: prefs.js:1424
-msgid ""
-"With the default Ubuntu Dock and other Dash To Dock forks, you may "
-"experience issues with Activities overview after you change Dock position or "
-"change monitors configuration. If you are experiencing such issues, try to "
-"enable this option, or (better) disable/replace the dock extension."
-msgstr ""
-"S výchozím dokem Ubuntu a dalšími variantami Dash To Dock můžete zaznamenat "
-"problémy s přehledem aktivit poté, co změníte polohu doku nebo změníte "
-"konfiguraci monitorů. Pokud máte takové problémy, zkuste tuto možnost "
-"povolit nebo (lépe) zakázat/vyměnit rozšíření doku."
-
-#: prefs.js:1432
-msgid ""
-"V-Shell Modules that can be disabled in case of conflict or misbehavior."
-msgstr ""
-"Moduly V-Shell, které lze deaktivovat v případě konfliktu nebo špatného "
-"chování."
-
-#: prefs.js:1438
-msgid "AppFavorites"
-msgstr "Oblíbené aplikace"
-
-#: prefs.js:1439
-msgid "Pin/unpin app notification options."
-msgstr "Možnosti upozornění pro připnutí/odepnutí aplikací."
-
-#: prefs.js:1447
-msgid "AppDisplay / IconGrid"
-msgstr "Zobrazení aplikací / mřížka ikon"
-
-#: prefs.js:1448
-msgid "App grid customization and options."
-msgstr "Přizpůsobení a možnosti mřížky aplikace."
-
-#: prefs.js:1457
-msgid "Dash configuration options and support for vertical orientation."
-msgstr "Možnosti konfigurace Dash a podpora vertikální orientace."
-
-#: prefs.js:1466
-msgid ""
-"Hot corner options, removes right panel barrier that collides with CHC-E "
-"extension."
-msgstr ""
-"Možnosti Hot Corner, odstraňuje zábranu pravého panelu, která koliduje s "
-"rozšířením CHC-E."
-
-#: prefs.js:1474
-msgid "MessageTray"
-msgstr "Panel zpráv"
-
-#: prefs.js:1475
-msgid "Notification position options."
-msgstr "Možnosti umístění oznámení."
-
-#: prefs.js:1484
-msgid "Panel options."
-msgstr "Možnosti panelu."
-
-#: prefs.js:1493
-msgid "Search view and app search provider customization and options."
-msgstr ""
-"Zobrazení vyhledávání a přizpůsobení a možnosti poskytovatele vyhledávání "
-"aplikací."
-
-#: prefs.js:1501
-msgid "SwipeTracker"
-msgstr "Sledování gest"
-
-#: prefs.js:1502
-msgid "Gestures for vertical workspace orientation."
-msgstr "Gesta pro vertikální orientaci pracovního prostoru."
-
-#: prefs.js:1510
-msgid "WindowAttentionHandler"
-msgstr "Okno - vyžádání pozornosti"
-
-#: prefs.js:1511
-msgid "Window attention handler options."
-msgstr "Možnosti okna."
-
-#: prefs.js:1519
-msgid "WindowManager"
-msgstr "Správce oken"
-
-#: prefs.js:1520
-msgid ""
-"Fixes an upstream bug in the minimization animation of a full-screen window."
-msgstr "Opravuje chybu v animaci minimalizace okna na celou obrazovku."
-
-#: prefs.js:1528
-msgid "WindowPreview"
-msgstr "Náhled okna"
-
-#: prefs.js:1529
-msgid ""
-"Window preview options, fixes an upstream bug that fills the system log with "
-"errors when you close a window from an overview or exit the overview with a "
-"gesture when any window is selected."
-msgstr ""
-"Možnosti náhledu okna - opravuje chybu, která zaplňuje systémový protokol "
-"chybami, když zavřete okno z přehledu nebo opustíte přehled gestem, když je "
-"vybráno jakékoli okno."
-
-#: prefs.js:1537
-msgid "Workspace"
-msgstr "Pracovní plocha"
-
-#: prefs.js:1538
-msgid ""
-"Fixes workspace preview allocations for vertical workspaces orientation and "
-"window scaling in static overview modes."
-msgstr ""
-"Opravuje přidělení náhledu pracovního prostoru pro vertikální orientaci "
-"pracovních prostorů a měřítko okna v režimech statického přehledu."
-
-#: prefs.js:1546
-msgid "WorkspaceAnimation"
-msgstr "Animace pracovní plochy"
-
-#: prefs.js:1547
-msgid "Static workspace animation option."
-msgstr "Možnost animace statické pracovní plochy."
-
-#: prefs.js:1555
-msgid "WorkspaceSwitcherPopup"
-msgstr "Vyskakovací přepínač pracovní plochy"
-
-#: prefs.js:1556
-msgid "Workspace switcher popup position options."
-msgstr "Možnosti vyskakovací pozice přepínače pracovní plochy."
-
-#: prefs.js:1573
-msgid "Version"
-msgstr "Verze"
-
-#: prefs.js:1579
-msgid "Reset all options"
-msgstr "Obnovit všechny možnosti"
-
-#: prefs.js:1580
-msgid "Set all options to default values."
-msgstr "Nastavte všechny možnosti na výchozí hodnoty."
-
-#: prefs.js:1586
-msgid "Links"
-msgstr "Odkazy"
-
-#: prefs.js:1590
-msgid "Homepage"
-msgstr "Domovská stránka"
-
-#: prefs.js:1591
-msgid "Source code and more info about this extension"
-msgstr "Zdrojový kód a další informace o tomto rozšíření"
-
-#: prefs.js:1596
-msgid "Changelog"
-msgstr "Seznam změn"
-
-#: prefs.js:1597
-msgid "See what's changed."
-msgstr "Podívejte se, co se změnilo."
-
-#: prefs.js:1602
-msgid "GNOME Extensions"
-msgstr "Rozšíření GNOME"
-
-#: prefs.js:1603
-msgid "Rate and comment the extension on GNOME Extensions site."
-msgstr "Ohodnoťte a okomentujte rozšíření na webu GNOME Extensions."
-
-#: prefs.js:1608
-msgid "Report a bug or suggest new feature"
-msgstr "Nahlaste chybu nebo navrhněte novou funkci"
-
-#: prefs.js:1614
-msgid "Buy Me a Coffee"
-msgstr "Kupte mi kávu"
-
-#: prefs.js:1615
-msgid "If you like this extension, you can help me with my coffee expenses."
-msgstr ""
-"Pokud se vám toto rozšíření líbí, můžete mi pomoci s mými výdaji na kávu."
-
-#: recentFilesSearchProvider.js:109
-msgid "Search recent files"
-msgstr "Prohledat nedávné soubory"
-
-#: recentFilesSearchProvider.js:110
-msgid "Recent Files"
-msgstr "Nedávné soubory"
diff --git a/extensions/46/disable-workspace-switcher.mk b/extensions/47/disable-workspace-switcher.mk
index 5b585dc..5b585dc 100644
--- a/extensions/46/disable-workspace-switcher.mk
+++ b/extensions/47/disable-workspace-switcher.mk
diff --git a/extensions/46/disable-workspace-switcher/LICENSE b/extensions/47/disable-workspace-switcher/LICENSE
index f288702..f288702 100644
--- a/extensions/46/disable-workspace-switcher/LICENSE
+++ b/extensions/47/disable-workspace-switcher/LICENSE
diff --git a/extensions/46/disable-workspace-switcher/README.md b/extensions/47/disable-workspace-switcher/README.md
index bae853f..bae853f 100644
--- a/extensions/46/disable-workspace-switcher/README.md
+++ b/extensions/47/disable-workspace-switcher/README.md
diff --git a/extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js b/extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js
index a814f54..a814f54 100644
--- a/extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js
+++ b/extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/extension.js
diff --git a/extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json b/extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json
index 045e7e2..4d19032 100644
--- a/extensions/46/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json
+++ b/extensions/47/disable-workspace-switcher/disable-workspace-switcher@jbradaric.me/metadata.json
@@ -5,6 +5,6 @@
"uuid": "disable-workspace-switcher@jbradaric.me",
"url": "https://github.com/jbradaric/disable-workspace-switcher",
"shell-version": [
- "45", "46"
+ "45", "46", "47"
]
}
diff --git a/extensions/46/hibernate-status.mk b/extensions/47/hibernate-status.mk
index b97a0d6..b97a0d6 100644
--- a/extensions/46/hibernate-status.mk
+++ b/extensions/47/hibernate-status.mk
diff --git a/extensions/46/hibernate-status/.editorconfig b/extensions/47/hibernate-status/.editorconfig
index bf58f2f..bf58f2f 100644
--- a/extensions/46/hibernate-status/.editorconfig
+++ b/extensions/47/hibernate-status/.editorconfig
diff --git a/extensions/46/hibernate-status/.github/workflows/release.yaml b/extensions/47/hibernate-status/.github/workflows/release.yaml
index 80138f9..80138f9 100644
--- a/extensions/46/hibernate-status/.github/workflows/release.yaml
+++ b/extensions/47/hibernate-status/.github/workflows/release.yaml
diff --git a/extensions/46/hibernate-status/.gitignore b/extensions/47/hibernate-status/.gitignore
index 68270f9..68270f9 100644
--- a/extensions/46/hibernate-status/.gitignore
+++ b/extensions/47/hibernate-status/.gitignore
diff --git a/extensions/46/hibernate-status/.prettierrc b/extensions/47/hibernate-status/.prettierrc
index 8da2b4c..8da2b4c 100644
--- a/extensions/46/hibernate-status/.prettierrc
+++ b/extensions/47/hibernate-status/.prettierrc
diff --git a/extensions/46/hibernate-status/LICENSE b/extensions/47/hibernate-status/LICENSE
index d6a9326..d6a9326 100644
--- a/extensions/46/hibernate-status/LICENSE
+++ b/extensions/47/hibernate-status/LICENSE
diff --git a/extensions/46/hibernate-status/Makefile b/extensions/47/hibernate-status/Makefile
index f74ed54..f74ed54 100644
--- a/extensions/46/hibernate-status/Makefile
+++ b/extensions/47/hibernate-status/Makefile
diff --git a/extensions/46/hibernate-status/README.md b/extensions/47/hibernate-status/README.md
index f356bd7..f356bd7 100644
--- a/extensions/46/hibernate-status/README.md
+++ b/extensions/47/hibernate-status/README.md
diff --git a/extensions/46/hibernate-status/buildforupload.sh b/extensions/47/hibernate-status/buildforupload.sh
index d2c705c..d2c705c 100755
--- a/extensions/46/hibernate-status/buildforupload.sh
+++ b/extensions/47/hibernate-status/buildforupload.sh
diff --git a/extensions/46/hibernate-status/extension.js b/extensions/47/hibernate-status/extension.js
index d0c7708..b0a26c7 100644
--- a/extensions/46/hibernate-status/extension.js
+++ b/extensions/47/hibernate-status/extension.js
@@ -219,6 +219,22 @@ export default class HibernateButtonExtension extends Extension {
_updateDefaults() {
console.log("Update defaults");
+ let menuItems = this.systemMenu._systemItem.menu._getMenuItems()
+ for (let menuItem of menuItems) {
+ console.log(menuItem.label.get_text())
+ if ( menuItem.label.get_text() === _('Suspend') ) {
+ console.log(`Show suspend button: ${this._setting.get_boolean('show-suspend')}`)
+ menuItem.visible = this._setting.get_boolean('show-suspend');
+ }
+ if ( menuItem.label.get_text() === _('Restart…') ) {
+ console.log(`Show restart button: ${this._setting.get_boolean('show-restart')}`)
+ menuItem.visible = this._setting.get_boolean('show-restart');
+ }
+ if ( menuItem.label.get_text() === _('Power Off…') ) {
+ console.log(`Show shutdown button: ${this._setting.get_boolean('show-shutdown')}`)
+ menuItem.visible = this._setting.get_boolean('show-shutdown');
+ }
+ }
}
_onHibernateClicked() {
@@ -571,3 +587,4 @@ var ConfirmDialog = GObject.registerClass(
);
const _DIALOG_ICON_SIZE = 32;
+
diff --git a/extensions/46/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po
index 689fee9..689fee9 100644
--- a/extensions/46/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/bg/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po
index 32e541d..32e541d 100644
--- a/extensions/46/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/cs/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po
index 3fdb8c2..3fdb8c2 100644
--- a/extensions/46/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/de/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po
index 92c14bc..92c14bc 100644
--- a/extensions/46/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/es/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po
index e4edef0..e4edef0 100644
--- a/extensions/46/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/fa/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po
index 9dca80d..9dca80d 100644
--- a/extensions/46/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/fr/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po
index 70da5aa..70da5aa 100644
--- a/extensions/46/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/hu/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po
index a41e5ac..a41e5ac 100644
--- a/extensions/46/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/it/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po
index 3146d8a..3146d8a 100644
--- a/extensions/46/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/nl/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po
index 25debf8..25debf8 100644
--- a/extensions/46/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/oc/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po
index 57b735c..57b735c 100644
--- a/extensions/46/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/pl/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po
index 143129c..143129c 100644
--- a/extensions/46/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/pt/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po
index 326481a..326481a 100644
--- a/extensions/46/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/pt_BR/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po
index c55e2c6..c55e2c6 100644
--- a/extensions/46/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/ru/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po
index 68c6b8c..68c6b8c 100644
--- a/extensions/46/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/uk/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po b/extensions/47/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po
index d6a6ebe..d6a6ebe 100644
--- a/extensions/46/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po
+++ b/extensions/47/hibernate-status/locale/zh_CN/LC_MESSAGES/hibernate-status-button.po
diff --git a/extensions/46/hibernate-status/metadata.json b/extensions/47/hibernate-status/metadata.json
index 581fb2c..db14afb 100644
--- a/extensions/46/hibernate-status/metadata.json
+++ b/extensions/47/hibernate-status/metadata.json
@@ -3,7 +3,7 @@
"name": "Hibernate Status Button",
"url": "https://github.com/arelange/gnome-shell-extension-hibernate-status",
"description": "Adds a Hibernate button in Status menu. Using Alt modifier, you can also select Hybrid Sleep instead.",
- "shell-version": ["45", "46"],
+ "shell-version": ["45", "46", "47"],
"gettext-domain": "hibernate-status-button",
"settings-schema": "org.gnome.shell.extensions.hibernate-status-button"
}
diff --git a/extensions/46/hibernate-status/prefs.js b/extensions/47/hibernate-status/prefs.js
index 1407a6b..3a04ca6 100644
--- a/extensions/46/hibernate-status/prefs.js
+++ b/extensions/47/hibernate-status/prefs.js
@@ -101,7 +101,6 @@ export default class Prefs extends ExtensionPreferences {
const suspend_row = new Adw.SwitchRow({
title: __('Suspend'),
- subtitle: __('Not implemented yet'),
});
modes_group.add(suspend_row);
const hibernate_row = new Adw.SwitchRow({
@@ -118,12 +117,10 @@ export default class Prefs extends ExtensionPreferences {
modes_group.add(suspend_then_hibernate_row);
const restart_row = new Adw.SwitchRow({
title: __('Restart...'),
- subtitle: __('Not implemented yet'),
});
modes_group.add(restart_row);
const shutdown_row = new Adw.SwitchRow({
title: __('Shutdown...'),
- subtitle: __('Not implemented yet'),
});
modes_group.add(shutdown_row);
diff --git a/extensions/46/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml b/extensions/47/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml
index 242d9cc..242d9cc 100644
--- a/extensions/46/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml
+++ b/extensions/47/hibernate-status/schemas/org.gnome.shell.extensions.hibernate-status-button.gschema.xml
diff --git a/extensions/46/middleclickclose.mk b/extensions/47/middleclickclose.mk
index e774c20..e774c20 100644
--- a/extensions/46/middleclickclose.mk
+++ b/extensions/47/middleclickclose.mk
diff --git a/extensions/46/middleclickclose/.gitignore b/extensions/47/middleclickclose/.gitignore
index cf09213..cf09213 100644
--- a/extensions/46/middleclickclose/.gitignore
+++ b/extensions/47/middleclickclose/.gitignore
diff --git a/extensions/46/middleclickclose/LICENSE b/extensions/47/middleclickclose/LICENSE
index 22fbe5d..22fbe5d 100644
--- a/extensions/46/middleclickclose/LICENSE
+++ b/extensions/47/middleclickclose/LICENSE
diff --git a/extensions/46/middleclickclose/Makefile b/extensions/47/middleclickclose/Makefile
index 8960c95..8960c95 100644
--- a/extensions/46/middleclickclose/Makefile
+++ b/extensions/47/middleclickclose/Makefile
diff --git a/extensions/46/middleclickclose/src/extension.js b/extensions/47/middleclickclose/src/extension.js
index 0b0d562..69f4c7e 100644
--- a/extensions/46/middleclickclose/src/extension.js
+++ b/extensions/47/middleclickclose/src/extension.js
@@ -19,9 +19,13 @@
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
+import Meta from 'gi://Meta';
-import { Extension, InjectionManager } from 'resource:///org/gnome/shell/extensions/extension.js';
+import { Extension, InjectionManager }
+ from 'resource:///org/gnome/shell/extensions/extension.js';
import { Workspace } from 'resource:///org/gnome/shell/ui/workspace.js';
+import { WindowPreview } from 'resource:///org/gnome/shell/ui/windowPreview.js';
+import { ControlsState } from 'resource:///org/gnome/shell/ui/overviewControls.js';
import { SettingsWatch } from './settingsWatch.js';
@@ -29,21 +33,29 @@ export default class MiddleClickClose extends Extension {
#settings;
#injectionManager;
+ #refocusOnClose;
+
enable() {
this.#settings = new SettingsWatch(this.getSettings(), {
close_button: { get: v => v.value, },
rearrange_delay: {},
+ keyboard_close: {},
});
+ this.#refocusOnClose = new WeakSet();
+
this.#injectionManager = new InjectionManager();
this.#patchClickHandler();
this.#patchWindowRepositioningDelay();
+ this.#patchKeyClose();
}
disable() {
this.#injectionManager.clear();
this.#injectionManager = null;
+ this.#refocusOnClose = null;
+
this.#settings.clear();
this.#settings = null;
}
@@ -81,23 +93,90 @@ export default class MiddleClickClose extends Extension {
// apparently that is impossible with the switch to ESM. Instead, we'll monkey-patch
// _doRemoveWindow() and change the timeout after the fact.
const settings = this.#settings;
+ const refocusOnClose = this.#refocusOnClose;
const lastLayoutFrozenIds = new WeakMap();
+
this.#injectionManager.overrideMethod(Workspace.prototype, '_doRemoveWindow',
- original => function () {
+ original => function (metaWin) {
+
+ // Grab the old window's focus chain index.
+ let focus_idx = this.get_focus_chain()
+ .findIndex(clone => clone.metaWindow == metaWin);
+
+ // Call the original method.
const ret = original.apply(this, arguments);
+ if (refocusOnClose.has(metaWin)) {
+ // Find a "nearby" window to refocus to, based on the old index
+ const chain = this.get_focus_chain();
+ if (focus_idx >= chain.length) {
+ focus_idx = chain.length - 1;
+ }
+
+ // Focus on the selected window.
+ if (focus_idx >= 0) {
+ global.stage.key_focus = chain[focus_idx];
+ }
+ }
+
// Adjust the freeze delay.
if (this._layoutFrozenId > 0
&& this._layoutFrozenId != lastLayoutFrozenIds.get(this)
) {
- const source = GLib.MainContext.default().find_source_by_id(this._layoutFrozenId);
- source.set_ready_time(source.get_time() + settings.rearrange_delay * 1000);
+ const src = GLib.MainContext.default().find_source_by_id(this._layoutFrozenId);
+ src.set_ready_time(src.get_time() + settings.rearrange_delay * 1000);
}
- // Need to keep the last id to avoid adjusting the layout freeze delay more than once.
+ // Need to keep the last id to avoid adjusting the layout freeze delay more than
+ // once.
lastLayoutFrozenIds.set(this, this._layoutFrozenId);
-
return ret;
})
}
+
+ #patchKeyClose() {
+ // If Meta.KeyBindingAction.CLOSE is fired in while a WindowPreview is focused, close it.
+ const settings = this.#settings;
+ const refocusOnClose = this.#refocusOnClose;
+
+ function handleKeyPress(event) {
+
+ // Keyboard close disabled in settings.
+ if (!settings.keyboard_close) {
+ return false;
+ }
+
+ // We only care about window picker mode.
+ if (this._workspace._overviewAdjustment.value !== ControlsState.WINDOW_PICKER) {
+ return false;
+ }
+
+ const action = global.display.get_keybinding_action(
+ event.get_key_code(), event.get_state());
+ if (action == Meta.KeyBindingAction.CLOSE) {
+
+ if (this._workspace.metaWorkspace?.active) {
+ // Imediately refocus on another window when closing via keyboard.
+ refocusOnClose.add(this.metaWindow);
+
+ // Close the window.
+ this._deleteAll();
+ } else {
+ // Switch to the workspace the focused window is in.
+ this._workspace.metaWorkspace?.activate(global.get_current_time())
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ this.#injectionManager.overrideMethod(WindowPreview.prototype, 'vfunc_key_press_event',
+ original => function () {
+ return handleKeyPress.apply(this, arguments)
+ || original.apply(this, arguments);
+ }
+ )
+ }
};
diff --git a/extensions/46/middleclickclose/src/metadata.json b/extensions/47/middleclickclose/src/metadata.json
index 8802f6d..23bc0ed 100644
--- a/extensions/46/middleclickclose/src/metadata.json
+++ b/extensions/47/middleclickclose/src/metadata.json
@@ -4,7 +4,8 @@
"url": "https://github.com/p91paul/middleclickclose",
"shell-version": [
"45",
- "46"
+ "46",
+ "47"
],
"uuid": "middleclickclose@paolo.tranquilli.gmail.com",
"settings-schema": "org.gnome.shell.extensions.middleclickclose",
diff --git a/extensions/46/middleclickclose/src/po/de.po b/extensions/47/middleclickclose/src/po/de.po
index 4fb4821..cf12acc 100644
--- a/extensions/46/middleclickclose/src/po/de.po
+++ b/extensions/47/middleclickclose/src/po/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:29+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2019-06-17 20:44+0200\n"
"Last-Translator: Onno Giesmann <nutzer3105@gmail.com>\n"
"Language-Team: German <--->\n"
@@ -18,39 +18,39 @@ msgstr ""
"X-Generator: Gtranslator 3.32.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Linke"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Mittlere"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Rechte"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Taste 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Taste 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Taste 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Taste 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Taste 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Taste 9"
@@ -62,11 +62,19 @@ msgstr "Maustaste zum Schließen"
msgid "Which mouse button triggers closing in overview."
msgstr "Gibt an, welche Maustaste das Schließen in der Übersicht auslöst."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Verzögerung bis zur Neuanordnung"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/el.po b/extensions/47/middleclickclose/src/po/el.po
index d032228..cc5f21e 100644
--- a/extensions/46/middleclickclose/src/po/el.po
+++ b/extensions/47/middleclickclose/src/po/el.po
@@ -7,49 +7,49 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:33+0300\n"
-"PO-Revision-Date: 2023-08-30 18:41+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
+"PO-Revision-Date: 2024-07-09 16:01+0300\n"
"Last-Translator: George Tsiamasiotis <gtsiam@windowslive.com>\n"
"Language-Team: \n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.3.2\n"
+"X-Generator: Poedit 3.4.2\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Αριστερό"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Μεσαίο"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Δεξί"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Κουμπί 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Κουμπί 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Κουμπί 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Κουμπί 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Κουμπί 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Κουμπί 9"
@@ -61,14 +61,24 @@ msgstr "Κουμπί ποντικιού για κλείσιμο"
msgid "Which mouse button triggers closing in overview."
msgstr "Ποιό κουμπί του ποντικιού κλείνει παράθυρα στην επισκόπηση."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr "Κλείσιμο με πληκτρολόγιο"
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+"Επιτρέπει το κλείσιμο παραθύρων στην επισκόπηση μέσω συντομεύσεων "
+"πληκτρολογίου."
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Καθυστέρηση ανακατονομής"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
msgstr ""
-"Πόσος χρόνος πρέπει να περάσει με τον κέρσορα αδρανή στην επισκόπηση μετά "
-"το κλείσιμο ενός παραθύρου για να γίνει ανακατανομή."
+"Πόσος χρόνος πρέπει να περάσει με τον κέρσορα αδρανή στην επισκόπηση μετά το "
+"κλείσιμο ενός παραθύρου για να γίνει ανακατανομή."
diff --git a/extensions/46/middleclickclose/src/po/fr.po b/extensions/47/middleclickclose/src/po/fr.po
index e762a40..f7acb45 100644
--- a/extensions/46/middleclickclose/src/po/fr.po
+++ b/extensions/47/middleclickclose/src/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:29+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2015-12-30 07:08+0100\n"
"Last-Translator: DAEM Q.\n"
"Language-Team: \n"
@@ -18,39 +18,39 @@ msgstr ""
"X-Generator: Poedit 1.8.5\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Gauche"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Milieu"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Droit"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Bouton 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Bouton 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Bouton 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Bouton 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Bouton 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Bouton 9"
@@ -64,11 +64,19 @@ msgstr ""
"Le bouton de la souris qui déclenche la fermeture d'une fenêtre dans la Vue "
"d'ensemble."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Délai avant réarrangement"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/it.po b/extensions/47/middleclickclose/src/po/it.po
index 4b20c55..dbb0a96 100644
--- a/extensions/46/middleclickclose/src/po/it.po
+++ b/extensions/47/middleclickclose/src/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:29+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2017-04-21 10:06+0200\n"
"Last-Translator: Jimmy Scionti <jimmy.scionti@gmail.com>\n"
"Language-Team: Jimmy Scionti <jimmy.scionti@gmail.com>\n"
@@ -18,39 +18,39 @@ msgstr ""
"X-Generator: Poedit 1.8.7.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Sinistro"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Centrale"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Destro"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Pulsante 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Pulsante 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Pulsante 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Pulsante 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Pulsante 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Pulsante 9"
@@ -62,11 +62,19 @@ msgstr "Pulsante del mouse per chiudere la finestra"
msgid "Which mouse button triggers closing in overview."
msgstr "Seleziona quale pulsante del mouse premere per chiudere una finestra."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Ritardo del riordinamento"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/nl.po b/extensions/47/middleclickclose/src/po/nl.po
index fe9c6e9..39aa13c 100644
--- a/extensions/46/middleclickclose/src/po/nl.po
+++ b/extensions/47/middleclickclose/src/po/nl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:29+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2019-09-15 20:17+0200\n"
"Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n"
"Language-Team: Dutch <kde-i18n-doc@kde.org>\n"
@@ -17,39 +17,39 @@ msgstr ""
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Links"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Scrollwiel"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Rechts"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Knop 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Knop 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Knop 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Knop 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Knop 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Knop 9"
@@ -61,11 +61,19 @@ msgstr "Muisknop om vensters mee te sluiten"
msgid "Which mouse button triggers closing in overview."
msgstr "Met welke muisknop je vensters kunt sluiten op het overzicht."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Vertraging bij herschikken"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/pt.po b/extensions/47/middleclickclose/src/po/pt.po
index 7f35be1..1dd92d9 100644
--- a/extensions/46/middleclickclose/src/po/pt.po
+++ b/extensions/47/middleclickclose/src/po/pt.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-11 23:56+0100\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2023-10-11 23:56+0100\n"
"Last-Translator: Tomás Marques <tomasm576@gmail.com>\n"
"Language-Team: \n"
@@ -15,39 +15,39 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Esquerda"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Meio"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Direita"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Botão 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Botão 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Botão 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Botão 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Botão 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Botão 9"
@@ -59,14 +59,22 @@ msgstr "Botão do meio do rato"
msgid "Which mouse button triggers closing in overview."
msgstr "Qual o botão do rato que fecha uma janela na vista geral."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Duração de reorganizar"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
msgstr ""
-"Quanto tempo tem de passar sem que o cursor se mova para que as janelas na visão geral "
-"se reorganizem depois de uma ter sido fechada."
+"Quanto tempo tem de passar sem que o cursor se mova para que as janelas na "
+"visão geral se reorganizem depois de uma ter sido fechada."
diff --git a/extensions/46/middleclickclose/src/po/sk.po b/extensions/47/middleclickclose/src/po/sk.po
index d9c250a..c9e79a8 100644
--- a/extensions/46/middleclickclose/src/po/sk.po
+++ b/extensions/47/middleclickclose/src/po/sk.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-30 18:29+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2015-10-30 07:08+0100\n"
"Last-Translator: Juraj Fiala <doctorjellyface@riseup.net>\n"
"Language-Team: \n"
@@ -18,39 +18,39 @@ msgstr ""
"X-Generator: Poedit 1.8.5\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Ľavé"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Stredné"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Pravé"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Tlačidlo 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Tlačidlo 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Tlačidlo 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Tlačidlo 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Tlačidlo 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Tlačidlo 9"
@@ -62,11 +62,19 @@ msgstr "Tlačidlo myši na zavretie"
msgid "Which mouse button triggers closing in overview."
msgstr "Ktoré tlačidlo myši spustí zavretie v prehľade aktivít."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Oneskorenie preskúpenia"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/sr.po b/extensions/47/middleclickclose/src/po/sr.po
index 514194c..037eb5c 100644
--- a/extensions/46/middleclickclose/src/po/sr.po
+++ b/extensions/47/middleclickclose/src/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-09-02 18:28+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2023-10-15 18:51+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,39 +17,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Лево"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Средње"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Десно"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Дугме 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Дугме 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Дугме 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Дугме 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Дугме 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Дугме 9"
@@ -61,11 +61,19 @@ msgstr "Дугме на мишу за затварање апликација"
msgid "Which mouse button triggers closing in overview."
msgstr "Које дугме на мишу затвара апликацију у прегледнику."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Задршка у распоређивању"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/sr@latin.po b/extensions/47/middleclickclose/src/po/sr@latin.po
index 7ec468e..e6bc7f0 100644
--- a/extensions/46/middleclickclose/src/po/sr@latin.po
+++ b/extensions/47/middleclickclose/src/po/sr@latin.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-09-02 18:28+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2023-10-15 18:52+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,39 +17,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Levo"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Srednje"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Desno"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Dugme 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Dugme 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Dugme 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Dugme 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Dugme 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Dugme 9"
@@ -61,15 +61,23 @@ msgstr "Dugme na mišu za zatvaranje aplikacija"
msgid "Which mouse button triggers closing in overview."
msgstr "Koje dugme na mišu zatvara aplikaciju u pregledniku."
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Zadrška u raspoređivanju"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
msgstr ""
-"Koliko vremena mora da prođe prilikom nepomeranja pokazivača miša za "
-"prozore aplikacija u pregledniku, kako bi se prozori rasporedili nakon "
-"zatvaranja aplikacije."
+"Koliko vremena mora da prođe prilikom nepomeranja pokazivača miša za prozore "
+"aplikacija u pregledniku, kako bi se prozori rasporedili nakon zatvaranja "
+"aplikacije."
diff --git a/extensions/46/middleclickclose/src/po/template.pot b/extensions/47/middleclickclose/src/po/template.pot
index 02cdf11..38cf0e2 100644
--- a/extensions/46/middleclickclose/src/po/template.pot
+++ b/extensions/47/middleclickclose/src/po/template.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-09-02 18:28+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,39 +17,39 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr ""
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr ""
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr ""
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr ""
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr ""
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr ""
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr ""
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr ""
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr ""
@@ -61,11 +61,19 @@ msgstr ""
msgid "Which mouse button triggers closing in overview."
msgstr ""
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr ""
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
diff --git a/extensions/46/middleclickclose/src/po/uk.po b/extensions/47/middleclickclose/src/po/uk.po
index dedc32b..5224afc 100644
--- a/extensions/46/middleclickclose/src/po/uk.po
+++ b/extensions/47/middleclickclose/src/po/uk.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions-middleclickclose\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-10-22 00:00+0300\n"
+"POT-Creation-Date: 2024-07-09 15:57+0300\n"
"PO-Revision-Date: 2023-10-22 00:00+0300\n"
"Last-Translator: Artem Prokop <artem.prokop.dev@gmail.com>\n"
"Language-Team: \n"
@@ -16,39 +16,39 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/prefs.js:30
+#: src/prefs.js:31
msgid "Left"
msgstr "Ліва"
-#: src/prefs.js:31
+#: src/prefs.js:32
msgid "Middle"
msgstr "Середня"
-#: src/prefs.js:32
+#: src/prefs.js:33
msgid "Right"
msgstr "Права"
-#: src/prefs.js:33
+#: src/prefs.js:34
msgid "Button 4"
msgstr "Кнопка 4"
-#: src/prefs.js:34
+#: src/prefs.js:35
msgid "Button 5"
msgstr "Кнопка 5"
-#: src/prefs.js:35
+#: src/prefs.js:36
msgid "Button 6"
msgstr "Кнопка 6"
-#: src/prefs.js:36
+#: src/prefs.js:37
msgid "Button 7"
msgstr "Кнопка 7"
-#: src/prefs.js:37
+#: src/prefs.js:38
msgid "Button 8"
msgstr "Кнопка 8"
-#: src/prefs.js:38
+#: src/prefs.js:39
msgid "Button 9"
msgstr "Кнопка 9"
@@ -60,14 +60,22 @@ msgstr "Кнопка миші для закриття"
msgid "Which mouse button triggers closing in overview."
msgstr "Яка кнопка миші закриває вікно в оверв'ю"
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:22
+msgid "Close with keyboard"
+msgstr ""
+
#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:23
+msgid "Allow closing windows in overview via keyboard shortcuts."
+msgstr ""
+
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:28
msgid "Rearrange delay"
msgstr "Затримка перерозташування"
-#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:24
+#: src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml:29
msgid ""
"How much time must pass with the pointer not moving for windows in overview "
"to rearrange after one was closed."
msgstr ""
-"Скільки часу курсор має не рухатись щоб вікна в оверв'ю перерозташувалися"
-" після закриття вікна."
+"Скільки часу курсор має не рухатись щоб вікна в оверв'ю перерозташувалися "
+"після закриття вікна."
diff --git a/extensions/46/middleclickclose/src/prefs.js b/extensions/47/middleclickclose/src/prefs.js
index 91d9f13..99d8858 100644
--- a/extensions/46/middleclickclose/src/prefs.js
+++ b/extensions/47/middleclickclose/src/prefs.js
@@ -18,7 +18,8 @@ import Gtk from 'gi://Gtk';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
-import { ExtensionPreferences, gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
+import { ExtensionPreferences, gettext as _ }
+ from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
export default class MiddleClickClosePreferences extends ExtensionPreferences {
getPreferencesWidget() {
@@ -43,6 +44,8 @@ export default class MiddleClickClosePreferences extends ExtensionPreferences {
step: 50,
}));
+ group.add(this.buildPreference("keyboard-close"))
+
page.add(group);
return page;
}
@@ -70,7 +73,7 @@ export default class MiddleClickClosePreferences extends ExtensionPreferences {
});
row.connect('notify::selected', () => {
- setting.activate(GLib.Variant.new_string(range[row.selected]));
+ setting.change_state(GLib.Variant.new_string(range[row.selected]));
});
return row;
@@ -79,7 +82,20 @@ export default class MiddleClickClosePreferences extends ExtensionPreferences {
opts.upper ??= range[1]
}
- if (["i"].includes(ty)) {
+ if (ty == "b") {
+ let row = new Adw.SwitchRow({
+ title: opts.title,
+ subtitle: opts.subtitle,
+ active: setting.state.unpack()
+ });
+
+ row.connect('notify::active', () => {
+ setting.change_state(GLib.Variant.new_boolean(row.active));
+ });
+
+ return row;
+
+ } else if (ty == "i") {
let adjustment = new Gtk.Adjustment({
lower: opts.lower,
upper: opts.upper,
@@ -95,7 +111,7 @@ export default class MiddleClickClosePreferences extends ExtensionPreferences {
});
adjustment.connect("value-changed", adj => {
- setting.activate(GLib.Variant.new_int32(adj.value));
+ setting.change_state(GLib.Variant.new_int32(adj.value));
});
return row;
diff --git a/extensions/46/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml b/extensions/47/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml
index ebe6dc9..93f3793 100644
--- a/extensions/46/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml
+++ b/extensions/47/middleclickclose/src/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml
@@ -17,6 +17,11 @@
<summary>Mouse button to close</summary>
<description>Which mouse button triggers closing in overview.</description>
</key>
+ <key type="b" name="keyboard-close">
+ <default>true</default>
+ <summary>Close with keyboard</summary>
+ <description>Allow closing windows in overview via keyboard shortcuts.</description>
+ </key>
<key type="i" name="rearrange-delay">
<default>750</default>
<range min="0" max="5000" />
diff --git a/extensions/46/middleclickclose/src/settingsWatch.js b/extensions/47/middleclickclose/src/settingsWatch.js
index fd8b8bd..fd8b8bd 100644
--- a/extensions/46/middleclickclose/src/settingsWatch.js
+++ b/extensions/47/middleclickclose/src/settingsWatch.js
diff --git a/extensions/46/no-overview.mk b/extensions/47/no-overview.mk
index e2a604c..e2a604c 100644
--- a/extensions/46/no-overview.mk
+++ b/extensions/47/no-overview.mk
diff --git a/extensions/46/no-overview/LICENSE b/extensions/47/no-overview/LICENSE
index f288702..f288702 100644
--- a/extensions/46/no-overview/LICENSE
+++ b/extensions/47/no-overview/LICENSE
diff --git a/extensions/46/no-overview/README.md b/extensions/47/no-overview/README.md
index 25fb2aa..25fb2aa 100644
--- a/extensions/46/no-overview/README.md
+++ b/extensions/47/no-overview/README.md
diff --git a/extensions/46/no-overview/extension.js b/extensions/47/no-overview/extension.js
index f0a6f28..f0a6f28 100644
--- a/extensions/46/no-overview/extension.js
+++ b/extensions/47/no-overview/extension.js
diff --git a/extensions/46/no-overview/metadata.json b/extensions/47/no-overview/metadata.json
index 695d317..1926a58 100644
--- a/extensions/46/no-overview/metadata.json
+++ b/extensions/47/no-overview/metadata.json
@@ -3,7 +3,7 @@
"description": "No overview at start-up. Nothing more.",
"name": "No overview at start-up",
"original-authors": ["fthx"],
- "shell-version": ["46"],
+ "shell-version": ["46", "47"],
"url": "https://github.com/fthx/no-overview",
"uuid": "no-overview@fthx",
"version": 999
diff --git a/extensions/46/vertical-workspaces.mk b/extensions/47/vertical-workspaces.mk
index db823e4..db823e4 100644
--- a/extensions/46/vertical-workspaces.mk
+++ b/extensions/47/vertical-workspaces.mk
diff --git a/extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md b/extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md
index 74daf6a..74daf6a 100644
--- a/extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/bug_report.md
diff --git a/extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md b/extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md
index f455865..f455865 100644
--- a/extensions/46/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/extensions/47/vertical-workspaces/.github/ISSUE_TEMPLATE/feature_request.md
diff --git a/extensions/46/vertical-workspaces/CHANGELOG.md b/extensions/47/vertical-workspaces/CHANGELOG.md
index 18de9a5..ac557c0 100644
--- a/extensions/46/vertical-workspaces/CHANGELOG.md
+++ b/extensions/47/vertical-workspaces/CHANGELOG.md
@@ -1,5 +1,79 @@
## Changelog:
-### v46.1 for GNOME 45.2+, v44.12 for GNOME 42-44 (not released yet)
+### v46.4 for GNOME 45.2+ (), v44.14 for GNOME 42-44 (not yet released)
+**Fixed:**
+- 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: After dragging an icon out of a multi-page folder, the folder view shows navigation hints the next time it is opened (#160, upstream bug)
+- App grid: Grid page switches to the page with selected icon when user starts dragging an icon on another page
+- App grid: Page indicators don't accept drop, so the app icon can't be moved to a new page
+- App grid: Keyboard navigation inside a folder doesn't work (upstream bug, fixed in GS 47)
+- App grid: Workspace thumbnails not re-scaling after switching workspace outside of the overview using a trackpad
+- Vertical dash: Running dot position in GNOME 46.0 (Ubuntu 24.04)
+
+**Added:**
+- GNOME 47 support
+- *Adaptive* options for the maximum dash and app search icon size that supports low resolution and highly scaled displays
+- Search view scroll bar style to make it visible
+- App grid: Drag-and-drop between folders
+- App grid: Added an option *App Grid Search Mode* that can be set to *Filter App Grid View*, which filters the app grid icons while you're typing, instead of switching to the default search view
+- App grid: Added *Alphabet* sorting option that sorts folders along with apps
+
+
+### v46.3.1 for GNOME 45.2+ (2024-06-10), v44.14 for GNOME 42-44 (not yet released)
+**Fixed:**
+- *App Grid Page Height Scale* option affects folder icon size
+- *Smooth App Grid Animations* options has no effect
+
+
+### v46.3 for GNOME 45.2+ (2024-06-08), v44.14 for GNOME 42-44 (not yet released)
+**Fixed:**
+- App grid icon order and grid dimensions issues (#160)
+- App grid partially visible after login
+- Vertical dash running app indicator position in GNOME 46.2 (#150)
+- Dash label border radius is set too high for multiline labels
+- Search entry position in some overview configurations (#161)
+- Window attention handler options don't work properly
+
+**Added**
+- App grid *App Grid Page Height Scale* option
+- Separated *Folder Grid Spacing* option
+
+
+### v46.2 for GNOME 45.2+ (2024-05-15), v44.13 for GNOME 42-44 (2024-05-15)
+**Fixed:**
+- Inconsistent behavior of dash icons and app grid icons (#152)
+- Sorting option doesn't work for app folders (#154)
+- V-Shell overrides Dash to Dock's background opacity setting (#155)
+- Conflicts with Dash2Dock Animated (#153)
+- When the main panel is set to show only in the overview, its content might be unclickable (#157)
+- Workspace thumbnails DND can be difficult to use when creating new workspaces (#128)
+
+
+### v46.1 for GNOME 45.2+ (2024-05-09), v44.12 for GNOME 42-44 (2024-05-09)
+**Fixed:**
+- Fixed conflicts with Dash to Dock that could cause GNOME to crash at startup
+- Resolved issue where V-Shell affected Dash to Dock icon highlighting
+- Corrected search entry and results allocation to consider Dash to Dock
+- Adjusted app folder dialogs for proper sizing and positioning
+- Aligned secondary monitor overview with the primary one (option)
+- Removed all code related to previously removed modules
+- Fixed GNOME Shell recovery when V-Shell is disabled
+- The *App Grid Page Width Scale* option now works for all configurations
+
+**Added:**
+- Added *Delay at Startup* option to allow delaying activation of V-Shell after login. Automatically enabled when Dash to Dock, Ubuntu Dock, or Dash to Panel is detected
+- Added *Click Empty Space To Close* option
+- Added close button to the app folder dialog
+
+**Changed**
+- Refactored the app grid module for improved efficiency and reliability
+- Removed the 32px option for app grid icon size
+- Moved the *Remove* folder button to the left side of the folder dialog
+- Adjusted folder grid columns and rows settings to serve as maximum limits rather than fixed page size, allowing for better control over the default adaptive algorithm
+- Relocated all app grid settings to a separate tab for better organization
+
+
+### v46.0 for GNOME 45.2+ (2024-03-30 ego), v44.12 for GNOME 42-44 (not released)
**Added**
- Support for GNOME 46
- Option *Fix New Window Not On Current Monitor* tries to work around that issue. However, success rate is not 100%
diff --git a/extensions/46/vertical-workspaces/LICENSE b/extensions/47/vertical-workspaces/LICENSE
index f288702..f288702 100644
--- a/extensions/46/vertical-workspaces/LICENSE
+++ b/extensions/47/vertical-workspaces/LICENSE
diff --git a/extensions/46/vertical-workspaces/Makefile b/extensions/47/vertical-workspaces/Makefile
index b0afba4..b0afba4 100644
--- a/extensions/46/vertical-workspaces/Makefile
+++ b/extensions/47/vertical-workspaces/Makefile
diff --git a/extensions/46/vertical-workspaces/extension.js b/extensions/47/vertical-workspaces/extension.js
index 0378e0b..64336f0 100644
--- a/extensions/46/vertical-workspaces/extension.js
+++ b/extensions/47/vertical-workspaces/extension.js
@@ -10,14 +10,11 @@
'use strict';
-import Clutter from 'gi://Clutter';
import GLib from 'gi://GLib';
-import GObject from 'gi://GObject';
import Meta from 'gi://Meta';
import St from 'gi://St';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
-import * as ModalDialog from 'resource:///org/gnome/shell/ui/modalDialog.js';
import * as Config from 'resource:///org/gnome/shell/misc/config.js';
@@ -75,8 +72,11 @@ export default class VShell extends Extension.Extension {
Me.ESP_PREFIX = 'eq//';
Me.opt = new Me.Settings.Options(Me);
+ opt = Me.opt;
Me.Util.init(Me);
+
+ Me.updateMessageDialog = new Me.Util.RestartMessage();
}
_cleanGlobals() {
@@ -87,14 +87,28 @@ export default class VShell extends Extension.Extension {
enable() {
this._init();
- // flag for Util.getEnabledExtensions()
- Me.extensionsLoadIncomplete = Main.layoutManager._startingUp;
- opt = Me.opt;
-
this._initModules();
- this.activateVShell();
- Me.extensionsLoadIncomplete = false;
+ // prevent conflicts during startup
+ let skipStartup = Me.gSettings.get_boolean('delay-startup') ||
+ Me.Util.getEnabledExtensions('ubuntu-dock').length ||
+ Me.Util.getEnabledExtensions('dash-to-dock').length ||
+ Me.Util.getEnabledExtensions('dash2dock').length ||
+ Me.Util.getEnabledExtensions('dash-to-panel').length;
+ if (skipStartup && Main.layoutManager._startingUp) {
+ this._startupConId = Main.layoutManager.connect('startup-complete', () => {
+ this._delayedStartup = true;
+ this._activateVShell();
+ // Since VShell has been activated with a delay, move it in extensionOrder
+ let extensionOrder = Main.extensionManager._extensionOrder;
+ const idx = extensionOrder.indexOf(this.metadata.uuid);
+ extensionOrder.push(extensionOrder.splice(idx, 1)[0]);
+ Main.layoutManager.disconnect(this._startupConId);
+ this._startupConId = 0;
+ });
+ } else {
+ this._activateVShell();
+ }
console.debug(`${Me.metadata.name}: enabled`);
}
@@ -102,10 +116,14 @@ export default class VShell extends Extension.Extension {
// Reason for using "unlock-dialog" session mode:
// Updating the "appDisplay" content every time the screen is locked/unlocked takes quite a lot of time and affects the user experience.
disable() {
+ if (this._startupConId)
+ Main.layoutManager.disconnect(this._startupConId);
this.removeVShell();
this._disposeModules();
console.debug(`${Me.metadata.name}: disabled`);
+ Me.updateMessageDialog.destroy();
+ Me.updateMessageDialog = null;
this._cleanGlobals();
}
@@ -152,15 +170,24 @@ export default class VShell extends Extension.Extension {
Me.Modules = null;
}
- activateVShell() {
+ _activateVShell() {
this._enabled = true;
+ if (!this._delayedStartup && !Main.sessionMode.isLocked) {
+ Me.updateMessageDialog.showMessage();
+ this._delayedStartup = false;
+ }
+
this._originalGetNeighbor = Meta.Workspace.prototype.get_neighbor;
this._removeTimeouts();
this._timeouts = {};
- this._ensureOverviewIsHidden();
+ if (!Main.layoutManager._startingUp)
+ this._ensureOverviewIsHidden();
+
+ // store dash _workId so we will be able to detect replacement when entering overview
+ this._storeDashId();
// load VShell configuration
this._updateSettings();
@@ -184,9 +211,6 @@ export default class VShell extends Extension.Extension {
this._updateSettingsConnection();
- // store dash _workId so we will be able to detect replacement when entering overview
- this._storeDashId();
-
// workaround for upstream bug - overview always shows workspace 1 instead of the active one after restart
this._setInitialWsIndex();
@@ -213,8 +237,6 @@ export default class VShell extends Extension.Extension {
// switch PageUp/PageDown workspace switcher shortcuts
this._switchPageShortcuts();
- // hide status message if shown
- this._showStatusMessage(false);
this._prevDash = null;
// restore default animation speed
@@ -226,7 +248,6 @@ export default class VShell extends Extension.Extension {
_ensureOverviewIsHidden() {
if (Main.overview._shown) {
Main.overview._shown = false;
- // Main.overview._animationInProgress = true;
Main.overview._visibleTarget = false;
Main.overview._overview.prepareToLeaveOverview();
Main.overview._changeShownState('HIDING');
@@ -237,11 +258,13 @@ export default class VShell extends Extension.Extension {
_resetShellProperties() {
const controls = Main.overview._overview.controls;
- // remove any position offsets from dash and ws thumbnails
- if (!Me.Util.dashNotDefault()) {
- controls.dash.translation_x = 0;
- controls.dash.translation_y = 0;
- }
+ // layoutManager._dash retains reference to the default dash even when DtD is enabled
+ const dash = controls.layoutManager._dash;
+ // Restore default dash background style
+ dash._background.set_style('');
+
+ dash.translation_x = 0;
+ dash.translation_y = 0;
controls._thumbnailsBox.translation_x = 0;
controls._thumbnailsBox.translation_y = 0;
controls._searchEntryBin.translation_y = 0;
@@ -255,9 +278,6 @@ export default class VShell extends Extension.Extension {
controls._thumbnailsBox.opacity = 255;
controls._searchController._searchResults.opacity = 255;
-
- // restore default dash background style
- controls.dash._background.set_style('');
}
_removeTimeouts() {
@@ -297,8 +317,7 @@ export default class VShell extends Extension.Extension {
_updateConnections() {
if (!this._monitorsChangedConId)
- this._monitorsChangedConId = Main.layoutManager.connect('monitors-changed', () => this._updateVShell(2000));
-
+ this._monitorsChangedConId = Main.layoutManager.connect('monitors-changed', () => this._adaptToSystemChange());
if (!this._showingOverviewConId)
this._showingOverviewConId = Main.overview.connect('showing', this._onShowingOverview.bind(this));
@@ -317,7 +336,9 @@ export default class VShell extends Extension.Extension {
}
);
} else if (session.currentMode === 'unlock-dialog') {
- Me.Modules.panelModule.update(true);
+ Me.Modules.panelModule.update();
+ Main.layoutManager.panelBox.translation_y = 0;
+ Main.panel.opacity = 255;
}
});
}
@@ -341,14 +362,14 @@ export default class VShell extends Extension.Extension {
// UNINSTALLED: 99,
// };
// no need to restart on disable/remove
- // - if DtD was enabled before VShell, VShell will be rebased by extensionSystem
- // - if DtD was enabled after VShell, the first _showingOverview detect replacement of the dash and repair VShell
+ // - if DtD was enabled before VShell, VShell will be rebased by the extensionSystem
+ // - If DtD was enabled after VShell, the first _showingOverview detects the replacement of the dash and repairs VShell
const reset = [1, 2].includes(extension.state);
const dashReplacement = uuid.includes('dash-to-dock') || uuid.includes('ubuntu-dock') || uuid.includes('dash-to-panel');
if (dashReplacement && reset)
this._watchDashToDock = true;
if (!Main.layoutManager._startingUp && reset && dashReplacement)
- this._updateVShell(1999);
+ this._adaptToSystemChange(2000);
}
);
}
@@ -427,50 +448,14 @@ export default class VShell extends Extension.Extension {
Me.Modules.layoutModule.update(reset);
Me.Modules.dashModule.update(reset);
- // avoid enabling panel module when session is locked
- if (reset || (!reset && !Main.sessionMode.isLocked))
- Me.Modules.panelModule.update(reset);
- // the panel must be visible when screen is locked
- // at startup time, panel will be updated from the startupAnimation after allocation
- if (!reset && Main.sessionMode.isLocked && !Main.layoutManager._startingUp)
- Me.Modules.panelModule._showPanel(true);
- // PanelModule._showPanel(true);
- // hide panel so it appears directly on the final place
- /* else if (Main.layoutManager._startingUp && !Meta.is_restart())
- Main.panel.opacity = 0;*/
+ Me.Modules.panelModule.update(reset);
Me.Modules.workspaceAnimationModule.update(reset);
Me.Modules.workspaceSwitcherPopupModule.update(reset);
-
Me.Modules.swipeTrackerModule.update(reset);
-
Me.Modules.searchModule.update(reset);
- // don't rebuild app grid on any screen lock
- // even if the extension includes unlock-screen session mode
- // disable/enable is called at least once even on GS44
- // when screen lock is activated for the first time
- // because every first disable of each extension rebases
- // the entire extensions stack that was enabled later
- if (Main.sessionMode.isLocked)
- this._sessionLockActive = true;
-
- // This covers unnecessary enable/disable cycles during first screen lock when extensions are rebased, but is not allowed by the EGO rules
- if (!this._sessionLockActive || !Main.extensionManager._getEnabledExtensions().includes(Me.metadata.uuid)) {
- // iconGridModule will be updated from appDisplayModule
- Me.Modules.appDisplayModule.update(reset);
- }
-
- if (!this._sessionLockActive && !Main.layoutManager._startingUp && opt.APP_GRID_PERFORMANCE) {
- // Avoid showing status at startup, can cause freeze
- this._showStatusMessage();
- }
-
- if (!Main.sessionMode.isLocked)
- this._sessionLockActive = false;
-
- // iconGridModule will be updated from appDisplayModule
- // Me.Modules.appDisplayModule.update(reset);
+ Me.Modules.appDisplayModule.update(reset);
Me.Modules.windowAttentionHandlerModule.update(reset);
Me.Modules.appFavoritesModule.update(reset);
@@ -479,32 +464,34 @@ export default class VShell extends Extension.Extension {
Me.Modules.overlayKeyModule.update(reset);
Me.Modules.searchControllerModule.update(reset);
+ if (Main.sessionMode.isLocked)
+ this._sessionLockActive = true;
+
+ if (!Main.sessionMode.isLocked)
+ this._sessionLockActive = false;
+
if (!reset && !Main.layoutManager._startingUp)
Main.overview._overview.controls.setInitialTranslations();
+ if (this._sessionLockActive) {
+ Main.layoutManager.panelBox.translation_y = 0;
+ Main.panel.opacity = 255;
+ }
}
_onShowingOverview() {
if (Main.layoutManager._startingUp)
return;
- Main.overview._overview.controls.opacity = 255;
-
- // store pointer X coordinate for OVERVIEW_MODE 1 window spread - if mouse pointer is steady, don't spread
- opt.showingPointerX = global.get_pointer()[0];
-
- if (!Main.overview._overview.controls._bgManagers && (opt.SHOW_BG_IN_OVERVIEW || opt.SHOW_WS_PREVIEW_BG) && !Me.Util.getEnabledExtensions('blur-my-shell').length)
- Main.overview._overview.controls._setBackground();
-
if (this._watchDashToDock) {
- // workaround for Dash to Dock (Ubuntu Dock) breaking overview allocations after enabled and changed position
- // DtD replaces dock and its _workId on every position change
+ // Workaround for Dash to Dock (Ubuntu Dock) breaking overview allocations after enabling and changing its position
+ // DtD replaces its _workId on every position change
const dash = Main.overview.dash;
if (this._prevDash !== dash._workId)
- this._updateVShell(0);
+ this._adaptToSystemChange(0);
}
}
- _updateVShell(timeout = 200) {
+ _adaptToSystemChange(timeout = 200, full = false) {
if (!this._enabled || Main.layoutManager._startingUp)
return;
@@ -518,18 +505,17 @@ export default class VShell extends Extension.Extension {
return GLib.SOURCE_REMOVE;
const dash = Main.overview.dash;
- if (timeout < 2000) { // timeout < 2000 for partial update
+ if (!full) {
+ console.warn(`[${Me.metadata.name}] Warning: Updating overrides ...`);
this._prevDash = dash._workId;
- console.warn(`[${Me.metadata.name}]: Dash has been replaced, updating extension ...`);
Me._resetInProgress = true;
- // update only necessary modules if dash has been replaced
+ // Only update modules that might be affected by the dock extension
this._repairOverrides();
Me._resetInProgress = false;
} else {
- console.warn(`[${Me.metadata.name}]: Updating extension ...`);
- // for case the monitor configuration has been changed, update all
+ console.warn(`[${Me.metadata.name}] Warning: Rebuilding V-Shell ...`);
Me._resetInProgress = true;
- this.activateVShell();
+ this._activateVShell();
Me._resetInProgress = false;
}
this._timeouts.reset = 0;
@@ -538,7 +524,7 @@ export default class VShell extends Extension.Extension {
);
}
- // the key modules that can be affected by the supported incompatible extensions
+ // Modules possibly affected by supported but incompatible extensions
_repairOverrides() {
Me.Modules.overviewModule.update();
Me.Modules.overviewControlsModule.update();
@@ -548,6 +534,7 @@ export default class VShell extends Extension.Extension {
Me.Modules.panelModule.update();
Me.Modules.dashModule.update();
this._updateSettings();
+ Main.overview._overview.controls._setBackground();
}
_updateSettings(settings, key) {
@@ -557,16 +544,17 @@ export default class VShell extends Extension.Extension {
// avoid overload while loading profile - update only once
// delayed gsettings writes are processed alphabetically
if (key === 'aaa-loading-profile') {
- this._showStatusMessage();
if (this._timeouts.loadingProfile)
GLib.source_remove(this._timeouts.loadingProfile);
this._timeouts.loadingProfile = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
100, () => {
- this.activateVShell();
+ this._activateVShell();
this._timeouts.loadingProfile = 0;
return GLib.SOURCE_REMOVE;
- });
+ }
+ );
+ Me.updateMessageDialog.showMessage();
}
if (this._timeouts.loadingProfile)
return;
@@ -590,16 +578,6 @@ export default class VShell extends Extension.Extension {
opt.DASH_VISIBLE = opt.DASH_VISIBLE && !Me.Util.getEnabledExtensions('dash-to-panel@jderose9.github.com').length;
- const monitorWidth = global.display.get_monitor_geometry(global.display.get_primary_monitor()).width;
- if (monitorWidth < 1600) {
- opt.APP_GRID_ICON_SIZE_DEFAULT = opt.APP_GRID_ACTIVE_PREVIEW && !opt.APP_GRID_USAGE ? 128 : 64;
- opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT = 64;
- }
-
- /* if (!Me.Util.dashIsDashToDock()) { // DtD has its own opacity control
- Me.Modules.dashModule.updateStyle(dash);
- }*/
-
// adjust search entry style for OM2
if (opt.OVERVIEW_MODE2)
Main.overview.searchEntry.add_style_class_name('search-entry-om2');
@@ -615,12 +593,6 @@ export default class VShell extends Extension.Extension {
Main.overview.searchEntry.opacity = 255;
St.Settings.get().slow_down_factor = opt.ANIMATION_TIME_FACTOR;
- opt.START_Y_OFFSET = (opt.get('panelModule') && opt.PANEL_OVERVIEW_ONLY && opt.PANEL_POSITION_TOP) ||
- // better to add unnecessary space than to have a panel overlapping other objects
- Me.Util.getEnabledExtensions('hidetopbar').length
- ? Main.panel.height
- : 0;
-
// Options for workspace switcher, apply custom function only if needed
if (opt.WS_WRAPAROUND || opt.WS_IGNORE_LAST)
Meta.Workspace.prototype.get_neighbor = this._getNeighbor;
@@ -641,15 +613,12 @@ export default class VShell extends Extension.Extension {
if (key?.endsWith('-module')) {
for (let module of this._getModuleList()) {
if (opt.options[module] && key === opt.options[module][1]) {
- if (key === 'app-display-module')
- this._showStatusMessage();
Me.Modules[module].update();
break;
}
}
}
- Main.overview._overview.controls._setBackground();
this._switchPageShortcuts();
if (key?.includes('panel'))
@@ -698,6 +667,8 @@ export default class VShell extends Extension.Extension {
case 'new-window-monitor-fix':
this._updateNewWindowConnection();
break;
+ case 'click-empty-close':
+ Me.Modules.overviewControlsModule.update();
}
if (key?.includes('app-grid') ||
@@ -705,10 +676,8 @@ export default class VShell extends Extension.Extension {
key?.includes('dot-style') ||
key === 'show-search-entry' ||
key === 'ws-thumbnail-scale' ||
- key === 'ws-thumbnail-scale-appgrid') {
- this._showStatusMessage();
+ key === 'ws-thumbnail-scale-appgrid')
Me.Modules.appDisplayModule.update();
- }
}
_switchPageShortcuts() {
@@ -794,50 +763,6 @@ export default class VShell extends Extension.Extension {
settings.set_strv(keyMoveDown, moveDown);
}
- // Status dialog that appears during updating V-Shell configuration and blocks inputs
- _showStatusMessage(show = true) {
- if ((show && Me._resetInProgress) || Main.layoutManager._startingUp || !Main.overview._overview.controls._appDisplay._sortOrderedItemsAlphabetically)
- return;
-
- if (Me._vShellMessageTimeoutId) {
- GLib.source_remove(Me._vShellMessageTimeoutId);
- Me._vShellMessageTimeoutId = 0;
- }
-
- if (Me._vShellStatusMessage && !show) {
- Me._vShellStatusMessage.close();
- Me._vShellStatusMessage.destroy();
- Me._vShellStatusMessage = null;
- }
-
- if (!show)
- return;
-
- if (!Me._vShellStatusMessage) {
- const sm = new /* Main.*/RestartMessage(_('Updating V-Shell...'));
- sm.set_style('background-color: rgba(0,0,0,0.3);');
- sm.open();
- Me._vShellStatusMessage = sm;
- }
-
- // just for case the message wasn't removed from appDisplay after App Grid realization
- Me._vShellMessageTimeoutId = GLib.timeout_add_seconds(
- GLib.PRIORITY_DEFAULT,
- 5,
- () => {
- if (Me._vShellStatusMessage) {
- Me._vShellStatusMessage.close();
- Me._vShellStatusMessage.destroy();
- Me._vShellStatusMessage = null;
- Me._resetInProgress = false;
- }
-
- Me._vShellMessageTimeoutId = 0;
- return GLib.SOURCE_REMOVE;
- }
- );
- }
-
_getNeighbor(direction) {
// workspace matrix is supported
const activeIndex = this.index();
@@ -885,24 +810,3 @@ export default class VShell extends Extension.Extension {
return global.workspace_manager.get_workspace_by_index(neighborExists || wraparound ? index : activeIndex);
}
}
-
-const RestartMessage = GObject.registerClass(
-class RestartMessage extends ModalDialog.ModalDialog {
- _init(message) {
- super._init({
- shellReactive: true,
- styleClass: 'restart-message headline',
- shouldFadeIn: false,
- destroyOnClose: true,
- });
-
- let label = new St.Label({
- text: message,
- x_align: Clutter.ActorAlign.CENTER,
- y_align: Clutter.ActorAlign.CENTER,
- });
-
- this.contentLayout.add_child(label);
- this.buttonLayout.hide();
- }
-});
diff --git a/extensions/46/vertical-workspaces/lib/appFavorites.js b/extensions/47/vertical-workspaces/lib/appFavorites.js
index 977e65a..977e65a 100644
--- a/extensions/46/vertical-workspaces/lib/appFavorites.js
+++ b/extensions/47/vertical-workspaces/lib/appFavorites.js
diff --git a/extensions/46/vertical-workspaces/lib/dash.js b/extensions/47/vertical-workspaces/lib/dash.js
index 719c3de..c7ebbff 100644
--- a/extensions/46/vertical-workspaces/lib/dash.js
+++ b/extensions/47/vertical-workspaces/lib/dash.js
@@ -64,6 +64,7 @@ export const DashModule = class {
this.moduleEnabled = opt.get('dashModule');
const conflict = !!(Me.Util.getEnabledExtensions('dash-to-dock').length ||
+ Me.Util.getEnabledExtensions('dash2dock').length ||
Me.Util.getEnabledExtensions('ubuntu-dock').length ||
Me.Util.getEnabledExtensions('dash-to-panel').length);
@@ -139,6 +140,7 @@ export const DashModule = class {
? 'vertical-46'
: 'vertical'
);
+
this._setOrientation(Clutter.Orientation.VERTICAL);
} else {
this._setOrientation(Clutter.Orientation.HORIZONTAL);
@@ -212,6 +214,7 @@ export const DashModule = class {
}
_resetStyle(dash) {
+ dash.remove_style_class_name('dash-46');
dash.remove_style_class_name('vertical');
dash.remove_style_class_name('vertical-46');
dash.remove_style_class_name('vertical-gs3-left');
@@ -662,7 +665,14 @@ const DashCommon = {
const [, , buttonWidth, buttonHeight] = firstButton.get_preferred_size();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
- let availWidth, availHeight, maxIconSize;
+ let maxIconSize = opt.MAX_ICON_SIZE;
+ if (!maxIconSize) {
+ maxIconSize = Me.Util.monitorHasLowResolution()
+ ? 48
+ : 64;
+ }
+
+ let availWidth, availHeight;
if (dashHorizontal) {
availWidth = maxContent.x2 - maxContent.x1;
// Subtract icon padding and box spacing from the available width
@@ -676,7 +686,7 @@ const DashCommon = {
availHeight -= themeNode.get_vertical_padding();
availHeight -= buttonHeight - iconHeight;
- maxIconSize = Math.min(availWidth / iconChildren.length, availHeight, opt.MAX_ICON_SIZE * scaleFactor);
+ maxIconSize = Math.min(availWidth / iconChildren.length, availHeight, maxIconSize * scaleFactor);
} else {
availWidth = this._maxWidth;
availWidth -= this._background.get_theme_node().get_horizontal_padding();
@@ -688,7 +698,7 @@ const DashCommon = {
(iconChildren.length - 1) * spacing +
2 * this._background.get_theme_node().get_vertical_padding();
- maxIconSize = Math.min(availWidth, availHeight / iconChildren.length, opt.MAX_ICON_SIZE * scaleFactor);
+ maxIconSize = Math.min(availWidth, availHeight / iconChildren.length, maxIconSize * scaleFactor);
}
let iconSizes = BaseIconSizes.map(s => s * scaleFactor);
@@ -838,54 +848,17 @@ const DashCommon = {
},
};
-const DashIconCommon = {
+const AppIconCommon = {
after__init() {
- if (opt.DASH_ICON_SCROLL && !Me.Util.dashNotDefault()) {
- this._scrollConId = this.connect('scroll-event', DashExtensions.onScrollEvent.bind(this));
- this._leaveConId = this.connect('leave-event', DashExtensions.onLeaveEvent.bind(this));
- }
-
if (this._updateRunningDotStyle)
this._updateRunningDotStyle();
},
- /* popupMenu() {
- const side = opt.DASH_VERTICAL ? St.Side.LEFT : St.Side.BOTTOM;
- AppIconCommon.popupMenu.bind(this)(side);
- },*/
-
- _updateRunningStyle() {
- const currentWs = global.workspace_manager.get_active_workspace();
- const show = opt.DASH_ISOLATE_WS
- ? this.app.get_windows().filter(w => w.get_workspace() === currentWs).length
- : this.app.state !== Shell.AppState.STOPPED;
-
- if (show)
- this._dot.show();
- else
- this._dot.hide();
- },
-
- /* after__init() {
- if (this._updateRunningDotStyle)
- this._updateRunningDotStyle();
- },*/
-
_updateRunningDotStyle() {
if (opt.RUNNING_DOT_STYLE)
- this._dot.add_style_class_name('app-well-app-running-dot-custom');
+ this._dot.add_style_class_name('app-grid-running-dot-custom');
else
- this._dot.remove_style_class_name('app-well-app-running-dot-custom');
-
- if (!this.label && shellVersion46) {
- if (opt.DASH_VERTICAL) {
- this._dot.translation_y = 0;
- this._dot.translation_x = 0; // opt.DASH_LEFT ? -4 : 4;
- } else {
- this._dot.translation_y = 8;
- this._dot.translation_x = 0;
- }
- }
+ this._dot.remove_style_class_name('app-grid-running-dot-custom');
},
activate(button) {
@@ -957,9 +930,6 @@ const DashIconCommon = {
},
popupMenu(side = St.Side.LEFT) {
- side = opt.DASH_VERTICAL ? St.Side.LEFT : St.Side.BOTTOM;
- // AppIconCommon.popupMenu.bind(this)(side);
-
this.setForcedHighlight(true);
this._removeMenuTimeout();
this.fake_release();
@@ -1027,7 +997,6 @@ const DashIconCommon = {
}]);
}
-
popupItems.push([_('Move App to Current Workspace ( Shift + Click )'), this._moveAppToCurrentWorkspace]);
// WTMB (Windows Thumbnails) extension required
if (global.windowThumbnails) {
@@ -1081,6 +1050,48 @@ const DashIconCommon = {
},
};
+const DashIconCommon = {
+ after__init() {
+ if (opt.DASH_ICON_SCROLL && !Me.Util.dashNotDefault()) {
+ this._scrollConId = this.connect('scroll-event', DashExtensions.onScrollEvent.bind(this));
+ this._leaveConId = this.connect('leave-event', DashExtensions.onLeaveEvent.bind(this));
+ }
+ },
+
+ popupMenu() {
+ const side = opt.DASH_VERTICAL ? St.Side.LEFT : St.Side.BOTTOM;
+ AppIconCommon.popupMenu.bind(this)(side);
+ },
+
+ _updateRunningDotStyle() {
+ if (opt.RUNNING_DOT_STYLE)
+ this._dot.add_style_class_name('app-grid-running-dot-custom');
+ else
+ this._dot.remove_style_class_name('app-grid-running-dot-custom');
+
+ this._dot.translation_x = 0;
+ // _updateDotStyle() has been added in GS 46.2 to apply translation_y value from the CSS on style change
+ if (shellVersion46 && !this._updateDotStyle && !opt.DASH_VERTICAL)
+ this._dot.translation_y = 8;
+
+ // GS 46.0 (Ubuntu) only
+ if (opt.DASH_VERTICAL)
+ this._dot.translationY = 0;
+ },
+
+ _updateRunningStyle() {
+ const currentWs = global.workspace_manager.get_active_workspace();
+ const show = opt.DASH_ISOLATE_WS
+ ? this.app.get_windows().filter(w => w.get_workspace() === currentWs).length
+ : this.app.state !== Shell.AppState.STOPPED;
+
+ if (show)
+ this._dot.show();
+ else
+ this._dot.hide();
+ },
+};
+
const DashExtensions = {
onScrollEvent(source, event) {
if ((this.app && !opt.DASH_ICON_SCROLL) || (this._isSearchWindowsIcon && !opt.SEARCH_WINDOWS_ICON_SCROLL)) {
@@ -1255,20 +1266,6 @@ const DashExtensions = {
},
};
-const AppIconCommon = {
- after__init() {
- if (this._updateRunningDotStyle)
- this._updateRunningDotStyle();
- },
-
- _updateRunningDotStyle() {
- if (opt.RUNNING_DOT_STYLE)
- this._dot.add_style_class_name('app-well-app-running-dot-custom');
- else
- this._dot.remove_style_class_name('app-well-app-running-dot-custom');
- },
-};
-
const AppMenuCommon = {
_updateWindowsSection() {
if (global.compositor) {
diff --git a/extensions/46/vertical-workspaces/lib/iconGrid.js b/extensions/47/vertical-workspaces/lib/iconGrid.js
index 87f6adb..f0c6b18 100644
--- a/extensions/46/vertical-workspaces/lib/iconGrid.js
+++ b/extensions/47/vertical-workspaces/lib/iconGrid.js
@@ -11,14 +11,16 @@
'use strict';
import St from 'gi://St';
+import GLib from 'gi://GLib';
+import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as IconGrid from 'resource:///org/gnome/shell/ui/iconGrid.js';
let Me;
let opt;
// added sizes for better scaling
-const IconSize = {
+export const IconSize = {
LARGEST: 256,
224: 224,
208: 208,
@@ -34,8 +36,6 @@ const IconSize = {
TINY: 48,
};
-const PAGE_WIDTH_CORRECTION = 100;
-
export const IconGridModule = class {
constructor(me) {
Me = me;
@@ -90,39 +90,52 @@ const IconGridCommon = {
return layoutManager.getItemsAtPage(page);
},
+ _shouldUpdateGrid(width, height) {
+ if (this.layoutManager._isFolder)
+ return false;
+ else if (this._currentMode === -1)
+ return true;
+
+ // Update if page size changed
+ // Page dimensions may change within a small range
+ const range = 5;
+ return (Math.abs(width - (this._gridForWidth ?? 0)) > range) ||
+ (Math.abs(height - (this._gridForHeight ?? 0)) > range);
+ },
+
_findBestModeForSize(width, height) {
// this function is for main grid only, folder grid calculation is in appDisplay.AppFolderDialog class
- if (this._currentMode > -1 || this.layoutManager._isFolder)
+ if (!this._shouldUpdateGrid(width, height))
return;
+
+ this._gridForWidth = width;
+ this._gridForHeight = height;
+
+ this._updateDefaultIconSize();
const { pagePadding } = this.layout_manager;
const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
- const iconPadding = 51 * scaleFactor;
- // provided width is usually about 100px wider in horizontal orientation with prev/next page indicators
- const pageIndicatorCompensation = opt.ORIENTATION ? 0 : PAGE_WIDTH_CORRECTION;
+ const itemPadding = 55;
- width -= pagePadding.left + pagePadding.right + pageIndicatorCompensation;
- width *= opt.APP_GRID_PAGE_WIDTH_SCALE;
+ // pagePadding is already affected by the scaleFactor
+ width -= pagePadding.left + pagePadding.right;
height -= pagePadding.top + pagePadding.bottom;
- // store grid max dimensions for icon size algorithm
+ // Sync with _findBestIconSize()
+ this.layoutManager._gridSizeChanged = true;
this.layoutManager._gridWidth = width;
this.layoutManager._gridHeight = height;
- width -= 80; // compensation for default padding
- height -= 80;
+ // All widgets are affected by the scaleFactor so we need to apply it also on the page size
+ width /= scaleFactor;
+ height /= scaleFactor;
const spacing = opt.APP_GRID_SPACING;
- // set the icon size as fixed to avoid changes in size later
const iconSize = opt.APP_GRID_ICON_SIZE > 0 ? opt.APP_GRID_ICON_SIZE : opt.APP_GRID_ICON_SIZE_DEFAULT;
- // this.layout_manager.fixedIconSize = iconSize;
- const itemSize = iconSize * scaleFactor + iconPadding;
- // if this._gridModes.length === 1, custom grid should be used
- // if (iconSize > 0 && this._gridModes.length > 1) {
+ const itemSize = iconSize + itemPadding;
let columns = opt.APP_GRID_COLUMNS;
let rows = opt.APP_GRID_ROWS;
// 0 means adaptive size
let unusedSpaceH = -1;
- let unusedSpaceV = -1;
if (!columns) {
// calculate #columns + 1 without spacing
columns = Math.floor(width / itemSize) + 1;
@@ -133,6 +146,7 @@ const IconGridCommon = {
unusedSpaceH = width - columns * itemSize - (columns - 1) * spacing;
}
}
+ let unusedSpaceV = -1;
if (!rows) {
rows = Math.floor(height / itemSize) + 1;
while (unusedSpaceV < 0) {
@@ -142,9 +156,45 @@ const IconGridCommon = {
}
this._gridModes = [{ columns, rows }];
- // }
-
+ this._currentMode = -1;
this._setGridMode(0);
+ this.layoutManager.updateIconSize();
+ // Call _redisplay() from timeout to avoid allocation errors
+ GLib.idle_add(GLib.PRIORITY_LOW, () =>
+ Main.overview._overview.controls.appDisplay._redisplay()
+ );
+ },
+
+ _updateDefaultIconSize() {
+ // Reduce default icon size for low resolution screens and high screen scales
+ if (Me.Util.monitorHasLowResolution()) {
+ opt.APP_GRID_ICON_SIZE_DEFAULT = opt.APP_GRID_ACTIVE_PREVIEW && !opt.APP_GRID_USAGE ? 128 : 64;
+ opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT = 64;
+ } else {
+ opt.APP_GRID_ICON_SIZE_DEFAULT = opt.APP_GRID_ACTIVE_PREVIEW && !opt.APP_GRID_USAGE ? 192 : 96;
+ }
+ },
+
+ // Workaround for the upstream bug
+ // https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5753
+ // https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5240
+ // https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6892
+ // The appGridLayout._currentPage is not updated when the page is changed in the grid
+ // For example, when user navigates app icons using a keyboard
+ // Related issues open on GNOME's gitlab:
+ after_goToPage() {
+ if (this._delegate._appGridLayout._currentPage !== this._currentPage)
+ this._delegate._appGridLayout.goToPage(this._currentPage);
+ },
+
+ // Workaround for the upstream bug
+ // https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7700
+ // Return INVALID target if x or y is out of the grid view to prevent pages[page] undefined error (horizontal orientation only)
+ getDropTarget(x, y) {
+ if (x < 0 || y < 0)
+ return [0, 0, 0]; // [0, 0, DragLocation.INVALID]
+ const layoutManager = this.layout_manager;
+ return layoutManager.getDropTarget(x, y, this._currentPage);
},
};
@@ -153,45 +203,45 @@ const IconGridLayoutCommon = {
if (this.fixedIconSize !== -1)
return this.fixedIconSize;
+ if (!this._isFolder && !this._gridSizeChanged)
+ return this._iconSize;
+ this._gridSizeChanged = false;
+
+
const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
const nColumns = this.columnsPerPage;
const nRows = this.rowsPerPage;
- // if grid is not defined return default icon size
+ // If grid is not defined, return default icon size
if (nColumns < 1 && nRows < 1) {
- let iconSize;
- if (this._isFolder)
- iconSize = opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT;
- else
- iconSize = opt.APP_GRID_ICON_SIZE_DEFAULT;
-
- return iconSize;
+ return this._isFolder
+ ? opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT
+ : opt.APP_GRID_ICON_SIZE_DEFAULT;
}
- const columnSpacingPerPage = /* opt.APP_GRID_SPACING*/ 1 * (nColumns - 1);
- const rowSpacingPerPage = /* opt.APP_GRID_SPACING*/ 1 * (nRows - 1);
- const iconPadding = 55 * scaleFactor;
+ const spacing = this._isFolder
+ ? opt.APP_GRID_FOLDER_SPACING
+ : opt.APP_GRID_SPACING;
- const paddingH = this._isFolder ? this.pagePadding.left + this.pagePadding.right : 0;
- const paddingV = this._isFolder ? this.pagePadding.top + this.pagePadding.bottom : 0;
+ const columnSpacingPerPage = spacing * (nColumns - 1);
+ const rowSpacingPerPage = spacing * (nRows - 1);
+ const itemPadding = 55;
+
+ const width = (this._gridWidth ? this._gridWidth : this._pageWidth) / scaleFactor;
+ let height = (this._gridHeight ? this._gridHeight : this._pageHeight) / scaleFactor;
- const width = this._gridWidth ? this._gridWidth : this._pageWidth;
- const height = this._gridHeight ? this._gridHeight : this._pageHeight;
if (!width || !height)
return opt.APP_GRID_ICON_SIZE_DEFAULT;
const [firstItem] = this._container;
- /* if (opt.APP_GRID_ADAPTIVE && !this._isFolder)
- return opt.APP_GRID_ICON_SIZE_DEFAULT;*/
-
let iconSizes = Object.values(IconSize).sort((a, b) => b - a);
- // limit max icon size for folders and fully adaptive folder grids, the whole range is for the main grid with active folders
- if (this._isFolder && opt.APP_GRID_FOLDER_ADAPTIVE && opt.APP_GRID_FOLDER_ICON_SIZE < 0)
+ // Limit max icon size for folders and fully adaptive folder grids, the whole range is for the main grid with active folders
+ if (this._isFolder && opt.APP_GRID_FOLDER_ICON_SIZE < 0)
iconSizes = iconSizes.slice(iconSizes.indexOf(opt.APP_GRID_FOLDER_ICON_SIZE_DEFAULT), -1);
else if (this._isFolder)
iconSizes = iconSizes.slice(iconSizes.indexOf(IconSize.LARGE), -1);
- else if (opt.APP_GRID_ADAPTIVE && opt.APP_GRID_ICON_SIZE < 0)
+ else if (opt.APP_GRID_ICON_SIZE < 0)
iconSizes = iconSizes.slice(iconSizes.indexOf(opt.APP_GRID_ICON_SIZE_DEFAULT), -1);
let sizeInvalid = false;
@@ -202,7 +252,7 @@ const IconGridLayoutCommon = {
firstItem.icon.setIconSize(size);
const [firstItemWidth] = firstItem.get_preferred_size();
- const itemSize = firstItemWidth;
+ const itemSize = firstItemWidth / scaleFactor;
if (itemSize < size)
sizeInvalid = true;
@@ -211,19 +261,16 @@ const IconGridLayoutCommon = {
}
if (!firstItem || sizeInvalid) {
- usedWidth = (size + iconPadding) * nColumns;
- usedHeight = (size + iconPadding) * nRows;
+ usedWidth = (size + itemPadding) * nColumns;
+ usedHeight = (size + itemPadding) * nRows;
}
const emptyHSpace =
- width - usedWidth - columnSpacingPerPage - paddingH;
- // this.pagePadding.left - this.pagePadding.right;
+ width - usedWidth - columnSpacingPerPage;
const emptyVSpace =
- height - usedHeight - rowSpacingPerPage - paddingV;
- // this.pagePadding.top - this.pagePadding.bottom;
+ height - usedHeight - rowSpacingPerPage;
- if (emptyHSpace >= 0 && emptyVSpace >= 0) {
+ if (emptyHSpace >= 0 && emptyVSpace >= 0)
return size;
- }
}
return IconSize.TINY;
@@ -266,7 +313,9 @@ const IconGridLayoutCommon = {
page = this._findBestPageToAppend(page);
this._shouldEaseItems = true;
- this._container.add_child(item);
+
+ if (!this._container.get_children().includes(item))
+ this._container.add_child(item);
this._addItemToPage(item, page, index);
},
@@ -331,6 +380,28 @@ const IconGridLayoutCommon = {
this._relocateSurplusItems(pageIndex);
},
+ _relocateSurplusItems(pageIndex) {
+ // Avoid recursion during relocations in _redisplay()
+ if (this._skipRelocateSurplusItems)
+ return;
+
+ const visiblePageItems = this._pages[pageIndex].visibleChildren;
+ const itemsPerPage = this.columnsPerPage * this.rowsPerPage;
+
+ // No overflow
+ if (visiblePageItems.length <= itemsPerPage)
+ return;
+
+ const nExtraItems = visiblePageItems.length - itemsPerPage;
+ for (let i = 0; i < nExtraItems; i++) {
+ const overflowIndex = visiblePageItems.length - i - 1;
+ const overflowItem = visiblePageItems[overflowIndex];
+
+ this._removeItemData(overflowItem);
+ this._addItemToPage(overflowItem, pageIndex + 1, 0);
+ }
+ },
+
_findBestPageToAppend(startPage) {
const itemsPerPage = this.columnsPerPage * this.rowsPerPage;
@@ -343,4 +414,16 @@ const IconGridLayoutCommon = {
return this._pages.length;
},
+
+ updateIconSize() {
+ const iconSize = this._findBestIconSize();
+ if (this._iconSize !== iconSize) {
+ this._iconSize = iconSize;
+
+ for (const child of this._container)
+ child.icon.setIconSize(iconSize);
+
+ this.notify('icon-size');
+ }
+ },
};
diff --git a/extensions/46/vertical-workspaces/lib/layout.js b/extensions/47/vertical-workspaces/lib/layout.js
index 807f9e0..807f9e0 100644
--- a/extensions/46/vertical-workspaces/lib/layout.js
+++ b/extensions/47/vertical-workspaces/lib/layout.js
diff --git a/extensions/46/vertical-workspaces/lib/messageTray.js b/extensions/47/vertical-workspaces/lib/messageTray.js
index 28d6b1d..28d6b1d 100644
--- a/extensions/46/vertical-workspaces/lib/messageTray.js
+++ b/extensions/47/vertical-workspaces/lib/messageTray.js
diff --git a/extensions/46/vertical-workspaces/lib/optionsFactory.js b/extensions/47/vertical-workspaces/lib/optionsFactory.js
index 05e14b0..7284085 100644
--- a/extensions/46/vertical-workspaces/lib/optionsFactory.js
+++ b/extensions/47/vertical-workspaces/lib/optionsFactory.js
@@ -300,10 +300,10 @@ export const ItemFactory = class ItemFactory {
function setName() {
const ProfileNames = [
- _('GNOME 3'),
- _('GNOME 40+ - Bottom Hot Edge'),
- _('Hot Corner Centric - Top Left Hot Corner'),
- _('Dock Overview - Bottom Hot Edge'),
+ _('GNOME 3 Layout (Vertical WS)'),
+ _('GNOME 4x Layout, Bottom Hot Edge (Horizontal WS)'),
+ _('Top Left Hot Corner Centric (Vertical WS)'),
+ _('Dock-Like Overview, Bottom Hot Edge (Horizontal WS)'),
];
let name = opt.get(`profileName${profileIndex}`, true);
diff --git a/extensions/46/vertical-workspaces/lib/osdWindow.js b/extensions/47/vertical-workspaces/lib/osdWindow.js
index a06a331..a06a331 100644
--- a/extensions/46/vertical-workspaces/lib/osdWindow.js
+++ b/extensions/47/vertical-workspaces/lib/osdWindow.js
diff --git a/extensions/46/vertical-workspaces/lib/overlayKey.js b/extensions/47/vertical-workspaces/lib/overlayKey.js
index 5ffd973..5ffd973 100644
--- a/extensions/46/vertical-workspaces/lib/overlayKey.js
+++ b/extensions/47/vertical-workspaces/lib/overlayKey.js
diff --git a/extensions/46/vertical-workspaces/lib/overview.js b/extensions/47/vertical-workspaces/lib/overview.js
index 30cc5db..30cc5db 100644
--- a/extensions/46/vertical-workspaces/lib/overview.js
+++ b/extensions/47/vertical-workspaces/lib/overview.js
diff --git a/extensions/46/vertical-workspaces/lib/overviewControls.js b/extensions/47/vertical-workspaces/lib/overviewControls.js
index 41db47f..c5a74f1 100644
--- a/extensions/46/vertical-workspaces/lib/overviewControls.js
+++ b/extensions/47/vertical-workspaces/lib/overviewControls.js
@@ -10,16 +10,14 @@
'use strict';
-import GLib from 'gi://GLib';
import Clutter from 'gi://Clutter';
+import GLib from 'gi://GLib';
+import GObject from 'gi://GObject';
import St from 'gi://St';
-import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
-import GObject from 'gi://GObject';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as Overview from 'resource:///org/gnome/shell/ui/overview.js';
-import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js';
import * as WorkspacesView from 'resource:///org/gnome/shell/ui/workspacesView.js';
import * as Background from 'resource:///org/gnome/shell/ui/background.js';
@@ -33,11 +31,10 @@ let _;
const ControlsState = OverviewControls.ControlsState;
const FitMode = WorkspacesView.FitMode;
+const STARTUP_ANIMATION_TIME = 500;
const ANIMATION_TIME = Overview.ANIMATION_TIME;
-const DASH_MAX_SIZE_RATIO = 0.25;
+const DASH_MAX_SIZE_RATIO = 0.35;
-let _originalSearchControllerSigId;
-let _searchControllerSigId;
let _timeouts;
export const OverviewControlsModule = class {
@@ -84,13 +81,18 @@ export const OverviewControlsModule = class {
this._replaceOnSearchChanged();
this._overrides.addOverride('ControlsManager', OverviewControls.ControlsManager.prototype, ControlsManagerCommon);
-
+ this._overrides.addOverride('ControlsManagerLayoutCommon', Main.overview._overview.controls.layoutManager, ControlsManagerLayoutCommon);
if (opt.ORIENTATION === Clutter.Orientation.VERTICAL)
this._overrides.addOverride('ControlsManagerLayout', Main.overview._overview.controls.layoutManager, ControlsManagerLayoutVertical);
else
this._overrides.addOverride('ControlsManagerLayout', Main.overview._overview.controls.layoutManager, ControlsManagerLayoutHorizontal);
- this._overrides.addOverride('LayoutManager', Layout.LayoutManager.prototype, LayoutManager);
+ // Allow user to close the overview by clicking on an empty space on the primary monitor's overview
+ // Secondary monitors are handled in workspacesView
+ this._addClickToCloseOverview();
+
+ // Update custom workAreaBox
+ Main.overview._overview.controls.layoutManager._updateWorkAreaBox();
console.debug(' OverviewControlsModule - Activated');
}
@@ -103,6 +105,7 @@ export const OverviewControlsModule = class {
const reset = true;
this._replaceOnSearchChanged(reset);
Main.overview._overview._controls._appDisplay.opacity = 255;
+ this._addClickToCloseOverview(reset);
console.debug(' OverviewControlsModule - Disabled');
}
@@ -120,29 +123,55 @@ export const OverviewControlsModule = class {
_replaceOnSearchChanged(reset) {
const searchController = Main.overview.searchController;
if (reset) {
- if (_searchControllerSigId) {
- searchController.disconnect(_searchControllerSigId);
- _searchControllerSigId = 0;
+ if (this._searchControllerSigId) {
+ searchController.disconnect(this._searchControllerSigId);
+ this._searchControllerSigId = 0;
}
- if (_originalSearchControllerSigId) {
- searchController.unblock_signal_handler(_originalSearchControllerSigId);
- _originalSearchControllerSigId = 0;
+ if (this._originalSearchControllerSigId) {
+ searchController.unblock_signal_handler(this._originalSearchControllerSigId);
+ this._originalSearchControllerSigId = 0;
}
- Main.overview.searchController._searchResults.translation_x = 0;
- Main.overview.searchController._searchResults.translation_y = 0;
+ searchController._searchResults.translation_x = 0;
+ searchController._searchResults.translation_y = 0;
Main.overview.searchEntry.visible = true;
Main.overview.searchEntry.opacity = 255;
} else {
// reconnect signal to use custom function (callbacks cannot be overridden in class prototype, they are already in memory as a copy for the given callback)
- if (!_originalSearchControllerSigId)
- _originalSearchControllerSigId = GObject.signal_handler_find(searchController, { signalId: 'notify', detail: 'search-active' });
- if (_originalSearchControllerSigId)
- searchController.block_signal_handler(_originalSearchControllerSigId);
+ if (!this._originalSearchControllerSigId) {
+ this._originalSearchControllerSigId = GObject.signal_handler_find(searchController, { signalId: 'notify', detail: 'search-active' });
+ if (this._originalSearchControllerSigId)
+ searchController.block_signal_handler(this._originalSearchControllerSigId);
+ }
- if (!_searchControllerSigId)
- _searchControllerSigId = searchController.connect('notify::search-active', ControlsManagerCommon._onSearchChanged.bind(Main.overview._overview.controls));
+ if (!this._searchControllerSigId)
+ this._searchControllerSigId = searchController.connect('notify::search-active', () => Main.overview._overview.controls._onSearchChanged());
}
}
+
+ _addClickToCloseOverview(reset) {
+ const overview = Main.overview._overview;
+
+ overview.reactive = false;
+ if (this._clickEmptyConId) {
+ overview.disconnect(this._clickEmptyConId);
+ this._clickEmptyConId = 0;
+ }
+
+ if (reset || !opt.CLICK_EMPTY_CLOSE)
+ return;
+
+ overview.reactive = true;
+ this._clickEmptyConId = overview.connect('button-release-event', (actor, event) => {
+ const button = event.get_button();
+ const overviewState = overview.controls._stateAdjustment.value;
+ const buttonPrimary = button === Clutter.BUTTON_PRIMARY;
+ const buttonSecondary = button === Clutter.BUTTON_SECONDARY;
+ const buttonAny = buttonPrimary || buttonSecondary;
+
+ if ((overviewState === 1 && buttonAny) || (overviewState === 2 && buttonSecondary))
+ Main.overview.hide();
+ });
+ }
};
const ControlsManagerCommon = {
@@ -151,19 +180,32 @@ const ControlsManagerCommon = {
...
}*/
+ prepareToEnterOverview() {
+ this._searchController.prepareToEnterOverview();
+ this._workspacesDisplay.prepareToEnterOverview();
+ // Workaround for thumbnailsBox not re-scaling after switching workspace outside of overview using a trackpad
+ this._thumbnailsBox._updateIndicator();
+
+ Main.overview._overview.controls.opacity = 255;
+
+ // Ensure that overview backgrounds are ready when needed
+ if (!this._bgManagers && (opt.SHOW_BG_IN_OVERVIEW || !opt.SHOW_WS_PREVIEW_BG))
+ this._setBackground();
+ else if (this._bgManagers && !(opt.SHOW_BG_IN_OVERVIEW || !opt.SHOW_WS_PREVIEW_BG))
+ this._setBackground(true);
+
+ // 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];
+ },
+
// this function has duplicate in WorkspaceView so we use one function for both to avoid issues with syncing them
_getFitModeForState(state) {
return _getFitModeForState(state);
},
_updateThumbnailsBox() {
- const { currentState } = this._stateAdjustment.getStateTransitionParams();
const { shouldShow } = this._thumbnailsBox;
- const thumbnailsBoxVisible = shouldShow &&
- ((currentState < ControlsState.APP_GRID && opt.SHOW_WS_TMB) ||
- (currentState > ControlsState.WINDOW_PICKER && opt.SHOW_WS_TMB_APPGRID) ||
- (currentState > ControlsState.WINDOW_PICKER && this._searchController.searchActive && opt.SHOW_WS_TMB)
- );
+ const thumbnailsBoxVisible = shouldShow;
this._thumbnailsBox.visible = thumbnailsBoxVisible;
// this call should be directly in _update(), but it's used as a callback function and it would require to reconnect the signal
@@ -210,13 +252,18 @@ const ControlsManagerCommon = {
if (currentState === 0 && opt.OVERVIEW_MODE && opt.WORKSPACE_MODE)
opt.WORKSPACE_MODE = 0;
- if (!opt.WS_ANIMATION || !opt.SHOW_WS_TMB) {
+ if (!opt.WS_ANIMATION || (!opt.SHOW_WS_TMB && opt.SHOW_WS_PREVIEW_BG)) {
this._workspacesDisplay.opacity = opacity;
- } else if (!opt.SHOW_WS_TMB_BG) {
+ } else if (!opt.SHOW_WS_TMB_BG && opt.SHOW_WS_PREVIEW_BG) {
// fade out ws wallpaper during transition to ws switcher if ws switcher background disabled
- const ws = this._workspacesDisplay._workspacesViews[global.display.get_primary_monitor()]?._workspaces[this._workspaceAdjustment.value];
- if (ws)
- ws._background.opacity = opacity;
+ const workspaces = this._workspacesDisplay._workspacesViews[global.display.get_primary_monitor()]?._workspaces;
+ // Speed up the workspace background opacity transition
+ if (opt.WORKSPACE_MAX_SPACING < opt.WS_MAX_SPACING_OFF_SCREEN && workspaces)
+ // If workspacesDisplay max spacing is set so adjacent workspaces could be visible on the screen
+ workspaces.forEach(w => w._background.set_opacity(Math.max(0, opacity - (255 - opacity))));
+ else if (workspaces)
+ // If adjacent workspaces should not be visible on the screen, set the opacity only for the visible one
+ workspaces[this._workspaceAdjustment.value]?._background.set_opacity(Math.max(0, opacity - (255 - opacity)));
}
// if ws preview background is disabled, animate tmb box and dash
@@ -229,7 +276,7 @@ const ControlsManagerCommon = {
// 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);
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 finalized, giving nonsense width
+ if (!tmbBox._translationOriginal || Math.abs(tmbBox._translationOriginal[0]) > 500) { // swipe gesture can call this calculation before tmbBox is realized, giving nonsense width
const [dashTranslationX, dashTranslationY, tmbTranslationX, tmbTranslationY, searchTranslationY] = this._getOverviewTranslations(dash, tmbBox, searchEntryBin);
tmbBox._translationOriginal = [tmbTranslationX, tmbTranslationY];
dash._translationOriginal = [dashTranslationX, dashTranslationY];
@@ -275,6 +322,10 @@ const ControlsManagerCommon = {
} else {
this._workspacesDisplay.scale_x = 1;
}
+ if (opt.LEAVING_SEARCH && currentState <= ControlsState.WINDOW_PICKER) {
+ opt.LEAVING_SEARCH = false;
+ }
+
this._workspacesDisplay.setPrimaryWorkspaceVisible(workspacesDisplayVisible);
if (!this.dash._isAbove && progress > 0 && opt.OVERVIEW_MODE2) {
@@ -292,11 +343,14 @@ const ControlsManagerCommon = {
this.set_child_above_sibling(this._searchEntryBin, null);
if (!Me.Util.dashNotDefault())
this.set_child_above_sibling(this.dash, null);
-
+ if (Main.layoutManager.panelBox.get_parent() === Main.layoutManager.overviewGroup)
+ Main.layoutManager.overviewGroup.set_child_above_sibling(Main.layoutManager.panelBox, Main.overview._overview);
this.dash._isAbove = true;
} else if (this.dash._isAbove && progress < 1) {
// keep dash below for ws transition between the overview and hidden state
this.set_child_above_sibling(this._workspacesDisplay, null);
+ if (Main.layoutManager.panelBox.get_parent() === Main.layoutManager.overviewGroup)
+ Main.layoutManager.overviewGroup.set_child_below_sibling(Main.layoutManager.panelBox, Main.overview._overview);
this.dash._isAbove = false;
}
},
@@ -319,6 +373,41 @@ const ControlsManagerCommon = {
!this._searchTransition;
},
+ _activateSearchAppGridMode() {
+ if (!this._origAppGridContent) {
+ this._origAppGridContent = {
+ usage: opt.APP_GRID_USAGE,
+ favorites: opt.APP_GRID_EXCLUDE_FAVORITES,
+ running: opt.APP_GRID_EXCLUDE_RUNNING,
+ incompletePages: this._appDisplay._grid.layoutManager.allowIncompletePages,
+ order: opt.APP_GRID_ORDER,
+ };
+ opt.APP_GRID_ORDER = 3;
+ opt.APP_GRID_USAGE = true;
+ opt.APP_GRID_EXCLUDE_FAVORITES = false;
+ opt.APP_GRID_EXCLUDE_RUNNING = false;
+ this._appDisplay._grid.layoutManager.allowIncompletePages = false;
+ this._appDisplay._redisplay();
+ }
+ },
+
+ _deactivateSearchAppGridMode() {
+ if (this._origAppGridContent) {
+ const icons = this._appDisplay._orderedItems;
+ icons.forEach(icon => {
+ icon.visible = true;
+ });
+
+ opt.APP_GRID_ORDER = this._origAppGridContent.order;
+ opt.APP_GRID_USAGE = this._origAppGridContent.usage;
+ opt.APP_GRID_EXCLUDE_FAVORITES = this._origAppGridContent.favorites;
+ opt.APP_GRID_EXCLUDE_RUNNING = this._origAppGridContent.running;
+ this._appDisplay._grid.layoutManager.allowIncompletePages = this._origAppGridContent.incompletePages;
+ this._origAppGridContent = null;
+ this._appDisplay._redisplay();
+ }
+ },
+
_onSearchChanged() {
// something is somewhere setting the opacity to 0 if V-Shell is rebased while in overview / search
this._searchController.opacity = 255;
@@ -351,9 +440,20 @@ const ControlsManagerCommon = {
return;
if (!searchActive) {
+ if (!this.dash.showAppsButton.checked)
+ opt.LEAVING_SEARCH = true;
+
+ if (this._origAppGridContent)
+ this._deactivateSearchAppGridMode();
+
this._workspacesDisplay.reactive = true;
this._workspacesDisplay.setPrimaryWorkspaceVisible(true);
} else {
+ if (opt.SEARCH_APP_GRID_MODE && this.dash.showAppsButton.checked) {
+ this._activateSearchAppGridMode();
+ return;
+ }
+
if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
this._searchController._searchResults._statusText.add_style_class_name('search-statustext-om2');
else
@@ -361,6 +461,7 @@ const ControlsManagerCommon = {
this._searchController.show();
entry.visible = true;
entry.opacity = 255;
+ opt.LEAVING_SEARCH = false;
}
if (opt.SHOW_BG_IN_OVERVIEW && this._bgManagers)
@@ -445,7 +546,6 @@ const ControlsManagerCommon = {
// reuse already tuned overview transition, just replace APP_GRID with the search view
if (!(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) && !Main.overview._animationInProgress && finalState !== ControlsState.HIDDEN && !this.dash.showAppsButton.checked) {
this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2');
- this._searchController._searchResults._content.add_style_class_name('search-section-content-bg');
this._searchEntry.remove_style_class_name('search-entry-om2');
const duration = opt.SEARCH_VIEW_ANIMATION ? 140 : 0;
this._stateAdjustment.ease(searchActive ? ControlsState.APP_GRID : ControlsState.WINDOW_PICKER, {
@@ -464,11 +564,9 @@ const ControlsManagerCommon = {
});
} else if (opt.OVERVIEW_MODE2 && !(opt.WORKSPACE_MODE || this.dash.showAppsButton.checked)) {
// add background to search results and make searchEntry border thicker for better visibility
- this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg');
this._searchController._searchResults._content.add_style_class_name('search-section-content-bg-om2');
- Main.overview.searchEntry.add_style_class_name('search-entry-om2');
+ this._searchEntry.add_style_class_name('search-entry-om2');
} else {
- this._searchController._searchResults._content.add_style_class_name('search-section-content-bg');
this._searchController._searchResults._content.remove_style_class_name('search-section-content-bg-om2');
this._searchEntry.remove_style_class_name('search-entry-om2');
}
@@ -496,18 +594,14 @@ const ControlsManagerCommon = {
await this.layout_manager.ensureAllocation();
this._setBackground();
+ Me.Modules.panelModule.update();
Main.panel.opacity = 255;
- const STARTUP_ANIMATION_TIME = 500;
// Opacity
this.ease({
opacity: opt.STARTUP_STATE === 1 ? 0 : 255,
duration: STARTUP_ANIMATION_TIME,
mode: Clutter.AnimationMode.LINEAR,
- onComplete: () => {
- // part of the workaround for stuttering first app grid animation
- this._appDisplay.visible = true;
- },
});
const dash = this.dash;
@@ -560,7 +654,6 @@ const ControlsManagerCommon = {
STARTUP_ANIMATION_TIME * 2 * St.Settings.get().slow_down_factor,
() => {
onComplete();
- Main.overview._startupInitComplete = true;
_timeouts.startupAnim2 = 0;
return GLib.SOURCE_REMOVE;
}
@@ -622,16 +715,13 @@ const ControlsManagerCommon = {
_realizeAppDisplayAndFinishSequence() {
const appDisplayModule = Me.Modules.appDisplayModule;
// realize app grid for smoother first animation
- appDisplayModule._updateAppGrid(false, this._finishStartupSequence.bind(this));
+ appDisplayModule._repopulateAppDisplay(false, this._finishStartupSequence.bind(this));
},
_finishStartupSequence() {
if (!this._bgManagers)
this._setBackground();
- /* if (Me.Util.dashIsDashToDock())
- return;*/
-
_timeouts.finishStartup = GLib.idle_add(
GLib.PRIORITY_LOW, () => {
this._appDisplay.opacity = 255;
@@ -666,7 +756,6 @@ const ControlsManagerCommon = {
},
_getOverviewTranslations(dash, tmbBox, searchEntryBin) {
- // const tmbBox = Main.overview._overview._controls._thumbnailsBox;
const animationsDisabled = !St.Settings.get().enable_animations || ((opt.SHOW_WS_PREVIEW_BG && !opt.OVERVIEW_MODE2) && !Main.layoutManager._startingUp);
if (animationsDisabled)
return [0, 0, 0, 0, 0];
@@ -775,7 +864,7 @@ const ControlsManagerCommon = {
_setBackground(reset = false) {
if (this._bgManagers) {
this._bgManagers.forEach(bg => {
- Main.overview._overview._controls._stateAdjustment.disconnect(bg._fadeSignal);
+ this._stateAdjustment.disconnect(bg._fadeSignal);
bg.destroy();
});
}
@@ -797,8 +886,7 @@ const ControlsManagerCommon = {
bgManager.backgroundActor.content.vignette_sharpness = 0;
bgManager.backgroundActor.content.brightness = 1;
-
- bgManager._fadeSignal = Main.overview._overview._controls._stateAdjustment.connect('notify::value', v => {
+ bgManager._fadeSignal = this._stateAdjustment.connect('notify::value', v => {
this._updateBackground(bgManager, v.value, v);
});
@@ -813,10 +901,10 @@ const ControlsManagerCommon = {
},
_updateBackground(bgManager, stateValue = 2, stateAdjustment = null) {
- // Blur My Shell extension destroys all background actors in the overview and doesn't care about consequences
+ // 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)) {
- Main.notifyError(`[${Me.metadata.name}]`, _('Overview background crashed!\nIf you are using Blur My Shell, disable overview blur in its settings and re-enable V-Shell Overview Background to avoid visual glitches.'));
- // remove and disconnect our destroyed backgrounds to avoid more errors
+ 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
this._setBackground(true);
return;
}
@@ -824,9 +912,12 @@ const ControlsManagerCommon = {
const finalState = stateAdjustment?.getStateTransitionParams().finalState;
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;
@@ -852,7 +943,6 @@ const ControlsManagerCommon = {
// In GNOME 46 the "sigma" property has been renamed to "radius"
const radius = blurEffect.sigma !== undefined ? 'sigma' : 'radius';
- blurEffect[radius] = 0;
const searchActive = this._searchController.searchActive;
if (searchActive)
@@ -911,6 +1001,30 @@ const ControlsManagerCommon = {
}
}
},
+};
+
+const ControlsManagerLayoutCommon = {
+ after__updateWorkAreaBox() {
+ const workArea = this._workAreaBox.copy();
+
+ // opt.PANEL_OVERVIEW_ONLY removes affectsStruts panel property
+ if (opt.get('panelModule') && opt.PANEL_OVERVIEW_ONLY) {
+ let offsetY = 0;
+ let reduction = 0;
+ reduction = Main.panel.height;
+ offsetY = opt.PANEL_POSITION_TOP ? reduction : 0;
+
+ const startX = workArea.x1;
+ const startY = workArea.y1 + offsetY;
+ const width = workArea.get_width();
+ const height = workArea.get_height() - reduction;
+
+ workArea.set_origin(startX, startY);
+ workArea.set_size(width, height);
+ }
+
+ this._workAreaBoxForVShellConfig = workArea;
+ },
_updatePositionFromDashToDock() {
// update variables that cannot be processed within settings
@@ -922,153 +1036,104 @@ const ControlsManagerCommon = {
opt.DASH_LEFT = opt.DASH_POSITION === 3;
opt.DASH_VERTICAL = opt.DASH_LEFT || opt.DASH_RIGHT;
},
+
+ _dashToDockAffectsWorkArea() {
+ const dash = Main.overview.dash;
+ const dtd = dash.get_parent()?.get_parent()?.get_parent();
+ const layoutManager = Main.layoutManager;
+ const index = layoutManager._findActor(dtd);
+ const data = index > -1 ? layoutManager._trackedActors[index] : null;
+ const affectsStruts = data?.affectsStruts;
+ return !!affectsStruts;
+ },
};
const ControlsManagerLayoutVertical = {
- _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailsWidth, thumbnailsHeight, searchHeight, startY) {
- // in case the function is called from the DtD
- if (startY === undefined)
- workAreaBox = box;
-
+ _computeWorkspacesBoxForState(state, box, wsTmbWidth, wsTmbHeight, leftBoxOffset, rightBoxOffset, topBoxOffset, bottomBoxOffset, centeredBoxOffset) {
const workspaceBox = box.copy();
- let [width, height] = workspaceBox.get_size();
- const spacing = 12;
-
- const dash = Main.overview.dash;
- // including Dash to Dock and clones properties for compatibility
-
- if (Me.Util.dashIsDashToDock()) {
- // ensure or position variables are updated
- ControlsManagerCommon._updatePositionFromDashToDock();
- // Dash to Dock also always affects workAreaBox
- Main.layoutManager._trackedActors.forEach(actor => {
- if (actor.affectsStruts && actor.actor.width === dash.width) {
- if (dash._isHorizontal) {
- // disabled inteli-hide don't needs compensation
- // startY needs to be corrected in allocate()
- if (dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled)
- height += dash.height;
- } else {
- width += dash.width;
- }
- }
- });
- }
+ let [width, height] = this._workAreaBoxForVShellConfig.get_size();
+ const startX = this._workAreaBoxForVShellConfig.x1;
+ const startY = this._workAreaBoxForVShellConfig.y1;
- let wWidth;
- let wHeight;
- let wsBoxY;
+ let wsBoxWidth, wsBoxHeight, wsBoxY, wsBoxX;
switch (state) {
case ControlsState.HIDDEN:
- // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering
- // therefore we added panel height to startY for the overview allocation,
- // but here we need to remove the correction because the panel will be in the hidden state
- if (opt.START_Y_OFFSET) {
- let [x, y] = workAreaBox.get_origin();
- y -= opt.START_Y_OFFSET;
- workspaceBox.set_origin(x, y);
- } else {
- workspaceBox.set_origin(...workAreaBox.get_origin());
- }
- workspaceBox.set_size(...workAreaBox.get_size());
+ workspaceBox.set_origin(...this._workAreaBox.get_origin());
+ workspaceBox.set_size(...this._workAreaBox.get_size());
break;
case ControlsState.WINDOW_PICKER:
case ControlsState.APP_GRID:
if (opt.WS_ANIMATION && opt.SHOW_WS_TMB && state === ControlsState.APP_GRID) {
workspaceBox.set_origin(...this._workspacesThumbnails.get_position());
- workspaceBox.set_size(thumbnailsWidth, thumbnailsHeight);
+ workspaceBox.set_size(wsTmbWidth, wsTmbHeight);
} else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) {
- if (opt.START_Y_OFFSET) {
- let [x, y] = workAreaBox.get_origin();
- y -= opt.START_Y_OFFSET;
- workspaceBox.set_origin(x, y);
- } else {
- workspaceBox.set_origin(...workAreaBox.get_origin());
- }
- workspaceBox.set_size(...workAreaBox.get_size());
+ workspaceBox.set_origin(...this._workAreaBox.get_origin());
+ workspaceBox.set_size(...this._workAreaBox.get_size());
} else {
- // if PANEL_OVERVIEW_ONLY, panel doesn't affect workArea height (affectStruts === false), it is necessary to compensate
- height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height;
- searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0;
- wWidth = width -
- (opt.DASH_VERTICAL ? dashWidth : 0) -
- thumbnailsWidth -
- 4 * spacing;
- wHeight = height -
- (opt.DASH_VERTICAL ? 0 : dashHeight) -
- searchHeight -
- 4 * spacing;
+ wsBoxWidth = width - leftBoxOffset - rightBoxOffset;
+ wsBoxHeight = height - topBoxOffset - bottomBoxOffset;
const ratio = width / height;
- let wRatio = wWidth / wHeight;
+ let wRatio = wsBoxWidth / wsBoxHeight;
let scale = ratio / wRatio;
if (scale > 1) {
- wHeight /= scale;
- wWidth = wHeight * ratio;
+ wsBoxHeight /= scale;
+ wsBoxWidth = wsBoxHeight * ratio;
} else {
- wWidth *= scale;
- wHeight = wWidth / ratio;
+ wsBoxWidth *= scale;
+ wsBoxHeight = wsBoxWidth / ratio;
}
- // height decides the actual size, ratio is given by the workarea
- wHeight *= opt.WS_PREVIEW_SCALE;
- wWidth *= opt.WS_PREVIEW_SCALE;
+ // height decides the actual size, ratio is given by the workArea
+ wsBoxHeight = Math.round(wsBoxHeight * opt.WS_PREVIEW_SCALE);
+ wsBoxWidth = Math.round(wsBoxWidth * opt.WS_PREVIEW_SCALE);
let xOffset = 0;
let yOffset = 0;
- const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + searchHeight;
- const yOffsetB = opt.DASH_BOTTOM ? dashHeight : 0;
- const yAvailableSpace = (height - yOffsetT - wHeight - yOffsetB) / 2;
- yOffset = yOffsetT + yAvailableSpace;
+ const yAvailableSpace = Math.round((height - topBoxOffset - wsBoxHeight - bottomBoxOffset) / 2);
+ yOffset = topBoxOffset + yAvailableSpace;
- const centeredBoxX = (width - wWidth) / 2;
-
- const xOffsetL = (opt.DASH_LEFT ? dashWidth : 0) + (opt.WS_TMB_LEFT ? thumbnailsWidth : 0) + 2 * spacing;
- const xOffsetR = (opt.DASH_RIGHT ? dashWidth : 0) + (opt.WS_TMB_RIGHT ? thumbnailsWidth : 0) + 2 * spacing;
+ const centeredBoxX = Math.round((width - wsBoxWidth) / 2);
this._xAlignCenter = false;
- if (centeredBoxX < Math.max(xOffsetL, xOffsetR)) {
- xOffset = xOffsetL + spacing + (width - xOffsetL - wWidth - xOffsetR - 2 * spacing) / 2;
+ if (centeredBoxX < centeredBoxOffset) {
+ xOffset = Math.round(leftBoxOffset + (width - leftBoxOffset - wsBoxWidth - rightBoxOffset) / 2);
} else {
xOffset = centeredBoxX;
this._xAlignCenter = true;
}
- const wsBoxX = /* startX + */xOffset;
+ wsBoxX = startX + xOffset;
wsBoxY = startY + yOffset;
- workspaceBox.set_origin(Math.round(wsBoxX), Math.round(wsBoxY));
- workspaceBox.set_size(Math.round(wWidth), Math.round(wHeight));
+ workspaceBox.set_origin(wsBoxX, wsBoxY);
+ workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
}
}
return workspaceBox;
},
- _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashWidth, dashHeight, thumbnailsWidth, startY) {
- // in case the function is called from the DtD
- if (startY === undefined)
- workAreaBox = box;
-
- const [width] = box.get_size();
- const { x1: startX } = workAreaBox;
- // const { y1: startY } = workAreaBox;
- let height = workAreaBox.get_height();
+ _getAppDisplayBoxForState(state, box, leftBoxOffset, rightBoxOffset, topBoxOffset, bottomBoxOffset) {
const appDisplayBox = new Clutter.ActorBox();
- const spacing = 12;
- searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0;
-
- const xOffsetL = (opt.WS_TMB_LEFT ? thumbnailsWidth : 0) + (opt.DASH_LEFT ? dashWidth : 0);
- const xOffsetR = (opt.WS_TMB_RIGHT ? thumbnailsWidth : 0) + (opt.DASH_RIGHT ? dashWidth : 0);
- const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + (opt.SHOW_SEARCH_ENTRY ? searchHeight : 0);
- const yOffsetB = opt.DASH_BOTTOM ? dashHeight : 0;
- const adWidth = opt.CENTER_APP_GRID ? width - 2 * Math.max(xOffsetL, xOffsetR) - 2 * spacing : width - xOffsetL - xOffsetR - 2 * spacing;
- const adHeight = height - yOffsetT - yOffsetB;
-
- const appDisplayX = opt.CENTER_APP_GRID ? (width - adWidth) / 2 : xOffsetL + 2 * spacing;
- const appDisplayY = startY + yOffsetT;
+ const startX = this._workAreaBoxForVShellConfig.x1;
+ const startY = this._workAreaBoxForVShellConfig.y1;
+ let [width, height] = this._workAreaBoxForVShellConfig.get_size();
+ const centeredBoxOffset = Math.max(leftBoxOffset, rightBoxOffset);
+
+ const adWidth = opt.CENTER_APP_GRID
+ ? width - 2 * centeredBoxOffset
+ : width - leftBoxOffset - rightBoxOffset;
+ const adHeight = height - topBoxOffset - bottomBoxOffset;
+
+ const appDisplayX = startX +
+ (opt.CENTER_APP_GRID
+ ? Math.round((width - adWidth) / 2)
+ : leftBoxOffset
+ );
+ const appDisplayY = startY + topBoxOffset;
switch (state) {
case ControlsState.HIDDEN:
@@ -1076,73 +1141,64 @@ const ControlsManagerLayoutVertical = {
// 1 - left, 2 - right, 3 - bottom, 5 - top
switch (opt.APP_GRID_ANIMATION) {
case 0:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY));
+ appDisplayBox.set_origin(appDisplayX, appDisplayY);
break;
case 1:
- appDisplayBox.set_origin(Math.round(startX + width), Math.round(appDisplayY));
+ appDisplayBox.set_origin(startX + width, appDisplayY);
break;
case 2:
- appDisplayBox.set_origin(Math.round(startX - adWidth), Math.round(appDisplayY));
+ appDisplayBox.set_origin(box.x1 - adWidth, appDisplayY);
break;
case 3:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y2));
+ appDisplayBox.set_origin(appDisplayX, box.y2);
break;
case 5:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y1 - adHeight));
+ appDisplayBox.set_origin(appDisplayX, box.y1 - adHeight);
break;
}
break;
case ControlsState.APP_GRID:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY));
+ appDisplayBox.set_origin(appDisplayX, appDisplayY);
break;
}
- appDisplayBox.set_size(Math.round(adWidth), Math.round(adHeight));
+ appDisplayBox.set_size(adWidth, adHeight);
return appDisplayBox;
},
vfunc_allocate(container, box) {
const childBox = new Clutter.ActorBox();
+ const startX = this._workAreaBoxForVShellConfig.x1;
+ const startY = this._workAreaBoxForVShellConfig.y1;
+ let [width, height] = this._workAreaBoxForVShellConfig.get_size();
+
const transitionParams = this._stateAdjustment.getStateTransitionParams();
- const spacing = 12;
- const halfSpacing = spacing / 2;
- const monitor = Main.layoutManager.findMonitorForActor(this._container);
- const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
- const startX = workArea.x - monitor.x;
- // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering
- // therefore we need to add panel height to startY
- let startY = workArea.y - monitor.y + opt.START_Y_OFFSET;
- const workAreaBox = new Clutter.ActorBox();
- workAreaBox.set_origin(startX, startY);
- workAreaBox.set_size(workArea.width, workArea.height);
- box.y1 += startY;
- box.x1 += startX;
- let [width, height] = box.get_size();
- // if panel is at bottom position,
- // compensate the height of the available box (the box size is calculated for top panel)
- height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height;
- let availableHeight = height;
+ const spacing = opt.SPACING;
// Dash
- const maxDashHeight = box.get_height() * DASH_MAX_SIZE_RATIO;
- const maxDashWidth = maxDashHeight * 0.8;
+ const maxDashHeight = Math.round(box.get_height() * DASH_MAX_SIZE_RATIO);
+ const maxDashWidth = Math.round(maxDashHeight * 0.8);
let dashHeight = 0;
let dashWidth = 0;
// dash cloud be overridden by the Dash to Dock clone
- const dash = Main.overview.dash;
if (Me.Util.dashIsDashToDock()) {
- // ensure our position variables are updated
- ControlsManagerCommon._updatePositionFromDashToDock();
- // if Dash to Dock replaced the default dash and its inteli-hide is disabled we need to compensate for affected startY
- if (!Main.overview.dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) {
- if (Main.panel.y === monitor.y)
- startY = Main.panel.height + spacing;
+ this._updatePositionFromDashToDock();
+ // If DtD affects workArea, dash size needs to be 0 + spacing
+ const dash = Main.overview.dash;
+ if (this._dashToDockAffectsWorkArea()) {
+ if (opt.DASH_VERTICAL)
+ dashWidth = spacing;
+ else
+ dashHeight = spacing;
+ } else {
+ dashHeight = dash.height;
+ dashWidth = dash.width;
+ if (opt.DASH_VERTICAL)
+ dashWidth += spacing;
+ else
+ dashHeight += spacing;
}
- dashHeight = dash.height;
- dashWidth = dash.width;
- opt.DASH_VERTICAL = [1, 3].includes(dash._position);
- this._dash.allocate(childBox);
} else if (this._dash.visible) {
// default dock
if (opt.DASH_VERTICAL) {
@@ -1164,40 +1220,42 @@ const ControlsManagerLayoutVertical = {
let wsTmbWidth = 0;
let wsTmbHeight = 0;
- let maxWsTmbScale = opt.MAX_THUMBNAIL_SCALE;
if (opt.SHOW_WS_TMB) {
- const dashHeightReservation = !opt.WS_TMB_FULL && !opt.DASH_VERTICAL ? dashHeight : 0;
-
const searchActive = this._searchController.searchActive;
- if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) {
+ let maxWsTmbScale = this._dash.showAppsButton.checked && !(searchActive && !opt.SEARCH_APP_GRID_MODE)
+ ? opt.MAX_THUMBNAIL_SCALE_APPGRID
+ : opt.MAX_THUMBNAIL_SCALE;
+ if (transitionParams.currentState % 1 && !opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive && !opt.LEAVING_SEARCH) {
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;
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
}
+ wsTmbWidth = Math.round(width * maxWsTmbScale);
- wsTmbWidth = width * maxWsTmbScale;
let totalTmbSpacing;
[totalTmbSpacing, wsTmbHeight] = this._workspacesThumbnails.get_preferred_height(wsTmbWidth);
wsTmbHeight += totalTmbSpacing;
- const wsTmbHeightMax = opt.WS_TMB_FULL
- ? height - spacing
- : height - dashHeightReservation - 2 * spacing;
+ const wstTopOffset = !opt.WS_TMB_FULL && opt.DASH_TOP ? dashHeight : spacing;
+ const wstBottomOffset = !opt.WS_TMB_FULL && opt.DASH_BOTTOM ? dashHeight : spacing;
+ const wstLeftOffset = opt.DASH_LEFT ? dashWidth : spacing;
+ const wstRightOffset = opt.DASH_RIGHT ? dashWidth : spacing;
+
+ const wsTmbHeightMax = height - wstTopOffset - wstBottomOffset;
+ // Reduce size to fit wsTmb to the screen
if (wsTmbHeight > wsTmbHeightMax) {
wsTmbHeight = wsTmbHeightMax;
- wsTmbWidth = Math.round(this._workspacesThumbnails.get_preferred_width(wsTmbHeight)[1]);
+ wsTmbWidth = this._workspacesThumbnails.get_preferred_width(wsTmbHeight)[1];
}
- let wsTmbX;
- if (opt.WS_TMB_RIGHT)
- wsTmbX = Math.round(startX + width - (opt.DASH_RIGHT ? dashWidth : 0) - wsTmbWidth /* - halfSpacing*/); // this halfSpacing is a part od dash style
- else
- wsTmbX = Math.round(opt.DASH_LEFT ? dashWidth : 0/* + halfSpacing*/); // this halfSpacing is a part od dash style
+ let wsTmbX = opt.WS_TMB_LEFT
+ ? startX + wstLeftOffset
+ : startX + width - wstRightOffset - wsTmbWidth;
- let wstOffset = (height - wsTmbHeight - (opt.DASH_VERTICAL ? 0 : dashHeightReservation)) / 2;
- wstOffset -= opt.WS_TMB_POSITION_ADJUSTMENT * (wstOffset - halfSpacing);
- let wsTmbY = Math.round(startY + (dashHeightReservation && opt.DASH_TOP ? dashHeight : 0) + wstOffset);
+ let offset = (height - wstTopOffset - wsTmbHeight - wstBottomOffset) / 2;
+ offset = Math.round(offset - (opt.WS_TMB_POSITION_ADJUSTMENT * offset));
+ const wsTmbY = startY + wstTopOffset + offset;
childBox.set_origin(wsTmbX, wsTmbY);
childBox.set_size(Math.max(wsTmbWidth, 1), Math.max(wsTmbHeight, 1));
@@ -1215,50 +1273,72 @@ const ControlsManagerLayoutVertical = {
dashWidth = Math.min(dashWidth, wMaxWidth);
}
- let dashX, dashY, offset;
- if (opt.DASH_RIGHT)
- dashX = width - dashWidth;
- else if (opt.DASH_LEFT)
- dashX = 0;
-
- else if (opt.DASH_TOP)
- dashY = startY;
- else
- dashY = startY + height - dashHeight;
+ let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
+ let dashY = opt.DASH_TOP ? startY : startY + height - dashHeight;
if (!opt.DASH_VERTICAL) {
- offset = (width - ((opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && !this._xAlignCenter ? wsTmbWidth : 0) - dashWidth) / 2;
- offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing);
- dashX = offset;
-
- if ((opt.WS_TMB_FULL || opt.CENTER_DASH_WS) && !this._xAlignCenter) {
- if (!opt.WS_TMB_RIGHT) {
- dashX = (wsTmbWidth ? wsTmbWidth : 0) + offset;
- dashX = Math.max(dashX, wsTmbWidth ? wsTmbWidth + spacing : 0);
- dashX = Math.min(dashX, width - dashWidth - spacing);
- }
- }
- if (opt.WS_TMB_FULL && !opt.CENTER_DASH_WS) {
- dashX = opt.WS_TMB_RIGHT
- ? Math.min(width - wsTmbWidth - dashWidth, dashX + wsTmbWidth / 2 * (1 - Math.abs(opt.DASH_POSITION_ADJUSTMENT)))
- : Math.max(wsTmbWidth, dashX - wsTmbWidth / 2 * (1 - Math.abs(opt.DASH_POSITION_ADJUSTMENT)));
- }
+ 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;
+ let offset = (width - dashWidth - (opt.CENTER_DASH_WS && !this._xAlignCenter ? dashLeftOffset + dashRightOffset : 0)) / 2;
+ offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
+ dashX = startX + (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
+ dashX = Math.clamp(startX + dashLeftOffset + spacing, dashX, startX + width - dashRightOffset - spacing - dashWidth);
} else {
- offset = (height - dashHeight) / 2;
- dashY = startY + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing));
+ const offset = (height - dashHeight) / 2;
+ dashY = startY + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing));
}
+ dashY = Math.round(dashY);
- childBox.set_origin(Math.round(startX + dashX), Math.round(dashY));
- childBox.set_size(Math.round(dashWidth), Math.round(dashHeight));
+ childBox.set_origin(startX + dashX, dashY);
+ childBox.set_size(dashWidth, dashHeight);
this._dash.allocate(childBox);
}
- availableHeight -= opt.DASH_VERTICAL ? 0 : dashHeight + spacing;
+ // View box offsets
+ 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);
+ let topBoxOffset = (opt.DASH_TOP ? dashHeight : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0);
+ const bottomBoxOffset = (opt.DASH_BOTTOM ? dashHeight : spacing) + (opt.WS_TMB_BOTTOM ? wsTmbHeight + spacing : 0);
+ const centeredBoxOffset = Math.max(leftBoxOffset, rightBoxOffset);
+
+ // App grid needs to be calculated for the max wsTmbWidth in app grid, independently on the current wsTmb scale
+ const wsTmbWidthAppGrid = Math.round(width * opt.MAX_THUMBNAIL_SCALE_APPGRID);
+ const leftBoxOffsetAppGrid = (opt.DASH_LEFT ? dashWidth : spacing) + (opt.WS_TMB_LEFT ? wsTmbWidthAppGrid + spacing : 0);
+ const rightBoxOffsetAppGrid = (opt.DASH_RIGHT ? dashWidth : spacing) + (opt.WS_TMB_RIGHT ? wsTmbWidthAppGrid + spacing : 0);
+
+ // searchEntry
+ const [searchEntryHeight] = this._searchEntry.get_preferred_height(width - wsTmbWidth);
+ const searchEntryY = startY + topBoxOffset;
+
+ const searchX = startX +
+ (opt.CENTER_SEARCH_VIEW || this._xAlignCenter
+ ? centeredBoxOffset
+ : leftBoxOffset); // xAlignCenter is set by wsBox
+
+ const searchWidth =
+ width - (opt.CENTER_SEARCH_VIEW || this._xAlignCenter
+ ? 2 * centeredBoxOffset
+ : leftBoxOffset + rightBoxOffset);
+
+ childBox.set_origin(searchX, searchEntryY);
+ childBox.set_size(searchWidth, searchEntryHeight);
- let [searchHeight] = this._searchEntry.get_preferred_height(width - wsTmbWidth);
+ this._searchEntry.allocate(childBox);
+
+ // searchResults
+ const searchY = startY + topBoxOffset + searchEntryHeight + spacing;
+ const searchHeight = height - topBoxOffset - bottomBoxOffset - searchEntryHeight - 2 * spacing;
+
+ childBox.set_origin(searchX, searchY);
+ childBox.set_size(searchWidth, searchHeight);
+ this._searchController.allocate(childBox);
- // Workspaces
- let params = [box, workAreaBox, dashWidth, dashHeight, wsTmbWidth, wsTmbHeight, searchHeight, startY];
+ // Add searchEntry height if needed
+ topBoxOffset += opt.SHOW_SEARCH_ENTRY ? searchEntryHeight + spacing : 0;
+
+ // workspace
+ let params = [box, wsTmbWidth, wsTmbHeight, leftBoxOffset, rightBoxOffset, topBoxOffset, bottomBoxOffset, centeredBoxOffset];
// Update cached boxes
for (const state of Object.values(ControlsState)) {
@@ -1278,38 +1358,14 @@ const ControlsManagerLayoutVertical = {
this._workspacesDisplay.allocate(workspacesBox);
- // Search entry
- const searchXoffset = (opt.DASH_LEFT ? dashWidth : 0) + spacing + (opt.WS_TMB_RIGHT ? 0 : wsTmbWidth + spacing);
-
- // Y position under top Dash
- let searchEntryX, searchEntryY;
- if (opt.DASH_TOP)
- searchEntryY = startY + dashHeight;
- else
- searchEntryY = startY;
-
- searchEntryX = searchXoffset;
- let searchWidth = width - 2 * spacing - wsTmbWidth - (opt.DASH_VERTICAL ? dashWidth : 0); // xAlignCenter is given by wsBox
- searchWidth = this._xAlignCenter ? width - 2 * (wsTmbWidth + spacing) : searchWidth;
-
- if (opt.CENTER_SEARCH_VIEW) {
- childBox.set_origin(0, Math.round(searchEntryY));
- childBox.set_size(Math.round(width), Math.round(searchHeight));
- } else {
- childBox.set_origin(Math.round(this._xAlignCenter ? 0 : searchEntryX), Math.round(searchEntryY));
- childBox.set_size(Math.round(this._xAlignCenter ? width : searchWidth - spacing), Math.round(searchHeight));
- }
-
- this._searchEntry.allocate(childBox);
-
- availableHeight -= searchHeight + spacing;
-
- // if (this._appDisplay.visible)... ? Can cause problems
- // Calculate appDisplay always for AppGrid state WsTmb scale
- let wsTmbWidthAppGrid = opt.MAX_THUMBNAIL_SCALE_APPGRID > 0
- ? wsTmbWidth / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE_APPGRID
- : wsTmbWidth / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE;
- params = [box, workAreaBox, searchHeight, dashWidth, dashHeight, wsTmbWidthAppGrid, startY]; // send startY, can be corrected
+ // appDisplay
+ params = [
+ box,
+ leftBoxOffsetAppGrid,
+ rightBoxOffsetAppGrid,
+ topBoxOffset,
+ bottomBoxOffset,
+ ];
let appDisplayBox;
if (!transitionParams.transitioning) {
appDisplayBox =
@@ -1324,240 +1380,48 @@ const ControlsManagerLayoutVertical = {
}
this._appDisplay.allocate(appDisplayBox);
- // Search
- if (opt.CENTER_SEARCH_VIEW) {
- const dashW = (opt.DASH_VERTICAL ? dashWidth : 0) + spacing;
- searchWidth = width - 2 * wsTmbWidth - 2 * dashW;
- childBox.set_origin(Math.round(wsTmbWidth + dashW), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + searchHeight));
- } else {
- childBox.set_origin(Math.round(this._xAlignCenter ? wsTmbWidth + spacing : searchXoffset), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + searchHeight));
- }
-
- childBox.set_size(Math.round(searchWidth), Math.round(availableHeight));
- this._searchController.allocate(childBox);
-
this._runPostAllocation();
},
};
const ControlsManagerLayoutHorizontal = {
- _computeWorkspacesBoxForState(state, box, workAreaBox, dashWidth, dashHeight, thumbnailWidth, thumbnailsHeight, searchHeight, startY) {
- // in case the function is called from the DtD
- if (startY === undefined)
- workAreaBox = box;
-
- const workspaceBox = box.copy();
- let [width, height] = workspaceBox.get_size();
- const spacing = 12;
-
- const dash = Main.overview.dash;
- // including Dash to Dock and clones properties for compatibility
- if (Me.Util.dashIsDashToDock()) {
- // ensure our position variables are updated
- ControlsManagerCommon._updatePositionFromDashToDock();
- // Dash to Dock always affects workAreaBox
- Main.layoutManager._trackedActors.forEach(actor => {
- if (actor.affectsStruts && actor.actor.width === dash.width) {
- if (dash._isHorizontal) {
- // disabled inteli-hide don't need compensation
- // startY needs to be corrected in allocate()
- if (dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled)
- height += dash.height;
- else if (opt.DASH_TOP)
- height += dash.height;
- } else {
- width += dash.width;
- }
- }
- });
- }
-
- let wWidth, wHeight, wsBoxY, wsBoxX;
+ _computeWorkspacesBoxForState: ControlsManagerLayoutVertical._computeWorkspacesBoxForState,
- switch (state) {
- case ControlsState.HIDDEN:
- // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering
- // therefore we added panel height to startY for the overview allocation,
- // but here we need to remove the correction since the panel will be in the hidden state
- if (opt.START_Y_OFFSET) {
- let [x, y] = workAreaBox.get_origin();
- y -= opt.START_Y_OFFSET;
- workspaceBox.set_origin(x, y);
- } else {
- workspaceBox.set_origin(...workAreaBox.get_origin());
- }
- workspaceBox.set_size(...workAreaBox.get_size());
- break;
- case ControlsState.WINDOW_PICKER:
- case ControlsState.APP_GRID:
- if (opt.WS_ANIMATION && opt.SHOW_WS_TMB && state === ControlsState.APP_GRID) {
- workspaceBox.set_origin(...this._workspacesThumbnails.get_position());
- workspaceBox.set_size(thumbnailWidth, thumbnailsHeight);
- } else if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE) {
- if (opt.START_Y_OFFSET) {
- let [x, y] = workAreaBox.get_origin();
- y -= opt.START_Y_OFFSET;
- workspaceBox.set_origin(x, y);
- } else {
- workspaceBox.set_origin(...workAreaBox.get_origin());
- }
- workspaceBox.set_size(...workAreaBox.get_size());
- } else {
- // if PANEL_OVERVIEW_ONLY, panel doesn't affect workArea height (affectStruts === false), it is necessary to compensate
- height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height;
- searchHeight = opt.SHOW_SEARCH_ENTRY ? searchHeight : 0;
- wWidth = width -
- spacing -
- (opt.DASH_VERTICAL ? dashWidth : 0) -
- 4 * spacing;
- wHeight = height -
- (opt.DASH_VERTICAL ? spacing : dashHeight) -
- thumbnailsHeight -
- searchHeight -
- 4 * spacing;
-
- const ratio = width / height;
- let wRatio = wWidth / wHeight;
- let scale = ratio / wRatio;
-
- if (scale > 1) {
- wHeight /= scale;
- wWidth = wHeight * ratio;
- } else {
- wWidth *= scale;
- wHeight = wWidth / ratio;
- }
-
- // height decides the actual size, ratio is given by the workarea
- wHeight *= opt.WS_PREVIEW_SCALE;
- wWidth *= opt.WS_PREVIEW_SCALE;
-
- let xOffset = 0;
- let yOffset = 0;
-
- const yOffsetT = (opt.DASH_TOP ? dashHeight : 0) + (opt.WS_TMB_TOP ? thumbnailsHeight : 0) + searchHeight;
- const yOffsetB = (opt.DASH_BOTTOM ? dashHeight : 0) + (opt.WS_TMB_BOTTOM ? thumbnailsHeight : 0);
-
- const yAvailableSpace = (height - yOffsetT - wHeight - yOffsetB) / 2;
- yOffset = yOffsetT + yAvailableSpace;
-
- const xOffsetL = (opt.DASH_LEFT ? dashWidth : 0) + spacing;
- const xOffsetR = (opt.DASH_RIGHT ? dashWidth : 0) + spacing;
- const centeredBoxX = (width - wWidth) / 2;
-
- this._xAlignCenter = false;
- if (centeredBoxX < Math.max(xOffsetL, xOffsetR)) {
- xOffset = xOffsetL + spacing + (width - xOffsetL - wWidth - xOffsetR) / 2;
- } else {
- xOffset = centeredBoxX;
- this._xAlignCenter = true;
- }
-
- wsBoxX = /* startX + */xOffset;
- wsBoxY = startY + yOffset;
- workspaceBox.set_origin(Math.round(wsBoxX), Math.round(wsBoxY));
- workspaceBox.set_size(Math.round(wWidth), Math.round(wHeight));
- }
- }
-
- return workspaceBox;
- },
-
- _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashWidth, dashHeight, thumbnailsHeight, startY) {
- // in case the function is called from the DtD
- if (startY === undefined) {
- workAreaBox = box;
- }
- const [width] = box.get_size();
- const { x1: startX } = workAreaBox;
- // const { y1: startY } = workAreaBox;
- let height = workAreaBox.get_height();
- const appDisplayBox = new Clutter.ActorBox();
- const spacing = 12;
-
- const yOffsetT = (opt.WS_TMB_TOP ? thumbnailsHeight + spacing : 0) + (opt.DASH_TOP ? dashHeight : 0) + (opt.SHOW_SEARCH_ENTRY ? searchHeight : 0);
- const yOffsetB = (opt.WS_TMB_BOTTOM ? thumbnailsHeight + spacing : 0) + (opt.DASH_BOTTOM ? dashHeight : 0);
- const xOffsetL = opt.DASH_LEFT ? dashWidth : 0;
- const xOffsetR = opt.DASH_RIGHT ? dashWidth : 0;
- const hSpacing = xOffsetL + xOffsetR ? spacing : 0;
- const adWidth = opt.CENTER_APP_GRID ? width - 2 * Math.max(xOffsetL, xOffsetR) - 2 * hSpacing : width - xOffsetL - xOffsetR - 2 * hSpacing;
- const adHeight = height - yOffsetT - yOffsetB;
-
- const appDisplayX = opt.CENTER_APP_GRID ? (width - adWidth) / 2 : xOffsetL + hSpacing;
- const appDisplayY = startY + yOffsetT;
-
- switch (state) {
- case ControlsState.HIDDEN:
- case ControlsState.WINDOW_PICKER:
- // 1 - left, 2 - right, 3 - bottom, 5 - top
- switch (opt.APP_GRID_ANIMATION) {
- case 0:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY));
- break;
- case 1:
- appDisplayBox.set_origin(Math.round(startX + width), Math.round(appDisplayY));
- break;
- case 2:
- appDisplayBox.set_origin(Math.round(startX - adWidth), Math.round(appDisplayY));
- break;
- case 3:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y2));
- break;
- case 5:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(workAreaBox.y1 - adHeight));
- break;
- }
- break;
- case ControlsState.APP_GRID:
- appDisplayBox.set_origin(Math.round(appDisplayX), Math.round(appDisplayY));
- break;
- }
-
- appDisplayBox.set_size(Math.round(adWidth), Math.round(adHeight));
- return appDisplayBox;
- },
+ _getAppDisplayBoxForState: ControlsManagerLayoutVertical._getAppDisplayBoxForState,
vfunc_allocate(container, box) {
- const transitionParams = this._stateAdjustment.getStateTransitionParams();
const childBox = new Clutter.ActorBox();
- const spacing = 12;
- const halfSpacing = spacing / 2;
- const monitor = Main.layoutManager.findMonitorForActor(this._container);
- const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
- const startX = workArea.x - monitor.x;
- // if PANEL_OVERVIEW_ONLY, the affectStruts property is set to false to avoid stuttering
- // therefore we need to add panel height to startY
- let startY = workArea.y - monitor.y + opt.START_Y_OFFSET;
- const workAreaBox = new Clutter.ActorBox();
- workAreaBox.set_origin(startX, startY);
- workAreaBox.set_size(workArea.width, workArea.height);
- box.y1 += startY;
- box.x1 += startX;
- let [width, height] = box.get_size();
- // if panel is at bottom position,
- // compensate for the height of the available box (the box size is calculated for top panel)
- height = opt.PANEL_POSITION_TOP ? height : height - Main.panel.height;
- let availableHeight = height;
+ const startX = this._workAreaBoxForVShellConfig.x1;
+ const startY = this._workAreaBoxForVShellConfig.y1;
+ let [width, height] = this._workAreaBoxForVShellConfig.get_size();
+
+ const transitionParams = this._stateAdjustment.getStateTransitionParams();
+ const spacing = opt.SPACING;
// Dash
- const maxDashHeight = box.get_height() * DASH_MAX_SIZE_RATIO;
- const maxDashWidth = maxDashHeight * 0.8;
+ const maxDashHeight = Math.round(box.get_height() * DASH_MAX_SIZE_RATIO);
+ const maxDashWidth = Math.round(maxDashHeight * 0.8);
let dashHeight = 0;
let dashWidth = 0;
// dash cloud be overridden by the Dash to Dock clone
- const dash = Main.overview.dash;
if (Me.Util.dashIsDashToDock()) {
- // if Dash to Dock replaced the default dash and its inteli-hide is disabled we need to compensate for affected startY
- if (!Main.overview.dash.get_parent()?.get_parent()?.get_parent()?._intellihideIsEnabled) {
- // if (Main.panel.y === monitor.y)
- // startY = Main.panel.height + spacing;
+ this._updatePositionFromDashToDock();
+ // If DtD affects workArea, dash size needs to be 0
+ const dash = Main.overview.dash;
+ if (this._dashToDockAffectsWorkArea()) {
+ if (opt.DASH_VERTICAL)
+ dashWidth = spacing;
+ else
+ dashHeight = spacing;
+ } else {
+ dashHeight = dash.height;
+ dashWidth = dash.width;
+ if (opt.DASH_VERTICAL)
+ dashWidth += spacing;
+ else
+ dashHeight += spacing;
}
- dashHeight = dash.height + halfSpacing;
- dashWidth = dash.width;
- opt.DASH_TOP = dash._position === 0;
- opt.DASH_VERTICAL = [1, 3].includes(dash._position);
- this._dash.allocate(childBox);
} else if (this._dash.visible) {
// default dock
if (!opt.DASH_VERTICAL) {
@@ -1575,57 +1439,52 @@ const ControlsManagerLayoutHorizontal = {
}
}
- let [searchHeight] = this._searchEntry.get_preferred_height(width);
+ const [searchEntryHeight] = this._searchEntry.get_preferred_height(width);
// Workspace Thumbnails
let wsTmbWidth = 0;
let wsTmbHeight = 0;
- let maxWsTmbScale = opt.MAX_THUMBNAIL_SCALE;
if (opt.SHOW_WS_TMB) {
- const dashWidthReservation = !opt.WS_TMB_FULL && opt.DASH_VERTICAL ? dashWidth : 0;
-
const searchActive = this._searchController.searchActive;
- if (!opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive) {
+ let maxWsTmbScale = this._dash.showAppsButton.checked && !(searchActive && !opt.SEARCH_APP_GRID_MODE)
+ ? opt.MAX_THUMBNAIL_SCALE_APPGRID
+ : opt.MAX_THUMBNAIL_SCALE;
+ if (transitionParams.currentState % 1 && !opt.MAX_THUMBNAIL_SCALE_STABLE && !searchActive && !opt.LEAVING_SEARCH) {
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;
maxWsTmbScale = Util.lerp(initState, finalState, transitionParams.progress);
}
wsTmbHeight = Math.round(height * maxWsTmbScale);
+
let totalTmbSpacing;
[totalTmbSpacing, wsTmbWidth] = this._workspacesThumbnails.get_preferred_width(wsTmbHeight);
wsTmbWidth += totalTmbSpacing;
- const wsTmbWidthMax = opt.WS_TMB_FULL
- ? width - spacing
- : width - dashWidthReservation - 2 * spacing;
+ const wstLeftOffset = !opt.WS_TMB_FULL && opt.DASH_LEFT ? dashWidth : spacing;
+ const wstRightOffset = !opt.WS_TMB_FULL && opt.DASH_RIGHT ? dashWidth : spacing;
+ const wstTopOffset = opt.DASH_TOP ? dashHeight : spacing;
+ const wstBottomOffset = opt.DASH_BOTTOM ? dashHeight : spacing;
+ const wsTmbWidthMax = width - wstLeftOffset - wstRightOffset;
+ // Reduce size to fit wsTmb to the screen
if (wsTmbWidth > wsTmbWidthMax) {
wsTmbWidth = wsTmbWidthMax;
- wsTmbHeight = Math.round(this._workspacesThumbnails.get_preferred_height(wsTmbWidth)[1]);
+ wsTmbHeight = this._workspacesThumbnails.get_preferred_height(wsTmbWidth)[1];
}
- let wsTmbY;
- if (opt.WS_TMB_TOP)
- wsTmbY = Math.round(startY + (opt.DASH_TOP ? dashHeight : halfSpacing));
- else
- wsTmbY = Math.round(startY + height - (opt.DASH_BOTTOM ? dashHeight : halfSpacing) - wsTmbHeight);
+ let wsTmbY = opt.WS_TMB_TOP
+ ? startY + wstTopOffset
+ : startY + height - wstBottomOffset - wsTmbHeight;
- let wstOffset = (width - wsTmbWidth) / 2;
- wstOffset -= opt.WS_TMB_POSITION_ADJUSTMENT * wstOffset;
- let wsTmbX = Math.round(startX + wstOffset);
- if (opt.DASH_LEFT)
- wsTmbX = Math.max(wsTmbX, startX + dashWidthReservation);
- else if (opt.DASH_RIGHT)
- wsTmbX = Math.min(wsTmbX, startX + width - wsTmbWidth - dashWidthReservation);
+ let offset = (width - wstLeftOffset - wsTmbWidth - wstRightOffset) / 2;
+ offset = Math.round(offset - (opt.WS_TMB_POSITION_ADJUSTMENT * offset));
+ const wsTmbX = startX + wstLeftOffset + offset;
childBox.set_origin(wsTmbX, wsTmbY);
childBox.set_size(Math.max(wsTmbWidth, 1), Math.max(wsTmbHeight, 1));
-
this._workspacesThumbnails.allocate(childBox);
-
- availableHeight -= wsTmbHeight + spacing;
}
if (this._dash.visible) {
@@ -1638,45 +1497,80 @@ const ControlsManagerLayoutHorizontal = {
dashHeight = Math.min(dashHeight, wMaxHeight);
}
- let dashX, dashY, offset;
- if (opt.DASH_RIGHT)
- dashX = width - dashWidth;
- else if (opt.DASH_LEFT)
- dashX = 0;
- else if (opt.DASH_TOP)
- dashY = startY;
- else
- dashY = startY + height - dashHeight;
+ let dashX = opt.DASH_RIGHT ? width - dashWidth : 0;
+ let dashY = opt.DASH_TOP ? startY : startY + height - dashHeight;
if (opt.DASH_VERTICAL) {
- if (opt.WS_TMB_FULL) {
- offset = (height - dashHeight - wsTmbHeight) / 2;
- if (opt.WS_TMB_TOP) {
- offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing);
- dashY = startY + offset + wsTmbHeight;
- } else {
- offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing);
- dashY = startY + offset;
- }
- } else {
- offset = (height - dashHeight) / 2;
- offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing);
- dashY = startY + offset;
- }
+ 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;
+ let offset = (height - dashHeight - (opt.CENTER_DASH_WS ? dashTopOffset + dashBottomOffset : 0)) / 2;
+ offset -= opt.DASH_POSITION_ADJUSTMENT * (offset - spacing);
+ dashY = startY + (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
+ dashY = Math.clamp(startY + dashTopOffset + spacing, dashY, startY + height - dashBottomOffset - spacing - dashHeight);
} else {
- offset = (width - dashWidth) / 2;
- dashX = startX + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - halfSpacing));
+ const offset = (width - dashWidth) / 2;
+ dashX = startX + (offset - opt.DASH_POSITION_ADJUSTMENT * (offset - spacing));
}
+ dashX = Math.round(dashX);
- childBox.set_origin(Math.round(startX + dashX), Math.round(dashY));
- childBox.set_size(Math.round(dashWidth), Math.round(dashHeight));
+ childBox.set_origin(startX + dashX, dashY);
+ childBox.set_size(dashWidth, dashHeight);
this._dash.allocate(childBox);
}
- availableHeight -= opt.DASH_VERTICAL ? 0 : dashHeight;
+ // Main view offsets
+ const leftBoxOffset = opt.DASH_LEFT ? dashWidth : spacing;
+ const rightBoxOffset = opt.DASH_RIGHT ? dashWidth : spacing;
+ let topBoxOffset = (opt.DASH_TOP ? dashHeight : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0);
+ const bottomBoxOffset = (opt.DASH_BOTTOM ? dashHeight : spacing) + (opt.WS_TMB_BOTTOM ? wsTmbHeight + spacing : 0);
+ const centeredBoxOffset = Math.max(leftBoxOffset, rightBoxOffset);
+
+ // App grid needs to be calculated for the max wsTmbWidth in app grid, independently on the current wsTmb scale
+ const wsTmbHeightAppGrid = Math.round(height * opt.MAX_THUMBNAIL_SCALE_APPGRID);
+ const topBoxOffsetAppGrid = (opt.DASH_TOP ? dashHeight : spacing) + (opt.WS_TMB_TOP ? wsTmbHeightAppGrid + spacing : 0) + (opt.SHOW_SEARCH_ENTRY ? searchEntryHeight + spacing : 0);
+ const bottomBoxOffsetAppGrid = (opt.DASH_BOTTOM ? dashHeight : spacing) + (opt.WS_TMB_BOTTOM ? wsTmbHeightAppGrid + spacing : 0);
+
+ // searchEntry
+ const searchEntryY = startY + topBoxOffset;
- // Workspaces
- let params = [box, workAreaBox, dashWidth, dashHeight, wsTmbWidth, wsTmbHeight, searchHeight, startY];
+ const searchX = startX +
+ (opt.CENTER_SEARCH_VIEW || this._xAlignCenter
+ ? centeredBoxOffset
+ : leftBoxOffset); // xAlignCenter is set by wsBox
+
+ const searchWidth =
+ width - (opt.CENTER_SEARCH_VIEW || this._xAlignCenter
+ ? 2 * centeredBoxOffset
+ : leftBoxOffset + rightBoxOffset);
+
+ childBox.set_origin(searchX, searchEntryY);
+ childBox.set_size(searchWidth, searchEntryHeight);
+
+ this._searchEntry.allocate(childBox);
+
+ // searchResults
+ const searchY = startY + topBoxOffset + searchEntryHeight + spacing;
+ const searchHeight = height - topBoxOffset - bottomBoxOffset - searchEntryHeight - 2 * spacing;
+
+ childBox.set_origin(searchX, searchY);
+ childBox.set_size(searchWidth, searchHeight);
+ this._searchController.allocate(childBox);
+
+ // Add searchEntry height if needed
+ topBoxOffset += opt.SHOW_SEARCH_ENTRY ? searchEntryHeight + spacing : 0;
+
+ // Workspace
+ let params = [
+ box,
+ wsTmbWidth,
+ wsTmbHeight,
+ leftBoxOffset,
+ rightBoxOffset,
+ topBoxOffset,
+ bottomBoxOffset,
+ centeredBoxOffset,
+ ];
// Update cached boxes
for (const state of Object.values(ControlsState)) {
@@ -1696,39 +1590,14 @@ const ControlsManagerLayoutHorizontal = {
this._workspacesDisplay.allocate(workspacesBox);
- // Search entry
- const searchXoffset = (opt.DASH_LEFT ? dashWidth : 0) + spacing;
-
- // Y position under top Dash
- let searchEntryX, searchEntryY;
- if (opt.DASH_TOP)
- searchEntryY = startY + (opt.WS_TMB_TOP ? wsTmbHeight : 0) + dashHeight;
- else
- searchEntryY = startY + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0);
-
-
- searchEntryX = searchXoffset;
- let searchWidth = width - 2 * spacing - (opt.DASH_VERTICAL ? dashWidth : 0); // xAlignCenter is given by wsBox
- searchWidth = this._xAlignCenter ? width : searchWidth;
-
- if (opt.CENTER_SEARCH_VIEW) {
- childBox.set_origin(0, Math.round(searchEntryY));
- childBox.set_size(width, Math.round(searchHeight));
- } else {
- childBox.set_origin(Math.round(this._xAlignCenter ? 0 : searchEntryX), Math.round(searchEntryY));
- childBox.set_size(Math.round(this._xAlignCenter ? width : searchWidth - spacing), Math.round(searchHeight));
- }
-
- this._searchEntry.allocate(childBox);
-
- availableHeight -= searchHeight + spacing;
-
- // if (this._appDisplay.visible)... ? Can cause problems
- // Calculate appDisplay always for AppGrid state WsTmb scale
- let wsTmbHeightAppGrid = opt.MAX_THUMBNAIL_SCALE_APPGRID > 0
- ? wsTmbHeight / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE_APPGRID
- : wsTmbHeight / maxWsTmbScale * opt.MAX_THUMBNAIL_SCALE;
- params = [box, workAreaBox, searchHeight, dashWidth, dashHeight, wsTmbHeightAppGrid, startY];
+ // appDisplay
+ params = [
+ box,
+ leftBoxOffset === spacing ? 0 : leftBoxOffset,
+ rightBoxOffset === spacing ? 0 : rightBoxOffset,
+ topBoxOffsetAppGrid,
+ bottomBoxOffsetAppGrid,
+ ];
let appDisplayBox;
if (!transitionParams.transitioning) {
appDisplayBox =
@@ -1743,18 +1612,6 @@ const ControlsManagerLayoutHorizontal = {
}
this._appDisplay.allocate(appDisplayBox);
- // Search
- if (opt.CENTER_SEARCH_VIEW) {
- const dashW = (opt.DASH_VERTICAL ? dashWidth : 0) + spacing;
- searchWidth = width - 2 * dashW;
- childBox.set_origin(Math.round(dashW), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0) + searchHeight));
- } else {
- childBox.set_origin(Math.round(this._xAlignCenter ? spacing : searchXoffset), Math.round(startY + (opt.DASH_TOP ? dashHeight + spacing : spacing) + (opt.WS_TMB_TOP ? wsTmbHeight + spacing : 0) + searchHeight));
- }
-
- childBox.set_size(Math.round(searchWidth), Math.round(availableHeight));
- this._searchController.allocate(childBox);
-
this._runPostAllocation();
},
};
@@ -1774,22 +1631,3 @@ function _getFitModeForState(state) {
return FitMode.SINGLE;
}
}
-
-const LayoutManager = {
- _startupAnimation() {
- const dtdEnabled = !!((Me.Util.getEnabledExtensions('dash-to-dock').length && !Me.Util.getEnabledExtensions('dash-to-dock-vshell').length) ||
- Me.Util.getEnabledExtensions('ubuntu-dock').length);
- if (dtdEnabled && !Meta.is_restart()) {
- // DtD without V-Shell patch breaks overview on startup
- // Skip animation to hide the mess
- this._startupAnimationComplete();
- Main.overview._overview.controls._finishStartupSequence();
- } else if (Meta.is_restart()) {
- this._startupAnimationComplete();
- } else if (Main.sessionMode.isGreeter) {
- this._startupAnimationGreeter();
- } else {
- this._startupAnimationSession();
- }
- },
-};
diff --git a/extensions/46/vertical-workspaces/lib/panel.js b/extensions/47/vertical-workspaces/lib/panel.js
index f78ab6f..ba6d01a 100644
--- a/extensions/46/vertical-workspaces/lib/panel.js
+++ b/extensions/47/vertical-workspaces/lib/panel.js
@@ -47,7 +47,9 @@ export const PanelModule = class {
if (conflict && !reset)
console.warn(`[${Me.metadata.name}] Warning: "Panel" module disabled due to potential conflict with another extension`);
- reset = reset || !this.moduleEnabled || conflict || Main.sessionMode.isLocked;
+ reset = reset || !this.moduleEnabled || conflict;
+
+ this.moduleEnabled = !reset;
// don't touch original code if module disabled
if (reset && !this._firstActivation) {
@@ -69,13 +71,13 @@ export const PanelModule = class {
this._setPanelPosition();
this._updateStyleChangedConnection();
- if (opt.PANEL_MODE === 0) {
+ if (!opt.PANEL_MODE) {
this._updateOverviewConnection(true);
this._reparentPanel(false);
panelBox.translation_y = 0;
Main.panel.opacity = 255;
this._setPanelStructs(true);
- } else if (opt.PANEL_MODE === 1) {
+ } else if (opt.PANEL_OVERVIEW_ONLY) {
if (opt.SHOW_WS_PREVIEW_BG) {
this._reparentPanel(true);
if (opt.OVERVIEW_MODE2) {
@@ -83,8 +85,6 @@ export const PanelModule = class {
Main.layoutManager.overviewGroup.set_child_above_sibling(panelBox, null);
this._updateOverviewConnection();
} else {
- // otherwise move the panel below overviewGroup so it can get below workspacesDisplay
- Main.layoutManager.overviewGroup.set_child_below_sibling(panelBox, Main.overview._overview);
this._updateOverviewConnection(true);
}
this._showPanel(true);
@@ -95,13 +95,13 @@ export const PanelModule = class {
this._updateOverviewConnection();
}
// _connectPanel();
- } else if (opt.PANEL_MODE === 2) {
+ } else if (opt.PANEL_DISABLED) {
this._updateOverviewConnection(true);
this._reparentPanel(false);
this._showPanel(false);
// _connectPanel();
}
- this._setPanelStructs(opt.PANEL_MODE === 0);
+ this._setPanelStructs(!opt.PANEL_MODE);
Main.layoutManager._updateHotCorners();
this._overrides.addOverride('ActivitiesButton', Main.panel.statusArea.activities, ActivitiesButton);
@@ -147,7 +147,7 @@ export const PanelModule = class {
}
} else if (!this._styleChangedConId) {
this._styleChangedConId = Main.panel.connect('style-changed', () => {
- if (opt.PANEL_MODE === 1 && !opt.OVERVIEW_MODE2)
+ if (opt.PANEL_OVERVIEW_ONLY && !opt.OVERVIEW_MODE2)
Main.panel.add_style_pseudo_class('overview');
else if (opt.OVERVIEW_MODE2)
Main.panel.remove_style_pseudo_class('overview');
@@ -185,10 +185,10 @@ export const PanelModule = class {
_reparentPanel(reparent = false) {
const panel = Main.layoutManager.panelBox;
- if (reparent && panel.get_parent() === Main.layoutManager.uiGroup) {
+ if (reparent && panel.get_parent() === Main.layoutManager.uiGroup && !Main.sessionMode.isLocked) {
Main.layoutManager.uiGroup.remove_child(panel);
Main.layoutManager.overviewGroup.add_child(panel);
- } else if (!reparent && panel.get_parent() === Main.layoutManager.overviewGroup) {
+ } else if ((!reparent || Main.sessionMode.isLocked) && panel.get_parent() === Main.layoutManager.overviewGroup) {
Main.layoutManager.overviewGroup.remove_child(panel);
// return the panel at default position, panel shouldn't cover objects that should be above
Main.layoutManager.uiGroup.insert_child_at_index(panel, 4);
@@ -217,17 +217,17 @@ export const PanelModule = class {
duration: ANIMATION_TIME,
translation_y: 0,
onComplete: () => {
- this._setPanelStructs(opt.PANEL_MODE === 0);
+ this._setPanelStructs(!opt.PANEL_MODE);
},
});
- } else {
+ } else if (!Main.layoutManager._startingUp) {
const panelHeight = Main.panel.height;
Main.layoutManager.panelBox.ease({
duration: ANIMATION_TIME,
translation_y: opt.PANEL_POSITION_TOP ? -panelHeight + 1 : panelHeight - 1,
onComplete: () => {
Main.panel.opacity = 0;
- this._setPanelStructs(opt.PANEL_MODE === 0);
+ this._setPanelStructs(!opt.PANEL_MODE);
},
});
}
diff --git a/extensions/46/vertical-workspaces/lib/recentFilesSearchProvider.js b/extensions/47/vertical-workspaces/lib/recentFilesSearchProvider.js
index f050cf9..f050cf9 100644
--- a/extensions/46/vertical-workspaces/lib/recentFilesSearchProvider.js
+++ b/extensions/47/vertical-workspaces/lib/recentFilesSearchProvider.js
diff --git a/extensions/46/vertical-workspaces/lib/search.js b/extensions/47/vertical-workspaces/lib/search.js
index fc15862..47198a7 100644
--- a/extensions/46/vertical-workspaces/lib/search.js
+++ b/extensions/47/vertical-workspaces/lib/search.js
@@ -28,7 +28,7 @@ let Me;
let _;
let opt;
-let SEARCH_MAX_WIDTH;
+const SEARCH_MAX_WIDTH = 1092;
export const SearchModule = class {
constructor(me) {
@@ -110,16 +110,14 @@ export const SearchModule = class {
_updateSearchViewWidth(reset = false) {
const searchContent = Main.overview.searchController._searchResults._content;
- if (!SEARCH_MAX_WIDTH) { // just store original value;
- const themeNode = searchContent.get_theme_node();
- const width = themeNode.get_max_width();
- SEARCH_MAX_WIDTH = width;
- }
if (reset) {
searchContent.set_style('');
} else {
- let width = Math.round(SEARCH_MAX_WIDTH * opt.SEARCH_VIEW_SCALE);
+ let width = SEARCH_MAX_WIDTH;
+ if (Me.Util.monitorHasLowResolution())
+ width = Math.round(width * 0.8);
+ width = Math.round(width * opt.SEARCH_VIEW_SCALE);
searchContent.set_style(`max-width: ${width}px;`);
}
}
@@ -204,34 +202,53 @@ const AppSearchProvider = {
let results = appInfoList.map(app => app.get_id());
+ if (opt.SEARCH_APP_GRID_MODE && Main.overview.dash.showAppsButton.checked)
+ this._filterAppGrid(results);
+
results = results.concat(this._systemActions.getMatchingActions(terms));
return new Promise(resolve => resolve(results));
},
+ _filterAppGrid(results) {
+ const icons = Main.overview._overview.controls._appDisplay._orderedItems;
+ icons.forEach(icon => {
+ icon.visible = results.includes(icon.id);
+ });
+ },
+
// App search result size
createResultObject(resultMeta) {
+ let iconSize = opt.SEARCH_ICON_SIZE;
+ if (!iconSize) {
+ iconSize = Me.Util.monitorHasLowResolution()
+ ? 64
+ : 96;
+ }
+
if (resultMeta.id.endsWith('.desktop')) {
const icon = new AppDisplay.AppIcon(this._appSys.lookup_app(resultMeta['id']), {
expandTitleOnHover: false,
});
- icon.icon.setIconSize(opt.SEARCH_ICON_SIZE);
+ icon.icon.setIconSize(iconSize);
return icon;
} else {
+ this._iconSize = iconSize;
return new SystemActionIcon(this, resultMeta);
- // icon.icon._setSizeManually = true;
- // icon.icon.setIconSize(opt.SEARCH_ICON_SIZE);
- // return icon;
}
},
};
-const SystemActionIcon = GObject.registerClass(
-class SystemActionIcon extends Search.GridSearchResult {
+const SystemActionIcon = GObject.registerClass({
+ // Registered name should be unique
+ GTypeName: `SystemAction${Math.floor(Math.random() * 1000)}`,
+}, class SystemActionIcon extends Search.GridSearchResult {
_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.setIconSize(opt.SEARCH_ICON_SIZE);
+ this.icon.setIconSize(provider._iconSize);
}
activate() {
@@ -331,6 +348,58 @@ const SearchResultsView = {
this._statusText.set_text(_('No results.'));
}
},
+
+ _highlightFirstVisibleAppGridIcon() {
+ const appDisplay = Main.overview._overview.controls._appDisplay;
+ // appDisplay.grab_key_focus();
+ for (const icon of appDisplay._orderedItems) {
+ if (icon.visible) {
+ appDisplay.selectApp(icon.id);
+ break;
+ }
+ }
+ },
+
+ _maybeSetInitialSelection() {
+ if (opt.SEARCH_APP_GRID_MODE && Main.overview.dash.showAppsButton.checked) {
+ this._highlightFirstVisibleAppGridIcon();
+ return;
+ }
+
+ let newDefaultResult = null;
+
+ let providers = this._providers;
+ for (let i = 0; i < providers.length; i++) {
+ let provider = providers[i];
+ let display = provider.display;
+
+ if (!display.visible)
+ continue;
+
+ let firstResult = display.getFirstResult();
+ if (firstResult) {
+ newDefaultResult = firstResult;
+ break; // select this one!
+ }
+ }
+
+ if (newDefaultResult !== this._defaultResult) {
+ this._setSelected(this._defaultResult, false);
+ this._setSelected(newDefaultResult, this._highlightDefault);
+
+ this._defaultResult = newDefaultResult;
+ }
+ },
+
+ highlightDefault(highlight) {
+ if (opt.SEARCH_APP_GRID_MODE && Main.overview.dash.showAppsButton.checked) {
+ if (highlight)
+ this._highlightFirstVisibleAppGridIcon();
+ } else {
+ this._highlightDefault = highlight;
+ this._setSelected(this._defaultResult, highlight);
+ }
+ },
};
// Add highlighting of the "name" part of the result for all providers
diff --git a/extensions/46/vertical-workspaces/lib/searchController.js b/extensions/47/vertical-workspaces/lib/searchController.js
index 1722f15..1722f15 100644
--- a/extensions/46/vertical-workspaces/lib/searchController.js
+++ b/extensions/47/vertical-workspaces/lib/searchController.js
diff --git a/extensions/46/vertical-workspaces/lib/settings.js b/extensions/47/vertical-workspaces/lib/settings.js
index dcfc8f9..563063c 100644
--- a/extensions/46/vertical-workspaces/lib/settings.js
+++ b/extensions/47/vertical-workspaces/lib/settings.js
@@ -30,7 +30,7 @@ export const Options = class Options {
400,
() => {
this._gsettings.apply();
- this._updateCachedSettings();
+ this._updateSettings();
this._writeTimeoutId = 0;
return GLib.SOURCE_REMOVE;
}
@@ -102,10 +102,14 @@ export const Options = class Options {
appGridActivePreview: ['boolean', 'app-grid-active-preview'],
appGridFolderCenter: ['boolean', 'app-grid-folder-center'],
appGridPageWidthScale: ['int', 'app-grid-page-width-scale'],
+ appGridPageHeightScale: ['int', 'app-grid-page-height-scale'],
appGridSpacing: ['int', 'app-grid-spacing'],
+ appGridFolderSpacing: ['int', 'app-grid-folder-spacing'],
+ appGridShowPageArrows: ['boolean', 'app-grid-show-page-arrows'],
searchWindowsOrder: ['int', 'search-windows-order'],
searchFuzzy: ['boolean', 'search-fuzzy'],
searchMaxResultsRows: ['int', 'search-max-results-rows'],
+ searchAppGridMode: ['int', 'search-app-grid-mode'],
dashShowWindowsBeforeActivation: ['int', 'dash-show-windows-before-activation'],
dashIconScroll: ['int', 'dash-icon-scroll'],
dashIsolateWorkspaces: ['boolean', 'dash-isolate-workspaces'],
@@ -133,10 +137,12 @@ export const Options = class Options {
overlayKeyPrimary: ['int', 'overlay-key-primary'],
overlayKeySecondary: ['int', 'overlay-key-secondary'],
overviewEscBehavior: ['int', 'overview-esc-behavior'],
+ clickEmptyClose: ['boolean', 'click-empty-close'],
newWindowFocusFix: ['boolean', 'new-window-focus-fix'],
newWindowMonitorFix: ['boolean', 'new-window-monitor-fix'],
appGridPerformance: ['boolean', 'app-grid-performance'],
highlightingStyle: ['int', 'highlighting-style'],
+ delayStartup: ['boolean', 'delay-startup'],
workspaceSwitcherPopupModule: ['boolean', 'workspace-switcher-popup-module'],
workspaceAnimationModule: ['boolean', 'workspace-animation-module'],
@@ -162,6 +168,7 @@ export const Options = class Options {
profileName4: ['string', 'profile-name-4'],
};
this.cachedOptions = {};
+ this._updateSettings();
}
connect(name, callback) {
@@ -285,6 +292,10 @@ export const Options = class Options {
_updateSettings() {
this._updateCachedSettings();
+
+ // Basic spacing of the overview elements
+ this.SPACING = 12;
+
this.DASH_BG_ALPHA = this.get('dashBgOpacity') / 100;
this.DASH_BG_OPACITY = this.get('dashBgOpacity') * 2.5;
this.DASH_BG_COLOR = this.get('dashBgColor');
@@ -323,6 +334,8 @@ export const Options = class Options {
this.WS_TMB_POSITION = this.get('workspaceThumbnailsPosition');
this.ORIENTATION = this.WS_TMB_POSITION > 4 ? 0 : 1;
this.WORKSPACE_MAX_SPACING = this.get('wsMaxSpacing');
+ this.WS_MAX_SPACING_OFF_SCREEN = 350;
+ this.FORCE_SINGLE_WS_TRANSITION = false;
// ORIENTATION || DASH_LEFT || DASH_RIGHT ? 350 : 80;
this.SHOW_WS_TMB = ![4, 9].includes(this.WS_TMB_POSITION); // 4, 9 - disable
this.WS_TMB_FULL = this.get('wsThumbnailsFull');
@@ -347,29 +360,16 @@ export const Options = class Options {
this.SHOW_WST_LABELS_ON_HOVER = this.get('showWsTmbLabelsOnHover');
this.CLOSE_WS_BUTTON_MODE = this.get('closeWsButtonMode');
- this.MAX_THUMBNAIL_SCALE = this.get('wsThumbnailScale') / 100;
- if (this.MAX_THUMBNAIL_SCALE === 0) {
- this.MAX_THUMBNAIL_SCALE = 0.01;
- this.SHOW_WS_TMB = false;
- }
- this.MAX_THUMBNAIL_SCALE_APPGRID = this.get('wsThumbnailScaleAppGrid') / 100;
+ this.MAX_THUMBNAIL_SCALE = this.get('wsThumbnailScale') / 100 + 0.01;
+ this.MAX_THUMBNAIL_SCALE_APPGRID = this.get('wsThumbnailScaleAppGrid') / 100 + 0.01;
this.SHOW_WS_TMB_APPGRID = true;
- if (this.MAX_THUMBNAIL_SCALE_APPGRID === 0) {
- this.MAX_THUMBNAIL_SCALE_APPGRID = 0.01;
- this.SHOW_WS_TMB_APPGRID = false;
- }
this.MAX_THUMBNAIL_SCALE_STABLE = this.MAX_THUMBNAIL_SCALE === this.MAX_THUMBNAIL_SCALE_APPGRID;
-
- this.SEC_MAX_THUMBNAIL_SCALE = this.get('secWsThumbnailScale') / 100;
- if (this.SEC_MAX_THUMBNAIL_SCALE === 0) {
- this.SEC_MAX_THUMBNAIL_SCALE = 0.01;
- this.SHOW_SEC_WS_TMB = false;
- }
+ this.SEC_MAX_THUMBNAIL_SCALE = this.get('secWsThumbnailScale') / 100 + 0.01;
this.WS_PREVIEW_SCALE = this.get('wsPreviewScale') / 100;
this.SEC_WS_PREVIEW_SCALE = this.get('secWsPreviewScale') / 100;
// calculate number of possibly visible neighbor previews according to ws scale
- this.NUMBER_OF_VISIBLE_NEIGHBORS = Math.round(1 + (1 - this.WS_PREVIEW_SCALE) / 4);
+ this.NUMBER_OF_VISIBLE_NEIGHBORS = Math.round(2 + (1 - this.WS_PREVIEW_SCALE));
this.SHOW_WS_TMB_BG = this.get('showWsSwitcherBg') && this.SHOW_WS_TMB;
this.WS_PREVIEW_BG_RADIUS = this.get('wsPreviewBgRadius');
@@ -412,6 +412,7 @@ export const Options = class Options {
this.SEARCH_MAX_ROWS = this.get('searchMaxResultsRows');
this.SEARCH_FUZZY = this.get('searchFuzzy');
this.SEARCH_DELAY = 0;
+ this.SEARCH_APP_GRID_MODE = this.get('searchAppGridMode');
this.APP_GRID_ALLOW_INCOMPLETE_PAGES = this.get('appGridIncompletePages');
this.APP_GRID_ICON_SIZE = this.get('appGridIconSize');
@@ -420,7 +421,7 @@ export const Options = class Options {
this.APP_GRID_ADAPTIVE = !this.APP_GRID_COLUMNS && !this.APP_GRID_ROWS;
this.APP_GRID_ORDER = this.get('appGridOrder');
- this.APP_GRID_ALPHABET = [1, 2].includes(this.APP_GRID_ORDER);
+ this.APP_GRID_ALPHABET = [1, 2, 4].includes(this.APP_GRID_ORDER);
this.APP_GRID_FOLDERS_FIRST = this.APP_GRID_ORDER === 1;
this.APP_GRID_FOLDERS_LAST = this.APP_GRID_ORDER === 2;
this.APP_GRID_USAGE = this.APP_GRID_ORDER === 3;
@@ -448,24 +449,26 @@ export const Options = class Options {
this.APP_GRID_FOLDER_COLUMNS = this.get('appGridFolderColumns');
this.APP_GRID_FOLDER_ROWS = this.get('appGridFolderRows');
this.APP_GRID_SPACING = this.get('appGridSpacing');
+ this.APP_GRID_FOLDER_SPACING = this.get('appGridFolderSpacing');
this.APP_GRID_FOLDER_DEFAULT = this.APP_GRID_FOLDER_ROWS === 3 && this.APP_GRID_FOLDER_COLUMNS === 3;
this.APP_GRID_FOLDER_ADAPTIVE = !this.APP_GRID_FOLDER_COLUMNS && !this.APP_GRID_FOLDER_ROWS;
this.APP_GRID_ACTIVE_PREVIEW = this.get('appGridActivePreview');
this.APP_GRID_FOLDER_CENTER = this.get('appGridFolderCenter');
this.APP_GRID_PAGE_WIDTH_SCALE = this.get('appGridPageWidthScale') / 100;
+ this.APP_GRID_PAGE_HEIGHT_SCALE = this.get('appGridPageHeightScale') / 100;
+ this.APP_GRID_SHOW_PAGE_ARROWS = this.get('appGridShowPageArrows');
- this.APP_GRID_ICON_SIZE_DEFAULT = this.APP_GRID_ACTIVE_PREVIEW && !this.APP_GRID_USAGE ? 176 : 96;
+ // Default icon sizes updates in the IconGrid._findBestModeForSize()
+ this.APP_GRID_ICON_SIZE_DEFAULT = this.APP_GRID_ACTIVE_PREVIEW && !this.APP_GRID_USAGE ? 192 : 96;
this.APP_GRID_FOLDER_ICON_SIZE_DEFAULT = 96;
this.APP_GRID_PERFORMANCE = this.get('appGridPerformance');
- this.WINDOW_SEARCH_ORDER = this.get('searchWindowsOrder');
-
this.PANEL_POSITION_TOP = this.get('panelPosition') === 0;
+ this.PANEL_POSITION_BOTTOM = this.get('panelPosition') === 1;
this.PANEL_MODE = this.get('panelVisibility');
this.PANEL_DISABLED = this.PANEL_MODE === 2;
this.PANEL_OVERVIEW_ONLY = this.PANEL_MODE === 1;
- this.START_Y_OFFSET = 0; // set from main module
this.WINDOW_ATTENTION_MODE = this.get('windowAttentionMode');
this.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS = this.WINDOW_ATTENTION_MODE === 1;
@@ -514,8 +517,7 @@ export const Options = class Options {
this.OVERLAY_KEY_SECONDARY = this.get('overlayKeySecondary');
this.ESC_BEHAVIOR = this.get('overviewEscBehavior');
-
- this.WINDOW_THUMBNAIL_ENABLED = !!Me.Util.getEnabledExtensions('window-thumbnails').length;
+ this.CLICK_EMPTY_CLOSE = this.get('clickEmptyClose');
this.FIX_NEW_WINDOW_FOCUS = this.get('newWindowFocusFix');
this.FIX_NEW_WINDOW_MONITOR = this.get('newWindowMonitorFix');
@@ -524,6 +526,8 @@ export const Options = class Options {
this.HIGHLIGHT_DEFAULT = this.HIGHLIGHTING_STYLE === 0;
this.HIGHLIGHT_UNDERLINE = this.HIGHLIGHTING_STYLE === 1;
this.HIGHLIGHT_NONE = this.HIGHLIGHTING_STYLE === 2;
+
+ this.DELAY_STARTUP = this.get('delayStartup');
}
_getAnimationDirection() {
diff --git a/extensions/46/vertical-workspaces/lib/swipeTracker.js b/extensions/47/vertical-workspaces/lib/swipeTracker.js
index 560b296..560b296 100644
--- a/extensions/46/vertical-workspaces/lib/swipeTracker.js
+++ b/extensions/47/vertical-workspaces/lib/swipeTracker.js
diff --git a/extensions/46/vertical-workspaces/lib/util.js b/extensions/47/vertical-workspaces/lib/util.js
index ab79c48..0da67ce 100644
--- a/extensions/46/vertical-workspaces/lib/util.js
+++ b/extensions/47/vertical-workspaces/lib/util.js
@@ -10,24 +10,30 @@
'use strict';
-import GLib from 'gi://GLib';
import Clutter from 'gi://Clutter';
+import Gio from 'gi://Gio';
+import GLib from 'gi://GLib';
+import GObject from 'gi://GObject';
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
-import Gio from 'gi://Gio';
+import St from 'gi://St';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
+import * as ModalDialog from 'resource:///org/gnome/shell/ui/modalDialog.js';
import { InjectionManager } from 'resource:///org/gnome/shell/extensions/extension.js';
let Me;
+let _;
let _installedExtensions;
export function init(me) {
Me = me;
+ _ = Me.gettext;
}
export function cleanGlobals() {
Me = null;
+ _ = null;
_installedExtensions = null;
}
@@ -373,3 +379,67 @@ export function getWindows(workspace) {
// ... and filter out skip-taskbar windows and duplicates
}).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) === i);
}
+
+export function monitorHasLowResolution(monitorIndex, resolutionLimit) {
+ resolutionLimit = resolutionLimit ?? 1200000;
+ monitorIndex = monitorIndex ?? global.display.get_primary_monitor();
+ const monitorGeometry = global.display.get_monitor_geometry(monitorIndex);
+ const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
+ const monitorResolution = monitorGeometry.width * monitorGeometry.height;
+ return (monitorResolution / scaleFactor) < resolutionLimit;
+}
+
+// /////////////////////////////////////////////////////////////////////////////////////////////
+// Status dialog that appears during updating V-Shell configuration and blocks inputs
+
+export const RestartMessage = GObject.registerClass({
+ // Registered name should be unique
+ GTypeName: `RestartMessage${Math.floor(Math.random() * 1000)}`,
+}, class RestartMessage extends ModalDialog.ModalDialog {
+ _init() {
+ super._init({
+ shellReactive: false,
+ styleClass: 'restart-message headline update-message',
+ shouldFadeIn: false,
+ destroyOnClose: false,
+ });
+
+ const label = new St.Label({
+ text: _('Updating V-Shell'),
+ x_align: Clutter.ActorAlign.CENTER,
+ y_align: Clutter.ActorAlign.CENTER,
+ });
+
+ this.contentLayout.add_child(label);
+ this.buttonLayout.hide();
+ this.connect('destroy', () => this.removeMessage());
+ }
+
+ showMessage(timeout = 500) {
+ if (this._timeoutId || Me._resetInProgress || Main.layoutManager._startingUp)
+ return;
+ this._removeTimeout();
+ this.open();
+ this._timeoutId = GLib.timeout_add(
+ GLib.PRIORITY_LOW,
+ timeout,
+ () => {
+ this._timeoutId = 0;
+ this.removeMessage();
+ return GLib.SOURCE_REMOVE;
+ }
+ );
+ }
+
+ _removeTimeout() {
+ if (this._timeoutId) {
+ GLib.source_remove(this._timeoutId);
+ this._timeoutId = 0;
+ }
+ }
+
+ removeMessage() {
+ this._removeTimeout();
+ this.close();
+ }
+});
diff --git a/extensions/46/vertical-workspaces/lib/windowAttentionHandler.js b/extensions/47/vertical-workspaces/lib/windowAttentionHandler.js
index 744f5b6..ae115ed 100644
--- a/extensions/46/vertical-workspaces/lib/windowAttentionHandler.js
+++ b/extensions/47/vertical-workspaces/lib/windowAttentionHandler.js
@@ -10,9 +10,13 @@
'use strict';
+import Clutter from 'gi://Clutter';
+
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as MessageTray from 'resource:///org/gnome/shell/ui/messageTray.js';
+const shellVersion46 = !Clutter.Container;
+
let Me;
let opt;
@@ -86,9 +90,8 @@ const WindowAttentionHandlerCommon = {
}
const app = this._tracker.get_window_app(window);
- // const source = new WindowAttentionHandler.WindowAttentionSource(app, window);
let args;
- if (!Main.overview.dash.add_actor) // detects GS 46 - Clutter.Container has been removed
+ if (shellVersion46)
args = { title: app.get_name() };
else
args = app.get_name();
@@ -98,24 +101,44 @@ const WindowAttentionHandlerCommon = {
source._init(app, window);
Main.messageTray.add(source);
- let [title, banner] = this._getTitleAndBanner(app, window);
+ let [title, body] = this._getTitleAndBanner(app, window);
+ args = shellVersion46
+ ? [{ source, title, body, forFeedback: true }]
+ : [source, title, body];
+
+ const notification = new MessageTray.Notification(...args);
+ if (!shellVersion46)
+ notification.setForFeedback(true);
- const notification = new MessageTray.Notification(source, title, banner);
notification.connect('activated', () => {
source.open();
});
- notification.setForFeedback(true);
- if (opt.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS)
- // just push the notification to the message tray without showing notification
- source.pushNotification(notification);
- else
- source.showNotification(notification);
-
- window.connectObject('notify::title', () => {
- [title, banner] = this._getTitleAndBanner(app, window);
- notification.update(title, banner);
- }, source);
+ if (shellVersion46) {
+ notification.acknowledged = opt.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS;
+ source.addNotification(notification);
+ if (opt.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS) {
+ // just push the notification to the message tray without showing notification
+ notification.acknowledged = true;
+ Main.messageTray._notificationQueue.push(notification);
+ Main.panel.statusArea.dateMenu._indicator.show();
+ }
+ window.connectObject('notify::title', () => {
+ [title, body] = this._getTitleAndBanner(app, window);
+ notification.set({ title, body });
+ }, source);
+ } else {
+ if (opt.WINDOW_ATTENTION_DISABLE_NOTIFICATIONS)
+ // just push the notification to the message tray without showing notification
+ source.pushNotification(notification);
+ else
+ source.showNotification(notification);
+
+ window.connectObject('notify::title', () => {
+ [title, body] = this._getTitleAndBanner(app, window);
+ notification.update(title, body);
+ }, source);
+ }
},
};
diff --git a/extensions/46/vertical-workspaces/lib/windowManager.js b/extensions/47/vertical-workspaces/lib/windowManager.js
index a6f9b09..a6f9b09 100644
--- a/extensions/46/vertical-workspaces/lib/windowManager.js
+++ b/extensions/47/vertical-workspaces/lib/windowManager.js
diff --git a/extensions/46/vertical-workspaces/lib/windowPreview.js b/extensions/47/vertical-workspaces/lib/windowPreview.js
index 3253aa5..a529dc1 100644
--- a/extensions/46/vertical-workspaces/lib/windowPreview.js
+++ b/extensions/47/vertical-workspaces/lib/windowPreview.js
@@ -32,6 +32,8 @@ const WINDOW_ACTIVE_SIZE_INC = 5;
const WINDOW_OVERLAY_FADE_TIME = 200;
const WINDOW_DND_SIZE = 256;
const DRAGGING_WINDOW_OPACITY = 100;
+const ICON_OVERLAP = 0.7;
+const ICON_TITLE_SPACING = 6;
const ControlsState = OverviewControls.ControlsState;
@@ -109,7 +111,6 @@ const WindowPreviewCommon = {
this._overviewAdjustment = overviewAdjustment;
const ICON_SIZE = opt.WIN_PREVIEW_ICON_SIZE;
- const ICON_OVERLAP = 0.7;
Shell.WindowPreview.prototype._init.bind(this)({
reactive: true,
@@ -589,6 +590,15 @@ const WindowPreviewCommon = {
}
},
+ overlapHeights() {
+ const [, titleHeight] = this._title.get_preferred_height(-1);
+
+ const topOverlap = 0;
+ const bottomOverlap = opt.WIN_TITLES_POSITION === 2 ? titleHeight + ICON_TITLE_SPACING : 0;
+
+ return [topOverlap, bottomOverlap];
+ },
+
_onDestroy() {
if (this._activateSelected)
this._activate();
diff --git a/extensions/46/vertical-workspaces/lib/workspace.js b/extensions/47/vertical-workspaces/lib/workspace.js
index 679a1ab..9f1dbbc 100644
--- a/extensions/46/vertical-workspaces/lib/workspace.js
+++ b/extensions/47/vertical-workspaces/lib/workspace.js
@@ -11,7 +11,7 @@
'use strict';
import St from 'gi://St';
-import Graphene from 'gi://Graphene';
+// import Graphene from 'gi://Graphene';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as Workspace from 'resource:///org/gnome/shell/ui/workspace.js';
@@ -108,7 +108,6 @@ const WorkspaceLayout = {
}
},
- // this fixes wrong size and position calculation of window clones while moving overview to the next (+1) workspace if vertical ws orientation is enabled in GS
_adjustSpacingAndPadding(rowSpacing, colSpacing, containerBox) {
if (this._sortedWindows.length === 0)
return [rowSpacing, colSpacing, containerBox];
@@ -120,36 +119,46 @@ const WorkspaceLayout = {
const [topOversize, bottomOversize] = window.chromeHeights();
const [leftOversize, rightOversize] = window.chromeWidths();
- const oversize = Math.max(topOversize, bottomOversize, leftOversize, rightOversize);
+ let oversize = Math.max(topOversize, bottomOversize, leftOversize, rightOversize);
if (rowSpacing !== null)
rowSpacing += oversize;
if (colSpacing !== null)
colSpacing += oversize;
- if (containerBox) {
- const vertical = global.workspaceManager.layout_rows === -1;
+ // Chrome highlights and window titles may exceed the workspace preview area
+ // and also the screen area if there is no overview element below/above/on_the_right of the workspace
+ // The original code tests whether window titles are out of the screen and applies correction accordingly
+ // That is a problem when workspaces are vertically stacked, because this method is called even during transitions between workspaces
+ // In V-Shell, this issue can be solved by reducing the workspace preview scale in the Settings
+ // Original code - horizontal orientation only
+ /* if (containerBox) {
const monitor = Main.layoutManager.monitors[this._monitorIndex];
- const bottomPoint = new Graphene.Point3D();
- if (vertical)
- bottomPoint.x = containerBox.x2;
- else
- bottomPoint.y = containerBox.y2;
-
-
+ const bottomPoint = new Graphene.Point3D({ y: containerBox.y2 });
const transformedBottomPoint =
this._container.apply_transform_to_point(bottomPoint);
- const bottomFreeSpace = vertical
- ? (monitor.x + monitor.height) - transformedBottomPoint.x
- : (monitor.y + monitor.height) - transformedBottomPoint.y;
+ const bottomFreeSpace =
+ (monitor.y + monitor.height) - transformedBottomPoint.y;
const [, bottomOverlap] = window.overlapHeights();
- if ((bottomOverlap + oversize) > bottomFreeSpace && !vertical)
+ if ((bottomOverlap + oversize) > bottomFreeSpace)
containerBox.y2 -= (bottomOverlap + oversize) - bottomFreeSpace;
- }
+ }*/
+
+ // Alternative code reducing the box size unconditionally
+ /* if (containerBox) {
+ const [, bottomOverlap] = window.overlapHeights();
+
+ // Adjusting x1/x2 here is pointless,
+ // x1 only moves window previews to the right and down, x2 has no effect
+ // Prevent window previews from overlapping a workspace preview
+ oversize *= 1.5;
+ containerBox.y1 += oversize;
+ containerBox.y2 -= bottomOverlap + oversize;
+ }*/
return [rowSpacing, colSpacing, containerBox];
},
diff --git a/extensions/46/vertical-workspaces/lib/workspaceAnimation.js b/extensions/47/vertical-workspaces/lib/workspaceAnimation.js
index e29e3ef..e29e3ef 100644
--- a/extensions/46/vertical-workspaces/lib/workspaceAnimation.js
+++ b/extensions/47/vertical-workspaces/lib/workspaceAnimation.js
diff --git a/extensions/46/vertical-workspaces/lib/workspaceSwitcherPopup.js b/extensions/47/vertical-workspaces/lib/workspaceSwitcherPopup.js
index cf3d4c1..cf3d4c1 100644
--- a/extensions/46/vertical-workspaces/lib/workspaceSwitcherPopup.js
+++ b/extensions/47/vertical-workspaces/lib/workspaceSwitcherPopup.js
diff --git a/extensions/46/vertical-workspaces/lib/workspaceThumbnail.js b/extensions/47/vertical-workspaces/lib/workspaceThumbnail.js
index d64fda2..cce5046 100644
--- a/extensions/46/vertical-workspaces/lib/workspaceThumbnail.js
+++ b/extensions/47/vertical-workspaces/lib/workspaceThumbnail.js
@@ -41,7 +41,7 @@ const ThumbnailState = {
const ControlsState = OverviewControls.ControlsState;
-const WORKSPACE_CUT_SIZE = 10;
+const WORKSPACE_CUT_SCALE = 0.15;
const WORKSPACE_KEEP_ALIVE_TIME = 100;
export const WorkspaceThumbnailModule = class {
@@ -85,6 +85,7 @@ export const WorkspaceThumbnailModule = class {
this._overrides.addOverride('WorkspaceThumbnail', WorkspaceThumbnail.WorkspaceThumbnail.prototype, WorkspaceThumbnailCommon);
this._overrides.addOverride('ThumbnailsBoxCommon', WorkspaceThumbnail.ThumbnailsBox.prototype, ThumbnailsBoxCommon);
+ this._overrides.addOverride('WindowClone', WorkspaceThumbnail.WindowClone.prototype, WindowClone);
// replacing opt.ORIENTATION local constant with boxOrientation internal variable allows external customers such as the AATWS extension to control the box orientation.
Main.overview._overview.controls._thumbnailsBox._boxOrientation = opt.ORIENTATION;
@@ -702,10 +703,19 @@ const ThumbnailsBoxCommon = {
},
};
+function _getWorkspaceCutSize(tmbSize, index) {
+ let cutSize = WORKSPACE_CUT_SCALE * tmbSize;
+ // Compensate for the missing thumbnail in front of the first one
+ if (index === 0)
+ cutSize *= 1.5;
+ return Math.floor(cutSize);
+}
+
const ThumbnailsBoxVertical = {
_getPlaceholderTarget(index, spacing, rtl) {
this._dropPlaceholder.add_style_class_name('placeholder-vertical');
const workspace = this._thumbnails[index];
+ const WORKSPACE_CUT_SIZE = _getWorkspaceCutSize(workspace.height, index);
let targetY1;
let targetY2;
@@ -740,6 +750,7 @@ const ThumbnailsBoxVertical = {
_withinWorkspace(y, index, rtl) {
const length = this._thumbnails.length;
const workspace = this._thumbnails[index];
+ const WORKSPACE_CUT_SIZE = _getWorkspaceCutSize(workspace.height, index);
let workspaceY1 = workspace.y + WORKSPACE_CUT_SIZE;
let workspaceY2 = workspace.y + workspace.height - WORKSPACE_CUT_SIZE;
@@ -788,12 +799,14 @@ const ThumbnailsBoxVertical = {
const ratio = this._porthole.width / this._porthole.height;
const tmbHeight = themeNode.adjust_for_width(forWidth) / ratio;
- const naturalheight = this._thumbnails.reduce((accumulator, thumbnail/* , index*/) => {
- const progress = 1 - thumbnail.collapse_fraction;
- const height = tmbHeight * progress;
- return accumulator + height;
- }, 0);
- return themeNode.adjust_preferred_width(totalSpacing, Math.round(naturalheight));
+ const naturalHeight = Math.round(
+ this._thumbnails.reduce((accumulator, thumbnail/* , index*/) => {
+ const progress = 1 - thumbnail.collapse_fraction;
+ const height = tmbHeight * progress;
+ return accumulator + height;
+ }, 0)
+ );
+ return themeNode.adjust_preferred_width(totalSpacing, naturalHeight);
},
// removes extra space (extraWidth in the original function), we need the box as accurate as possible
@@ -976,6 +989,7 @@ const ThumbnailsBoxVertical = {
const ThumbnailsBoxHorizontal = {
_getPlaceholderTarget(index, spacing, rtl) {
const workspace = this._thumbnails[index];
+ const WORKSPACE_CUT_SIZE = _getWorkspaceCutSize(workspace.width, index);
let targetX1;
let targetX2;
@@ -1010,6 +1024,7 @@ const ThumbnailsBoxHorizontal = {
_withinWorkspace(x, index, rtl) {
const length = this._thumbnails.length;
const workspace = this._thumbnails[index];
+ const WORKSPACE_CUT_SIZE = _getWorkspaceCutSize(workspace.width, index);
let workspaceX1 = workspace.x + WORKSPACE_CUT_SIZE;
let workspaceX2 = workspace.x + workspace.width - WORKSPACE_CUT_SIZE;
@@ -1060,11 +1075,13 @@ const ThumbnailsBoxHorizontal = {
const tmbWidth = themeNode.adjust_for_height(forHeight) / ratio;
- const naturalWidth = this._thumbnails.reduce((accumulator, thumbnail) => {
- const progress = 1 - thumbnail.collapse_fraction;
- const width = tmbWidth * progress;
- return accumulator + width;
- }, 0);
+ const naturalWidth = Math.round(
+ this._thumbnails.reduce((accumulator, thumbnail) => {
+ const progress = 1 - thumbnail.collapse_fraction;
+ const width = tmbWidth * progress;
+ return accumulator + width;
+ }, 0)
+ );
return themeNode.adjust_preferred_width(totalSpacing, naturalWidth);
},
@@ -1234,3 +1251,11 @@ const ThumbnailsBoxHorizontal = {
_updateShouldShow: ThumbnailsBoxVertical._updateShouldShow,
};
+
+const WindowClone = {
+ after__init() {
+ // Make it transparent and smaller than usual while dragging
+ this._draggable._dragActorOpacity = 200;
+ this._draggable._dragActorMaxSize = 150;
+ },
+};
diff --git a/extensions/46/vertical-workspaces/lib/workspacesView.js b/extensions/47/vertical-workspaces/lib/workspacesView.js
index 8e20db3..5c0d36b 100644
--- a/extensions/46/vertical-workspaces/lib/workspacesView.js
+++ b/extensions/47/vertical-workspaces/lib/workspacesView.js
@@ -69,6 +69,8 @@ export const WorkspacesViewModule = class {
if (!desktopCubeConflict)
this._overrides.addOverride('WorkspacesView', WorkspacesView.WorkspacesView.prototype, WorkspacesViewCommon);
+ else
+ this._overrides.removeOverride('WorkspacesView');
this._overrides.addOverride('WorkspacesDisplay', WorkspacesView.WorkspacesDisplay.prototype, WorkspacesDisplayCommon);
this._overrides.addOverride('ExtraWorkspaceView', WorkspacesView.ExtraWorkspaceView.prototype, ExtraWorkspaceViewCommon);
@@ -208,18 +210,26 @@ const WorkspacesViewCommon = {
// 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
// and only current and adjacent ws when switching ws
- w.visible = (this._animating && wsScrollProgress && distanceToCurrentWorkspace <= (opt.NUMBER_OF_VISIBLE_NEIGHBORS + 1)) || scaleProgress === 1 ||
- (opt.WORKSPACE_MAX_SPACING > 340 && distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS && currentState === ControlsState.WINDOW_PICKER) ||
- (this._monitorIndex !== primaryMonitor && distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS) || (!opt.WS_ANIMATION && distanceToCurrentWorkspace < opt.NUMBER_OF_VISIBLE_NEIGHBORS) ||
- (opt.WORKSPACE_MAX_SPACING < 340 && distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS && currentState <= ControlsState.WINDOW_PICKER &&
- ((initialState < ControlsState.APP_GRID && finalState < ControlsState.APP_GRID))
- );
+ w.visible =
+ (this._animating && wsScrollProgress && distanceToCurrentWorkspace <= (opt.NUMBER_OF_VISIBLE_NEIGHBORS + 1)) ||
+ scaleProgress === 1 ||
+ (opt.WORKSPACE_MAX_SPACING >= opt.WS_MAX_SPACING_OFF_SCREEN &&
+ distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
+ currentState === ControlsState.WINDOW_PICKER
+ ) ||
+ (this._monitorIndex !== primaryMonitor && distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS) ||
+ (!opt.WS_ANIMATION && distanceToCurrentWorkspace < opt.NUMBER_OF_VISIBLE_NEIGHBORS) ||
+ (distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS &&
+ currentState <= ControlsState.WINDOW_PICKER &&
+ (initialState < ControlsState.APP_GRID && finalState < ControlsState.APP_GRID)
+ );
// after transition from APP_GRID to WINDOW_PICKER state,
// adjacent workspaces are hidden and we need them to show up
// make them visible during animation can impact smoothness of the animation
// so we show them after the animation finished, move them to their position from outside of the monitor
- if (!w.visible && distanceToCurrentWorkspace === 1 && initialState === ControlsState.APP_GRID && currentState === ControlsState.WINDOW_PICKER) {
+ if (currentState === ControlsState.WINDOW_PICKER && !w.visible && distanceToCurrentWorkspace <= opt.NUMBER_OF_VISIBLE_NEIGHBORS && initialState === ControlsState.APP_GRID) {
+ w.remove_all_transitions();
w.visible = true;
const directionNext = distance > 0;
if (!opt.ORIENTATION) {
@@ -315,115 +325,103 @@ const SecondaryMonitorDisplayVertical = {
return { opacity, scale, translationX };
},
- _getThumbnailsWidth(box, spacing) {
- if (opt.SEC_WS_TMB_HIDDEN)
- return 0;
+ _getWorkspacesBoxForState(state, box, workArea, wsTmbWidth, spacing) {
+ let workspaceBox = box.copy();
- const [width, height] = box.get_size();
- const { expandFraction } = this._thumbnails;
- const [, thumbnailsWidth] = this._thumbnails.get_preferred_width(height - 2 * spacing);
- let scaledWidth;
- if (opt.SEC_WS_PREVIEW_SHIFT && !opt.PANEL_DISABLED)
- scaledWidth = ((height - Main.panel.height) * opt.SEC_MAX_THUMBNAIL_SCALE) * (width / height);
- else
- scaledWidth = width * opt.SEC_MAX_THUMBNAIL_SCALE;
+ if (
+ (state === ControlsState.WINDOW_PICKER || state === ControlsState.APP_GRID) &&
+ !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
+ ) {
+ workspaceBox = workArea.copy();
+ const [startX, startY] = workspaceBox.get_origin();
+ let [width, height] = workspaceBox.get_size();
- return Math.min(
- thumbnailsWidth * expandFraction,
- Math.round(scaledWidth));
- },
+ let wsBoxWidth = width - (wsTmbWidth ? wsTmbWidth + spacing : 0) - 2 * spacing;
+ let wsBoxHeight = height - 2 * spacing;
- _getWorkspacesBoxForState(state, box, thumbnailsWidth, spacing, startY, panelHeight) {
- // const { ControlsState } = OverviewControls;
- const workspaceBox = box.copy();
- let [width, height] = workspaceBox.get_size();
- height -= panelHeight;
+ const ratio = width / height;
+ let wRatio = wsBoxWidth / wsBoxHeight;
+ let scale = ratio / wRatio;
- let wWidth, wHeight, wsbX, wsbY, offset;
- switch (state) {
- case ControlsState.HIDDEN:
- break;
- case ControlsState.WINDOW_PICKER:
- case ControlsState.APP_GRID:
- if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
- break;
+ if (scale > 1) {
+ wsBoxHeight /= scale;
+ wsBoxWidth = wsBoxHeight * ratio;
+ } else {
+ wsBoxWidth *= scale;
+ wsBoxHeight = wsBoxWidth / ratio;
+ }
- wWidth = width - thumbnailsWidth - 5 * spacing;
- wHeight = Math.min(wWidth / (width / height), height - 4 * spacing);
- wWidth = Math.round(wWidth * opt.SEC_WS_PREVIEW_SCALE);
- wHeight = Math.round(wHeight * opt.SEC_WS_PREVIEW_SCALE);
+ // height decides the actual size, ratio is given by the workArea
+ wsBoxHeight = Math.round(wsBoxHeight * opt.SEC_WS_PREVIEW_SCALE);
+ wsBoxWidth = Math.round(wsBoxWidth * opt.SEC_WS_PREVIEW_SCALE);
- offset = Math.round(width - thumbnailsWidth - wWidth) / 2;
- if (opt.SEC_WS_TMB_LEFT)
- wsbX = thumbnailsWidth + offset;
- else
- wsbX = offset;
+ let offset = Math.round(width - wsTmbWidth - wsBoxWidth - spacing) / 2;
- wsbY = Math.round((startY + height - wHeight) / 2);
+ const wsbX = startX + opt.SEC_WS_TMB_LEFT
+ ? wsTmbWidth + spacing + offset
+ : offset;
+
+ const wsbY = Math.round((startY + height - wsBoxHeight) / 2);
workspaceBox.set_origin(wsbX, wsbY);
- workspaceBox.set_size(wWidth, wHeight);
- break;
+ workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
}
return workspaceBox;
},
+ _getWorkAreaBox(box) {
+ if (!opt.SEC_WS_PREVIEW_SHIFT || !Main.panel.visible)
+ return box;
+
+ const workArea = box.copy();
+ const panelHeight = Main.panel.height;
+ workArea.y1 += opt.PANEL_POSITION_TOP ? panelHeight : 0;
+ workArea.y2 -= opt.PANEL_POSITION_BOTTOM ? panelHeight : 0;
+
+ return workArea;
+ },
+
vfunc_allocate(box) {
this.set_allocation(box);
const themeNode = this.get_theme_node();
const contentBox = themeNode.get_content_box(box);
- let [width, height] = contentBox.get_size();
- let [, startY] = contentBox.get_origin();
- // Save some resources
- if (this._startY === undefined) {
- this._panelHeight = opt.SEC_WS_PREVIEW_SHIFT && Main.panel.visible ? Main.panel.height : 0;
- startY += opt.SEC_WS_PREVIEW_SHIFT && opt.PANEL_POSITION_TOP ? this._panelHeight : 0;
- this._startY = startY;
- }
- startY = this._startY;
- height -= this._panelHeight;
- const { expandFraction } = this._thumbnails;
- const spacing = themeNode.get_length('spacing') * expandFraction;
+ const workArea = this._getWorkAreaBox(contentBox);
+
+ let [width, height] = workArea.get_size();
+ let [startX, startY] = workArea.get_origin();
+
+ const spacing = opt.SPACING;
- let thumbnailsWidth = 0;
- let thumbnailsHeight = 0;
+ let wsTmbWidth = 0;
+ let wsTmbHeight = 0;
this._thumbnails.visible = !opt.SEC_WS_TMB_HIDDEN;
if (this._thumbnails.visible) {
- thumbnailsWidth = Math.round(width * opt.SEC_MAX_THUMBNAIL_SCALE);
+ wsTmbWidth = Math.round(width * opt.SEC_MAX_THUMBNAIL_SCALE);
let totalTmbSpacing;
- [totalTmbSpacing, thumbnailsHeight] = this._thumbnails.get_preferred_height(thumbnailsWidth);
- thumbnailsHeight = Math.round(thumbnailsHeight + totalTmbSpacing);
+ [totalTmbSpacing, wsTmbHeight] = this._thumbnails.get_preferred_height(wsTmbWidth);
+ wsTmbHeight += totalTmbSpacing;
const thumbnailsHeightMax = height - spacing;
- if (thumbnailsHeight > thumbnailsHeightMax) {
- thumbnailsHeight = thumbnailsHeightMax;
- thumbnailsWidth = Math.round(this._thumbnails.get_preferred_width(thumbnailsHeight)[1]);
+ if (wsTmbHeight > thumbnailsHeightMax) {
+ wsTmbHeight = thumbnailsHeightMax;
+ wsTmbWidth = Math.round(this._thumbnails.get_preferred_width(wsTmbHeight)[1]);
}
- let wsTmbX;
- if (opt.SEC_WS_TMB_LEFT) {
- wsTmbX = 0;
- this._thumbnails._positionLeft = true;
- } else {
- wsTmbX = width - thumbnailsWidth;
- this._thumbnails._positionLeft = false;
- }
+ let wsTmbX = opt.SEC_WS_TMB_LEFT
+ ? startX + spacing
+ : startX + width - wsTmbWidth - spacing;
- const childBox = new Clutter.ActorBox();
- const availSpace = height - thumbnailsHeight;
+ let offset = (height - wsTmbHeight) / 2;
+ const wsTmbY = startY + Math.round(offset - opt.SEC_WS_TMB_POSITION_ADJUSTMENT * (offset - spacing));
- let wsTmbY = availSpace / 2;
-
- wsTmbY -= opt.SEC_WS_TMB_POSITION_ADJUSTMENT * (wsTmbY - spacing / 2);
- wsTmbY += startY;
-
- childBox.set_origin(Math.round(wsTmbX), Math.round(wsTmbY));
- childBox.set_size(thumbnailsWidth, thumbnailsHeight);
+ const childBox = new Clutter.ActorBox();
+ childBox.set_origin(wsTmbX, wsTmbY);
+ childBox.set_size(wsTmbWidth, wsTmbHeight);
this._thumbnails.allocate(childBox);
}
@@ -432,7 +430,7 @@ const SecondaryMonitorDisplayVertical = {
} = this._overviewAdjustment.getStateTransitionParams();
let workspacesBox;
- const workspaceParams = [contentBox, thumbnailsWidth, spacing, startY, this._panelHeight];
+ const workspaceParams = [contentBox, workArea, wsTmbWidth, spacing];
if (!transitioning) {
workspacesBox =
this._getWorkspacesBoxForState(currentState, ...workspaceParams);
@@ -562,93 +560,93 @@ const SecondaryMonitorDisplayHorizontal = {
return { opacity, scale, translationY };
},
- _getWorkspacesBoxForState(state, box, thumbnailsHeight, spacing, startY, panelHeight) {
- // const { ControlsState } = OverviewControls;
- const workspaceBox = box.copy();
- let [width, height] = workspaceBox.get_size();
- height -= panelHeight;
+ _getWorkspacesBoxForState(state, box, workArea, wsTmbHeight, spacing) {
+ let workspaceBox = box.copy();
- let wWidth, wHeight, wsbX, wsbY, offset;
- switch (state) {
- case ControlsState.HIDDEN:
- break;
- case ControlsState.WINDOW_PICKER:
- case ControlsState.APP_GRID:
- if (opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
- break;
+ if (
+ (state === ControlsState.WINDOW_PICKER || state === ControlsState.APP_GRID) &&
+ !(opt.OVERVIEW_MODE2 && !opt.WORKSPACE_MODE)
+ ) {
+ workspaceBox = workArea.copy();
+ const [startX, startY] = workspaceBox.get_origin();
+ let [width, height] = workspaceBox.get_size();
- wHeight = height - (thumbnailsHeight ? thumbnailsHeight + 4 * spacing : 4 * spacing);
- wWidth = Math.min(wHeight * (width / height), width - 5 * spacing);
- wWidth = Math.round(wWidth * opt.SEC_WS_PREVIEW_SCALE);
- wHeight = Math.round(wHeight * opt.SEC_WS_PREVIEW_SCALE);
+ let wsBoxWidth = width - 2 * spacing;
+ let wsBoxHeight = height - (wsTmbHeight ? wsTmbHeight + spacing : 0) - 2 * spacing;
- offset = Math.round((height - thumbnailsHeight - wHeight) / 2);
- if (opt.SEC_WS_TMB_TOP)
- wsbY = thumbnailsHeight + offset;
- else
- wsbY = offset;
+ const ratio = width / height;
+ let wRatio = wsBoxWidth / wsBoxHeight;
+ let scale = ratio / wRatio;
+
+ if (scale > 1) {
+ wsBoxHeight /= scale;
+ wsBoxWidth = wsBoxHeight * ratio;
+ } else {
+ wsBoxWidth *= scale;
+ wsBoxHeight = wsBoxWidth / ratio;
+ }
+
+ // height decides the actual size, ratio is given by the workArea
+ wsBoxHeight = Math.round(wsBoxHeight * opt.SEC_WS_PREVIEW_SCALE);
+ wsBoxWidth = Math.round(wsBoxWidth * opt.SEC_WS_PREVIEW_SCALE);
- wsbY += startY;
- wsbX = Math.round((width - wWidth) / 2);
+ let offset = Math.round(height - wsTmbHeight - wsBoxHeight - spacing) / 2;
+
+ const wsbX = Math.round((startX + width - wsBoxWidth) / 2);
+
+ const wsbY = startY + opt.SEC_WS_TMB_TOP
+ ? wsTmbHeight + spacing + offset
+ : offset;
workspaceBox.set_origin(wsbX, wsbY);
- workspaceBox.set_size(wWidth, wHeight);
- break;
+ workspaceBox.set_size(wsBoxWidth, wsBoxHeight);
}
return workspaceBox;
},
+ _getWorkAreaBox: SecondaryMonitorDisplayVertical._getWorkAreaBox,
+
vfunc_allocate(box) {
this.set_allocation(box);
const themeNode = this.get_theme_node();
const contentBox = themeNode.get_content_box(box);
- let [width, height] = contentBox.get_size();
- let [, startY] = contentBox.get_origin();
- // Save some resources
- if (this._startY === undefined) {
- this._panelHeight = opt.SEC_WS_PREVIEW_SHIFT && Main.panel.visible ? Main.panel.height : 0;
- startY += opt.SEC_WS_PREVIEW_SHIFT && opt.PANEL_POSITION_TOP ? this._panelHeight : 0;
- this._startY = startY;
- }
- startY = this._startY;
- height -= this._panelHeight;
- const { expandFraction } = this._thumbnails;
- const spacing = themeNode.get_length('spacing') * expandFraction;
+ const workArea = this._getWorkAreaBox(contentBox);
+
+ let [width, height] = workArea.get_size();
+ let [startX, startY] = workArea.get_origin();
+
+ const spacing = opt.SPACING;
- let thumbnailsWidth = 0;
- let thumbnailsHeight = 0;
+ let wsTmbWidth = 0;
+ let wsTmbHeight = 0;
this._thumbnails.visible = !opt.SEC_WS_TMB_HIDDEN;
if (this._thumbnails.visible) {
- thumbnailsHeight = height * opt.SEC_MAX_THUMBNAIL_SCALE;
+ wsTmbHeight = Math.round(height * opt.SEC_MAX_THUMBNAIL_SCALE);
let totalTmbSpacing;
- [totalTmbSpacing, thumbnailsWidth] = this._thumbnails.get_preferred_width(thumbnailsHeight);
- thumbnailsWidth = Math.round(thumbnailsWidth + totalTmbSpacing);
+ [totalTmbSpacing, wsTmbWidth] = this._thumbnails.get_preferred_width(wsTmbHeight);
+ wsTmbWidth += totalTmbSpacing;
- const thumbnailsWidthMax = width - spacing;
+ const thumbnailsWidthMax = width - 2 * spacing;
- if (thumbnailsWidth > thumbnailsWidthMax) {
- thumbnailsWidth = thumbnailsWidthMax;
- thumbnailsHeight = Math.round(this._thumbnails.get_preferred_height(thumbnailsWidth)[1]);
+ if (wsTmbWidth > thumbnailsWidthMax) {
+ wsTmbWidth = thumbnailsWidthMax;
+ wsTmbHeight = Math.round(this._thumbnails.get_preferred_height(wsTmbWidth)[1]);
}
- let wsTmbY;
- if (opt.SEC_WS_TMB_TOP)
- wsTmbY = spacing / 2 + startY;
- else
- wsTmbY = height - spacing / 2 - thumbnailsHeight + startY;
-
- const childBox = new Clutter.ActorBox();
- const availSpace = width - thumbnailsWidth;
+ let wsTmbY = opt.SEC_WS_TMB_TOP
+ ? startY + spacing
+ : startY + height - wsTmbHeight - spacing;
- let wsTmbX = availSpace / 2;
- wsTmbX -= opt.SEC_WS_TMB_POSITION_ADJUSTMENT * wsTmbX;
+ let offset = (width - wsTmbWidth) / 2;
+ const wsTmbX = startX + Math.round(offset - opt.SEC_WS_TMB_POSITION_ADJUSTMENT * (offset - spacing));
- childBox.set_origin(Math.round(wsTmbX), Math.round(wsTmbY));
- childBox.set_size(thumbnailsWidth, thumbnailsHeight);
+ const childBox = new Clutter.ActorBox();
+ childBox.set_origin(wsTmbX, wsTmbY);
+ childBox.set_size(wsTmbWidth, wsTmbHeight);
this._thumbnails.allocate(childBox);
}
@@ -657,7 +655,7 @@ const SecondaryMonitorDisplayHorizontal = {
} = this._overviewAdjustment.getStateTransitionParams();
let workspacesBox;
- const workspaceParams = [contentBox, thumbnailsHeight, spacing, startY, this._panelHeight];
+ const workspaceParams = [contentBox, workArea, wsTmbHeight, spacing];
if (!transitioning) {
workspacesBox =
this._getWorkspacesBoxForState(currentState, ...workspaceParams);
@@ -805,6 +803,17 @@ const WorkspacesDisplayCommon = {
}),
this._overviewAdjustment);
Main.layoutManager.overviewGroup.add_child(view);
+
+ if (opt.CLICK_EMPTY_CLOSE) {
+ // Allow users to close the overview by clicking on an empty space on the secondary monitor
+ // The primary monitor overview is handled in the overviewControls
+ const clickAction = new Clutter.ClickAction();
+ clickAction.connect('clicked', () => {
+ Main.overview.hide();
+ });
+ view.reactive = true;
+ view.add_action(clickAction);
+ }
}
this._workspacesViews.push(view);
diff --git a/extensions/46/vertical-workspaces/metadata.json b/extensions/47/vertical-workspaces/metadata.json
index 163e115..1114017 100644
--- a/extensions/46/vertical-workspaces/metadata.json
+++ b/extensions/47/vertical-workspaces/metadata.json
@@ -4,7 +4,8 @@
"description": "Customize your GNOME Shell UX to suit your workflow, whether you like horizontally or vertically stacked workspaces.",
"shell-version": [
"45",
- "46"
+ "46",
+ "47"
],
"session-modes": [
"user",
@@ -16,7 +17,6 @@
},
"gettext-domain": "vertical-workspaces",
"settings-schema": "org.gnome.shell.extensions.vertical-workspaces",
- "version-name": "46.1",
- "version": 999
+ "version-name": "46.4"
}
diff --git a/extensions/46/vertical-workspaces/po/nl.po b/extensions/47/vertical-workspaces/po/nl.po
index 2d9613e..2d9613e 100644
--- a/extensions/46/vertical-workspaces/po/nl.po
+++ b/extensions/47/vertical-workspaces/po/nl.po
diff --git a/extensions/46/vertical-workspaces/po/vertical-workspaces.pot b/extensions/47/vertical-workspaces/po/vertical-workspaces.pot
index 84413d9..1e1b2cf 100644
--- a/extensions/46/vertical-workspaces/po/vertical-workspaces.pot
+++ b/extensions/47/vertical-workspaces/po/vertical-workspaces.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vertical-workspaces\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-01-06 11:42+0100\n"
+"POT-Creation-Date: 2024-07-19 08:40+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,170 +17,135 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: extension.js:796
-msgid "Updating V-Shell..."
-msgstr ""
-
-#: prefs.js:30
+#: prefs.js:29
msgid "Profiles"
msgstr ""
-#: prefs.js:36 prefs.js:2013
+#: prefs.js:34 prefs.js:1977
msgid "Layout"
msgstr ""
-#: prefs.js:42
+#: prefs.js:39
msgid "Appearance"
msgstr ""
-#: prefs.js:48
+#: prefs.js:44
msgid "Behavior"
msgstr ""
+#: prefs.js:49 prefs.js:345
+msgid "App Grid"
+msgstr ""
+
#: prefs.js:54
msgid "Modules"
msgstr ""
-#: prefs.js:60
+#: prefs.js:59
msgid "Misc"
msgstr ""
-#: prefs.js:66
+#: prefs.js:64
msgid "About"
msgstr ""
-#: prefs.js:109
+#: prefs.js:107
msgid "Custom Profiles"
msgstr ""
-#: prefs.js:110
+#: prefs.js:108
msgid "Sets of settings that can help you with the initial customization"
msgstr ""
-#: prefs.js:115
+#: prefs.js:113
msgid "Profile 1"
msgstr ""
-#: prefs.js:121
+#: prefs.js:119
msgid "Profile 2"
msgstr ""
-#: prefs.js:127
+#: prefs.js:125
msgid "Profile 3"
msgstr ""
-#: prefs.js:133
+#: prefs.js:131
msgid "Profile 4"
msgstr ""
-#: prefs.js:148 prefs.js:707 prefs.js:1435 prefs.js:2004
+#: prefs.js:146 prefs.js:629 prefs.js:1185 prefs.js:1968
msgid "Dash"
msgstr ""
-#: prefs.js:154
+#: prefs.js:152
msgid "Dash Position"
msgstr ""
-#: prefs.js:160
-msgid "Top"
+#: prefs.js:157 prefs.js:417
+msgid "Bottom"
msgstr ""
-#: prefs.js:161
-msgid "Right"
+#: prefs.js:158
+msgid "Left"
msgstr ""
-#: prefs.js:162 prefs.js:491
-msgid "Bottom"
+#: prefs.js:159
+msgid "Top"
msgstr ""
-#: prefs.js:163
-msgid "Left"
+#: prefs.js:160
+msgid "Right"
msgstr ""
-#: prefs.js:164 prefs.js:209 prefs.js:225 prefs.js:241 prefs.js:257
-#: prefs.js:626
+#: prefs.js:161 prefs.js:205 prefs.js:548
msgid "Hide"
msgstr ""
-#: prefs.js:172
+#: prefs.js:169
msgid "Center Horizontal Dash to Workspace"
msgstr ""
-#: prefs.js:173
+#: prefs.js:170
msgid ""
"If the Dash Position is set to Top or Bottom, the position will be "
"recalculated relative to the workspace preview instead of the screen"
msgstr ""
-#: prefs.js:192
+#: prefs.js:189
msgid "Fine Tune Dash Position"
msgstr ""
-#: prefs.js:193
+#: prefs.js:190
msgid ""
"Adjusts the position of the dash on the axis given by the orientation of the "
"workspaces"
msgstr ""
-#: prefs.js:203
+#: prefs.js:200
msgid "Show Apps Icon Position"
msgstr ""
-#: prefs.js:204
+#: prefs.js:201
msgid "Sets the position of the \"Show Applications\" icon in the Dash"
msgstr ""
-#: prefs.js:210 prefs.js:226 prefs.js:242 prefs.js:258
+#: prefs.js:206
msgid "Start"
msgstr ""
-#: prefs.js:211 prefs.js:227 prefs.js:243 prefs.js:259
+#: prefs.js:207
msgid "End"
msgstr ""
-#: prefs.js:219
-msgid "Open Windows Icon Position"
-msgstr ""
-
-#: prefs.js:220
-msgid ""
-"Allows to add \"Search Open Windows\" icon into Dash (if window search "
-"provider enabled on the Modules tab) so you can directly toggle window "
-"search provider results. You can also use the secondary mouse button click "
-"on the Show Apps Icon, or the Space hotkey"
-msgstr ""
-
-#: prefs.js:235
-msgid "Recent Files Icon Position"
-msgstr ""
-
-#: prefs.js:236
-msgid ""
-"Allows to add \"Search Recent Files\" icon into Dash (if recent files search "
-"provider enabled on the Modules tab) so you can directly toggle recent files "
-"search provider results. You can also use Ctrl + Space hotkey"
-msgstr ""
-
-#: prefs.js:251
-msgid "Extensions Icon Position"
-msgstr ""
-
-#: prefs.js:252
-msgid ""
-"Allows to add \"Search Extensions\" icon into Dash (if extensions search "
-"provider enabled on the Module tab) so you can directly toggle extensions "
-"search provider results. You can also use the Ctrl + Shift + Space hotkey"
-msgstr ""
-
-#: prefs.js:268
+#: prefs.js:215
msgid "Workspace Thumbnails / Orientation"
msgstr ""
-#: prefs.js:274
+#: prefs.js:221
msgid "Thumbnails Position / Workspaces Orientation"
msgstr ""
-#: prefs.js:275
+#: prefs.js:222
msgid ""
"Position of the workspace thumbnails on the screen also sets orientation of "
"the workspaces to vertical or horizontal. You have two options to disable "
@@ -188,194 +153,182 @@ msgid ""
"second one to horizontal."
msgstr ""
-#: prefs.js:281
+#: prefs.js:227
msgid "Left \t Vertical Orientation"
msgstr ""
-#: prefs.js:282
+#: prefs.js:228
msgid "Right \t Vertical Orientation"
msgstr ""
-#: prefs.js:283
+#: prefs.js:229
msgid "Hide \t Vertical Orientation"
msgstr ""
-#: prefs.js:284
+#: prefs.js:230
msgid "Top \t Horizontal Orientation"
msgstr ""
-#: prefs.js:285
+#: prefs.js:231
msgid "Bottom \t Horizontal Orientation"
msgstr ""
-#: prefs.js:286
+#: prefs.js:232
msgid "Hide \t Horizontal Orientation"
msgstr ""
-#: prefs.js:302 prefs.js:642
+#: prefs.js:248 prefs.js:564
msgid "Fine Tune Workspace Thumbnails Position"
msgstr ""
-#: prefs.js:303 prefs.js:643
+#: prefs.js:249 prefs.js:565
msgid ""
"Adjusts the position of the thumbnails on the axis given by the orientation "
"of the workspaces"
msgstr ""
-#: prefs.js:311
+#: prefs.js:257
msgid "Reserve Full Screen Height/Width for Thumbnails"
msgstr ""
-#: prefs.js:312
+#: prefs.js:258
msgid ""
"The whole screen height/width will be reserved for workspace thumbnails at "
"the expense of space available for Dash (if the Dash is oriented in a "
"different axis)."
msgstr ""
-#: prefs.js:329
+#: prefs.js:275
msgid "Workspace Thumbnails Max Scale - Window Picker"
msgstr ""
-#: prefs.js:330
+#: prefs.js:276
msgid ""
-"Adjusts maximum size of the workspace thumbnails in the overview (% relative "
-"to display width)"
+"Adjusts the maximum size of the workspace thumbnails in the overview "
+"(percentage relative to display width)"
msgstr ""
-#: prefs.js:347
+#: prefs.js:293
msgid "Workspace Thumbnails Max Scale - App View"
msgstr ""
-#: prefs.js:348
+#: prefs.js:294
msgid "Allows you to set different thumbnails scale for the Applications view"
msgstr ""
-#: prefs.js:356 prefs.js:905
+#: prefs.js:302 prefs.js:822
msgid "Workspace Preview"
msgstr ""
-#: prefs.js:371
+#: prefs.js:317
msgid "Workspaces Scale"
msgstr ""
-#: prefs.js:372
+#: prefs.js:318
msgid ""
"Allows to shrink workspace previews to adjust spacing or fit more of the "
"adjacent workspaces on the screen. Default size is calculated to use all "
"available space with minimal spacing"
msgstr ""
-#: prefs.js:389
+#: prefs.js:335
msgid "Workspaces Spacing"
msgstr ""
-#: prefs.js:390
+#: prefs.js:336
msgid ""
"Adjusts spacing between workspace previews so you can control how much of "
"the adjacent workspaces overlap to the current workspace overview. Default "
"value should set the adjacent workspaces off-screen."
msgstr ""
-#: prefs.js:399 prefs.js:938 prefs.js:1590
-msgid "App Grid"
-msgstr ""
-
-#: prefs.js:405
+#: prefs.js:351
msgid "Center App Grid"
msgstr ""
-#: prefs.js:406
+#: prefs.js:352
msgid "Centers the app grid relative to the display instead of available space"
msgstr ""
-#: prefs.js:423
-msgid "App Grid Page Width Scale"
-msgstr ""
-
-#: prefs.js:424
-msgid "Adjusts max app grid page width relative to the available space."
-msgstr ""
-
-#: prefs.js:434
+#: prefs.js:361
msgid "Search View"
msgstr ""
-#: prefs.js:440
+#: prefs.js:367
msgid "Center Search View"
msgstr ""
-#: prefs.js:441
+#: prefs.js:368
msgid ""
"Centers the search view relative to the display instead of available space"
msgstr ""
-#: prefs.js:449
+#: prefs.js:376
msgid "Always Show Search Entry"
msgstr ""
-#: prefs.js:450
+#: prefs.js:377
msgid ""
"If disabled, the search entry field will be hidden when not in use, so the "
"workspace preview and app grid may take up more space"
msgstr ""
-#: prefs.js:467
+#: prefs.js:394
msgid "Search Results Width"
msgstr ""
-#: prefs.js:468
+#: prefs.js:395
msgid ""
-"Adjusts maximum width of search results view (% relative to default). This "
-"allows to fit more (or less) app icons into the app search result"
+"Adjusts the maximum width of search results view (percentage relative to "
+"default). This allows to fit more (or less) app icons into the app search "
+"result"
msgstr ""
-#: prefs.js:478 prefs.js:2049
+#: prefs.js:405 prefs.js:2013
msgid "Panel"
msgstr ""
-#: prefs.js:484
+#: prefs.js:411
msgid "Main Panel Position"
msgstr ""
-#: prefs.js:485
+#: prefs.js:412
msgid "Allows to place the main panel at the bottom of the primary display"
msgstr ""
-#: prefs.js:490
+#: prefs.js:416
msgid "Top (Default)"
msgstr ""
-#: prefs.js:499
+#: prefs.js:425
msgid "Main Panel Visibility"
msgstr ""
-#: prefs.js:500
+#: prefs.js:426
msgid "Allows to hide main panel when not needed"
msgstr ""
-#: prefs.js:505
+#: prefs.js:430
msgid "Always Visible (Default)"
msgstr ""
-#: prefs.js:506
+#: prefs.js:431
msgid "Overview Only"
msgstr ""
-#: prefs.js:507
+#: prefs.js:432
msgid "Always Hidden"
msgstr ""
-#: prefs.js:517
+#: prefs.js:442
msgid "Workspace Switcher Popup"
msgstr ""
-#: prefs.js:533
-#, javascript-format
-msgid "Horizontal Position (% from left)"
+#: prefs.js:458
+msgid "Horizontal Position (percentage from the left)"
msgstr ""
-#: prefs.js:534
+#: prefs.js:459
msgid ""
"This popup shows up when you switch workspace using a keyboard shortcut or "
"gesture outside of the overview. You can disable it on the \"Behavior\" tab. "
@@ -383,570 +336,466 @@ msgid ""
"Manager\" extension"
msgstr ""
-#: prefs.js:554
-#, javascript-format
-msgid "Vertical Position (% from top)"
+#: prefs.js:479
+msgid "Vertical Position (percentage from the top)"
msgstr ""
-#: prefs.js:565
+#: prefs.js:490
msgid "Notifications and OSD"
msgstr ""
-#: prefs.js:571
+#: prefs.js:496
msgid "Notification Banner Position"
msgstr ""
-#: prefs.js:572
+#: prefs.js:497
msgid "Choose where the notification banners appear on the screen"
msgstr ""
-#: prefs.js:577 prefs.js:597 prefs.js:1400
+#: prefs.js:501 prefs.js:520 prefs.js:1150
msgid "Top Left"
msgstr ""
-#: prefs.js:578
+#: prefs.js:502
msgid "Top Center (Default)"
msgstr ""
-#: prefs.js:579 prefs.js:599 prefs.js:1401
+#: prefs.js:503 prefs.js:522 prefs.js:1151
msgid "Top Right"
msgstr ""
-#: prefs.js:580 prefs.js:601 prefs.js:1402
+#: prefs.js:504 prefs.js:524 prefs.js:1152
msgid "Bottom Left"
msgstr ""
-#: prefs.js:581
+#: prefs.js:505
msgid "Bottom Center"
msgstr ""
-#: prefs.js:582 prefs.js:603 prefs.js:1403
+#: prefs.js:506 prefs.js:526 prefs.js:1153
msgid "Bottom Right"
msgstr ""
-#: prefs.js:590
+#: prefs.js:514
msgid "OSD Popup Position"
msgstr ""
-#: prefs.js:591
+#: prefs.js:515
msgid ""
"Choose where the OSD pop-ups (like sound volume level) appear on the screen"
msgstr ""
-#: prefs.js:596 prefs.js:824 prefs.js:869 prefs.js:1334 prefs.js:1355
-#: prefs.js:1379 prefs.js:1513 prefs.js:1794 prefs.js:1812 prefs.js:1830
-#: prefs.js:1899
+#: prefs.js:519 prefs.js:743 prefs.js:787 prefs.js:1087 prefs.js:1107
+#: prefs.js:1130 prefs.js:1244 prefs.js:1363 prefs.js:1380 prefs.js:1397
+#: prefs.js:1463
msgid "Disable"
msgstr ""
-#: prefs.js:598
+#: prefs.js:521
msgid "Top Center"
msgstr ""
-#: prefs.js:600
+#: prefs.js:523
msgid "Center"
msgstr ""
-#: prefs.js:602
+#: prefs.js:525
msgid "Bottom Center (Default)"
msgstr ""
-#: prefs.js:611
+#: prefs.js:534
msgid "Secondary Monitors"
msgstr ""
-#: prefs.js:617
+#: prefs.js:540
msgid "Workspace Thumbnails Position"
msgstr ""
-#: prefs.js:618
+#: prefs.js:541
msgid ""
"Allows to place workspace thumbnails of secondary monitors on the opposite "
"side than on the primary monitor"
msgstr ""
-#: prefs.js:623
+#: prefs.js:545
msgid "Same as Primary"
msgstr ""
-#: prefs.js:624
+#: prefs.js:546
msgid "Left / Top"
msgstr ""
-#: prefs.js:625
+#: prefs.js:547
msgid "Right / Bottom"
msgstr ""
-#: prefs.js:660
+#: prefs.js:582
msgid "Workspace Thumbnails Max Scale"
msgstr ""
-#: prefs.js:661
+#: prefs.js:583
msgid ""
-"Adjusts maximum size of the workspace thumbnails (% relative to display "
-"width / height) for secondary monitors"
+"Adjusts maximum size of the workspace thumbnails (percentage relative to the "
+"display width / height) for secondary monitors"
msgstr ""
-#: prefs.js:678
+#: prefs.js:600
msgid "Workspace Preview Scale"
msgstr ""
-#: prefs.js:679
+#: prefs.js:601
msgid "Allows to scale down workspace previews on secondary monitors"
msgstr ""
-#: prefs.js:687
-msgid "Shift Workspace Preview by Panel Height"
+#: prefs.js:609
+msgid "Shift Overview by Panel Height"
msgstr ""
-#: prefs.js:688
+#: prefs.js:610
msgid ""
-"This option can help align overview of the secondary monitor with the "
-"primary monitor"
+"This option can help align the overview of the secondary monitor with the "
+"primary one"
msgstr ""
-#: prefs.js:713
+#: prefs.js:635
msgid "Dash Max Icon Size"
msgstr ""
-#: prefs.js:714
-msgid "Maximum size of Dash icons in pixels"
+#: prefs.js:636
+msgid ""
+"Maximum size of Dash icons in pixels. Adaptive option switches between "
+"default 64 and 48 for low resolution displays"
msgstr ""
-#: prefs.js:719 prefs.js:958 prefs.js:979 prefs.js:1109
+#: prefs.js:640 prefs.js:1545 prefs.js:1740
+msgid "Adaptive (Default)"
+msgstr ""
+
+#: prefs.js:641 prefs.js:867 prefs.js:1553 prefs.js:1741
msgid "128"
msgstr ""
-#: prefs.js:720 prefs.js:959 prefs.js:980 prefs.js:1110
+#: prefs.js:642 prefs.js:868 prefs.js:1554 prefs.js:1742
msgid "112"
msgstr ""
-#: prefs.js:721 prefs.js:960 prefs.js:981
+#: prefs.js:643 prefs.js:1555 prefs.js:1743
msgid "96"
msgstr ""
-#: prefs.js:722 prefs.js:961 prefs.js:982 prefs.js:1112
+#: prefs.js:644 prefs.js:870 prefs.js:1556 prefs.js:1744
msgid "80"
msgstr ""
-#: prefs.js:723 prefs.js:962 prefs.js:983 prefs.js:1113
+#: prefs.js:645 prefs.js:871 prefs.js:1557 prefs.js:1745
msgid "64"
msgstr ""
-#: prefs.js:724 prefs.js:866 prefs.js:963 prefs.js:984 prefs.js:1114
+#: prefs.js:646 prefs.js:784 prefs.js:872 prefs.js:1558 prefs.js:1746
msgid "48"
msgstr ""
-#: prefs.js:725 prefs.js:867 prefs.js:985 prefs.js:1115
+#: prefs.js:647 prefs.js:785 prefs.js:873
msgid "32"
msgstr ""
-#: prefs.js:733
+#: prefs.js:655
msgid "Dash Background Style"
msgstr ""
-#: prefs.js:734
+#: prefs.js:656
msgid ""
"Allows you to change the background color of the dash to match the search "
"results an app folders"
msgstr ""
-#: prefs.js:739 prefs.js:1283 prefs.js:1313 prefs.js:1399 prefs.js:1475
-#: prefs.js:1491 prefs.js:1793 prefs.js:1811 prefs.js:1869 prefs.js:1884
+#: prefs.js:660 prefs.js:1029 prefs.js:1057 prefs.js:1149 prefs.js:1223
+#: prefs.js:1362 prefs.js:1379 prefs.js:1435 prefs.js:1449
msgid "Default"
msgstr ""
-#: prefs.js:740
+#: prefs.js:661
msgid "Light"
msgstr ""
-#: prefs.js:756
+#: prefs.js:677
msgid "Dash Background Opacity"
msgstr ""
-#: prefs.js:757
+#: prefs.js:678
msgid "Adjusts the opacity of the Dash background"
msgstr ""
-#: prefs.js:775
+#: prefs.js:696
msgid "Dash Background Radius"
msgstr ""
-#: prefs.js:776
+#: prefs.js:697
msgid ""
"Adjusts the border radius of the Dash background in pixels. 0 means the "
"default value given by the current theme style"
msgstr ""
-#: prefs.js:786
+#: prefs.js:707
msgid "Dash Background GNOME 3 Style"
msgstr ""
-#: prefs.js:787
+#: prefs.js:708
msgid ""
"Background of the vertically oriented dash will imitate the GNOME 3 style"
msgstr ""
-#: prefs.js:797
+#: prefs.js:718
msgid "Running App Indicator"
msgstr ""
-#: prefs.js:798
+#: prefs.js:719
msgid ""
"Allows you to change style of the running app indicator under the app icon"
msgstr ""
-#: prefs.js:803
+#: prefs.js:723
msgid "Dot (Default)"
msgstr ""
-#: prefs.js:804
+#: prefs.js:724
msgid "Line"
msgstr ""
-#: prefs.js:812 prefs.js:1501
+#: prefs.js:732 prefs.js:1233
msgid "Workspace Thumbnails"
msgstr ""
-#: prefs.js:818
+#: prefs.js:738
msgid "Show Workspace Thumbnail Labels"
msgstr ""
-#: prefs.js:819
+#: prefs.js:739
msgid ""
"Each workspace thumbnail can show label with its index and name (if defined "
"in the system settings) or name/title of its most recently used app/window"
msgstr ""
-#: prefs.js:825
+#: prefs.js:744
msgid "Index"
msgstr ""
-#: prefs.js:826
+#: prefs.js:745
msgid "Index + WS Name"
msgstr ""
-#: prefs.js:827
+#: prefs.js:746
msgid "Index + App Name"
msgstr ""
-#: prefs.js:828
+#: prefs.js:747
msgid "Index + Window Title"
msgstr ""
-#: prefs.js:835
+#: prefs.js:754
msgid "Show WS Thumbnail Label on Hover"
msgstr ""
-#: prefs.js:836
+#: prefs.js:755
msgid "Show the label only when the mouse pointer hovers over the thumbnail"
msgstr ""
-#: prefs.js:844
+#: prefs.js:763
msgid "Show Wallpaper in Workspace Thumbnails"
msgstr ""
-#: prefs.js:845
+#: prefs.js:764
msgid "All workspace thumbnails will include the current desktop background"
msgstr ""
-#: prefs.js:853 prefs.js:1523
+#: prefs.js:772 prefs.js:1254
msgid "Window Preview"
msgstr ""
-#: prefs.js:859
+#: prefs.js:778
msgid "Window Preview App Icon Size"
msgstr ""
-#: prefs.js:865
+#: prefs.js:783
msgid "64 (Default)"
msgstr ""
-#: prefs.js:868
+#: prefs.js:786
msgid "22"
msgstr ""
-#: prefs.js:877
+#: prefs.js:795
msgid "Window Title Position / Visibility"
msgstr ""
-#: prefs.js:878
+#: prefs.js:796
msgid ""
"Sets the position of the window title that is displayed when the mouse "
"hovers over the window or can always be visible"
msgstr ""
-#: prefs.js:883
+#: prefs.js:800
msgid "Inside Window"
msgstr ""
-#: prefs.js:884
+#: prefs.js:801
msgid "Inside Window Always Visible"
msgstr ""
-#: prefs.js:885
+#: prefs.js:802
msgid "Below Window (Default)"
msgstr ""
-#: prefs.js:893
+#: prefs.js:810
msgid "Show Close Window Button"
msgstr ""
-#: prefs.js:894
+#: prefs.js:811
msgid "Allows you to hide close window button"
msgstr ""
-#: prefs.js:911
+#: prefs.js:828
msgid "Show Workspace Preview Background"
msgstr ""
-#: prefs.js:912
+#: prefs.js:829
msgid "Allows to hide the background of the workspace preview"
msgstr ""
-#: prefs.js:929
+#: prefs.js:846
msgid "Workspace Background Corner Radius"
msgstr ""
-#: prefs.js:930
+#: prefs.js:847
msgid "Adjusts the corner radius of the workspace preview in the overview"
msgstr ""
-#: prefs.js:944
-msgid "Icon Size"
-msgstr ""
-
-#: prefs.js:945
-msgid ""
-"Allows to set a fixed app grid icon size and bypass the default adaptive "
-"algorithm"
-msgstr ""
-
-#: prefs.js:950 prefs.js:978
-msgid "Adaptive (Default)"
-msgstr ""
-
-#: prefs.js:951
-msgid "256"
-msgstr ""
-
-#: prefs.js:952
-msgid "224"
-msgstr ""
-
-#: prefs.js:953
-msgid "208"
-msgstr ""
-
-#: prefs.js:954
-msgid "192"
-msgstr ""
-
-#: prefs.js:955
-msgid "176"
-msgstr ""
-
-#: prefs.js:956
-msgid "160"
-msgstr ""
-
-#: prefs.js:957
-msgid "144"
-msgstr ""
-
-#: prefs.js:972
-msgid "Folder Icon Size"
-msgstr ""
-
-#: prefs.js:973
-msgid ""
-"Allows to set a fixed icon size and bypass the default adaptive algorithm in "
-"the open folder dialog"
-msgstr ""
-
-#: prefs.js:994
-msgid "Max App Folder Icon Grid Size"
-msgstr ""
-
-#: prefs.js:995
-msgid ""
-"Sets a grid size (number of icons) in the folder preview. 3x3 options "
-"automatically switches between 2x2 and 3x3 grid depending on the number of "
-"icons in the folder"
-msgstr ""
-
-#: prefs.js:999
-msgid "2x2 (Default)"
-msgstr ""
-
-#: prefs.js:1000
-msgid "3x3 for 5+ apps"
-msgstr ""
-
-#: prefs.js:1001
-msgid "3x3 for 9+ apps"
-msgstr ""
-
-#: prefs.js:1016
-msgid "Columns per Page (0 for adaptive grid)"
-msgstr ""
-
-#: prefs.js:1017
-msgid ""
-"Number of columns in the application grid. If set to 0 (the default), the "
-"number will be set automatically to fit the available width"
-msgstr ""
-
-#: prefs.js:1033
-msgid "Rows per Page (0 for adaptive grid)"
-msgstr ""
-
-#: prefs.js:1034
-msgid ""
-"Number of rows in the application grid. If set to 0 (the default), the "
-"number will be set automatically to fit the available height"
+#: prefs.js:855 prefs.js:1318 prefs.js:2022
+msgid "Search"
msgstr ""
-#: prefs.js:1050
-msgid "Folder Columns per Page (0 for adaptive grid)"
+#: prefs.js:861
+msgid "App Search Icon Size"
msgstr ""
-#: prefs.js:1051
+#: prefs.js:862
msgid ""
-"Number of columns in folder grid. If you leave the value at 0, the number of "
-"columns will be calculated to fit all the folder icons on one page"
+"Size of results provided by the App Search Provider - smaller size allows to "
+"fit more results. Adaptive option switches between default 96 and 64 for low "
+"resolution displays"
msgstr ""
-#: prefs.js:1067
-msgid "Folder Rows per Page (0 for adaptive grid)"
+#: prefs.js:866
+msgid "Adaptive"
msgstr ""
-#: prefs.js:1068
-msgid ""
-"Number of rows in folder grid. If you leave the value at 0, the number of "
-"rows will be calculated to fit all the folder icons on one page"
+#: prefs.js:869
+msgid "96 (Default)"
msgstr ""
-#: prefs.js:1086
-msgid "Grid Spacing"
+#: prefs.js:893
+msgid "Max Search Results Rows"
msgstr ""
-#: prefs.js:1087
+#: prefs.js:894
msgid ""
-"Adjusts the spacing between icons in a grid, the real impact is on folders"
-msgstr ""
-
-#: prefs.js:1097 prefs.js:1715 prefs.js:2058
-msgid "Search"
+"Sets the maximum number of rows for result lists of all search providers "
+"except the window search provider which always lists all results"
msgstr ""
-#: prefs.js:1103
-msgid "App Search Icon Size"
+#: prefs.js:904
+msgid "Highlighting"
msgstr ""
-#: prefs.js:1104
+#: prefs.js:905
msgid ""
-"Size of results provided by the App Search Provider - smaller size allows to "
-"fit more results"
+"The GNOME default highlighting style (bold) causes strings to be "
+"\"randomly\" ellipsized, often preventing you from seeing the whole string, "
+"even if there is space for it. The selected style will be applied to all "
+"search results globally. If you are using other extensions that offer this "
+"option, make sure you set the same setting in all of them."
msgstr ""
-#: prefs.js:1111
-msgid "96 (Default)"
+#: prefs.js:909
+msgid "Bold (Default)"
msgstr ""
-#: prefs.js:1135
-msgid "Max Search Results Rows"
+#: prefs.js:910
+msgid "Underline"
msgstr ""
-#: prefs.js:1136
-msgid ""
-"Sets the maximum number of rows for result lists of all search providers "
-"except the window search provider which always lists all results"
+#: prefs.js:911
+msgid "None"
msgstr ""
-#: prefs.js:1147
+#: prefs.js:919
msgid "Overview Background"
msgstr ""
-#: prefs.js:1153
+#: prefs.js:925
msgid "Show Wallpaper"
msgstr ""
-#: prefs.js:1154
+#: prefs.js:926
msgid ""
"Replaces the solid grey background in the overview with the current desktop "
"wallpaper"
msgstr ""
-#: prefs.js:1170
+#: prefs.js:942
msgid "Brightness"
msgstr ""
-#: prefs.js:1171
+#: prefs.js:943
msgid "Brightness of the background wallpaper in the overview"
msgstr ""
-#: prefs.js:1187
+#: prefs.js:959
msgid "Brightness for Search View"
msgstr ""
-#: prefs.js:1188
+#: prefs.js:960
msgid ""
"Allows you to set a lower background brightness for search view mode where "
"text visibility is more important"
msgstr ""
-#: prefs.js:1204
+#: prefs.js:976
msgid "Blur Window Picker Background"
msgstr ""
-#: prefs.js:1205
+#: prefs.js:977
msgid "Sets the amount of background blur in the window picker view"
msgstr ""
-#: prefs.js:1221
+#: prefs.js:993
msgid "Blur App Grid/Search View Background"
msgstr ""
-#: prefs.js:1222
+#: prefs.js:994
msgid ""
"Sets the amount of background blur in the app grid and search results views"
msgstr ""
-#: prefs.js:1230
+#: prefs.js:1002
msgid "Smooth Blur Transitions"
msgstr ""
-#: prefs.js:1231
+#: prefs.js:1003
msgid ""
"Allows for smoother blur transitions, but can affect the overall smoothness "
"of overview animations on weak hardware"
msgstr ""
-#: prefs.js:1240
-msgid "Window Thumbnails (PIP)"
-msgstr ""
-
-#: prefs.js:1255
-#, javascript-format
-msgid "Default Window Thumbnail (PIP) Scale (% of screen height)"
-msgstr ""
-
-#: prefs.js:1256
-msgid ""
-"Default scale of window thumbnail (like Picture In Picture) that you can "
-"create using the app icon menu or window preview action"
-msgstr ""
-
-#: prefs.js:1271
+#: prefs.js:1018
msgid "Overview"
msgstr ""
-#: prefs.js:1277
+#: prefs.js:1024
msgid "Overview Mode"
msgstr ""
-#: prefs.js:1278
+#: prefs.js:1025
msgid ""
"The Expose Windows on Hover mode does not expose the workspace preview "
"windows until the mouse pointer enters any window\n"
@@ -956,120 +805,138 @@ msgid ""
"default overview"
msgstr ""
-#: prefs.js:1284
+#: prefs.js:1030
msgid "Expose Windows on Hover"
msgstr ""
-#: prefs.js:1285
+#: prefs.js:1031
msgid "Static Workspace"
msgstr ""
-#: prefs.js:1292
+#: prefs.js:1038
msgid "Startup State"
msgstr ""
-#: prefs.js:1293
+#: prefs.js:1039
msgid "Allows to change the state in which GNOME Shell starts a session"
msgstr ""
-#: prefs.js:1298 prefs.js:1336
+#: prefs.js:1043
msgid "Overview (Default)"
msgstr ""
-#: prefs.js:1299
+#: prefs.js:1044
msgid "Desktop"
msgstr ""
-#: prefs.js:1300 prefs.js:1337 prefs.js:1382
+#: prefs.js:1045 prefs.js:1090 prefs.js:1133
msgid "Applications"
msgstr ""
-#: prefs.js:1307
+#: prefs.js:1052
msgid "Escape Key Behavior"
msgstr ""
-#: prefs.js:1308
+#: prefs.js:1053
msgid ""
"Allows you to close the overview with a single press of the Escape key, even "
"from the application grid or from search, if the search entry field does not "
"have focus"
msgstr ""
-#: prefs.js:1314
+#: prefs.js:1058
msgid "Close Overview"
msgstr ""
-#: prefs.js:1322
+#: prefs.js:1066
+msgid "Click Empty Space To Close"
+msgstr ""
+
+#: prefs.js:1067
+msgid "Enables clicking on an empty space in the overview to close it"
+msgstr ""
+
+#: prefs.js:1076
msgid "Overlay Key (Super/Windows)"
msgstr ""
-#: prefs.js:1328
+#: prefs.js:1082
msgid "Single-Press Action"
msgstr ""
-#: prefs.js:1329
+#: prefs.js:1083
msgid ""
"Disable or change behavior when you press and release the Super key. The "
-"\"Search Windows\" options requires the WindowSearchProvider module to be "
-"activated"
+"\"Search Windows\" options requires the \"WSP (Window Search Provider)\" "
+"extension installed and enabled. Link is available on the Modules tab in "
+"Settings. If you want another extension (like AATWS) to handle the overlay "
+"key, set this option to \"Overview - Window Picker (Default)\" and the "
+"\"Double-Press Action\" option to \"Applications (Default)\""
msgstr ""
-#: prefs.js:1335 prefs.js:1380
+#: prefs.js:1088 prefs.js:1131
msgid "Follow Global Overview Mode"
msgstr ""
-#: prefs.js:1338 prefs.js:1383
+#: prefs.js:1089 prefs.js:1132
+msgid "Overview - Window Picker (Default)"
+msgstr ""
+
+#: prefs.js:1091 prefs.js:1134
msgid "Overview - Static WS Preview"
msgstr ""
-#: prefs.js:1339 prefs.js:1384
+#: prefs.js:1092 prefs.js:1135
msgid "Overview - Static Workspace"
msgstr ""
-#: prefs.js:1340 prefs.js:1357 prefs.js:1385
-msgid "Search Windows"
+#: prefs.js:1093 prefs.js:1109 prefs.js:1136
+msgid "Search Windows (requires WSP extension)"
msgstr ""
-#: prefs.js:1349
+#: prefs.js:1102
msgid "Double-Press Action"
msgstr ""
-#: prefs.js:1350
+#: prefs.js:1103
msgid ""
"Disable or change behavior when you double-press the Super key. The \"Search "
-"Windows\" option requires the WindowSearchProvider module to be activated. "
-"The \"Static WS Overview - Expose Windows\" option allows you to switch to "
-"default Activities Overview window picker view if you set static workspace "
-"(preview) for the single press/release Super key action"
+"Windows\" option requires the \"WSP (Window Search Provider)\" extension "
+"installed and enabled. The \"Static WS Overview - Expose Windows\" option "
+"allows you to switch to default Activities Overview window picker view if "
+"you set static workspace (preview) for the single press/release Super key "
+"action"
msgstr ""
-#: prefs.js:1356
+#: prefs.js:1108
msgid "Applications (Default)"
msgstr ""
-#: prefs.js:1358 prefs.js:1381
+#: prefs.js:1110
msgid "Overview - Window Picker"
msgstr ""
-#: prefs.js:1367
+#: prefs.js:1119
msgid "Hot Corner (Install Custom Hot Corners - Extended for more options)"
msgstr ""
-#: prefs.js:1373
+#: prefs.js:1125
msgid "Hot Corner Action"
msgstr ""
-#: prefs.js:1374
+#: prefs.js:1126
msgid ""
"Disable or change behavior of the hot corner. Holding down the Ctrl key "
-"while hitting the hot corner switches between Overview/Applications actions"
+"while hitting the hot corner switches between Overview/Applications actions. "
+"The \"Search Windows\" option requires the \"WSP (Window Search Provider)\" "
+"extension installed and enabled"
msgstr ""
-#: prefs.js:1393
+#: prefs.js:1144
msgid "Hot Corner Position"
msgstr ""
-#: prefs.js:1394
+#: prefs.js:1145
msgid ""
"Choose which corner of your monitors will be active. If you choose \"Follow "
"Dash\" option, the corner will be placed near the left or top edge of the "
@@ -1077,47 +944,47 @@ msgid ""
"of the monitor where Dash is located"
msgstr ""
-#: prefs.js:1404
+#: prefs.js:1154
msgid "Follow Dash"
msgstr ""
-#: prefs.js:1405
+#: prefs.js:1155
msgid "Follow Dash - Hot Edge"
msgstr ""
-#: prefs.js:1413
+#: prefs.js:1163
msgid "Enable Hot Corner in Full-Screen Mode"
msgstr ""
-#: prefs.js:1414
+#: prefs.js:1164
msgid ""
"If you often work with full-screen applications and want the hot corner to "
"be usable"
msgstr ""
-#: prefs.js:1424
+#: prefs.js:1174
msgid "Show Ripples Animation"
msgstr ""
-#: prefs.js:1425
+#: prefs.js:1175
msgid ""
"The ripple animation is played when the hot corner is activated. The ripple "
"size has been reduced to be less distracting"
msgstr ""
-#: prefs.js:1441
+#: prefs.js:1191
msgid "Isolate Workspaces"
msgstr ""
-#: prefs.js:1442
+#: prefs.js:1192
msgid "Dash will only show apps and windows from the current workspace"
msgstr ""
-#: prefs.js:1452
+#: prefs.js:1202
msgid "App Icon - Click Behavior"
msgstr ""
-#: prefs.js:1453
+#: prefs.js:1203
msgid ""
"Choose your preferred behavior when clicking on an app icon. The \"Prefer "
"Current Workspace\" option opens a new app window if not present in the "
@@ -1126,27 +993,27 @@ msgid ""
"window"
msgstr ""
-#: prefs.js:1458
+#: prefs.js:1207
msgid "Activate App Immediately"
msgstr ""
-#: prefs.js:1459
+#: prefs.js:1208
msgid "First Switch to Workspace"
msgstr ""
-#: prefs.js:1460
+#: prefs.js:1209
msgid "Open New Window (if supported)"
msgstr ""
-#: prefs.js:1461
+#: prefs.js:1210
msgid "Prefer Current Workspace"
msgstr ""
-#: prefs.js:1469
+#: prefs.js:1218
msgid "App Icon - Scroll Action"
msgstr ""
-#: prefs.js:1470
+#: prefs.js:1219
msgid ""
"Choose the behavior when scrolling over an app icon. The window cycler works "
"with a list of windows sorted by the \"Most Recently Used\" and grouped by "
@@ -1154,105 +1021,84 @@ msgid ""
"workspace and then switches to another workspace, if any"
msgstr ""
-#: prefs.js:1476
+#: prefs.js:1224
msgid "Cycle App Windows - Highlight Selected"
msgstr ""
-#: prefs.js:1477
+#: prefs.js:1225
msgid "Cycle App Windows - Highlight App"
msgstr ""
-#: prefs.js:1485
-msgid "Search Windows Icon - Scroll Action"
-msgstr ""
-
-#: prefs.js:1486
-msgid ""
-"Choose the behavior when scrolling over the Search Windows icon. The window "
-"cycler works with a list of windows sorted by \"Most Recently Used\" of the "
-"current workspace or all workspaces. Scrolling up cycles through previously "
-"used windows on the same workspace, or all windows regardless workspace. "
-"This option is mainly useful for the static workspace overview mode."
-msgstr ""
-
-#: prefs.js:1492
-msgid "Cycle All Windows"
-msgstr ""
-
-#: prefs.js:1493
-msgid "Cycle Windows On Current WS"
-msgstr ""
-
-#: prefs.js:1507
+#: prefs.js:1239
msgid "Close Workspace Button"
msgstr ""
-#: prefs.js:1508
+#: prefs.js:1240
msgid ""
"The Close Workspace button appears on the workspace thumbnail when you hover "
"over it and allows you to close all windows on the workspace. You can choose "
"a \"safety lock\" to prevent accidental use"
msgstr ""
-#: prefs.js:1514
+#: prefs.js:1245
msgid "Single Click"
msgstr ""
-#: prefs.js:1515
+#: prefs.js:1246
msgid "Double Click"
msgstr ""
-#: prefs.js:1516
+#: prefs.js:1247
msgid "Ctrl Key + Click"
msgstr ""
-#: prefs.js:1529
+#: prefs.js:1260
msgid "Secondary Button Click Action"
msgstr ""
-#: prefs.js:1530
+#: prefs.js:1261
msgid "Allows you to add a secondary mouse click action to the window preview"
msgstr ""
-#: prefs.js:1535 prefs.js:1552 prefs.js:1569
+#: prefs.js:1265 prefs.js:1281 prefs.js:1297
msgid "Activate Window (Default)"
msgstr ""
-#: prefs.js:1536 prefs.js:1553
+#: prefs.js:1266 prefs.js:1282
msgid "Close Window"
msgstr ""
-#: prefs.js:1537 prefs.js:1554 prefs.js:1570
+#: prefs.js:1267 prefs.js:1283 prefs.js:1298
msgid "Search For Same App Windows"
msgstr ""
-#: prefs.js:1538 prefs.js:1555 prefs.js:1571 lib/dash.js:1315
-msgid "Create Window Thumbnail - PIP"
+#: prefs.js:1268 prefs.js:1284 prefs.js:1299
+msgid "Create Window Thumbnail/PiP (requires WTMB extension)"
msgstr ""
-#: prefs.js:1546
+#: prefs.js:1276
msgid "Middle Button Click Action"
msgstr ""
-#: prefs.js:1547
+#: prefs.js:1277
msgid "Allows you to add a middle mouse click action to the window preview"
msgstr ""
-#: prefs.js:1563
+#: prefs.js:1292
msgid "App Icon Click Action"
msgstr ""
-#: prefs.js:1564
+#: prefs.js:1293
msgid ""
"Select the action to take when the application icon on the window preview is "
"clicked"
msgstr ""
-#: prefs.js:1579
+#: prefs.js:1307
msgid "Always Activate Selected"
msgstr ""
-#: prefs.js:1580
+#: prefs.js:1308
msgid ""
"If enabled, the currently selected window will be activated when leaving the "
"Overview even without clicking. Usage example - press Super to open the "
@@ -1260,596 +1106,768 @@ msgid ""
"the window"
msgstr ""
-#: prefs.js:1596
-msgid "App Grid Order"
+#: prefs.js:1324
+msgid "Enable Fuzzy Match"
msgstr ""
-#: prefs.js:1597
+#: prefs.js:1325
msgid ""
-"Choose sorting method for the app grid. Note that sorting by usage ignores "
-"folders"
+"Enabling the fuzzy match allows you to skip letters in the pattern you are "
+"searching for and find \"Firefox\" even if you type \"ffx\". Works only for "
+"the App, Windows, Extensions and Recent files search providers"
msgstr ""
-#: prefs.js:1602 prefs.js:1619
-msgid "Custom (Default)"
+#: prefs.js:1333
+msgid "Animations"
msgstr ""
-#: prefs.js:1603
-msgid "Alphabet - Folders First"
+#: prefs.js:1348
+msgid "Animation Speed"
msgstr ""
-#: prefs.js:1604
-msgid "Alphabet - Folders Last"
+#: prefs.js:1349
+msgid ""
+"Adjusts the global animation speed in percentage of the default duration - "
+"higher value means slower animation"
msgstr ""
-#: prefs.js:1605
-msgid "Usage - No Folders"
+#: prefs.js:1357
+msgid "App Grid Animation"
msgstr ""
-#: prefs.js:1613
-msgid "App Folder Order"
+#: prefs.js:1358
+msgid ""
+"When entering the App Grid view, the app grid animates from the edge of the "
+"screen. You can choose the direction, keep the Default (direction will be "
+"selected automatically) or disable the animation if you don't like it"
msgstr ""
-#: prefs.js:1614
-msgid "Choose sorting method for app folders"
+#: prefs.js:1364 prefs.js:1381
+msgid "Right to Left"
msgstr ""
-#: prefs.js:1620
-msgid "Alphabet"
+#: prefs.js:1365 prefs.js:1382
+msgid "Left to Right"
msgstr ""
-#: prefs.js:1621
-msgid "Usage"
+#: prefs.js:1366 prefs.js:1383
+msgid "Bottom to Top"
msgstr ""
-#: prefs.js:1629
-msgid "App Grid Content"
+#: prefs.js:1367 prefs.js:1384
+msgid "Top to Bottom"
+msgstr ""
+
+#: prefs.js:1374
+msgid "Search View Animation"
msgstr ""
-#: prefs.js:1630
+#: prefs.js:1375
msgid ""
-"The default Shell removes favorite apps, this option allows to duplicate "
-"them in the grid or remove also running applications. Option \"Favorites and "
-"Running First\" only works with the Alphabet and Usage sorting"
+"When search is activated the search view with search results can animate "
+"from the edge of the screen. You can choose the direction, keep the Default "
+"(currently Bottom to Top) or disable the animation if you don't like it."
msgstr ""
-#: prefs.js:1635
-msgid "Include All"
+#: prefs.js:1392
+msgid "Workspace Preview Animation"
msgstr ""
-#: prefs.js:1636
-msgid "Include All - Favorites and Running First"
+#: prefs.js:1393
+msgid ""
+"When entering / leaving the App Grid / Search view, the workspace preview "
+"can animate to/from workspace thumbnail."
msgstr ""
-#: prefs.js:1637
-msgid "Exclude Favorites (Default)"
+#: prefs.js:1398
+msgid "Enable"
msgstr ""
-#: prefs.js:1638
-msgid "Exclude Running"
+#: prefs.js:1406
+msgid "Workspace Switcher"
msgstr ""
-#: prefs.js:1639
-msgid "Exclude Favorites and Running"
+#: prefs.js:1412
+msgid "Wraparound"
msgstr ""
-#: prefs.js:1647
-msgid "Active Icons in Folder Preview"
+#: prefs.js:1413
+msgid "Continue from the last workspace to the first and vice versa"
msgstr ""
-#: prefs.js:1648
+#: prefs.js:1421
+msgid "Ignore Last (empty) Workspace"
+msgstr ""
+
+#: prefs.js:1422
msgid ""
-"If enabled, icons in the folder review behaves like normal icons, you can "
-"activate or even drag them directly, without having to open the folder first"
+"In Dynamic workspaces mode, there is always one empty workspace at the end. "
+"Switcher can ignore this last workspace"
msgstr ""
-#: prefs.js:1658
-msgid "Center Open Folders"
+#: prefs.js:1430
+msgid "Workspace Switcher Animation"
msgstr ""
-#: prefs.js:1659
+#: prefs.js:1431
msgid ""
-"App folder may open in the center of the screen or above the source folder "
-"icon"
+"Allows you to disable movement of the desktop background during workspace "
+"switcher animation outside of the overview. The Static Background mode also "
+"keeps Conky and desktop icons on their place during switching."
msgstr ""
-#: prefs.js:1669
-msgid "Allow Incomplete Pages"
+#: prefs.js:1436
+msgid "Static Background"
+msgstr ""
+
+#: prefs.js:1444
+msgid "Workspace Switcher Mode (Isolate Monitors)"
msgstr ""
-#: prefs.js:1670
+#: prefs.js:1445
msgid ""
-"If disabled, icons from the next page (if any) are automatically moved to "
-"fill any empty slot left after an icon was (re)moved (to a folder for "
-"example)"
+"Note that this is a workaround, not full-fledged feature. GNOME Shell does "
+"not support separate workspaces for each monitor, so V-Shell switches "
+"workspaces only on the primary monitor and moves windows across workspaces "
+"on secondary monitors in order to simulate independent behavior. The current "
+"monitor is determined by the position of the mouse pointer"
msgstr ""
-#: prefs.js:1680
-msgid "App Labels Behavior"
+#: prefs.js:1450
+msgid "Current Monitor"
msgstr ""
-#: prefs.js:1681
-msgid "Choose how and when to display app names"
+#: prefs.js:1458
+msgid "Workspace Switcher Popup Mode"
msgstr ""
-#: prefs.js:1686
-msgid "Ellipsized - Expand Selected (Default)"
+#: prefs.js:1459
+msgid ""
+"This popup shows up when you switch workspace using a keyboard shortcut or "
+"gesture outside of the overview. You can to disable the popup at all, or "
+"show it on the current monitor (the one with mouse pointer) instead of the "
+"primary."
msgstr ""
-#: prefs.js:1687
-msgid "Always Expanded"
+#: prefs.js:1464
+msgid "Show on Primary Monitor (Default)"
msgstr ""
-#: prefs.js:1688
-msgid "Hidden - Show Selected Only"
+#: prefs.js:1465
+msgid "Show on Current Monitor"
msgstr ""
-#: prefs.js:1695
-msgid "Reset App Grid Layout"
+#: prefs.js:1473
+msgid "Notifications"
msgstr ""
-#: prefs.js:1696
+#: prefs.js:1479
+msgid "Window Attention Handler"
+msgstr ""
+
+#: prefs.js:1480
msgid ""
-"Removes all stored app grid positions, after reset icons will be sorted "
-"alphabetically, except folder contents"
+"When a window requires attention (often a new window), GNOME Shell shows you "
+"a notification about it. You can disable popups of these messages "
+"(notification will be pushed into the message tray silently) or focus the "
+"source window immediately instead"
msgstr ""
-#: prefs.js:1704
-msgid "Remove App Grid Folders"
+#: prefs.js:1484 prefs.js:1499
+msgid "Show Notifications (Default)"
msgstr ""
-#: prefs.js:1705
-msgid "Removes all folders, folder apps will move to the root grid"
+#: prefs.js:1485
+msgid "Disable Notification Popups"
msgstr ""
-#: prefs.js:1721
-msgid "Window Search Provider - Sorting"
+#: prefs.js:1486
+msgid "Immediately Focus Window"
msgstr ""
-#: prefs.js:1722
-msgid "Choose the window sorting method"
+#: prefs.js:1494
+msgid "Favorites"
msgstr ""
-#: prefs.js:1727
-msgid "Most Recently Used (MRU)"
+#: prefs.js:1495
+msgid "Disable pin/unpin app notifications"
msgstr ""
-#: prefs.js:1728
-msgid "MRU - Current Workspace First"
+#: prefs.js:1500
+msgid "Disable Notifications"
msgstr ""
-#: prefs.js:1729
-msgid "MRU - By Workspaces"
+#: prefs.js:1518
+msgid "Main App Grid"
msgstr ""
-#: prefs.js:1730
-msgid "Stable Sequence - By Workspaces"
+#: prefs.js:1524
+msgid "Apps Sorting"
msgstr ""
-#: prefs.js:1738
-msgid "Enable Fuzzy Match"
+#: prefs.js:1525
+msgid ""
+"Choose sorting method for the app grid. Note that sorting by usage ignores "
+"folders"
+msgstr ""
+
+#: prefs.js:1529 prefs.js:1698
+msgid "Custom (Default)"
msgstr ""
-#: prefs.js:1739
+#: prefs.js:1530
+msgid "Alphabet - Folders First"
+msgstr ""
+
+#: prefs.js:1531
+msgid "Alphabet - Folders Last"
+msgstr ""
+
+#: prefs.js:1532
+msgid "Usage - No Folders"
+msgstr ""
+
+#: prefs.js:1540
+msgid "Icon Size"
+msgstr ""
+
+#: prefs.js:1541
msgid ""
-"Enabling the fuzzy match allows you to skip letters in the pattern you are "
-"searching for and find \"Firefox\" even if you type \"ffx\". Works only for "
-"the App, Window and Recent files search providers"
+"Allows to set a fixed app grid icon size and bypass the default adaptive "
+"algorithm"
msgstr ""
-#: prefs.js:1757
-msgid "Animations - General"
+#: prefs.js:1546
+msgid "256"
msgstr ""
-#: prefs.js:1772
-msgid "Animation Speed"
+#: prefs.js:1547
+msgid "224"
+msgstr ""
+
+#: prefs.js:1548
+msgid "208"
+msgstr ""
+
+#: prefs.js:1549
+msgid "192"
+msgstr ""
+
+#: prefs.js:1550
+msgid "176"
+msgstr ""
+
+#: prefs.js:1551
+msgid "160"
+msgstr ""
+
+#: prefs.js:1552
+msgid "144"
msgstr ""
-#: prefs.js:1773
-#, javascript-format
+#: prefs.js:1574
+msgid "Columns per Page (0 for adaptive grid)"
+msgstr ""
+
+#: prefs.js:1575
msgid ""
-"Adjusts the global animation speed in % of the default duration - higher "
-"value means slower animation"
+"Number of columns in the application grid. If set to 0, the number will be "
+"set automatically to fit the available width"
msgstr ""
-#: prefs.js:1781
-msgid "Animations - Overview"
+#: prefs.js:1591
+msgid "Rows per Page (0 for adaptive grid)"
msgstr ""
-#: prefs.js:1787
-msgid "App Grid Animation"
+#: prefs.js:1592
+msgid ""
+"Number of rows in the application grid. If set to 0, the number will be set "
+"automatically to fit the available height"
+msgstr ""
+
+#: prefs.js:1620
+msgid "App Grid Page Width Scale"
+msgstr ""
+
+#: prefs.js:1621
+msgid "Adjusts maximum app grid page width relative to the available space"
+msgstr ""
+
+#: prefs.js:1643
+msgid "App Grid Page Height Scale"
+msgstr ""
+
+#: prefs.js:1644
+msgid "Adjusts maximum app grid page height relative to the available space"
+msgstr ""
+
+#: prefs.js:1663
+msgid "Grid Spacing"
msgstr ""
-#: prefs.js:1788
+#: prefs.js:1664
msgid ""
-"When entering the App Grid view, the app grid animates from the edge of the "
-"screen. You can choose the direction, keep the Default (direction will be "
-"selected automatically) or disable the animation if you don't like it"
+"V-Shell uses this value to calculate grid dimensions for adaptive options. "
+"However, the main grid automatically adjusts the spacing based on the grid "
+"and available space"
msgstr ""
-#: prefs.js:1795 prefs.js:1813
-msgid "Right to Left"
+#: prefs.js:1674
+msgid "Allow Incomplete Pages"
msgstr ""
-#: prefs.js:1796 prefs.js:1814
-msgid "Left to Right"
+#: prefs.js:1675
+msgid ""
+"If disabled, icons from the next page (if any) are automatically moved to "
+"fill any empty slot left after an icon was (re)moved (to a folder for "
+"example)"
msgstr ""
-#: prefs.js:1797 prefs.js:1815
-msgid "Bottom to Top"
+#: prefs.js:1687
+msgid "App Folders"
msgstr ""
-#: prefs.js:1798 prefs.js:1816
-msgid "Top to Bottom"
+#: prefs.js:1693
+msgid "Folder Apps Sorting"
msgstr ""
-#: prefs.js:1805
-msgid "Search View Animation"
+#: prefs.js:1694
+msgid "Choose sorting method for app folders"
+msgstr ""
+
+#: prefs.js:1699
+msgid "Alphabet"
msgstr ""
-#: prefs.js:1806
+#: prefs.js:1700
+msgid "Usage"
+msgstr ""
+
+#: prefs.js:1708
+msgid "Active Icons in Folder Preview"
+msgstr ""
+
+#: prefs.js:1709
msgid ""
-"When search is activated the search view with search results can animate "
-"from the edge of the screen. You can choose the direction, keep the Default "
-"(currently Bottom to Top) or disable the animation if you don't like it."
+"If enabled, icons in the folder preview behaves like normal icons, you can "
+"activate or even drag them directly, without having to open the folder "
+"first. This option also affects the app grid default icon size"
msgstr ""
-#: prefs.js:1824
-msgid "Workspace Preview Animation"
+#: prefs.js:1720
+msgid "App Folder Preview Grid Size"
msgstr ""
-#: prefs.js:1825
+#: prefs.js:1721
msgid ""
-"When entering / leaving the App Grid / Search view, the workspace preview "
-"can animate to/from workspace thumbnail."
+"Sets a grid size (number of icons) in the folder icon preview. 3x3 options "
+"automatically switches between 2x2 and 3x3 grid depending on the number of "
+"icons in the folder"
msgstr ""
-#: prefs.js:1831
-msgid "Enable"
+#: prefs.js:1725
+msgid "2x2 (Default)"
msgstr ""
-#: prefs.js:1839
-msgid "Workspace Switcher"
+#: prefs.js:1726
+msgid "3x3 for 5+ apps"
msgstr ""
-#: prefs.js:1845
-msgid "Wraparound"
+#: prefs.js:1727
+msgid "3x3 for 9+ apps"
msgstr ""
-#: prefs.js:1846
-msgid "Continue from the last workspace to the first and vice versa"
+#: prefs.js:1735
+msgid "Folder Icon Size"
msgstr ""
-#: prefs.js:1854
-msgid "Ignore Last (empty) Workspace"
+#: prefs.js:1736
+msgid ""
+"Allows to set a fixed icon size and bypass the default adaptive algorithm in "
+"the open folder dialog"
msgstr ""
-#: prefs.js:1855
+#: prefs.js:1754
+msgid "Maximum Number Of Columns (0 for automatic)"
+msgstr ""
+
+#: prefs.js:1755
msgid ""
-"In Dynamic workspaces mode, there is always one empty workspace at the end. "
-"Switcher can ignore this last workspace"
+"Specifies the maximum number of columns per page in folder grids. If you "
+"leave the value at 0, the maximum number of columns will be calculated based "
+"on available space. The actual folder grid dimensions will be determined by "
+"the number of items within the set limits"
msgstr ""
-#: prefs.js:1863
-msgid "Workspace Switcher Animation"
+#: prefs.js:1771
+msgid "Maximum Number Of Rows (0 for automatic)"
msgstr ""
-#: prefs.js:1864
+#: prefs.js:1772
msgid ""
-"Allows you to disable movement of the desktop background during workspace "
-"switcher animation outside of the overview. The Static Background mode also "
-"keeps Conky and desktop icons on their place during switching."
+"Specifies the maximum number of rows per page in folder grids. If you leave "
+"the value at 0, the maximum number of rows will be calculated based on "
+"available space. The actual folder grid dimensions will be determined by the "
+"number of items within the set limits"
msgstr ""
-#: prefs.js:1870
-msgid "Static Background"
+#: prefs.js:1790
+msgid "Folder Grid Spacing"
msgstr ""
-#: prefs.js:1878
-msgid "Workspace Switcher Mode (Isolate Monitors)"
+#: prefs.js:1791
+msgid "Adjusts the spacing between icons in a folder grid"
+msgstr ""
+
+#: prefs.js:1801
+msgid "Center Open Folders"
msgstr ""
-#: prefs.js:1879
+#: prefs.js:1802
msgid ""
-"Note that this is a workaround, not full-fledged feature. GNOME Shell does "
-"not support separate workspaces for each monitor, so V-Shell switches "
-"workspaces only on the primary monitor and moves windows across workspaces "
-"on secondary monitors in order to simulate independent behavior. The current "
-"monitor is determined by the position of the mouse pointer"
+"App folders may open in the center of the screen or be centered on the "
+"folder's source icon"
msgstr ""
-#: prefs.js:1885
-msgid "Current Monitor"
+#: prefs.js:1814
+msgid "Content"
msgstr ""
-#: prefs.js:1893
-msgid "Workspace Switcher Popup Mode"
+#: prefs.js:1820
+msgid "App Grid Content"
msgstr ""
-#: prefs.js:1894
+#: prefs.js:1821
msgid ""
-"This popup shows up when you switch workspace using a keyboard shortcut or "
-"gesture outside of the overview. You can to disable the popup at all, or "
-"show it on the current monitor (the one with mouse pointer) instead of the "
-"primary."
+"The default Shell removes favorite apps, this option allows to duplicate "
+"them in the grid or remove also running applications. Option \"Favorites and "
+"Running First\" only works with the Alphabet and Usage sorting"
msgstr ""
-#: prefs.js:1900
-msgid "Show on Primary Monitor (Default)"
+#: prefs.js:1825
+msgid "Include All"
msgstr ""
-#: prefs.js:1901
-msgid "Show on Current Monitor"
+#: prefs.js:1826
+msgid "Include All - Favorites and Running First"
msgstr ""
-#: prefs.js:1909
-msgid "Notifications"
+#: prefs.js:1827
+msgid "Exclude Favorites (Default)"
msgstr ""
-#: prefs.js:1915
-msgid "Window Attention Handler"
+#: prefs.js:1828
+msgid "Exclude Running"
+msgstr ""
+
+#: prefs.js:1829
+msgid "Exclude Favorites and Running"
+msgstr ""
+
+#: prefs.js:1837
+msgid "App Labels Behavior"
+msgstr ""
+
+#: prefs.js:1838
+msgid "Choose how and when to display app names"
msgstr ""
-#: prefs.js:1916
+#: prefs.js:1842
+msgid "Ellipsized - Expand Selected (Default)"
+msgstr ""
+
+#: prefs.js:1843
+msgid "Always Expanded"
+msgstr ""
+
+#: prefs.js:1844
+msgid "Hidden - Show Selected Only"
+msgstr ""
+
+#: prefs.js:1852
+msgid "Show Page Navigation Buttons"
+msgstr ""
+
+#: prefs.js:1853
msgid ""
-"When a window requires attention (often a new window), GNOME Shell shows you "
-"a notification about it. You can disable popups of these messages "
-"(notification will be pushed into the message tray silently) or focus the "
-"source window immediately instead"
+"You can hide the page navigation buttons if you don't need them or want to "
+"get more space for icons. The buttons are hidden automatically when there is "
+"only one page in the app grid"
msgstr ""
-#: prefs.js:1921 prefs.js:1937
-msgid "Show Notifications (Default)"
+#: prefs.js:1866
+msgid "Performance"
msgstr ""
-#: prefs.js:1922
-msgid "Disable Notification Popups"
+#: prefs.js:1872
+msgid "Smooth App Grid Animations"
msgstr ""
-#: prefs.js:1923
-msgid "Immediately Focus Window"
+#: prefs.js:1873
+msgid ""
+"This option allows V-Shell to pre-realize app grid and app folders during "
+"session startup in order to avoid stuttering animations when using them for "
+"the first time. If enabled, the session startup needs a little bit more time "
+"to finish and necessary memory will be allocated at this time"
msgstr ""
-#: prefs.js:1931
-msgid "Favorites"
+#: prefs.js:1883
+msgid "Reset"
msgstr ""
-#: prefs.js:1932
-msgid "Disable pin/unpin app notifications"
+#: prefs.js:1888
+msgid "Reset App Grid Layout"
msgstr ""
-#: prefs.js:1938
-msgid "Disable Notifications"
+#: prefs.js:1889
+msgid ""
+"Removes all stored app grid positions, after reset icons will be sorted "
+"alphabetically, except folder contents"
+msgstr ""
+
+#: prefs.js:1897
+msgid "Remove App Grid Folders"
+msgstr ""
+
+#: prefs.js:1898
+msgid "Removes all folders, folder apps will move to the root grid"
msgstr ""
-#: prefs.js:1953
+#: prefs.js:1914
+msgid "Optional Modules"
+msgstr ""
+
+#: prefs.js:1920
msgid ""
-"V-Shell Modules (allows you to disable modules that conflict with another "
-"extension)"
+"Windows Search Provider - Moved from V-Shell to the standalone \"WSP\" "
+"extension"
msgstr ""
-#: prefs.js:1959
-msgid "WindowSearchProvider"
+#: prefs.js:1921
+msgid ""
+"NOTE: This module has been released as a standalone extension with new "
+"features, click to learn more. Related V-Shell options are still available "
+"if you install the WSP extension.\n"
+"\n"
+"WSP adds adds open windows to the search results. You can search app names "
+"and window titles. You can also use \"wq//\" or custom prefix (also by "
+"pressing the Space hotkey in the overview, or clicking dash icon) to "
+"suppress results from other search providers"
msgstr ""
-#: prefs.js:1960
+#: prefs.js:1928
msgid ""
-"Activates the window search provider that adds open windows to the search "
-"results. You can search app names and window titles. You can also use \"wq//"
-"\" prefix (also by pressing the Space hotkey in the overview, or clicking "
-"dash icon) to suppress results from other search providers"
+"Extensions Search Provider - Moved from V-Shell to the standalone \"ESP\" "
+"extension"
msgstr ""
-#: prefs.js:1968
-msgid "RecentFilesSearchProvider"
+#: prefs.js:1929
+msgid ""
+"NOTE: This module has been released as a standalone extension with new "
+"features, click to learn more. Related V-Shell options are still available "
+"if you install the ESP extension.\n"
+"\n"
+"ESP adds extensions to the search results. You can also use \"eq//\" or "
+"custom prefix (also by pressing the Ctrl + Shift + Space hotkey in the "
+"overview, or clicking dash icon) to suppress results from other search "
+"providers"
msgstr ""
-#: prefs.js:1969
+#: prefs.js:1936
msgid ""
-"Activates the recent files search provider that can be triggered by a dash "
-"icon, Ctrl + Space hotkey or by typing \"fq//\" prefix in the search entry "
-"field. This option needs File History option enabled in the GNOME Privacy "
-"settings"
+"Window Thumbnails (PiP) - Moved from V-Shell to the standalone \"WTMB\" "
+"extension"
msgstr ""
-#: prefs.js:1977
-msgid "ExtensionsSearchProvider"
+#: prefs.js:1937
+msgid ""
+"NOTE: This module has been released as a standalone extension with new "
+"features, click to learn more. Related V-Shell options are still available "
+"if you install the WTMB extension.\n"
+"\n"
+"WTMB allows the creation of Picture-in-Picture like window thumbnails that "
+"you can use for monitoring of windows on another workspace"
msgstr ""
-#: prefs.js:1978
+#: prefs.js:1944
msgid ""
-"Activates the extensions search provider that adds extensions to the search "
-"results. You can also use \"eq//\" prefix (also by pressing the Ctrl + Shift "
-"+ Space hotkey in the overview, or clicking dash icon) to suppress results "
-"from other search providers"
+"Built-in Modules (allows to disable modules that conflict with another "
+"extension)"
msgstr ""
-#: prefs.js:1986
+#: prefs.js:1950
msgid "AppDisplay / IconGrid"
msgstr ""
-#: prefs.js:1987
+#: prefs.js:1951
msgid "App grid customization and options"
msgstr ""
-#: prefs.js:1995
+#: prefs.js:1959
msgid "AppFavorites"
msgstr ""
-#: prefs.js:1996
+#: prefs.js:1960
msgid "Pin/unpin app notification options"
msgstr ""
-#: prefs.js:2005
+#: prefs.js:1969
msgid "Dash customization and options, support for vertical orientation"
msgstr ""
-#: prefs.js:2014
+#: prefs.js:1978
msgid "Hot corner options"
msgstr ""
-#: prefs.js:2022
+#: prefs.js:1986
msgid "MessageTray"
msgstr ""
-#: prefs.js:2023
+#: prefs.js:1987
msgid "Notification position options"
msgstr ""
-#: prefs.js:2031
+#: prefs.js:1995
msgid "OsdWindow"
msgstr ""
-#: prefs.js:2032
+#: prefs.js:1996
msgid "OSD position options"
msgstr ""
-#: prefs.js:2040
+#: prefs.js:2004
msgid "OverlayKey"
msgstr ""
-#: prefs.js:2041
+#: prefs.js:2005
msgid "Overlay (Super/Window) key options"
msgstr ""
-#: prefs.js:2050
+#: prefs.js:2014
msgid "Panel options"
msgstr ""
-#: prefs.js:2059
+#: prefs.js:2023
msgid "Search view and app search provider customization and options"
msgstr ""
-#: prefs.js:2067
+#: prefs.js:2031
msgid "SearchController"
msgstr ""
-#: prefs.js:2068
+#: prefs.js:2032
msgid "Escape key behavior options in the overview"
msgstr ""
-#: prefs.js:2076
+#: prefs.js:2040
msgid "SwipeTracker"
msgstr ""
-#: prefs.js:2077
+#: prefs.js:2041
msgid "Gestures for vertical workspace orientation"
msgstr ""
-#: prefs.js:2085
+#: prefs.js:2049
msgid "WindowAttentionHandler"
msgstr ""
-#: prefs.js:2086
+#: prefs.js:2050
msgid "Window attention handler options"
msgstr ""
-#: prefs.js:2094
+#: prefs.js:2058
msgid "WindowManager"
msgstr ""
-#: prefs.js:2095
+#: prefs.js:2059
msgid ""
"Fixes an upstream bug in the minimization animation of a full-screen window"
msgstr ""
-#: prefs.js:2103
+#: prefs.js:2067
msgid "WindowPreview"
msgstr ""
-#: prefs.js:2104
+#: prefs.js:2068
msgid ""
"Window preview options, fixes an upstream bug that fills the system log with "
"errors when you close a window from the overview or exit the overview with a "
"gesture when any window is selected"
msgstr ""
-#: prefs.js:2112
-msgid "WindowThumbnail"
-msgstr ""
-
-#: prefs.js:2113
-msgid ""
-"Create Window Thumbnail (PIP) option in the app icon menu and window preview "
-"actions"
-msgstr ""
-
-#: prefs.js:2121
+#: prefs.js:2076
msgid "Workspace"
msgstr ""
-#: prefs.js:2122
+#: prefs.js:2077
msgid ""
"Fixes workspace preview allocations for vertical workspaces orientation and "
"window scaling in static overview modes"
msgstr ""
-#: prefs.js:2130
+#: prefs.js:2085
msgid "WorkspaceAnimation"
msgstr ""
-#: prefs.js:2131
+#: prefs.js:2086
msgid "Static workspace animation option"
msgstr ""
-#: prefs.js:2139
+#: prefs.js:2094
msgid "WorkspaceSwitcherPopup"
msgstr ""
-#: prefs.js:2140
+#: prefs.js:2095
msgid "Workspace switcher popup orientation and position options"
msgstr ""
-#: prefs.js:2156
+#: prefs.js:2111
msgid "Keyboard"
msgstr ""
-#: prefs.js:2162
+#: prefs.js:2117
msgid "Override Page Up/Down Shortcuts"
msgstr ""
-#: prefs.js:2163
+#: prefs.js:2118
msgid ""
"This option automatically overrides the (Shift +) Super + Page Up/Down "
"keyboard shortcuts for the current workspace orientation. If you encounter "
"any issues, check the configuration in the dconf editor"
msgstr ""
-#: prefs.js:2186
-msgid "Performance"
+#: prefs.js:2126
+msgid "Workarounds / Hacks"
msgstr ""
-#: prefs.js:2192
-msgid "Smooth App Grid Animations"
+#: prefs.js:2132
+msgid "Delay at Startup"
msgstr ""
-#: prefs.js:2193
+#: prefs.js:2133
msgid ""
-"This option allows V-Shell to pre-realize app grid and app folders during "
-"session startup in order to avoid stuttering animations when using them for "
-"the first time. If enabled, the session startup needs a little bit more time "
-"to finish and necessary memory will be allocated at this time"
-msgstr ""
-
-#: prefs.js:2201
-msgid "Workarounds"
+"If you encounter issues during GNOME Shell startup after logging in, which "
+"could be caused by V-Shell's incompatibility with another extension, try "
+"enabling this option. When enabled, V-Shell is activated after the startup "
+"is complete. It will activate automatically when Dash to Dock, Ubuntu Dock "
+"or Dash to Panel extensions are detected."
msgstr ""
-#: prefs.js:2207
+#: prefs.js:2141
msgid "Fix New Window Not In Focus"
msgstr ""
-#: prefs.js:2208
+#: prefs.js:2142
msgid ""
"If you often find that the app window you open from the Activities overview "
"does not get focus, try enabling this option."
msgstr ""
-#: prefs.js:2216
-msgid "Fix New Window Not On Current Monitor"
+#: prefs.js:2150
+msgid "Fix New Window Not On Current Monitor (experimental)"
msgstr ""
-#: prefs.js:2217
+#: prefs.js:2151
msgid ""
"If you use multiple monitors, you may encounter the issue of new windows "
"opening on a different monitor than expected. This option moves those "
@@ -1858,102 +1876,91 @@ msgid ""
"moving the window back to the previous monitor during initialization"
msgstr ""
-#: prefs.js:2238
+#: prefs.js:2174
msgid "Version"
msgstr ""
-#: prefs.js:2244
+#: prefs.js:2180
msgid "Reset all options"
msgstr ""
-#: prefs.js:2245
-msgid "Set all options to default values."
+#: prefs.js:2181
+msgid "Reset all options to their default values"
msgstr ""
-#: prefs.js:2251
+#: prefs.js:2187
msgid "Links"
msgstr ""
-#: prefs.js:2255
+#: prefs.js:2191
msgid "Homepage"
msgstr ""
-#: prefs.js:2256
+#: prefs.js:2192
msgid "Source code and more info about this extension"
msgstr ""
-#: prefs.js:2261
+#: prefs.js:2197
msgid "Changelog"
msgstr ""
-#: prefs.js:2262
+#: prefs.js:2198
msgid "See what's changed."
msgstr ""
-#: prefs.js:2267
+#: prefs.js:2203
msgid "GNOME Extensions"
msgstr ""
-#: prefs.js:2268
+#: prefs.js:2204
msgid "Rate and comment V-Shell on the GNOME Extensions site"
msgstr ""
-#: prefs.js:2273
+#: prefs.js:2209
msgid "Report a bug or suggest new feature"
msgstr ""
-#: prefs.js:2274
+#: prefs.js:2210
msgid "Help me to help you!"
msgstr ""
-#: prefs.js:2279
+#: prefs.js:2215
msgid "Buy Me a Coffee"
msgstr ""
-#: prefs.js:2280
-msgid "If you like V-Shell, you can help me with my coffee expenses"
+#: prefs.js:2216
+msgid "Enjoying V-Shell? Consider supporting it by buying me a coffee!"
msgstr ""
-#: lib/windowSearchProvider.js:124 lib/windowSearchProvider.js:126
-msgid "Open Windows"
+#: lib/util.js:408
+msgid "Updating V-Shell"
msgstr ""
-#: lib/windowSearchProvider.js:125
-msgid "Search open windows"
+#: lib/windowSearchProvider.js:118
+msgid "Open Windows"
msgstr ""
-#: lib/overviewControls.js:813
-msgid ""
-"Overview background crashed!\n"
-"If you are using Blur My Shell, disable overview blur in its settings and re-"
-"enable V-Shell Overview Background to avoid visual glitches."
+#: lib/windowSearchProvider.js:119
+msgid "Search open windows"
msgstr ""
-#: lib/dash.js:1296
+#: lib/dash.js:983
msgid "Force Quit"
msgstr ""
-#: lib/dash.js:1313
+#: lib/dash.js:1000
msgid "Move App to Current Workspace ( Shift + Click )"
msgstr ""
-#: lib/dash.js:1368
-msgid "Search Open Windows (Hotkey: Space)"
-msgstr ""
-
-#: lib/dash.js:1409
-msgid "Search Recent Files (Hotkey: Shift + Space)"
-msgstr ""
-
-#: lib/dash.js:1444
-msgid "Search Extensions (Hotkey: Ctrl + Space)"
+#: lib/dash.js:1003
+msgid "Create Window Thumbnail/PiP"
msgstr ""
-#: lib/search.js:275
+#: lib/search.js:336
msgid "Searching…"
msgstr ""
-#: lib/search.js:277
+#: lib/search.js:338
msgid "No results."
msgstr ""
@@ -1962,19 +1969,19 @@ msgid "Reset profile to defaults"
msgstr ""
#: lib/optionsFactory.js:303
-msgid "GNOME 3"
+msgid "GNOME 3 Layout (Vertical WS)"
msgstr ""
#: lib/optionsFactory.js:304
-msgid "GNOME 40+ - Bottom Hot Edge"
+msgid "GNOME 4x Layout, Bottom Hot Edge (Horizontal WS)"
msgstr ""
#: lib/optionsFactory.js:305
-msgid "Hot Corner Centric - Top Left Hot Corner"
+msgid "Top Left Hot Corner Centric (Vertical WS)"
msgstr ""
#: lib/optionsFactory.js:306
-msgid "Dock Overview - Bottom Hot Edge"
+msgid "Dock-Like Overview, Bottom Hot Edge (Horizontal WS)"
msgstr ""
#: lib/optionsFactory.js:328
@@ -1985,18 +1992,14 @@ msgstr ""
msgid "Save current settings into this profile"
msgstr ""
-#: lib/recentFilesSearchProvider.js:106 lib/recentFilesSearchProvider.js:108
+#: lib/recentFilesSearchProvider.js:119
msgid "Recent Files"
msgstr ""
-#: lib/recentFilesSearchProvider.js:107
-msgid "Search recent files"
-msgstr ""
-
#: lib/extensionsSearchProvider.js:127
-msgid "Search extensions"
+msgid "Extensions"
msgstr ""
#: lib/extensionsSearchProvider.js:128
-msgid "Extensions"
+msgid "Search extensions"
msgstr ""
diff --git a/extensions/46/vertical-workspaces/prefs.js b/extensions/47/vertical-workspaces/prefs.js
index 24e404d..1713643 100644
--- a/extensions/46/vertical-workspaces/prefs.js
+++ b/extensions/47/vertical-workspaces/prefs.js
@@ -46,6 +46,11 @@ export default class VShell extends ExtensionPreferences {
optionList: this._getBehaviorOptionList(itemFactory),
},
{
+ title: _('App Grid'),
+ iconName: 'view-app-grid-symbolic',
+ optionList: this._getAppGridOptionList(itemFactory),
+ },
+ {
title: _('Modules'),
iconName: 'application-x-addon-symbolic',
optionList: this._getModulesOptionList(itemFactory),
@@ -97,12 +102,16 @@ export default class VShell extends ExtensionPreferences {
// options item format:
// (text, caption, widget, settings-variable, [options for combo], sensitivity-depends-on-bool-variable)
- optionList.push(
- itemFactory.getRowWidget(
- _('Custom Profiles'),
- _('Sets of settings that can help you with the initial customization')
- )
- );
+ optionList.push(itemFactory.getRowWidget(
+ _('Custom Profiles'),
+ null
+ ));
+
+ optionList.push(itemFactory.getRowWidget(
+ _('Save your configurations'),
+ _("The predefined sets of settings, which can help you with the initial configuration and exploring V-Shell's possibilities, can be renamed and overridden by your own configurations"),
+ itemFactory.newLabel()
+ ));
optionList.push(itemFactory.getRowWidget(
_('Profile 1'),
@@ -268,7 +277,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Workspace Thumbnails Max Scale - Window Picker'),
- _('Adjusts maximum size of the workspace thumbnails in the overview (% relative to display width)'),
+ _('Adjusts the maximum size of the workspace thumbnails in the overview (percentage relative to display width)'),
wsThumbnailScale,
'wsThumbnailScale'
)
@@ -324,11 +333,11 @@ export default class VShell extends ExtensionPreferences {
});
const wsSpacingScale = itemFactory.newScale(wsSpacingAdjustment);
- wsSpacingScale.add_mark(350, Gtk.PositionType.TOP, null);
+ wsSpacingScale.add_mark(this.opt.WS_MAX_SPACING_OFF_SCREEN, Gtk.PositionType.TOP, null);
optionList.push(
itemFactory.getRowWidget(
_('Workspaces Spacing'),
- _('Adjusts spacing between workspace previews so you can control how much of the adjacent workspaces overlap to the current workspace overview. Default value should set the adjacent workspaces off-screen.'),
+ _('Adjusts spacing in pixels between workspace previews, allowing you to control how much the adjacent workspaces overlap in the current workspace overview. Setting the value above 349 pixels disables the visibility of workspaces other than the current one during transitions to/from the app grid view, which can also save some graphical resources if many windows are open on other workspaces'),
wsSpacingScale,
'wsMaxSpacing'
)
@@ -350,25 +359,6 @@ export default class VShell extends ExtensionPreferences {
)
);
- const agPageAdjustment = new Gtk.Adjustment({
- upper: 100,
- lower: 50,
- step_increment: 1,
- page_increment: 10,
- });
-
- const agPageWidthScale = itemFactory.newScale(agPageAdjustment);
- agPageWidthScale.add_mark(90, Gtk.PositionType.TOP, null);
- optionList.push(
- itemFactory.getRowWidget(
- _('App Grid Page Width Scale'),
- _('Adjusts max app grid page width relative to the available space.'),
- agPageWidthScale,
- 'appGridPageWidthScale',
- null,
- 'appDisplayModule'
- )
- );
optionList.push(
itemFactory.getRowWidget(
@@ -406,7 +396,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Search Results Width'),
- _('Adjusts maximum width of search results view (% relative to default). This allows to fit more (or less) app icons into the app search result'),
+ _('Adjusts the maximum width of search results view (percentage relative to default). This allows to fit more (or less) app icons into the app search result'),
searchViewScale,
'searchViewScale',
null,
@@ -469,7 +459,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('Horizontal Position (% from left)'),
+ _('Horizontal Position (percentage from the left)'),
_('This popup shows up when you switch workspace using a keyboard shortcut or gesture outside of the overview. You can disable it on the "Behavior" tab. If you want more control over the popup, try the "Workspace Switcher Manager" extension'),
hScale,
'wsSwPopupHPosition',
@@ -490,7 +480,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('Vertical Position (% from top)'),
+ _('Vertical Position (percentage from the top)'),
null,
vScale,
'wsSwPopupVPosition',
@@ -594,7 +584,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Workspace Thumbnails Max Scale'),
- _('Adjusts maximum size of the workspace thumbnails (% relative to display width / height) for secondary monitors'),
+ _('Adjusts maximum size of the workspace thumbnails (percentage relative to the display width / height) for secondary monitors'),
secWsThumbnailScale,
'secWsThumbnailScale'
)
@@ -608,7 +598,7 @@ export default class VShell extends ExtensionPreferences {
});
const wsSecScaleScale = itemFactory.newScale(wsSecScaleAdjustment);
- wsScaleScale.add_mark(100, Gtk.PositionType.TOP, null);
+ wsScaleScale.add_mark(95, Gtk.PositionType.TOP, null);
optionList.push(
itemFactory.getRowWidget(
_('Workspace Preview Scale'),
@@ -647,17 +637,18 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Dash Max Icon Size'),
- _('Maximum size of Dash icons in pixels'),
+ _('Maximum size of Dash icons in pixels. Adaptive option switches between default 64 and 48 for low resolution displays'),
itemFactory.newDropDown(),
'dashMaxIconSize',
[
- [_('128'), 128],
- [_('112'), 112],
- [_('96'), 96],
- [_('80'), 80],
- [_('64'), 64],
- [_('48'), 48],
- [_('32'), 32],
+ [_('Adaptive (Default)'), 0],
+ [_('128'), 128],
+ [_('112'), 112],
+ [_('96'), 96],
+ [_('80'), 80],
+ [_('64'), 64],
+ [_('48'), 48],
+ [_('32'), 32],
],
'dashModule'
)
@@ -865,163 +856,6 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('App Grid')
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Icon Size'),
- _('Allows to set a fixed app grid icon size and bypass the default adaptive algorithm'),
- itemFactory.newDropDown(),
- 'appGridIconSize',
- [
- [_('Adaptive (Default)'), -1],
- [_('256'), 256],
- [_('224'), 224],
- [_('208'), 208],
- [_('192'), 192],
- [_('176'), 176],
- [_('160'), 160],
- [_('144'), 144],
- [_('128'), 128],
- [_('112'), 112],
- [_('96'), 96],
- [_('80'), 80],
- [_('64'), 64],
- [_('48'), 48],
- // [_('32'), 32],
- ],
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Folder Icon Size'),
- _('Allows to set a fixed icon size and bypass the default adaptive algorithm in the open folder dialog'),
- itemFactory.newDropDown(),
- 'appGridFolderIconSize',
- [
- [_('Adaptive (Default)'), -1],
- [_('128'), 128],
- [_('112'), 112],
- [_('96'), 96],
- [_('80'), 80],
- [_('64'), 64],
- [_('48'), 48],
- [_('32'), 32],
- ],
- 'appDisplayModule'
- )
- );
-
- const folderIconGridCombo = itemFactory.newDropDown();
- optionList.push(
- itemFactory.getRowWidget(
- _('Max App Folder Icon Grid Size'),
- _('Sets a grid size (number of icons) in the folder preview. 3x3 options automatically switches between 2x2 and 3x3 grid depending on the number of icons in the folder'),
- folderIconGridCombo,
- 'appGridFolderIconGrid',
- [
- [_('2x2 (Default)'), 2],
- [_('3x3 for 5+ apps'), 3],
- [_('3x3 for 9+ apps'), 4],
- ],
- 'appDisplayModule'
- )
- );
-
- const columnsAdjustment = new Gtk.Adjustment({
- upper: 15,
- lower: 0,
- step_increment: 1,
- page_increment: 1,
- });
-
- const columnsSpinBtn = itemFactory.newSpinButton(columnsAdjustment);
- optionList.push(itemFactory.getRowWidget(
- _('Columns per Page (0 for adaptive grid)'),
- _('Number of columns in the application grid. If set to 0 (the default), the number will be set automatically to fit the available width'),
- columnsSpinBtn,
- 'appGridColumns',
- null,
- 'appDisplayModule'
- ));
-
- const rowsAdjustment = new Gtk.Adjustment({
- upper: 15,
- lower: 0,
- step_increment: 1,
- page_increment: 1,
- });
-
- const rowsSpinBtn = itemFactory.newSpinButton(rowsAdjustment);
- optionList.push(itemFactory.getRowWidget(
- _('Rows per Page (0 for adaptive grid)'),
- _('Number of rows in the application grid. If set to 0 (the default), the number will be set automatically to fit the available height'),
- rowsSpinBtn,
- 'appGridRows',
- null,
- 'appDisplayModule'
- ));
-
- const folderColumnsAdjustment = new Gtk.Adjustment({
- upper: 15,
- lower: 0,
- step_increment: 1,
- page_increment: 1,
- });
-
- const folderColumnsSpinBtn = itemFactory.newSpinButton(folderColumnsAdjustment);
- optionList.push(itemFactory.getRowWidget(
- _('Folder Columns per Page (0 for adaptive grid)'),
- _('Number of columns in folder grid. If you leave the value at 0, the number of columns will be calculated to fit all the folder icons on one page'),
- folderColumnsSpinBtn,
- 'appGridFolderColumns',
- null,
- 'appDisplayModule'
- ));
-
- const folderRowsAdjustment = new Gtk.Adjustment({
- upper: 15,
- lower: 0,
- step_increment: 1,
- page_increment: 1,
- });
-
- const folderRowsSpinBtn = itemFactory.newSpinButton(folderRowsAdjustment);
- optionList.push(itemFactory.getRowWidget(
- _('Folder Rows per Page (0 for adaptive grid)'),
- _('Number of rows in folder grid. If you leave the value at 0, the number of rows will be calculated to fit all the folder icons on one page'),
- folderRowsSpinBtn,
- 'appGridFolderRows',
- null,
- 'appDisplayModule'
- ));
-
- const appGridSpacingAdjustment = new Gtk.Adjustment({
- upper: 30,
- lower: 5,
- step_increment: 1,
- page_increment: 5,
- });
-
- const appGridSpacingScale = itemFactory.newScale(appGridSpacingAdjustment);
- appGridSpacingScale.add_mark(12, Gtk.PositionType.TOP, null);
- optionList.push(
- itemFactory.getRowWidget(
- _('Grid Spacing'),
- _('Adjusts the spacing between icons in a grid, the real impact is on folders'),
- appGridSpacingScale,
- 'appGridSpacing',
- null,
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
_('Search')
)
);
@@ -1029,10 +863,11 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('App Search Icon Size'),
- _('Size of results provided by the App Search Provider - smaller size allows to fit more results'),
+ _('Size of results provided by the App Search Provider - smaller size allows to fit more results. Adaptive option switches between default 96 and 64 for low resolution displays'),
itemFactory.newDropDown(),
'searchIconSize',
[
+ [_('Adaptive'), 0],
[_('128'), 128],
[_('112'), 112],
[_('96 (Default)'), 96],
@@ -1232,6 +1067,16 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
+ _('Click Empty Space To Close'),
+ _('Enables clicking on an empty space in the overview to close it'),
+ itemFactory.newSwitch(),
+ 'clickEmptyClose',
+ null
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
_('Overlay Key (Super/Windows)')
)
);
@@ -1239,7 +1084,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Single-Press Action'),
- _('Disable or change behavior when you press and release the Super key. The "Search Windows" options requires the "WSP (Window Search Provider)" extension installed and enabled. Link is available on the Modules tab in Settings'),
+ _('Disable or change behavior when you press and release the Super key. The "Search Windows" options requires the "WSP (Window Search Provider)" extension installed and enabled. Link is available on the Modules tab in Settings. If you want another extension (like AATWS) to handle the overlay key, set this option to "Overview - Window Picker (Default)" and the "Double-Press Action" option to "Applications (Default)"'),
itemFactory.newDropDown(),
'overlayKeyPrimary',
[
@@ -1249,7 +1094,7 @@ export default class VShell extends ExtensionPreferences {
[_('Applications'), 3],
[_('Overview - Static WS Preview'), 4],
[_('Overview - Static Workspace'), 5],
- [_('Search Windows'), 6],
+ [_('Search Windows (requires WSP extension)'), 6],
// [_('Search Recent Files'), 7],
],
'overlayKeyModule'
@@ -1265,7 +1110,7 @@ export default class VShell extends ExtensionPreferences {
[
[_('Disable'), 0],
[_('Applications (Default)'), 1],
- [_('Search Windows'), 2],
+ [_('Search Windows (requires WSP extension)'), 2],
[_('Overview - Window Picker'), 3],
// [_('Search Recent Files'), 4],
],
@@ -1282,17 +1127,17 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Hot Corner Action'),
- _('Disable or change behavior of the hot corner. Holding down the Ctrl key while hitting the hot corner switches between Overview/Applications actions'),
+ _('Disable or change behavior of the hot corner. Holding down the Ctrl key while hitting the hot corner switches between Overview/Applications actions. The "Search Windows" option requires the "WSP (Window Search Provider)" extension installed and enabled'),
itemFactory.newDropDown(),
'hotCornerAction',
[
[_('Disable'), 0],
[_('Follow Global Overview Mode'), 1],
- [_('Overview - Window Picker'), 2],
+ [_('Overview - Window Picker (Default)'), 2],
[_('Applications'), 3],
[_('Overview - Static WS Preview'), 4],
[_('Overview - Static Workspace'), 5],
- [_('Search Windows'), 6],
+ [_('Search Windows (requires WSP extension)'), 6],
],
'layoutModule'
)
@@ -1389,21 +1234,6 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('Search Windows Icon - Scroll Action'),
- _('Choose the behavior when scrolling over the Search Windows icon. The window cycler works with a list of windows sorted by "Most Recently Used" of the current workspace or all workspaces. Scrolling up cycles through previously used windows on the same workspace, or all windows regardless workspace. This option is mainly useful for the static workspace overview mode.'),
- itemFactory.newDropDown(),
- 'searchWindowsIconScroll',
- [
- [_('Default'), 0],
- [_('Cycle All Windows'), 1],
- [_('Cycle Windows On Current WS'), 2],
- ],
- 'dashModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
_('Workspace Thumbnails')
)
);
@@ -1489,128 +1319,21 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('App Grid')
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('App Grid Order'),
- _('Choose sorting method for the app grid. Note that sorting by usage ignores folders'),
- itemFactory.newDropDown(),
- 'appGridOrder',
- [
- [_('Custom (Default)'), 0],
- [_('Alphabet - Folders First'), 1],
- [_('Alphabet - Folders Last'), 2],
- [_('Usage - No Folders'), 3],
- ],
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('App Folder Order'),
- _('Choose sorting method for app folders'),
- itemFactory.newDropDown(),
- 'appFolderOrder',
- [
- [_('Custom (Default)'), 0],
- [_('Alphabet'), 1],
- [_('Usage'), 2],
- ],
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('App Grid Content'),
- _('The default Shell removes favorite apps, this option allows to duplicate them in the grid or remove also running applications. Option "Favorites and Running First" only works with the Alphabet and Usage sorting'),
- itemFactory.newDropDown(),
- 'appGridContent',
- [
- [_('Include All'), 0],
- [_('Include All - Favorites and Running First'), 1],
- [_('Exclude Favorites (Default)'), 2],
- [_('Exclude Running'), 3],
- [_('Exclude Favorites and Running'), 4],
- ],
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Active Icons in Folder Preview'),
- _('If enabled, icons in the folder review behaves like normal icons, you can activate or even drag them directly, without having to open the folder first'),
- itemFactory.newSwitch(),
- 'appGridActivePreview',
- null,
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Center Open Folders'),
- _('App folder may open in the center of the screen or above the source folder icon'),
- itemFactory.newSwitch(),
- 'appGridFolderCenter',
- null,
- 'appDisplayModule'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Allow Incomplete Pages'),
- _('If disabled, icons from the next page (if any) are automatically moved to fill any empty slot left after an icon was (re)moved (to a folder for example)'),
- itemFactory.newSwitch(),
- 'appGridIncompletePages',
- null,
- 'appDisplayModule'
+ _('Search')
)
);
optionList.push(
itemFactory.getRowWidget(
- _('App Labels Behavior'),
- _('Choose how and when to display app names'),
+ _('App Grid Search Mode'),
+ _('Select how the search should behave when initiated from the app grid view. The "Filtered App Grid View" option shows all resulting app icons sorted by usage in the app grid view instead of switching to the default search view'),
itemFactory.newDropDown(),
- 'appGridNamesMode',
+ 'searchAppGridMode',
[
- [_('Ellipsized - Expand Selected (Default)'), 0],
- [_('Always Expanded'), 1],
- [_('Hidden - Show Selected Only'), 2],
+ [_('Search View (Default)'), 0],
+ [_('Filtered App Grid View'), 1],
],
- 'appDisplayModule'
- )
- );
-
- optionList.push(itemFactory.getRowWidget(
- _('Reset App Grid Layout'),
- _('Removes all stored app grid positions, after reset icons will be sorted alphabetically, except folder contents'),
- itemFactory.newResetButton(() => {
- const settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
- settings.set_value('app-picker-layout', new GLib.Variant('aa{sv}', []));
- })
- ));
-
- optionList.push(itemFactory.getRowWidget(
- _('Remove App Grid Folders'),
- _('Removes all folders, folder apps will move to the root grid'),
- itemFactory.newResetButton(() => {
- const settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
- settings.set_strv('folder-children', []);
- })
- ));
-
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Search')
+ 'searchModule'
)
);
@@ -1625,7 +1348,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('Animations - General')
+ _('Animations')
)
);
@@ -1641,7 +1364,7 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
_('Animation Speed'),
- _('Adjusts the global animation speed in % of the default duration - higher value means slower animation'),
+ _('Adjusts the global animation speed in percentage of the default duration - higher value means slower animation'),
animationSpeedScale,
'animationSpeedFactor'
)
@@ -1649,12 +1372,6 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
- _('Animations - Overview')
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
_('App Grid Animation'),
_('When entering the App Grid view, the app grid animates from the edge of the screen. You can choose the direction, keep the Default (direction will be selected automatically) or disable the animation if you don\'t like it'),
itemFactory.newDropDown(),
@@ -1807,13 +1524,413 @@ export default class VShell extends ExtensionPreferences {
return optionList;
}
+ // -----------------------------------------------------------------------------------------------------------------
+
+ _getAppGridOptionList(itemFactory) {
+ const optionList = [];
+ // options item format:
+ // (text, caption, widget, settings-variable, [options for combo], sensitivity-depends-on-bool-variable)
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Main App Grid')
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Apps Sorting'),
+ _('Choose sorting method for the app grid. Note that sorting by usage ignores folders'),
+ itemFactory.newDropDown(),
+ 'appGridOrder',
+ [
+ [_('Custom (Default)'), 0],
+ [_('Alphabet'), 4],
+ [_('Alphabet - Folders First'), 1],
+ [_('Alphabet - Folders Last'), 2],
+ [_('Usage - No Folders'), 3],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Icon Size'),
+ _('Allows to set a fixed app grid icon size and bypass the default adaptive algorithm'),
+ itemFactory.newDropDown(),
+ 'appGridIconSize',
+ [
+ [_('Adaptive (Default)'), -1],
+ [_('256'), 256],
+ [_('224'), 224],
+ [_('208'), 208],
+ [_('192'), 192],
+ [_('176'), 176],
+ [_('160'), 160],
+ [_('144'), 144],
+ [_('128'), 128],
+ [_('112'), 112],
+ [_('96'), 96],
+ [_('80'), 80],
+ [_('64'), 64],
+ [_('48'), 48],
+ // [_('32'), 32],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ const columnsAdjustment = new Gtk.Adjustment({
+ upper: 15,
+ lower: 0,
+ step_increment: 1,
+ page_increment: 1,
+ });
+
+ const columnsSpinBtn = itemFactory.newSpinButton(columnsAdjustment);
+ optionList.push(itemFactory.getRowWidget(
+ _('Columns per Page (0 for adaptive grid)'),
+ _('Number of columns in the application grid. If set to 0, the number will be set automatically to fit the available width'),
+ columnsSpinBtn,
+ 'appGridColumns',
+ null,
+ 'appDisplayModule'
+ ));
+
+ const rowsAdjustment = new Gtk.Adjustment({
+ upper: 15,
+ lower: 0,
+ step_increment: 1,
+ page_increment: 1,
+ });
+
+ const rowsSpinBtn = itemFactory.newSpinButton(rowsAdjustment);
+ optionList.push(itemFactory.getRowWidget(
+ _('Rows per Page (0 for adaptive grid)'),
+ _('Number of rows in the application grid. If set to 0, the number will be set automatically to fit the available height'),
+ rowsSpinBtn,
+ 'appGridRows',
+ null,
+ 'appDisplayModule'
+ ));
+
+ const folderColumnsAdjustment = new Gtk.Adjustment({
+ upper: 15,
+ lower: 0,
+ step_increment: 1,
+ page_increment: 1,
+ });
+
+ const agPageAdjustment = new Gtk.Adjustment({
+ upper: 100,
+ lower: 50,
+ step_increment: 1,
+ page_increment: 10,
+ });
+
+ const agPageWidthScale = itemFactory.newScale(agPageAdjustment);
+ agPageWidthScale.add_mark(60, Gtk.PositionType.TOP, null);
+ agPageWidthScale.add_mark(70, Gtk.PositionType.TOP, null);
+ agPageWidthScale.add_mark(80, Gtk.PositionType.TOP, null);
+ agPageWidthScale.add_mark(90, Gtk.PositionType.TOP, null);
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Grid Page Width Scale'),
+ _('Adjusts maximum app grid page width relative to the available space'),
+ agPageWidthScale,
+ 'appGridPageWidthScale',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ const aghPageAdjustment = new Gtk.Adjustment({
+ upper: 100,
+ lower: 50,
+ step_increment: 1,
+ page_increment: 10,
+ });
+
+ const agPageHeightScale = itemFactory.newScale(aghPageAdjustment);
+ agPageHeightScale.add_mark(60, Gtk.PositionType.TOP, null);
+ agPageHeightScale.add_mark(70, Gtk.PositionType.TOP, null);
+ agPageHeightScale.add_mark(80, Gtk.PositionType.TOP, null);
+ agPageHeightScale.add_mark(90, Gtk.PositionType.TOP, null);
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Grid Page Height Scale'),
+ _('Adjusts maximum app grid page height relative to the available space'),
+ agPageHeightScale,
+ 'appGridPageHeightScale',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ const appGridSpacingAdjustment = new Gtk.Adjustment({
+ upper: 30,
+ lower: 5,
+ step_increment: 1,
+ page_increment: 5,
+ });
+
+ const appGridSpacingScale = itemFactory.newScale(appGridSpacingAdjustment);
+ appGridSpacingScale.add_mark(12, Gtk.PositionType.TOP, null);
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Grid Spacing'),
+ _('V-Shell uses this value to calculate grid dimensions for adaptive options. However, the main grid automatically adjusts the spacing based on the grid and available space'),
+ appGridSpacingScale,
+ 'appGridSpacing',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Allow Incomplete Pages'),
+ _('If disabled, icons from the next page (if any) are automatically moved to fill any empty slot left after an icon was (re)moved (to a folder for example)'),
+ itemFactory.newSwitch(),
+ 'appGridIncompletePages',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ // --------------------------------------------------------------------------------------
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Folders')
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Folder Apps Sorting'),
+ _('Choose sorting method for app folders'),
+ itemFactory.newDropDown(),
+ 'appFolderOrder',
+ [
+ [_('Custom (Default)'), 0],
+ [_('Alphabet'), 1],
+ [_('Usage'), 2],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Active Icons in Folder Preview'),
+ _('If enabled, icons in the folder preview behaves like normal icons, you can activate or even drag them directly, without having to open the folder first. This option also affects the app grid default icon size'),
+ itemFactory.newSwitch(),
+ 'appGridActivePreview',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ const folderIconGridCombo = itemFactory.newDropDown();
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Folder Preview Grid Size'),
+ _('Sets a grid size (number of icons) in the folder icon preview. 3x3 options automatically switches between 2x2 and 3x3 grid depending on the number of icons in the folder'),
+ folderIconGridCombo,
+ 'appGridFolderIconGrid',
+ [
+ [_('2x2 (Default)'), 2],
+ [_('3x3 for 5+ apps'), 3],
+ [_('3x3 for 9+ apps'), 4],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Folder Icon Size'),
+ _('Allows to set a fixed icon size and bypass the default adaptive algorithm in the open folder dialog'),
+ itemFactory.newDropDown(),
+ 'appGridFolderIconSize',
+ [
+ [_('Adaptive (Default)'), -1],
+ [_('128'), 128],
+ [_('112'), 112],
+ [_('96'), 96],
+ [_('80'), 80],
+ [_('64'), 64],
+ [_('48'), 48],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ const folderColumnsSpinBtn = itemFactory.newSpinButton(folderColumnsAdjustment);
+ optionList.push(itemFactory.getRowWidget(
+ _('Maximum Number Of Columns (0 for automatic)'),
+ _('Specifies the maximum number of columns per page in folder grids. If you leave the value at 0, the maximum number of columns will be calculated based on available space. The actual folder grid dimensions will be determined by the number of items within the set limits'),
+ folderColumnsSpinBtn,
+ 'appGridFolderColumns',
+ null,
+ 'appDisplayModule'
+ ));
+
+ const folderRowsAdjustment = new Gtk.Adjustment({
+ upper: 15,
+ lower: 0,
+ step_increment: 1,
+ page_increment: 1,
+ });
+
+ const folderRowsSpinBtn = itemFactory.newSpinButton(folderRowsAdjustment);
+ optionList.push(itemFactory.getRowWidget(
+ _('Maximum Number Of Rows (0 for automatic)'),
+ _('Specifies the maximum number of rows per page in folder grids. If you leave the value at 0, the maximum number of rows will be calculated based on available space. The actual folder grid dimensions will be determined by the number of items within the set limits'),
+ folderRowsSpinBtn,
+ 'appGridFolderRows',
+ null,
+ 'appDisplayModule'
+ ));
+
+ const appFolderSpacingAdjustment = new Gtk.Adjustment({
+ upper: 30,
+ lower: 5,
+ step_increment: 1,
+ page_increment: 5,
+ });
+
+ const appFolderSpacingScale = itemFactory.newScale(appFolderSpacingAdjustment);
+ appFolderSpacingScale.add_mark(12, Gtk.PositionType.TOP, null);
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Folder Grid Spacing'),
+ _('Adjusts the spacing between icons in a folder grid'),
+ appFolderSpacingScale,
+ 'appGridFolderSpacing',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Center Open Folders'),
+ _("App folders may open in the center of the screen or be centered on the folder's source icon"),
+ itemFactory.newSwitch(),
+ 'appGridFolderCenter',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+ // --------------------------------------------------------------------------------------
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Content')
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Grid Content'),
+ _('The default Shell removes favorite apps, this option allows to duplicate them in the grid or remove also running applications. Option "Favorites and Running First" only works with the Alphabet and Usage sorting'),
+ itemFactory.newDropDown(),
+ 'appGridContent',
+ [
+ [_('Include All'), 0],
+ [_('Include All - Favorites and Running First'), 1],
+ [_('Exclude Favorites (Default)'), 2],
+ [_('Exclude Running'), 3],
+ [_('Exclude Favorites and Running'), 4],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('App Labels Behavior'),
+ _('Choose how and when to display app names'),
+ itemFactory.newDropDown(),
+ 'appGridNamesMode',
+ [
+ [_('Ellipsized - Expand Selected (Default)'), 0],
+ [_('Always Expanded'), 1],
+ [_('Hidden - Show Selected Only'), 2],
+ ],
+ 'appDisplayModule'
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Show Page Navigation Buttons'),
+ _("You can hide the page navigation buttons if you don't need them or want to get more space for icons. The buttons are hidden automatically when there is only one page in the app grid"),
+ itemFactory.newSwitch(),
+ 'appGridShowPageArrows',
+ null,
+ 'appDisplayModule'
+ )
+ );
+
+
+ // --------------------------------------------------------------------------------------
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Performance')
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Smooth App Grid Animations'),
+ _('This option allows V-Shell to pre-realize app grid and app folders during session startup in order to avoid stuttering animations when using them for the first time. If enabled, the session startup needs a little bit more time to finish and necessary memory will be allocated at this time'),
+ itemFactory.newSwitch(),
+ 'appGridPerformance'
+ )
+ );
+
+ // --------------------------------------------------------------------------------------
+
+ optionList.push(
+ itemFactory.getRowWidget(
+ _('Reset')
+ )
+ );
+
+ optionList.push(itemFactory.getRowWidget(
+ _('Reset App Grid Layout'),
+ _('Removes all stored app grid positions, after reset icons will be sorted alphabetically, except folder contents'),
+ itemFactory.newResetButton(() => {
+ const settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
+ settings.set_value('app-picker-layout', new GLib.Variant('aa{sv}', []));
+ })
+ ));
+
+ optionList.push(itemFactory.getRowWidget(
+ _('Remove App Grid Folders'),
+ _('Removes all folders, folder apps will move to the root grid'),
+ itemFactory.newResetButton(() => {
+ const settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
+ settings.set_strv('folder-children', []);
+ })
+ ));
+
+ return optionList;
+ }
+
_getModulesOptionList(itemFactory) {
const optionList = [];
// options item format:
// (text, caption, widget, settings-variable, [options for combo], sensitivity-depends-on-bool-variable)
optionList.push(
itemFactory.getRowWidget(
- _('V-Shell Modules (allows you to disable modules that conflict with another extension)')
+ _('Optional Modules')
)
);
@@ -1843,6 +1960,12 @@ export default class VShell extends ExtensionPreferences {
optionList.push(
itemFactory.getRowWidget(
+ _('Built-in Modules (allows to disable modules that conflict with another extension)')
+ )
+ );
+
+ optionList.push(
+ itemFactory.getRowWidget(
_('AppDisplay / IconGrid'),
_('App grid customization and options'),
itemFactory.newSwitch(),
@@ -2017,39 +2140,18 @@ export default class VShell extends ExtensionPreferences {
)
);
- /* optionList.push(
- itemFactory.getRowWidget(
- _('Compatibility')
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Improve compatibility with Dash to Dock'),
- _('With the default Ubuntu Dock and other Dash To Dock forks, you may experience issues with Activities overview after you change Dock position or re-enable the extension. This option is enabled automatically if a replacement for the Dash is detected. In any case, using Dash to Dock extension with V-Shell is problematic and not recommended.'),
- itemFactory.newSwitch(),
- 'fixUbuntuDock'
- )
- );*/
-
optionList.push(
itemFactory.getRowWidget(
- _('Performance')
+ _('Workarounds / Hacks')
)
);
optionList.push(
itemFactory.getRowWidget(
- _('Smooth App Grid Animations'),
- _('This option allows V-Shell to pre-realize app grid and app folders during session startup in order to avoid stuttering animations when using them for the first time. If enabled, the session startup needs a little bit more time to finish and necessary memory will be allocated at this time'),
+ _('Delay at Startup'),
+ _("If you encounter issues during GNOME Shell startup after logging in, which could be caused by V-Shell's incompatibility with another extension, try enabling this option. When enabled, V-Shell is activated after the startup is complete. It will activate automatically when Dash to Dock, Ubuntu Dock or Dash to Panel extensions are detected."),
itemFactory.newSwitch(),
- 'appGridPerformance'
- )
- );
-
- optionList.push(
- itemFactory.getRowWidget(
- _('Workarounds')
+ 'delayStartup'
)
);
@@ -2074,6 +2176,8 @@ export default class VShell extends ExtensionPreferences {
return optionList;
}
+ // --------------------------------------------------------------------------------------------------
+
_getAboutOptionList(itemFactory) {
const optionList = [];
diff --git a/extensions/46/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml b/extensions/47/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml
index ff1e205..c2c52fa 100644
--- a/extensions/46/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml
+++ b/extensions/47/vertical-workspaces/schemas/org.gnome.shell.extensions.vertical-workspaces.gschema.xml
@@ -14,10 +14,10 @@
<default>350</default>
</key>
<key type="i" name="ws-preview-scale">
- <default>100</default>
+ <default>95</default>
</key>
<key type="i" name="secondary-ws-preview-scale">
- <default>100</default>
+ <default>95</default>
</key>
<key type="b" name="secondary-ws-preview-shift">
<default>false</default>
@@ -77,7 +77,7 @@
<default>13</default>
</key>
<key type="i" name="dash-max-icon-size">
- <default>48</default>
+ <default>0</default>
</key>
<key type="i" name="dash-bg-opacity">
<default>20</default>
@@ -89,7 +89,7 @@
<default>18</default>
</key>
<key type="b" name="dash-bg-gs3-style">
- <default>true</default>
+ <default>false</default>
</key>
<key type="i" name="running-dot-style">
<default>1</default>
@@ -155,10 +155,10 @@
<default>0</default>
</key>
<key type="i" name="search-icon-size">
- <default>96</default>
+ <default>0</default>
</key>
<key type="i" name="search-width-scale">
- <default>104</default>
+ <default>100</default>
</key>
<key type="i" name="app-grid-icon-size">
<default>-1</default>
@@ -190,8 +190,11 @@
<key type="i" name="app-grid-spacing">
<default>12</default>
</key>
+ <key type="i" name="app-grid-folder-spacing">
+ <default>12</default>
+ </key>
<key type="b" name="app-grid-incomplete-pages">
- <default>true</default>
+ <default>false</default>
</key>
<key type="i" name="app-grid-names">
<default>1</default>
@@ -208,6 +211,12 @@
<key type="i" name="app-grid-page-width-scale">
<default>90</default>
</key>
+ <key type="i" name="app-grid-page-height-scale">
+ <default>90</default>
+ </key>
+ <key type="b" name="app-grid-show-page-arrows">
+ <default>true</default>
+ </key>
<key type="i" name="dash-show-windows-before-activation">
<default>1</default>
</key>
@@ -232,6 +241,9 @@
<key type="i" name="search-max-results-rows">
<default>5</default>
</key>
+ <key type="i" name="search-app-grid-mode">
+ <default>0</default>
+ </key>
<key type="i" name="panel-visibility">
<default>0</default>
</key>
@@ -301,6 +313,9 @@
<key type="i" name="overview-esc-behavior">
<default>0</default>
</key>
+ <key type="b" name="click-empty-close">
+ <default>false</default>
+ </key>
<key type="b" name="new-window-focus-fix">
<default>false</default>
</key>
@@ -308,11 +323,14 @@
<default>false</default>
</key>
<key type="b" name="app-grid-performance">
- <default>true</default>
+ <default>false</default>
</key>
<key name='highlighting-style' type='i'>
<default>1</default>
</key>
+ <key type="b" name="delay-startup">
+ <default>false</default>
+ </key>
<key type="b" name="workspace-switcher-popup-module">
<default>true</default>
@@ -381,7 +399,7 @@
'workspaceThumbnailsPosition': '1',
'wsMaxSpacing': '350',
'wsPreviewScale': '95',
- 'secWsPreviewScale': '100',
+ 'secWsPreviewScale': '95',
'secWsPreviewShift': 'false',
'wsThumbnailsFull': 'false',
'secWsThumbnailsPosition': '2',
@@ -392,7 +410,7 @@
'showWsTmbLabelsOnHover': 'false',
'closeWsButtonMode': '2',
'secWsTmbPositionAdjust': '-80',
- 'dashMaxIconSize': '64',
+ 'dashMaxIconSize': '0',
'centerDashToWs': 'false',
'showAppsIconPosition': '1',
'wsThumbnailScale': '13',
@@ -406,7 +424,6 @@
'dashBgRadius': '0',
'dashBgGS3Style': 'true',
'runningDotStyle': '1',
- 'enablePageShortcuts': 'false',
'showWsSwitcherBg': 'true',
'showWsPreviewBg': 'false',
'wsPreviewBgRadius': '30',
@@ -426,8 +443,8 @@
'overviewMode': '0',
'wsSwitcherMode': '0',
'workspaceSwitcherAnimation': '1',
- 'searchIconSize': '96',
- 'searchViewScale': '104',
+ 'searchIconSize': '0',
+ 'searchViewScale': '100',
'appGridIconSize': '-1',
'appGridColumns': '0',
'appGridRows': '0',
@@ -442,11 +459,15 @@
'appGridNamesMode': '1',
'appGridActivePreview': 'false',
'appGridFolderCenter': 'false',
- 'appGridPageWidthScale': '100',
+ 'appGridPageWidthScale': '90',
+ 'appGridPageHeightScale': '90',
'appGridSpacing': '12',
+ 'appGridFolderSpacing': '12',
+ 'appGridShowPageArrows': 'false',
'searchWindowsOrder': '1',
'searchFuzzy': 'false',
'searchMaxResultsRows': '5',
+ 'searchAppGridMode': '0',
'dashShowWindowsBeforeActivation': '1',
'dashIconScroll': '1',
'dashIsolateWorkspaces': 'false',
@@ -476,7 +497,6 @@
'overviewEscBehavior': '0',
'newWindowFocusFix': 'false',
'newWindowMonitorFix': '0',
- 'appGridPerformance': 'true',
'highlightingStyle': '1',
'workspaceSwitcherPopupModule': 'true',
@@ -506,8 +526,8 @@
<default>{
'workspaceThumbnailsPosition': '5',
'wsMaxSpacing': '80',
- 'wsPreviewScale': '100',
- 'secWsPreviewScale': '100',
+ 'wsPreviewScale': '95',
+ 'secWsPreviewScale': '95',
'secWsPreviewShift': 'false',
'wsThumbnailsFull': 'false',
'secWsThumbnailsPosition': '2',
@@ -518,7 +538,7 @@
'showWsTmbLabelsOnHover': 'false',
'closeWsButtonMode': '2',
'secWsTmbPositionAdjust': '0',
- 'dashMaxIconSize': '64',
+ 'dashMaxIconSize': '0',
'centerDashToWs': 'false',
'showAppsIconPosition': '1',
'wsThumbnailScale': '5',
@@ -532,7 +552,6 @@
'dashBgRadius': '0',
'dashBgGS3Style': 'false',
'runningDotStyle': '1',
- 'enablePageShortcuts': 'true',
'showWsSwitcherBg': 'false',
'showWsPreviewBg': 'true',
'wsPreviewBgRadius': '30',
@@ -552,8 +571,8 @@
'overviewMode': '0',
'wsSwitcherMode': '0',
'workspaceSwitcherAnimation': '0',
- 'searchIconSize': '96',
- 'searchViewScale': '104',
+ 'searchIconSize': '0',
+ 'searchViewScale': '100',
'appGridIconSize': '-1',
'appGridColumns': '0',
'appGridRows': '0',
@@ -568,11 +587,15 @@
'appGridNamesMode': '1',
'appGridActivePreview': 'false',
'appGridFolderCenter': 'true',
- 'appGridPageWidthScale': '90',
+ 'appGridPageWidthScale': '80',
+ 'appGridPageHeightScale': '90',
'appGridSpacing': '12',
+ 'appGridFolderSpacing': '12',
+ 'appGridShowPageArrows': 'true',
'searchWindowsOrder': '1',
'searchFuzzy': 'false',
'searchMaxResultsRows': '5',
+ 'searchAppGridMode': '0',
'dashShowWindowsBeforeActivation': '1',
'dashIconScroll': '1',
'dashIsolateWorkspaces': 'false',
@@ -602,7 +625,6 @@
'overviewEscBehavior': '0',
'newWindowFocusFix': 'false',
'newWindowMonitorFix': '0',
- 'appGridPerformance': 'true',
'highlightingStyle': '1',
'workspaceSwitcherPopupModule': 'true',
@@ -633,7 +655,7 @@
'workspaceThumbnailsPosition': '0',
'wsMaxSpacing': '350',
'wsPreviewScale': '95',
- 'secWsPreviewScale': '100',
+ 'secWsPreviewScale': '95',
'secWsPreviewShift': 'false',
'wsThumbnailsFull': 'false',
'secWsThumbnailsPosition': '2',
@@ -643,8 +665,8 @@
'showWsTmbLabels': '3',
'showWsTmbLabelsOnHover': 'false',
'closeWsButtonMode': '2',
- 'secWsTmbPositionAdjust': '0',
- 'dashMaxIconSize': '48',
+ 'secWsTmbPositionAdjust': '-100',
+ 'dashMaxIconSize': '0',
'centerDashToWs': 'false',
'showAppsIconPosition': '0',
'wsThumbnailScale': '13',
@@ -658,7 +680,6 @@
'dashBgRadius': '0',
'dashBgGS3Style': 'false',
'runningDotStyle': '1',
- 'enablePageShortcuts': 'true',
'showWsSwitcherBg': 'false',
'showWsPreviewBg': 'true',
'wsPreviewBgRadius': '30',
@@ -678,8 +699,8 @@
'overviewMode': '1',
'wsSwitcherMode': '0',
'workspaceSwitcherAnimation': '1',
- 'searchIconSize': '96',
- 'searchViewScale': '104',
+ 'searchIconSize': '0',
+ 'searchViewScale': '100',
'appGridIconSize': '-1',
'appGridColumns': '0',
'appGridRows': '0',
@@ -687,7 +708,7 @@
'appGridFolderColumns': '0',
'appGridFolderRows': '0',
'appGridFolderIconGrid': '3',
- 'appGridContent': '0',
+ 'appGridContent': '2',
'appGridIncompletePages': 'false',
'appGridOrder': '0',
'appFolderOrder': '0',
@@ -695,10 +716,14 @@
'appGridActivePreview': 'true',
'appGridFolderCenter': 'false',
'appGridPageWidthScale': '90',
+ 'appGridPageHeightScale': '90',
'appGridSpacing': '12',
+ 'appGridFolderSpacing': '12',
+ 'appGridShowPageArrows': 'false',
'searchWindowsOrder': '1',
'searchFuzzy': 'false',
'searchMaxResultsRows': '5',
+ 'searchAppGridMode': '0',
'dashShowWindowsBeforeActivation': '1',
'dashIconScroll': '1',
'dashIsolateWorkspaces': 'false',
@@ -728,7 +753,6 @@
'overviewEscBehavior': '0',
'newWindowFocusFix': 'false',
'newWindowMonitorFix': '0',
- 'appGridPerformance': 'true',
'highlightingStyle': '1',
'workspaceSwitcherPopupModule': 'true',
@@ -759,7 +783,7 @@
'workspaceThumbnailsPosition': '6',
'wsMaxSpacing': '65',
'wsPreviewScale': '95',
- 'secWsPreviewScale': '100',
+ 'secWsPreviewScale': '95',
'secWsPreviewShift': 'false',
'wsThumbnailsFull': 'false',
'secWsThumbnailsPosition': '2',
@@ -770,7 +794,7 @@
'showWsTmbLabelsOnHover': 'false',
'closeWsButtonMode': '2',
'secWsTmbPositionAdjust': '0',
- 'dashMaxIconSize': '48',
+ 'dashMaxIconSize': '0',
'centerDashToWs': 'false',
'showAppsIconPosition': '1',
'wsThumbnailScale': '10',
@@ -784,7 +808,6 @@
'dashBgRadius': '0',
'dashBgGS3Style': 'false',
'runningDotStyle': '1',
- 'enablePageShortcuts': 'true',
'showWsSwitcherBg': 'true',
'showWsPreviewBg': 'true',
'wsPreviewBgRadius': '30',
@@ -804,8 +827,8 @@
'overviewMode': '2',
'wsSwitcherMode': '0',
'workspaceSwitcherAnimation': '1',
- 'searchIconSize': '96',
- 'searchViewScale': '104',
+ 'searchIconSize': '0',
+ 'searchViewScale': '100',
'appGridIconSize': '-1',
'appGridColumns': '0',
'appGridRows': '0',
@@ -813,18 +836,22 @@
'appGridFolderColumns': '0',
'appGridFolderRows': '0',
'appGridFolderIconGrid': '3',
- 'appGridContent': '0',
+ 'appGridContent': '2',
'appGridIncompletePages': 'false',
'appGridOrder': '0',
'appFolderOrder': '0',
'appGridNamesMode': '1',
'appGridActivePreview': 'true',
'appGridFolderCenter': 'false',
- 'appGridPageWidthScale': '90',
- 'appGridSpacing': '5',
+ 'appGridPageWidthScale': '80',
+ 'appGridPageHeightScale': '90',
+ 'appGridSpacing': '12',
+ 'appGridFolderSpacing': '12',
+ 'appGridShowPageArrows': 'true',
'searchWindowsOrder': '1',
'searchFuzzy': 'false',
'searchMaxResultsRows': '5',
+ 'searchAppGridMode': '0',
'dashShowWindowsBeforeActivation': '1',
'dashIconScroll': '1',
'dashIsolateWorkspaces': 'false',
@@ -854,7 +881,6 @@
'overviewEscBehavior': '0',
'newWindowFocusFix': 'false',
'newWindowMonitorFix': '0',
- 'appGridPerformance': 'true',
'highlightingStyle': '1',
'workspaceSwitcherPopupModule': 'true',
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot.jpg b/extensions/47/vertical-workspaces/screenshots/screenshot.jpg
index b10585e..b10585e 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot.jpg
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot.jpg
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot0.jpg b/extensions/47/vertical-workspaces/screenshots/screenshot0.jpg
index 866298b..866298b 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot0.jpg
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot0.jpg
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot0.png b/extensions/47/vertical-workspaces/screenshots/screenshot0.png
index b6af4b9..b6af4b9 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot0.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot0.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot1.png b/extensions/47/vertical-workspaces/screenshots/screenshot1.png
index a23c76f..a23c76f 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot1.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot1.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot2.png b/extensions/47/vertical-workspaces/screenshots/screenshot2.png
index 58b2887..58b2887 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot2.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot2.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot3.png b/extensions/47/vertical-workspaces/screenshots/screenshot3.png
index 3d8f48a..3d8f48a 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot3.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot3.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot4.png b/extensions/47/vertical-workspaces/screenshots/screenshot4.png
index e4e5f4f..e4e5f4f 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot4.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot4.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/screenshot5.png b/extensions/47/vertical-workspaces/screenshots/screenshot5.png
index e6ecb55..e6ecb55 100644
--- a/extensions/46/vertical-workspaces/screenshots/screenshot5.png
+++ b/extensions/47/vertical-workspaces/screenshots/screenshot5.png
Binary files differ
diff --git a/extensions/46/vertical-workspaces/screenshots/vertical-workspaces.gif b/extensions/47/vertical-workspaces/screenshots/vertical-workspaces.gif
index c97c653..c97c653 100644
--- a/extensions/46/vertical-workspaces/screenshots/vertical-workspaces.gif
+++ b/extensions/47/vertical-workspaces/screenshots/vertical-workspaces.gif
Binary files differ
diff --git a/extensions/46/vertical-workspaces/stylesheet.css b/extensions/47/vertical-workspaces/stylesheet.css
index ef3b0ce..9aa1a99 100644
--- a/extensions/46/vertical-workspaces/stylesheet.css
+++ b/extensions/47/vertical-workspaces/stylesheet.css
@@ -15,8 +15,8 @@
to cover the spacing between dash and the edge of the screen
so the icons will be selectable even at the edge
this spacing must be accounted for in overview allocate() */
- padding-right: 16px;
- padding-left: 16px;
+ padding-right: 24px;
+ padding-left: 24px;
/*spacing between icons*/
padding-top: 1px;
padding-bottom: 1px;
@@ -35,12 +35,11 @@
padding: 5px 0;
}
-#dash.vertical .app-well-app-running-dot,
-#dash.vertical .app-grid-running-dot {
+#dash.vertical .app-well-app-running-dot {
margin: 4px 0px;
}
-#dash.vertical .app-well-app-running-dot-custom {
+#dash.vertical .app-grid-running-dot-custom {
margin: 4px 0px;
width: 2px;
height: 16px;
@@ -65,14 +64,14 @@
}
#dash.vertical-gs3-left {
- margin-right: 6px;
+ margin-right: 12px;
margin-left: 0px;
padding: 0px;
}
#dash.vertical-gs3-right {
margin-right: 0px;
- margin-left: 6px;
+ margin-left: 12px;
padding: 0px;
}
@@ -94,11 +93,14 @@
border-color: rgba(150, 150, 150, 0.4);
}
-.app-well-app-running-dot-custom {
+.app-grid-running-dot-custom {
width: 16px;
height: 2px;
}
+.dash-label {
+ border-radius: 14px;
+}
/* add shadow to the app grid app label to be readable if it overlaps light icon below */
.overview-icon-with-label, .folder-name-label {
@@ -139,14 +141,32 @@
/* app grid page indicators */
.page-indicator-icon {
- margin: 10px 10px 10px 10px;
+ margin: 0px;
}
.page-indicator {
padding: 0px;
}
+.page-indicators {
+ spacing: 20px;
+ margin: 0;
+}
+
+.page-indicators-horizontal {
+ margin-top: 0px;
+ margin-bottom: 10px;
+}
+
+.page-indicators-vertical {
+ margin-left: 0px;
+ margin-right: 10px;
+}
+
.search-entry{
+ margin: 0;
+ margin-top: 12px;
+ margin-bottom: 6px;
background-color: rgba(200, 200, 200, 0.1);
color: white;
border-color: rgba(160, 160, 160, 0.4);
@@ -158,7 +178,7 @@
.search-entry:hover,
.search-entry:focus {
- background-color: rgba(200, 200, 200, 0.2);
+ background-color: rgba(200, 200, 200, 0.1);
}
.search-entry-om2 {
@@ -177,26 +197,26 @@
border-radius: 26px;
border: 1px, rgb(60, 60, 60);
padding-top: 15px;
-}
-
-.search-section-content-bg-om2 {
background-color: rgb(40, 40, 40);
}
-.search-section-content {
- background-color: rgba(200, 200, 200, 0.1);
-}
-
/* Reduce edge fading of search results scroll view */
.vfade { -st-vfade-offset: 34px; }
.hfade { -st-hfade-offset: 34px; }
+
+StButton#vhandle,
.search-section-content {
- background-color: rgba(200, 200, 200, 0.1);
+ background-color: rgba(200, 200, 200, 0.08);
+ border: solid 1px rgba(150, 150, 150, 0.3);
+}
+
+.search-section {
+ spacing: 12px;
}
/* "no results" / "searching..." text*/
.search-statustext, .search-statustext-om2 {
- background-color: rgba(200, 200, 200, 0.1);
+ background-color: rgba(200, 200, 200, 0.08);
color: white;
margin-top: 50px;
padding: 30px;
@@ -215,12 +235,9 @@
/* reduce spacing between app icons in search results */
.grid-search-results {
- spacing: 4px;
-}
-
-/* hide vertical scroll bar, it's distracting in the search results */
-StButton#vhandle {
- background-color: transparent;
+ spacing: 8px;
+ margin-left: 12px;
+ margin-right: 12px;
}
.show-apps-icon-horizontal-hide {
@@ -257,6 +274,20 @@ StButton#vhandle {
height: 18px;
}
+.prev-page-indicator {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: vertical;
+ border-radius: 0px 0px 30px 30px;
+}
+.next-page-indicator {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: vertical;
+ border-radius: 30px 30px 0px 0px;
+
+}
+
/* reduce size of hot corner ripples to half */
.ripple-box {
width: 26px;
@@ -268,84 +299,80 @@ StButton#vhandle {
margin-bottom: 8em; /* avoid overlap with dock extension */
}
-.app-folder-46,
-.app-folder-46 .overview-tile,
-.app-folder-46 .overview-icon,
-.app-folder-45 .overview-icon,
-.edit-folder-button,
-.folder-name-entry {
- background-color: rgba(200, 200, 200, 0.08);
-}
-
-.app-folder-dialog-vshell {
- background-color: rgba(200, 200, 200, 0.08);
+.app-folder-dialog-container {
+ padding: 18px;
}
.app-folder-dialog {
border-color: rgba(160, 160, 160, 0.3);
}
-.edit-folder-button:hover,
-.app-folder-46:hover,
-.app-folder-45:hover .overview-icon,
-.app-folder-45:focus .overview-icon {
- background-color: rgba(200, 200, 200, 0.15);
-}
-
-/* add missing spacing between buttons */
-.edit-folder-button-46 {
- margin-right: 6px;
+.folder-name-container {
+ spacing: 12px;
}
/* 46 changes the default bg color from transparent to the solid color blending with widget background */
- .search-provider-icon,
- .list-search-result,
- .overview-tile {
+#dash.dash-46 .show-apps,
+#dash.dash-46 .overview-tile,
+#dash.dash-46 .overview-icon,
+.app-folder-45 .overview-icon, /* 45 only */
+.app-folder-46 .overview-icon,
+.page-navigation-arrow,
+.search-provider-icon,
+.list-search-result,
+.grid-search-result,
+.overview-tile {
background-color: transparent;
}
/* Needed only for 46+, but doesn't hurt 45 */
- .search-provider-icon:hover,
- .search-provider-icon:focus,
- .search-provider-icon:selected,
- .list-search-result:hover,
- .list-search-result:focus,
- .list-search-result:selected,
- .overview-tile:hover,
- .overview-tile:focus,
- .overview-tile:selected,
- .overview-icon:hover,
- .overview-icon:focus,
- .overview-icon:selected {
- background-color: rgba(200, 200, 200, 0.15);
+#dash.dash-46 .overview-tile:hover .overview-icon,
+#dash.dash-46 .overview-tile:focus .overview-icon,
+#dash.dash-46 .overview-tile:selected .overview-icon,
+#dash.dash-46 .show-apps:hover .overview-icon,
+#dash.dash-46 .show-apps:focus .overview-icon,
+#dash.dash-46 .show-apps:selected .overview-icon,
+.edit-folder-button:hover,
+.page-navigation-arrow:hover,
+.search-provider-icon:hover,
+.search-provider-icon:focus,
+.search-provider-icon:selected,
+.list-search-result:hover,
+.list-search-result:focus,
+.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:focus,
+#searchResults .overview-tile:selected,
+.grid-search-result-46:hover,
+.grid-search-result-46:focus,
+.grid-search-result-46:selected,
+.app-folder-dialog .overview-tile:hover,
+.app-folder-dialog .overview-tile:focus,
+.app-folder-dialog .overview-tile:selected,
+.overview-icon:hover,
+.overview-icon:focus,
+.overview-icon:selected {
+ 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 */
+.app-folder-dialog,
+.edit-folder-button,
+.folder-name-entry,
.app-folder-46,
.app-folder-46 .overview-tile,
-.app-folder-45 .overview-icon, /* 45 only */
+.app-folder-45 .overview-icon,
.edit-folder-button,
.folder-name-entry {
background-color: rgba(200, 200, 200, 0.08);
}
-.app-folder-46 .overview-icon,
- #dash.dash-46 .overview-icon {
- background-color: transparent;
- }
-
- #dash.dash-46 .overview-tile,
- #dash.dash-46 .show-apps {
- background-color: transparent;
- }
-
- #dash.dash-46 .overview-tile:hover .overview-icon,
- #dash.dash-46 .overview-tile:focus .overview-icon,
- #dash.dash-46 .overview-tile:selected .overview-icon,
- #dash.dash-46 .show-apps:hover .overview-icon,
- #dash.dash-46 .show-apps:focus .overview-icon,
- #dash.dash-46 .show-apps:selected .overview-icon {
- background-color: rgba(200, 200, 200, 0.15);
- }
#dash.vertical-46 {
margin: 0px;
@@ -354,10 +381,12 @@ StButton#vhandle {
#dash.vertical-46-gs3-left {
margin-left: 0px;
+ margin-right: 12px;
}
#dash.vertical-46-gs3-right {
margin-right: 0px;
+ margin-left: 12px;
}
#dash.vertical-46 .overview-tile,
@@ -365,7 +394,7 @@ StButton#vhandle {
margin: 0px;
background-color: transparent;
/* this padding should keep the dash 6px from the screen edge */
- padding: 0, 18px;
+ padding: 0, 24px;
}
#dash.vertical-46 .dash-separator {
@@ -376,10 +405,16 @@ StButton#vhandle {
margin-bottom: 4px;
}
-#dash.vertical-46 .app-well-app-running-dot-custom {
+#dash.vertical-46 .app-grid-running-dot {
+ margin: 0px;
+ offset-y: 0;
+}
+
+#dash.vertical-46 .app-grid-running-dot-custom {
margin: 0px;
width: 2px;
height: 16px;
+ offset-y: 0;
}
#dash.vertical-46 .dash-background {
@@ -411,4 +446,4 @@ StButton#vhandle {
/* reverse padding */
.ws-switcher-vertical {
padding: 18px 12px
-} \ No newline at end of file
+}