From 860c56f83ed314c4994ab0c089466a552850b57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 03:36:08 +0200 Subject: [PATCH 001/101] window-list: Small stylesheet cleanup The light stylesheet duplicates some declarations, and the last occurrence matches what we already inherit from the dark stylesheet. Part-of: --- extensions/window-list/stylesheet-light.css | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index 375fd1bf..f9c51f8e 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -21,21 +21,11 @@ text-shadow: none; } - .bottom-panel .window-button > StWidget { - -st-natural-width: 18.7em; - max-width: 18.75em; - } - .window-button > StWidget { color: #000; background-color: transparent; } -.window-button > StWidget { - -st-natural-width: 18.75em; - max-width: 18.75em; -} - .window-button:hover > StWidget { background-color: st-darken(#eee,5%); } From d43abe0869c19e6902debd7c3f12b337cb7290b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 02:14:47 +0200 Subject: [PATCH 002/101] window-list: Don't recreate icons on theme changes All icons use `StIcon`, which already updates itself correctly on icon theme changes. Part-of: --- extensions/window-list/extension.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 3edbf8bf..9441fad1 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -125,10 +125,6 @@ class WindowTitle extends St.BoxLayout { this.label_actor.clutter_text.single_line_mode = true; this.add_child(this.label_actor); - this._textureCache = St.TextureCache.get_default(); - this._textureCache.connectObject('icon-theme-changed', - () => this._updateIcon(), this); - this._metaWindow.connectObject( 'notify::wm-class', () => this._updateIcon(), GObject.ConnectFlags.AFTER, @@ -591,11 +587,6 @@ class AppButton extends BaseButton { this._appContextMenu.actor.hide(); Main.uiGroup.add_child(this._appContextMenu.actor); - this._textureCache = St.TextureCache.get_default(); - this._textureCache.connectObject('icon-theme-changed', () => { - this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); - }, this); - this.app.connectObject('windows-changed', () => this._windowsChanged(), this); this._windowsChanged(); From 3830985fa9355fee993d4b08f081bd0d835b4345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 02:23:41 +0200 Subject: [PATCH 003/101] window-list: Split out AppTitle class Even though it's just a box with icon and label, it's cleaner to have a dedicated class. Part-of: --- extensions/window-list/extension.js | 47 ++++++++++++++++++----------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 9441fad1..a5bb55f6 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -166,6 +166,35 @@ class WindowTitle extends St.BoxLayout { } } +class AppTitle extends St.BoxLayout { + static { + GObject.registerClass(this); + } + + constructor(app) { + super({ + style_class: 'window-button-box', + x_expand: true, + y_expand: true, + }); + + this._app = app; + + const icon = new St.Bin({ + style_class: 'window-button-icon', + child: app.create_icon_texture(ICON_TEXTURE_SIZE), + }); + this.add_child(icon); + + let label = new St.Label({ + text: app.get_name(), + y_align: Clutter.ActorAlign.CENTER, + }); + this.add_child(label); + this.label_actor = label; + } +} + class BaseButton extends DashItemContainer { static { GObject.registerClass({ @@ -553,25 +582,9 @@ class AppButton extends BaseButton { }); stack.add_child(this._singleWindowTitle); - this._multiWindowTitle = new St.BoxLayout({ - style_class: 'window-button-box', - x_expand: true, - }); + this._multiWindowTitle = new AppTitle(app); stack.add_child(this._multiWindowTitle); - this._icon = new St.Bin({ - style_class: 'window-button-icon', - child: app.create_icon_texture(ICON_TEXTURE_SIZE), - }); - this._multiWindowTitle.add_child(this._icon); - - let label = new St.Label({ - text: app.get_name(), - y_align: Clutter.ActorAlign.CENTER, - }); - this._multiWindowTitle.add_child(label); - this._multiWindowTitle.label_actor = label; - this._menuManager = new PopupMenu.PopupMenuManager(this); this._menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.BOTTOM); this._menu.connect('open-state-changed', From 9d7d52c1dec38a0e78f7db18d15cca63134599b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 02:55:14 +0200 Subject: [PATCH 004/101] window-list: Simplify app button Depending on the number of windows, the button either shows the title of the lone window, or the app title for multiple windows. While we always recreate the single-window title, we only create the app title once and hide it as necessary. Avoiding re-creating a simple actor 50% of mode transitions isn't worth the additional complexity, so just handle both single- and multi-window titles the same way. Part-of: --- extensions/window-list/extension.js | 69 ++++++++++------------------- 1 file changed, 24 insertions(+), 45 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index a5bb55f6..9b9ea7b9 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -574,17 +574,6 @@ class AppButton extends BaseButton { this.app = app; this._updateVisibility(); - let stack = new St.Widget({layout_manager: new Clutter.BinLayout()}); - this._button.set_child(stack); - - this._singleWindowTitle = new St.Bin({ - x_expand: true, - }); - stack.add_child(this._singleWindowTitle); - - this._multiWindowTitle = new AppTitle(app); - stack.add_child(this._multiWindowTitle); - this._menuManager = new PopupMenu.PopupMenuManager(this); this._menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.BOTTOM); this._menu.connect('open-state-changed', @@ -594,12 +583,6 @@ class AppButton extends BaseButton { this._menuManager.addMenu(this._menu); Main.uiGroup.add_child(this._menu.actor); - this._appContextMenu = new AppContextMenu(this); - this._appContextMenu.connect('open-state-changed', - this._onMenuStateChanged.bind(this)); - this._appContextMenu.actor.hide(); - Main.uiGroup.add_child(this._appContextMenu.actor); - this.app.connectObject('windows-changed', () => this._windowsChanged(), this); this._windowsChanged(); @@ -646,37 +629,33 @@ class AppButton extends BaseButton { } _windowsChanged() { - let windows = this.getWindowList(); - this._singleWindowTitle.visible = windows.length === 1; - this._multiWindowTitle.visible = !this._singleWindowTitle.visible; + const windows = this.getWindowList(); + const singleWindowMode = windows.length === 1; - if (this._singleWindowTitle.visible) { - if (!this._windowTitle) { - this.metaWindow = windows[0]; - this._windowTitle = new WindowTitle(this.metaWindow); - this._singleWindowTitle.child = this._windowTitle; - this._windowContextMenu = new WindowContextMenu(this, this.metaWindow); - this._windowContextMenu.connect( - 'open-state-changed', this._onMenuStateChanged.bind(this)); - Main.uiGroup.add_child(this._windowContextMenu.actor); - this._windowContextMenu.actor.hide(); - this._contextMenuManager.addMenu(this._windowContextMenu); - } - this._contextMenuManager.removeMenu(this._appContextMenu); - this._contextMenu = this._windowContextMenu; - this.label_actor = this._windowTitle.label_actor; + if (this._singleWindowMode === singleWindowMode) + return; + + this._singleWindowMode = singleWindowMode; + + this._button.child?.destroy(); + this._contextMenu?.destroy(); + + if (this._singleWindowMode) { + const [window] = windows; + this._button.child = new WindowTitle(window); + this._contextMenu = new WindowContextMenu(this, window); } else { - if (this._windowTitle) { - this.metaWindow = null; - this._singleWindowTitle.child = null; - this._windowTitle = null; - this._windowContextMenu.destroy(); - this._windowContextMenu = null; - } - this._contextMenu = this._appContextMenu; - this._contextMenuManager.addMenu(this._appContextMenu); - this.label_actor = this._multiWindowTitle.label_actor; + this._button.child = new AppTitle(this.app); + this._contextMenu = new AppContextMenu(this); } + + this.label_actor = this._button.child.label_actor; + + this._contextMenu.connect( + 'open-state-changed', this._onMenuStateChanged.bind(this)); + Main.uiGroup.add_child(this._contextMenu.actor); + this._contextMenu.actor.hide(); + this._contextMenuManager.addMenu(this._contextMenu); } _onClicked(actor, button) { From 81aade66592fbb14a05bfefd8b71cc6f9a9f9261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 28 Sep 2024 04:54:18 +0200 Subject: [PATCH 005/101] classic: Add missing top bar indicators The only intended difference from the regular session is that the date menu moves to the right. However in the meantime, gnome-shell added a couple more (usually hidden) indicators, but we never updated the session mode definition. Part-of: --- data/classic.json.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/classic.json.in b/data/classic.json.in index ef003e36..cbafdba2 100644 --- a/data/classic.json.in +++ b/data/classic.json.in @@ -5,6 +5,6 @@ "enabledExtensions": [@CLASSIC_EXTENSIONS@], "panel": { "left": ["activities"], "center": [], - "right": ["a11y", "keyboard", "dateMenu", "quickSettings"] + "right": ["screenRecording", "screenSharing", "dwellClick", "a11y", "keyboard", "dateMenu", "quickSettings"] } } From b14f0403867e630f139a3a4f96755570d31ac7f2 Mon Sep 17 00:00:00 2001 From: Fabio Tomat Date: Mon, 7 Oct 2024 15:05:58 +0000 Subject: [PATCH 006/101] Update Friulian translation --- po/fur.po | 119 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/po/fur.po b/po/fur.po index f4ca1ace..2981645b 100644 --- a/po/fur.po +++ b/po/fur.po @@ -6,16 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" -"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" -"issues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-04-16 21:02+0200\n" -"Last-Translator: Fabio Tomat \n" -"Language-Team: Friulian \n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n" +"POT-Creation-Date: 2024-04-29 15:27+0000\n" +"PO-Revision-Date: 2024-10-07 15:05+0000\n" +"Last-Translator: Fabio T. \n" +"Language-Team: Friulian \n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Editor: HaiPO 2.0 beta\n" "X-Generator: Poedit 3.4.2\n" #: data/gnome-classic.desktop.in:3 @@ -39,7 +39,7 @@ msgstr "GNOME Classic su Xorg" msgid "Favorites" msgstr "Preferîts" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Aplicazions" @@ -52,8 +52,8 @@ msgid "" "A list of strings, each containing an application id (desktop file name), " "followed by a colon and the workspace number" msgstr "" -"Une liste di stringhis, ogniune e ten il ID di une aplicazion (non dal file ." -"desktop), cun daûr doi ponts e il numar dal spazi di lavôr" +"Une liste di stringhis, ogniune e ten il ID di une aplicazion (non dal file " +".desktop), cun daûr doi ponts e il numar dal spazi di lavôr" #: extensions/auto-move-windows/prefs.js:159 msgid "Workspace Rules" @@ -89,8 +89,8 @@ msgid "" "This setting applies only with the natural placement strategy." msgstr "" "Cîr di doprâ plui schermi par plaçâ lis miniaturis dai barcons, adatant il " -"rapuart di aspiet dal visôr e consolidant ancjemo di plui lis miniaturis par " -"ridusi il spazi complessîf. Cheste impostazion si apliche dome se " +"rapuart di aspiet dal visôr e consolidant ancjemo di plui lis miniaturis par" +" ridusi il spazi complessîf. Cheste impostazion si apliche dome se " "l'algoritmi di plaçament al è naturâl." #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 @@ -155,43 +155,43 @@ msgstr "Statistichis memorie" msgid "Swap stats" msgstr "Statistichis memorie di scambi" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Statistichis cjariament in rêt" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "Statistichis discjariaments" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Statistichis di sisteme" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Mostre" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "CPU" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Memorie" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Memorie di scambi" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Cjariaments in rêt" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "Discjariaments" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "Vierç monitor di sisteme" @@ -223,47 +223,47 @@ msgstr "Non dal teme" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Il non dal teme, che si cjame da ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:72 msgid "Close" msgstr "Siere" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Unminimize" msgstr "Gjave minimizazion" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:99 msgid "Minimize" msgstr "Minimize" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Unmaximize" msgstr "Gjave massimizazion" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:106 msgid "Maximize" msgstr "Massimize" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:471 msgid "Minimize all" msgstr "Minimize ducj" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:477 msgid "Unminimize all" msgstr "Gjave a ducj la minimizazion" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:483 msgid "Maximize all" msgstr "Massimize ducj" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:491 msgid "Unmaximize all" msgstr "Gjave a ducj la massimizazion" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:499 msgid "Close all" msgstr "Siere ducj" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:778 msgid "Window List" msgstr "Liste barcons" @@ -301,6 +301,10 @@ msgstr "" "Indiche se mostrâ la liste dai barcons su ducj i visôrs tacâts o nome sul " "chel principâl." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Mostre lis anteprimis dai spazis di lavôr te liste dai barcons" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Intropament di barcons" @@ -321,24 +325,35 @@ msgstr "Met simpri in grup i barcons" msgid "Show on all monitors" msgstr "Mostre su ducj i visôrs" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Indicadôr spazi di lavôr" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Mostre anteprimis dai spazis di lavôr" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Mostre anteprimis te sbare superiôr" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "Spazi di lavôr %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Nons dai spazis di lavôr" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Zonte spazi di lavôr" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Mostre anteprimis dai spazis di lavôr te sbare superiôr" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Indicadôr spazi di lavôr" + #~ msgid "Applications" #~ msgstr "Aplicazions" @@ -367,24 +382,24 @@ msgstr "Zonte spazi di lavôr" #~ msgstr "Disposizion dai botons te sbare dal titul" #~ msgid "" -#~ "This key overrides the key in org.gnome.desktop.wm.preferences when " -#~ "running GNOME Shell." +#~ "This key overrides the key in org.gnome.desktop.wm.preferences when running " +#~ "GNOME Shell." #~ msgstr "" -#~ "Cheste clâf a sorplante chê in org.gnome.desktop.wm.preferences cuant che " -#~ "al è in esecuzion GNOME Shell." +#~ "Cheste clâf a sorplante chê in org.gnome.desktop.wm.preferences cuant che al" +#~ " è in esecuzion GNOME Shell." #~ msgid "Enable edge tiling when dropping windows on screen edges" #~ msgstr "" -#~ "Abilite la tasseladure sul ôr cuant che i balcons a vegnin molâts sul ôr " -#~ "dal visôr" +#~ "Abilite la tasseladure sul ôr cuant che i balcons a vegnin molâts sul ôr dal" +#~ " visôr" #~ msgid "Workspaces only on primary monitor" #~ msgstr "Spazis di lavôr dome sul visôr principâl" #~ msgid "Delay focus changes in mouse mode until the pointer stops moving" #~ msgstr "" -#~ "Tarde la mude dal focus te modalitât mouse fintremai che il pontadôr no " -#~ "si ferme" +#~ "Tarde la mude dal focus te modalitât mouse fintremai che il pontadôr no si " +#~ "ferme" #~ msgid "Thumbnail only" #~ msgstr "Dome miniaturis" @@ -408,8 +423,8 @@ msgstr "Zonte spazi di lavôr" #~ msgstr "Test di benvignût alternatîf" #~ msgid "" -#~ "If not empty, it contains the text that will be shown when clicking on " -#~ "the panel." +#~ "If not empty, it contains the text that will be shown when clicking on the " +#~ "panel." #~ msgstr "" #~ "Se no vueit, al ten il test che al vegnarà mostrât scliçant sul panel." @@ -417,12 +432,10 @@ msgstr "Zonte spazi di lavôr" #~ msgstr "Messaç" #~ msgid "" -#~ "Example aims to show how to build well behaved extensions for the Shell " -#~ "and as such it has little functionality on its own.\n" +#~ "Example aims to show how to build well behaved extensions for the Shell and as such it has little functionality on its own.\n" #~ "Nevertheless it’s possible to customize the greeting message." #~ msgstr "" -#~ "Example al ponte a mostrâ cemût imbastî estensions de Shell che si " -#~ "compuartedin ben e par chest no 'ndi à tantis funzions.\n" +#~ "Example al ponte a mostrâ cemût imbastî estensions de Shell che si compuartedin ben e par chest no 'ndi à tantis funzions.\n" #~ "Ad ogni mût al è pussibil personalizâ il messaç di benvignût." #~ msgid "GNOME Shell Classic" From 28fd210f2828ff16afe7fa202de4183f3d998b93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 7 Oct 2024 17:22:04 +0200 Subject: [PATCH 007/101] window-list: Fix minimized styling Commit 039c66e7b7c wrapped the button in a container to animate transitions, but didn't adjust the `.minimized` styling to still apply to the button (where it is expected) rather than the wrapper. Fix this just like commit c72b8b21 did for the `.focused` styling. Part-of: --- extensions/window-list/extension.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 9b9ea7b9..3a8f612a 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -478,9 +478,9 @@ class WindowButton extends BaseButton { super._updateStyle(); if (this.metaWindow.minimized) - this.add_style_class_name('minimized'); + this._button.add_style_class_name('minimized'); else - this.remove_style_class_name('minimized'); + this._button.remove_style_class_name('minimized'); } _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) { From a5a92026ac0c58c6382c5d531bd069743bef4160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 7 Oct 2024 17:10:43 +0200 Subject: [PATCH 008/101] window-list: Fix active state Commit c72b8b21 fixed the styling of the active window's button, but missed that the `active` property uses the style information as well. Adjust it to use the correct actor when checking for the style class. Closes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/529 Part-of: --- extensions/window-list/extension.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 3a8f612a..e7a1c777 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -252,7 +252,7 @@ class BaseButton extends DashItemContainer { } get active() { - return this.has_style_class_name('focused'); + return this._button.has_style_class_name('focused'); } // eslint-disable-next-line camelcase From 062a3d21ab1f03082163daf799b137d519e48dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 1 Oct 2024 14:52:02 +0200 Subject: [PATCH 009/101] window-list: Add missing action Commit 24ba03fe9 added a new setting, but forgot to create the corresponding action. Part-of: --- extensions/window-list/prefs.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 194d1f9d..5da645df 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -30,6 +30,8 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { this._settings.create_action('show-on-all-monitors')); this._actionGroup.add_action( this._settings.create_action('display-all-workspaces')); + this._actionGroup.add_action( + this._settings.create_action('embed-previews')); const groupingGroup = new Adw.PreferencesGroup({ title: _('Window Grouping'), From 0162644041f28b3065f2e878f600b3b1965c14d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 1 Oct 2024 14:46:15 +0200 Subject: [PATCH 010/101] window-list: Remove superfluous bindings The setting is already bound to the switch via the corresponding action, no need to also set up a binding. In fact, the second binding is actively harmful, as it keeps the connection alive until dispose, so the setting is reset on garbage collection. Closes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/511 Part-of: --- extensions/window-list/prefs.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 5da645df..cf56be5b 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -75,8 +75,6 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { action_name: 'window-list.display-all-workspaces', valign: Gtk.Align.CENTER, }); - this._settings.bind('display-all-workspaces', - toggle, 'active', Gio.SettingsBindFlags.DEFAULT); row = new Adw.ActionRow({ title: _('Show windows from all workspaces'), activatable_widget: toggle, @@ -88,8 +86,6 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { action_name: 'window-list.embed-previews', valign: Gtk.Align.CENTER, }); - this._settings.bind('embed-previews', - toggle, 'active', Gio.SettingsBindFlags.DEFAULT); row = new Adw.ActionRow({ title: _('Show workspace previews'), activatable_widget: toggle, From 548d7659e103cd7ebe882dff8a94ddd1fb30431d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 1 Oct 2024 14:55:44 +0200 Subject: [PATCH 011/101] window-list: Switch to Adw.SwitchRow libadwaita fixed the actionable implementation of Adw.SwitchRow, so can use the convenience widget instead of composing our own. Part-of: --- extensions/window-list/prefs.js | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index cf56be5b..0633d590 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -60,37 +60,22 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { const miscGroup = new Adw.PreferencesGroup(); this.add(miscGroup); - let toggle = new Gtk.Switch({ - action_name: 'window-list.show-on-all-monitors', - valign: Gtk.Align.CENTER, - }); - let row = new Adw.ActionRow({ + let row = new Adw.SwitchRow({ title: _('Show on all monitors'), - activatable_widget: toggle, + action_name: 'window-list.show-on-all-monitors', }); - row.add_suffix(toggle); miscGroup.add(row); - toggle = new Gtk.Switch({ - action_name: 'window-list.display-all-workspaces', - valign: Gtk.Align.CENTER, - }); - row = new Adw.ActionRow({ + row = new Adw.SwitchRow({ title: _('Show windows from all workspaces'), - activatable_widget: toggle, + action_name: 'window-list.display-all-workspaces', }); - row.add_suffix(toggle); miscGroup.add(row); - toggle = new Gtk.Switch({ - action_name: 'window-list.embed-previews', - valign: Gtk.Align.CENTER, - }); - row = new Adw.ActionRow({ + row = new Adw.SwitchRow({ title: _('Show workspace previews'), - activatable_widget: toggle, + action_name: 'window-list.embed-previews', }); - row.add_suffix(toggle); miscGroup.add(row); } } From 824c2a5ceec6faad6c404211251bcb81ae8d93ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 15 Oct 2024 22:37:06 +0200 Subject: [PATCH 012/101] reuse: Convert to REUSE.toml The latest iteration of the spec deprecates .reuse/dep5 in favor of REUSE.toml. Not a fan of the change (more in-your-face, makes completing for README.md harder), but what do you do :shrug: Part-of: --- .reuse/dep5 | 22 ---------------------- REUSE.toml | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 22 deletions(-) delete mode 100644 .reuse/dep5 create mode 100644 REUSE.toml diff --git a/.reuse/dep5 b/.reuse/dep5 deleted file mode 100644 index 8d30dd16..00000000 --- a/.reuse/dep5 +++ /dev/null @@ -1,22 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: gnome-shell-extensions -Upstream-Contact: Florian Müllner -Source: https://gitlab.gnome.org/GNOME/gnome-shell-extensions - -Files: NEWS README.md HACKING.md data/HACKING -Copyright: No rights reserved -License: CC0-1.0 - -Files: *.json.in *.desktop.in *.gschema.override -Copyright: Florian Müllner -License: GPL-2.0-or-later - -# managed by translation teams -Files: po/*.po -Copyright: GNOME Translation Teams -License: GPL-2.0-or-later - -# managed by translation teams -Files: po/LINGUAS po/POTFILES.in -Copyright: No rights reserved -License: CC0-1.0 diff --git a/REUSE.toml b/REUSE.toml new file mode 100644 index 00000000..d5f1da95 --- /dev/null +++ b/REUSE.toml @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2024 Florian Müllner +# SPDX-License-Identifier: CC0-1.0 + +version = 1 +SPDX-PackageName = "gnome-shell-extensions" +SPDX-PackageSupplier = "Florian Müllner " +SPDX-PackageDownloadLocation = "https://gitlab.gnome.org/GNOME/gnome-shell-extensions" + +[[annotations]] +path = ["NEWS", "README.md", "HACKING.md", "data/HACKING"] +SPDX-FileCopyrightText = "No rights reserved" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["**.json.in", "**.desktop.in", "**.gschema.override"] +SPDX-FileCopyrightText = "Florian Müllner " +SPDX-License-Identifier = "GPL-2.0-or-later" + +[[annotations]] +# managed by translation teams +path = "po/**.po" +SPDX-FileCopyrightText = "GNOME Translation Teams " +SPDX-License-Identifier = "GPL-2.0-or-later" + +[[annotations]] +# managed by translation teams +path = ["po/LINGUAS", "po/POTFILES.in"] +SPDX-FileCopyrightText = "No rights reserved" +SPDX-License-Identifier = "CC0-1.0" From f1671bc20624ad988bbb2f01ec2bae7b2868f3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 15 Oct 2024 17:48:52 +0200 Subject: [PATCH 013/101] window-list: Remove outdated style A long time ago, the window list used to embed the bottom message tray, which caused notifications to inherit the window-list's font style. Since that's no longer the case, we have no business in messing with notification styling, so stop doing that. Part-of: --- extensions/window-list/stylesheet-dark.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index b9087971..f02fca60 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -81,7 +81,3 @@ width: 24px; height: 24px; } - -.notification { - font-weight: normal; -} From dba3de2a8e3bb764412c503604c2966de675e973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 26 Sep 2024 19:07:11 +0200 Subject: [PATCH 014/101] window-list: Split out some common code Adding an app button and adding a window button involves some shared steps, move those to a shared `_addButton()` method. Part-of: --- extensions/window-list/extension.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index e7a1c777..6eb08da0 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -964,14 +964,18 @@ class WindowList extends St.Widget { this._removeApp(app); } - _addApp(app, animate) { - let button = new AppButton(app, this._perMonitor, this._monitor.index); + _addButton(button, animate) { this._settings.bind('display-all-workspaces', button, 'ignore-workspace', Gio.SettingsBindFlags.GET); this._windowList.add_child(button); button.show(animate); } + _addApp(app, animate) { + const button = new AppButton(app, this._perMonitor, this._monitor.index); + this._addButton(button, animate); + } + _removeApp(app) { let children = this._windowList.get_children(); let child = children.find(c => c.app === app); @@ -992,11 +996,8 @@ class WindowList extends St.Widget { this._windowSignals.set( win, win.connect('unmanaged', () => this._removeWindow(win))); - let button = new WindowButton(win, this._perMonitor, this._monitor.index); - this._settings.bind('display-all-workspaces', - button, 'ignore-workspace', Gio.SettingsBindFlags.GET); - this._windowList.add_child(button); - button.show(animate); + const button = new WindowButton(win, this._perMonitor, this._monitor.index); + this._addButton(button, animate); } _removeWindow(win) { From 3c325c1562787f0e581a315890963cb6026dcdf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 3 Oct 2024 17:19:31 +0200 Subject: [PATCH 015/101] window-list: Split out common TitleWidget class Both app- and window title use the same structure, so add a shared base class. Part-of: --- extensions/window-list/extension.js | 61 +++++++++++++++-------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 6eb08da0..383d0b72 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -105,25 +105,42 @@ class WindowContextMenu extends PopupMenu.PopupMenu { } } -class WindowTitle extends St.BoxLayout { +class TitleWidget extends St.BoxLayout { static { - GObject.registerClass(this); + GObject.registerClass({ + GTypeFlags: GObject.TypeFlags.ABSTRACT, + }, this); } - constructor(metaWindow) { + constructor() { super({ style_class: 'window-button-box', x_expand: true, y_expand: true, }); - this._metaWindow = metaWindow; - - this._icon = new St.Bin({style_class: 'window-button-icon'}); + this._icon = new St.Bin({ + style_class: 'window-button-icon', + }); this.add_child(this._icon); - this.label_actor = new St.Label({y_align: Clutter.ActorAlign.CENTER}); - this.label_actor.clutter_text.single_line_mode = true; - this.add_child(this.label_actor); + + this._label = new St.Label({ + y_align: Clutter.ActorAlign.CENTER, + }); + this.add_child(this._label); + this.label_actor = this._label; + } +} + +class WindowTitle extends TitleWidget { + static { + GObject.registerClass(this); + } + + constructor(metaWindow) { + super(); + + this._metaWindow = metaWindow; this._metaWindow.connectObject( 'notify::wm-class', @@ -148,9 +165,9 @@ class WindowTitle extends St.BoxLayout { return; if (this._metaWindow.minimized) - this.label_actor.text = '[%s]'.format(this._metaWindow.title); + this._label.text = '[%s]'.format(this._metaWindow.title); else - this.label_actor.text = this._metaWindow.title; + this._label.text = this._metaWindow.title; } _updateIcon() { @@ -166,32 +183,18 @@ class WindowTitle extends St.BoxLayout { } } -class AppTitle extends St.BoxLayout { +class AppTitle extends TitleWidget { static { GObject.registerClass(this); } constructor(app) { - super({ - style_class: 'window-button-box', - x_expand: true, - y_expand: true, - }); + super(); this._app = app; - const icon = new St.Bin({ - style_class: 'window-button-icon', - child: app.create_icon_texture(ICON_TEXTURE_SIZE), - }); - this.add_child(icon); - - let label = new St.Label({ - text: app.get_name(), - y_align: Clutter.ActorAlign.CENTER, - }); - this.add_child(label); - this.label_actor = label; + this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); + this._label.text = app.get_name(); } } From 763d66b82711d1bbc56377bc393edbd7fab91f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 3 Oct 2024 17:27:57 +0200 Subject: [PATCH 016/101] window-list: Add TitleWidget:abstract-label property When true, the real label is replaced by a more abstract representation. When used as drag actor, the focus is not on identifying the window/app, but about picking a drop location, and the reduced style helps with that. Part-of: --- extensions/window-list/extension.js | 22 ++++++++++++++++++++++ extensions/window-list/stylesheet-dark.css | 6 ++++++ 2 files changed, 28 insertions(+) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 383d0b72..3ed1c357 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -109,6 +109,12 @@ class TitleWidget extends St.BoxLayout { static { GObject.registerClass({ GTypeFlags: GObject.TypeFlags.ABSTRACT, + Properties: { + 'abstract-label': GObject.ParamSpec.boolean( + 'abstract-label', null, null, + GObject.ParamFlags.READWRITE, + false), + }, }, this); } @@ -129,6 +135,22 @@ class TitleWidget extends St.BoxLayout { }); this.add_child(this._label); this.label_actor = this._label; + + this.bind_property('abstract-label', + this._label, 'visible', + GObject.BindingFlags.SYNC_CREATE | + GObject.BindingFlags.INVERT_BOOLEAN); + + this._abstractLabel = new St.Widget({ + style_class: 'window-button-abstract-label', + x_expand: true, + y_expand: true, + }); + this.add_child(this._abstractLabel); + + this.bind_property('abstract-label', + this._abstractLabel, 'visible', + GObject.BindingFlags.SYNC_CREATE); } } diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index f02fca60..fce6bcc5 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -81,3 +81,9 @@ width: 24px; height: 24px; } + +.window-button-abstract-label { + background-color: #888; + border-radius: 99px; + margin: 6px; +} From 93a75dccd779737a39530dd9e806dfe886a3daf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 03:20:52 +0200 Subject: [PATCH 017/101] window-list: Split out `_createTitleActor()` hook This will allow creating a suitable drag actor that matches the current title. In particular this allows for a drag actor that isn't based on `ClutterClone`, and therefore doesn't inherit focus/active/minimize/etc. styles that don't make sense outside the actual window list. Part-of: --- extensions/window-list/extension.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 3ed1c357..21823cf8 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -357,6 +357,11 @@ class BaseButton extends DashItemContainer { this._onClicked(this, 1); } + _createTitleActor() { + throw new GObject.NotImplementedError( + `_createTitleActor in ${this.constructor.name}`); + } + _onClicked(_actor, _button) { throw new GObject.NotImplementedError( `_onClicked in ${this.constructor.name}`); @@ -467,7 +472,7 @@ class WindowButton extends BaseButton { this._updateVisibility(); - this._windowTitle = new WindowTitle(this.metaWindow); + this._windowTitle = this._createTitleActor(); this._button.set_child(this._windowTitle); this.label_actor = this._windowTitle.label_actor; @@ -483,6 +488,10 @@ class WindowButton extends BaseButton { this._updateStyle(); } + _createTitleActor() { + return new WindowTitle(this.metaWindow); + } + _onClicked(actor, button) { if (this._contextMenu.isOpen) { this._contextMenu.close(); @@ -667,13 +676,12 @@ class AppButton extends BaseButton { if (this._singleWindowMode) { const [window] = windows; - this._button.child = new WindowTitle(window); this._contextMenu = new WindowContextMenu(this, window); } else { - this._button.child = new AppTitle(this.app); this._contextMenu = new AppContextMenu(this); } + this._button.child = this._createTitleActor(); this.label_actor = this._button.child.label_actor; this._contextMenu.connect( @@ -683,6 +691,15 @@ class AppButton extends BaseButton { this._contextMenuManager.addMenu(this._contextMenu); } + _createTitleActor() { + if (this._singleWindowMode) { + const [window] = this.getWindowList(); + return new WindowTitle(window); + } else { + return new AppTitle(this.app); + } + } + _onClicked(actor, button) { let menuWasOpen = this._menu.isOpen; if (menuWasOpen) From 911387bc4925f33cff6ade875b39e7752ccf4776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 19 Jun 2024 13:01:37 +0200 Subject: [PATCH 018/101] window-list: Rename XDND related methods and props The window list buttons themselves will become draggable, so include "xdnd" in the existing drag handling to disambiguate it. Part-of: --- extensions/window-list/extension.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 21823cf8..d765f58f 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -866,12 +866,12 @@ class WindowList extends St.Widget { 'window-created', (dsp, win) => this._addWindow(win, true), this); Main.xdndHandler.connectObject( - 'drag-begin', () => this._monitorDrag(), - 'drag-end', () => this._stopMonitoringDrag(), + 'drag-begin', () => this._monitorXdndDrag(), + 'drag-end', () => this._stopMonitoringXdndDrag(), this); - this._dragMonitor = { - dragMotion: this._onDragMotion.bind(this), + this._xdndDragMonitor = { + dragMotion: this._onXdndDragMotion.bind(this), }; this._dndTimeoutId = 0; @@ -1059,16 +1059,16 @@ class WindowList extends St.Widget { child?.animateOutAndDestroy(); } - _monitorDrag() { - DND.addDragMonitor(this._dragMonitor); + _monitorXdndDrag() { + DND.addDragMonitor(this._xdndDragMonitor); } - _stopMonitoringDrag() { - DND.removeDragMonitor(this._dragMonitor); + _stopMonitoringXdndDrag() { + DND.removeDragMonitor(this._xdndDragMonitor); this._removeActivateTimeout(); } - _onDragMotion(dragEvent) { + _onXdndDragMotion(dragEvent) { if (Main.overview.visible || !this.contains(dragEvent.targetActor)) { this._removeActivateTimeout(); @@ -1116,7 +1116,7 @@ class WindowList extends St.Widget { this._windowSignals.forEach((id, win) => win.disconnect(id)); this._windowSignals.clear(); - this._stopMonitoringDrag(); + this._stopMonitoringXdndDrag(); this._settings.disconnectObject(); this._settings = null; From 3461a0523ca1c25b6aedf3436105e99c3b81e2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 25 Sep 2024 04:13:25 +0200 Subject: [PATCH 019/101] window-list: Allow rearranging window buttons We currently sort buttons by the stable sequence to get a persistent and predictable order. However some users want to customize that order, and rearrange the buttons as they see fit. Support that use case by implementing drag-and-drop behavior based on the overview's dash. Closes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/4 Part-of: --- extensions/window-list/extension.js | 147 ++++++++++++++++++++ extensions/window-list/stylesheet-dark.css | 14 +- extensions/window-list/stylesheet-light.css | 5 + 3 files changed, 164 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index d765f58f..bd361646 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -26,12 +26,25 @@ import {WorkspaceIndicator} from './workspaceIndicator.js'; const ICON_TEXTURE_SIZE = 24; const DND_ACTIVATE_TIMEOUT = 500; +const MIN_DRAG_UPDATE_INTERVAL = 500 * GLib.TIME_SPAN_MILLISECOND; + const GroupingMode = { NEVER: 0, AUTO: 1, ALWAYS: 2, }; +class DragPlaceholderItem extends DashItemContainer { + static { + GObject.registerClass(this); + } + + constructor() { + super(); + this.setChild(new St.Bin({style_class: 'placeholder'})); + } +} + /** * @param {Shell.App} app - an app * @returns {number} - the smallest stable sequence of the app's windows @@ -220,6 +233,22 @@ class AppTitle extends TitleWidget { } } +class DragActor extends St.Bin { + static { + GObject.registerClass(this); + } + + constructor(source, titleActor) { + super({ + style_class: 'window-button-drag-actor', + child: titleActor, + width: source.width, + }); + + this.source = source; + } +} + class BaseButton extends DashItemContainer { static { GObject.registerClass({ @@ -230,6 +259,10 @@ class BaseButton extends DashItemContainer { GObject.ParamFlags.READWRITE, false), }, + Signals: { + 'drag-begin': {}, + 'drag-end': {}, + }, }, this); } @@ -274,6 +307,15 @@ class BaseButton extends DashItemContainer { this._windowEnteredOrLeftMonitor.bind(this), this); } + + this._button._delegate = this; + this._draggable = DND.makeDraggable(this._button); + this._draggable.connect('drag-begin', () => { + this._removeLongPressTimeout(); + this.emit('drag-begin'); + }); + this._draggable.connect('drag-cancelled', () => this.emit('drag-end')); + this._draggable.connect('drag-end', () => this.emit('drag-end')); } get active() { @@ -357,6 +399,17 @@ class BaseButton extends DashItemContainer { this._onClicked(this, 1); } + getDragActor() { + const titleActor = this._createTitleActor(); + titleActor.set({abstractLabel: true}); + + return new DragActor(this, titleActor); + } + + getDragActorSource() { + return this; + } + _createTitleActor() { throw new GObject.NotImplementedError( `_createTitleActor in ${this.constructor.name}`); @@ -874,9 +927,19 @@ class WindowList extends St.Widget { dragMotion: this._onXdndDragMotion.bind(this), }; + this._itemDragMonitor = { + dragMotion: this._onItemDragMotion.bind(this), + }; + this._dndTimeoutId = 0; this._dndWindow = null; + this._dragPlaceholder = null; + this._dragPlaceholderPos = -1; + this._lastPlaceholderUpdate = 0; + + this._delegate = this; + this._settings = settings; this._settings.connectObject('changed::grouping-mode', () => this._groupingModeChanged(), this); @@ -1009,6 +1072,14 @@ class WindowList extends St.Widget { _addButton(button, animate) { this._settings.bind('display-all-workspaces', button, 'ignore-workspace', Gio.SettingsBindFlags.GET); + + button.connect('drag-begin', + () => this._monitorItemDrag()); + button.connect('drag-end', () => { + this._stopMonitoringItemDrag(); + this._clearDragPlaceholder(); + }); + this._windowList.add_child(button); button.show(animate); } @@ -1059,6 +1130,82 @@ class WindowList extends St.Widget { child?.animateOutAndDestroy(); } + _clearDragPlaceholder() { + this._dragPlaceholder?.animateOutAndDestroy(); + this._dragPlaceholder = null; + this._dragPlaceholderPos = -1; + } + + handleDragOver(source, _actor, x, _y, _time) { + if (!(source instanceof BaseButton)) + return DND.DragMotionResult.NO_DROP; + + const buttons = this._windowList.get_children().filter(c => c instanceof BaseButton); + const buttonPos = buttons.indexOf(source); + const numButtons = buttons.length; + let boxWidth = this._windowList.width; + + // Transform to window list coordinates for index calculation + // (mostly relevant for RTL to discard workspace indicator etc.) + x -= this._windowList.x; + + const rtl = this.text_direction === Clutter.TextDirection.RTL; + let pos = rtl + ? numButtons - Math.round(x * numButtons / boxWidth) + : Math.round(x * numButtons / boxWidth); + + pos = Math.clamp(pos, 0, numButtons); + + const timeDelta = + GLib.get_monotonic_time() - this._lastPlaceholderUpdate; + + if (pos !== this._dragPlaceholderPos && timeDelta >= MIN_DRAG_UPDATE_INTERVAL) { + this._clearDragPlaceholder(); + this._dragPlaceholderPos = pos; + + this._lastPlaceholderUpdate = GLib.get_monotonic_time(); + + // Don't allow positioning before or after self + if (pos === buttonPos || pos === buttonPos + 1) + return DND.DragMotionResult.CONTINUE; + + this._dragPlaceholder = new DragPlaceholderItem(); + const sibling = buttons[pos] ?? null; + if (sibling) + this._windowList.insert_child_below(this._dragPlaceholder, sibling); + else + this._windowList.insert_child_above(this._dragPlaceholder, null); + this._dragPlaceholder.show(true); + } + + return this._dragPlaceholder + ? DND.DragMotionResult.MOVE_DROP + : DND.DragMotionResult.NO_DROP; + } + + acceptDrop(source, _actor, _x, _y, _time) { + if (this._dragPlaceholderPos >= 0) + this._windowList.set_child_at_index(source, this._dragPlaceholderPos); + + this._clearDragPlaceholder(); + + return true; + } + + _monitorItemDrag() { + DND.addDragMonitor(this._itemDragMonitor); + } + + _stopMonitoringItemDrag() { + DND.removeDragMonitor(this._itemDragMonitor); + } + + _onItemDragMotion(dragEvent) { + if (!this._windowList.contains(dragEvent.targetActor)) + this._clearDragPlaceholder(); + return DND.DragMotionResult.CONTINUE; + } + _monitorXdndDrag() { DND.addDragMonitor(this._xdndDragMonitor); } diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index fce6bcc5..c92081d2 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -17,10 +17,19 @@ height: 2.45em; } -.window-button { +.window-button, +.window-button-drag-actor { padding: 4px, 3px; } +.window-button-drag-actor { + background-color: #444; + border-radius: 7px; + border-width: 2px; + border-color: #fff; + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + .window-button:first-child:ltr { padding-left: 2px; } @@ -41,7 +50,8 @@ transition: 100ms ease; } -.window-button > StWidget { +.window-button > StWidget, +.window-list .placeholder { -st-natural-width: 18.75em; max-width: 18.75em; } diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index f9c51f8e..5fb39b2f 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -56,3 +56,8 @@ color: #aaa; background-color: #f9f9f9; } + +.window-button-drag-actor { + background-color: #ddd; + border-color: #888; +} From a725361fc93465346f55b8b9d8a7cbc42108073a Mon Sep 17 00:00:00 2001 From: Jakub Steiner Date: Thu, 3 Oct 2024 14:18:32 +0200 Subject: [PATCH 020/101] window-list: Indicate drop target more prominently The drop target is the main focus of the drag operation, so make its styling more prominent. Part-of: --- extensions/window-list/stylesheet-dark.css | 6 ++++++ extensions/window-list/stylesheet-light.css | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index c92081d2..4c06ebc0 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -56,6 +56,12 @@ max-width: 18.75em; } +.window-list .placeholder { + border: 1px solid rgba(255,255,255,0.4); + border-radius: 7px; + margin: 4px; +} + .window-button:hover > StWidget { background-color: #303030; } diff --git a/extensions/window-list/stylesheet-light.css b/extensions/window-list/stylesheet-light.css index 5fb39b2f..1ecb83a9 100644 --- a/extensions/window-list/stylesheet-light.css +++ b/extensions/window-list/stylesheet-light.css @@ -23,7 +23,6 @@ .window-button > StWidget { color: #000; - background-color: transparent; } .window-button:hover > StWidget { @@ -61,3 +60,7 @@ background-color: #ddd; border-color: #888; } + +.window-list .placeholder { + border-color: rgba(0,0,0,0.5); +} From 9b34ac1eeadac1bb5a11dc225b8870098a2b1adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 3 Oct 2024 17:05:42 +0200 Subject: [PATCH 021/101] window-list: Fade out drag source during drag During a drag operation, the focus is on the where to drop the dragged item, not to identify it or its origin. Part-of: --- extensions/window-list/extension.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index bd361646..7825710f 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -28,6 +28,9 @@ const DND_ACTIVATE_TIMEOUT = 500; const MIN_DRAG_UPDATE_INTERVAL = 500 * GLib.TIME_SPAN_MILLISECOND; +const DRAG_OPACITY = 0.3; +const DRAG_FADE_DURATION = 200; + const GroupingMode = { NEVER: 0, AUTO: 1, @@ -1073,9 +1076,20 @@ class WindowList extends St.Widget { this._settings.bind('display-all-workspaces', button, 'ignore-workspace', Gio.SettingsBindFlags.GET); - button.connect('drag-begin', - () => this._monitorItemDrag()); + button.connect('drag-begin', () => { + button.ease({ + opacity: 255 * DRAG_OPACITY, + duration: DRAG_FADE_DURATION, + }); + + this._monitorItemDrag(); + }); button.connect('drag-end', () => { + button.ease({ + opacity: 255, + duration: DRAG_FADE_DURATION, + }); + this._stopMonitoringItemDrag(); this._clearDragPlaceholder(); }); From 228811b873c2b839173516a4f7082bf27368bf9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 9 Oct 2024 19:15:16 +0200 Subject: [PATCH 022/101] window-list: Shrink drag-actor size during drags Like the previous commit, this helps with putting the focus on the target location instead of the dragged item. Part-of: --- extensions/window-list/extension.js | 33 +++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 7825710f..43395d1c 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -31,6 +31,8 @@ const MIN_DRAG_UPDATE_INTERVAL = 500 * GLib.TIME_SPAN_MILLISECOND; const DRAG_OPACITY = 0.3; const DRAG_FADE_DURATION = 200; +const DRAG_RESIZE_DURATION = 400; + const GroupingMode = { NEVER: 0, AUTO: 1, @@ -250,6 +252,24 @@ class DragActor extends St.Bin { this.source = source; } + + setTargetWidth(width) { + const currentWidth = this.width; + + // set width immediately so shell's DND code uses correct values + this.set({width}); + + // then transition from the original to the new width + const laters = global.compositor.get_laters(); + laters.add(Meta.LaterType.BEFORE_REDRAW, () => { + this.set({width: currentWidth}); + this.ease({ + width, + duration: DRAG_RESIZE_DURATION, + }); + return GLib.SOURCE_REMOVE; + }); + } } class BaseButton extends DashItemContainer { @@ -317,7 +337,10 @@ class BaseButton extends DashItemContainer { this._removeLongPressTimeout(); this.emit('drag-begin'); }); - this._draggable.connect('drag-cancelled', () => this.emit('drag-end')); + this._draggable.connect('drag-cancelled', () => { + this._draggable._dragActor?.setTargetWidth(this.width); + this.emit('drag-end'); + }); this._draggable.connect('drag-end', () => this.emit('drag-end')); } @@ -406,7 +429,13 @@ class BaseButton extends DashItemContainer { const titleActor = this._createTitleActor(); titleActor.set({abstractLabel: true}); - return new DragActor(this, titleActor); + const dragActor = new DragActor(this, titleActor); + + const [, natWidth] = this.get_preferred_width(-1); + const targetWidth = Math.min(natWidth / 2, this.width); + dragActor.setTargetWidth(targetWidth); + + return dragActor; } getDragActorSource() { From f87a25e913813f845125d3d34ded543be667063e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 8 Oct 2024 19:25:53 +0200 Subject: [PATCH 023/101] window-list: Handle DND events near the drop target Even with the previous change, the dragged actor has the tendency of obscuring the possible drop target. To alleviate this, handle DND events near drop targets as if they occurred on the target. Part-of: --- extensions/window-list/extension.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 43395d1c..169b5518 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -33,6 +33,8 @@ const DRAG_FADE_DURATION = 200; const DRAG_RESIZE_DURATION = 400; +const DRAG_PROXIMITY_THRESHOLD = 30; + const GroupingMode = { NEVER: 0, AUTO: 1, @@ -961,6 +963,7 @@ class WindowList extends St.Widget { this._itemDragMonitor = { dragMotion: this._onItemDragMotion.bind(this), + dragDrop: this._onItemDragDrop.bind(this), }; this._dndTimeoutId = 0; @@ -1244,11 +1247,30 @@ class WindowList extends St.Widget { } _onItemDragMotion(dragEvent) { - if (!this._windowList.contains(dragEvent.targetActor)) - this._clearDragPlaceholder(); + const {source, targetActor, dragActor, x, y} = dragEvent; + + const hasTarget = this._windowList.contains(targetActor); + const isNear = Math.abs(y - this.y) < DRAG_PROXIMITY_THRESHOLD; + + if (hasTarget || isNear) + return this.handleDragOver(source, dragActor, x, y); + + this._clearDragPlaceholder(); return DND.DragMotionResult.CONTINUE; } + _onItemDragDrop(dropEvent) { + if (this._dragPlaceholderPos < 0) + return DND.DragDropResult.CONTINUE; + + const {source} = dropEvent.dropActor; + this.acceptDrop(source); + dropEvent.dropActor.destroy(); + // HACK: SUCESS would make more sense, but results in gnome-shell + // skipping all drag-end code + return DND.DragDropResult.CONTINUE; + } + _monitorXdndDrag() { DND.addDragMonitor(this._xdndDragMonitor); } From 3f660ee973c1937b36e2a462a2d99709fd99ce4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 26 Jun 2024 00:58:18 +0200 Subject: [PATCH 024/101] window-list: Add `id` property to buttons A string ID that uniquely identifies a button will allow to serialize/deserialize the positions in the next commit. Part-of: --- extensions/window-list/extension.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 169b5518..b5be15e6 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -575,6 +575,10 @@ class WindowButton extends BaseButton { this._updateStyle(); } + get id() { + return `window:${this.metaWindow.get_id()}`; + } + _createTitleActor() { return new WindowTitle(this.metaWindow); } @@ -714,6 +718,10 @@ class AppButton extends BaseButton { this._updateStyle(); } + get id() { + return `app:${this.app.get_id()}`; + } + _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) { if (this._windowTracker.get_window_app(metaWindow) === this.app && monitorIndex === this._monitorIndex) { From fa3f9bcaeea1a4c167b121f7efdbfb0e101703a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 24 Sep 2024 20:31:06 +0200 Subject: [PATCH 025/101] window-list: Save and restore positions as runtime state While it doesn't make sense for window list positions to be truly persistent like dash items, some persistence is desirable. Otherwise any manually set position is lost when the extension is disabled, for example when locking the screen. To address this, serialize the positions as runtime state on drop, and restore them when populating the list. Part-of: --- extensions/window-list/extension.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index b5be15e6..885bb5ac 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -35,6 +35,8 @@ const DRAG_RESIZE_DURATION = 400; const DRAG_PROXIMITY_THRESHOLD = 30; +const SAVED_POSITIONS_KEY = 'window-list-positions'; + const GroupingMode = { NEVER: 0, AUTO: 1, @@ -1095,6 +1097,8 @@ class WindowList extends St.Widget { for (let i = 0; i < apps.length; i++) this._addApp(apps[i], false); } + + this._restorePositions(); } _updateKeyboardAnchor() { @@ -1243,9 +1247,33 @@ class WindowList extends St.Widget { this._clearDragPlaceholder(); + this._savePositions(); + return true; } + _getPositionStateKey() { + return `${SAVED_POSITIONS_KEY}:${this._monitor.index}`; + } + + _savePositions() { + const buttons = this._windowList.get_children() + .filter(b => b instanceof BaseButton); + global.set_runtime_state(this._getPositionStateKey(), + new GLib.Variant('as', buttons.map(b => b.id))); + } + + _restorePositions() { + const positions = global.get_runtime_state('as', + this._getPositionStateKey())?.deepUnpack() ?? []; + + for (const button of this._windowList.get_children()) { + const pos = positions.indexOf(button.id); + if (pos > -1) + this._windowList.set_child_at_index(button, pos); + } + } + _monitorItemDrag() { DND.addDragMonitor(this._itemDragMonitor); } From 2b4db8095ed7873e03b2eee61bab1890dd646e92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:10:36 +0200 Subject: [PATCH 026/101] workspace-indicator: Split out workspaces prefs page The window-list extension already uses the extension code for its embedded workspace indicator, this will allow it to do the same for the preference page. Part-of: --- extensions/workspace-indicator/meson.build | 2 +- extensions/workspace-indicator/prefs.js | 283 +---------------- .../workspace-indicator/workspacePrefs.js | 296 ++++++++++++++++++ po/POTFILES.in | 2 +- 4 files changed, 301 insertions(+), 282 deletions(-) create mode 100644 extensions/workspace-indicator/workspacePrefs.js diff --git a/extensions/workspace-indicator/meson.build b/extensions/workspace-indicator/meson.build index 9388085c..c64e64a9 100644 --- a/extensions/workspace-indicator/meson.build +++ b/extensions/workspace-indicator/meson.build @@ -13,4 +13,4 @@ extension_data += files( ) extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml') -extension_sources += files('prefs.js', 'workspaceIndicator.js') +extension_sources += files('prefs.js', 'workspaceIndicator.js', 'workspacePrefs.js') diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index b828ab8f..2abfc3a8 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -4,289 +4,12 @@ // SPDX-License-Identifier: GPL-2.0-or-later // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -import Adw from 'gi://Adw'; -import Gio from 'gi://Gio'; -import GLib from 'gi://GLib'; -import GObject from 'gi://GObject'; -import Gtk from 'gi://Gtk'; -import Pango from 'gi://Pango'; +import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; -import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; - -const N_ = e => e; - -const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; -const WORKSPACE_KEY = 'workspace-names'; - -class GeneralGroup extends Adw.PreferencesGroup { - static { - GObject.registerClass(this); - } - - constructor(settings) { - super(); - - const row = new Adw.SwitchRow({ - title: _('Show Previews In Top Bar'), - }); - this.add(row); - - settings.bind('embed-previews', - row, 'active', - Gio.SettingsBindFlags.DEFAULT); - } -} - -class NewItem extends GObject.Object {} -GObject.registerClass(NewItem); - -class NewItemModel extends GObject.Object { - static [GObject.interfaces] = [Gio.ListModel]; - static { - GObject.registerClass(this); - } - - #item = new NewItem(); - - vfunc_get_item_type() { - return NewItem; - } - - vfunc_get_n_items() { - return 1; - } - - vfunc_get_item(_pos) { - return this.#item; - } -} - -class WorkspacesList extends GObject.Object { - static [GObject.interfaces] = [Gio.ListModel]; - static { - GObject.registerClass(this); - } - - #settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA}); - #names = this.#settings.get_strv(WORKSPACE_KEY); - #items = Gtk.StringList.new(this.#names); - #changedId; - - constructor() { - super(); - - this.#changedId = - this.#settings.connect(`changed::${WORKSPACE_KEY}`, () => { - const removed = this.#names.length; - this.#names = this.#settings.get_strv(WORKSPACE_KEY); - this.#items.splice(0, removed, this.#names); - this.items_changed(0, removed, this.#names.length); - }); - } - - append() { - const name = _('Workspace %d').format(this.#names.length + 1); - - this.#names.push(name); - this.#settings.block_signal_handler(this.#changedId); - this.#settings.set_strv(WORKSPACE_KEY, this.#names); - this.#settings.unblock_signal_handler(this.#changedId); - - const pos = this.#items.get_n_items(); - this.#items.append(name); - this.items_changed(pos, 0, 1); - } - - remove(name) { - const pos = this.#names.indexOf(name); - if (pos < 0) - return; - - this.#names.splice(pos, 1); - - this.#settings.block_signal_handler(this.#changedId); - this.#settings.set_strv(WORKSPACE_KEY, this.#names); - this.#settings.unblock_signal_handler(this.#changedId); - - this.#items.remove(pos); - this.items_changed(pos, 1, 0); - } - - rename(oldName, newName) { - const pos = this.#names.indexOf(oldName); - if (pos < 0) - return; - - this.#names.splice(pos, 1, newName); - this.#items.splice(pos, 1, [newName]); - - this.#settings.block_signal_handler(this.#changedId); - this.#settings.set_strv(WORKSPACE_KEY, this.#names); - this.#settings.unblock_signal_handler(this.#changedId); - } - - vfunc_get_item_type() { - return Gtk.StringObject; - } - - vfunc_get_n_items() { - return this.#items.get_n_items(); - } - - vfunc_get_item(pos) { - return this.#items.get_item(pos); - } -} - -class WorkspacesGroup extends Adw.PreferencesGroup { - static { - GObject.registerClass(this); - - this.install_action('workspaces.add', null, - self => self._workspaces.append()); - this.install_action('workspaces.remove', 's', - (self, name, param) => self._workspaces.remove(param.unpack())); - this.install_action('workspaces.rename', '(ss)', - (self, name, param) => self._workspaces.rename(...param.deepUnpack())); - } - - constructor() { - super({ - title: _('Workspace Names'), - }); - - this._workspaces = new WorkspacesList(); - - const store = new Gio.ListStore({item_type: Gio.ListModel}); - const listModel = new Gtk.FlattenListModel({model: store}); - store.append(this._workspaces); - store.append(new NewItemModel()); - - this._list = new Gtk.ListBox({ - selection_mode: Gtk.SelectionMode.NONE, - css_classes: ['boxed-list'], - }); - this._list.connect('row-activated', (l, row) => row.edit()); - this.add(this._list); - - this._list.bind_model(listModel, item => { - return item instanceof NewItem - ? new NewWorkspaceRow() - : new WorkspaceRow(item.string); - }); - } -} - -class WorkspaceRow extends Adw.PreferencesRow { - static { - GObject.registerClass(this); - } - - constructor(name) { - super({name}); - - const box = new Gtk.Box({ - spacing: 12, - margin_top: 6, - margin_bottom: 6, - margin_start: 6, - margin_end: 6, - }); - - const label = new Gtk.Label({ - hexpand: true, - xalign: 0, - max_width_chars: 25, - ellipsize: Pango.EllipsizeMode.END, - }); - this.bind_property('name', label, 'label', - GObject.BindingFlags.SYNC_CREATE); - box.append(label); - - const button = new Gtk.Button({ - action_name: 'workspaces.remove', - icon_name: 'edit-delete-symbolic', - has_frame: false, - }); - box.append(button); - - this.bind_property_full('name', - button, 'action-target', - GObject.BindingFlags.SYNC_CREATE, - (bind, target) => [true, new GLib.Variant('s', target)], - null); - - this._entry = new Gtk.Entry({ - max_width_chars: 25, - }); - - const controller = new Gtk.ShortcutController(); - controller.add_shortcut(new Gtk.Shortcut({ - trigger: Gtk.ShortcutTrigger.parse_string('Escape'), - action: Gtk.CallbackAction.new(() => { - this._stopEdit(); - return true; - }), - })); - this._entry.add_controller(controller); - - this._stack = new Gtk.Stack(); - this._stack.add_named(box, 'display'); - this._stack.add_named(this._entry, 'edit'); - this.child = this._stack; - - this._entry.connect('activate', () => { - this.activate_action('workspaces.rename', - new GLib.Variant('(ss)', [this.name, this._entry.text])); - this.name = this._entry.text; - this._stopEdit(); - }); - this._entry.connect('notify::has-focus', () => { - if (this._entry.has_focus) - return; - this._stopEdit(); - }); - } - - edit() { - this._entry.text = this.name; - this._entry.grab_focus(); - this._stack.visible_child_name = 'edit'; - } - - _stopEdit() { - this.grab_focus(); - this._stack.visible_child_name = 'display'; - } -} - -class NewWorkspaceRow extends Adw.PreferencesRow { - static { - GObject.registerClass(this); - } - - constructor() { - super({ - action_name: 'workspaces.add', - child: new Gtk.Image({ - icon_name: 'list-add-symbolic', - pixel_size: 16, - margin_top: 12, - margin_bottom: 12, - margin_start: 12, - margin_end: 12, - }), - }); - this.update_property( - [Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]); - } -} +import {WorkspacesPage} from './workspacePrefs.js'; export default class WorkspaceIndicatorPrefs extends ExtensionPreferences { getPreferencesWidget() { - const page = new Adw.PreferencesPage(); - page.add(new GeneralGroup(this.getSettings())); - page.add(new WorkspacesGroup()); - return page; + return new WorkspacesPage(this.getSettings()); } } diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js new file mode 100644 index 00000000..39cd2666 --- /dev/null +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -0,0 +1,296 @@ +// SPDX-FileCopyrightText: 2012 Giovanni Campagna +// SPDX-FileCopyrightText: 2014 Florian Müllner +// +// SPDX-License-Identifier: GPL-2.0-or-later + +// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- +import Adw from 'gi://Adw'; +import Gio from 'gi://Gio'; +import GLib from 'gi://GLib'; +import GObject from 'gi://GObject'; +import Gtk from 'gi://Gtk'; +import Pango from 'gi://Pango'; + +import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; + +const N_ = e => e; + +const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; +const WORKSPACE_KEY = 'workspace-names'; + +class GeneralGroup extends Adw.PreferencesGroup { + static { + GObject.registerClass(this); + } + + constructor(settings) { + super(); + + const row = new Adw.SwitchRow({ + title: _('Show Previews In Top Bar'), + }); + this.add(row); + + settings.bind('embed-previews', + row, 'active', + Gio.SettingsBindFlags.DEFAULT); + } +} + +class NewItem extends GObject.Object {} +GObject.registerClass(NewItem); + +class NewItemModel extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #item = new NewItem(); + + vfunc_get_item_type() { + return NewItem; + } + + vfunc_get_n_items() { + return 1; + } + + vfunc_get_item(_pos) { + return this.#item; + } +} + +class WorkspacesList extends GObject.Object { + static [GObject.interfaces] = [Gio.ListModel]; + static { + GObject.registerClass(this); + } + + #settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA}); + #names = this.#settings.get_strv(WORKSPACE_KEY); + #items = Gtk.StringList.new(this.#names); + #changedId; + + constructor() { + super(); + + this.#changedId = + this.#settings.connect(`changed::${WORKSPACE_KEY}`, () => { + const removed = this.#names.length; + this.#names = this.#settings.get_strv(WORKSPACE_KEY); + this.#items.splice(0, removed, this.#names); + this.items_changed(0, removed, this.#names.length); + }); + } + + append() { + const name = _('Workspace %d').format(this.#names.length + 1); + + this.#names.push(name); + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + + const pos = this.#items.get_n_items(); + this.#items.append(name); + this.items_changed(pos, 0, 1); + } + + remove(name) { + const pos = this.#names.indexOf(name); + if (pos < 0) + return; + + this.#names.splice(pos, 1); + + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + + this.#items.remove(pos); + this.items_changed(pos, 1, 0); + } + + rename(oldName, newName) { + const pos = this.#names.indexOf(oldName); + if (pos < 0) + return; + + this.#names.splice(pos, 1, newName); + this.#items.splice(pos, 1, [newName]); + + this.#settings.block_signal_handler(this.#changedId); + this.#settings.set_strv(WORKSPACE_KEY, this.#names); + this.#settings.unblock_signal_handler(this.#changedId); + } + + vfunc_get_item_type() { + return Gtk.StringObject; + } + + vfunc_get_n_items() { + return this.#items.get_n_items(); + } + + vfunc_get_item(pos) { + return this.#items.get_item(pos); + } +} + +class WorkspacesGroup extends Adw.PreferencesGroup { + static { + GObject.registerClass(this); + + this.install_action('workspaces.add', null, + self => self._workspaces.append()); + this.install_action('workspaces.remove', 's', + (self, name, param) => self._workspaces.remove(param.unpack())); + this.install_action('workspaces.rename', '(ss)', + (self, name, param) => self._workspaces.rename(...param.deepUnpack())); + } + + constructor() { + super({ + title: _('Workspace Names'), + }); + + this._workspaces = new WorkspacesList(); + + const store = new Gio.ListStore({item_type: Gio.ListModel}); + const listModel = new Gtk.FlattenListModel({model: store}); + store.append(this._workspaces); + store.append(new NewItemModel()); + + this._list = new Gtk.ListBox({ + selection_mode: Gtk.SelectionMode.NONE, + css_classes: ['boxed-list'], + }); + this._list.connect('row-activated', (l, row) => row.edit()); + this.add(this._list); + + this._list.bind_model(listModel, item => { + return item instanceof NewItem + ? new NewWorkspaceRow() + : new WorkspaceRow(item.string); + }); + } +} + +class WorkspaceRow extends Adw.PreferencesRow { + static { + GObject.registerClass(this); + } + + constructor(name) { + super({name}); + + const box = new Gtk.Box({ + spacing: 12, + margin_top: 6, + margin_bottom: 6, + margin_start: 6, + margin_end: 6, + }); + + const label = new Gtk.Label({ + hexpand: true, + xalign: 0, + max_width_chars: 25, + ellipsize: Pango.EllipsizeMode.END, + }); + this.bind_property('name', label, 'label', + GObject.BindingFlags.SYNC_CREATE); + box.append(label); + + const button = new Gtk.Button({ + action_name: 'workspaces.remove', + icon_name: 'edit-delete-symbolic', + has_frame: false, + }); + box.append(button); + + this.bind_property_full('name', + button, 'action-target', + GObject.BindingFlags.SYNC_CREATE, + (bind, target) => [true, new GLib.Variant('s', target)], + null); + + this._entry = new Gtk.Entry({ + max_width_chars: 25, + }); + + const controller = new Gtk.ShortcutController(); + controller.add_shortcut(new Gtk.Shortcut({ + trigger: Gtk.ShortcutTrigger.parse_string('Escape'), + action: Gtk.CallbackAction.new(() => { + this._stopEdit(); + return true; + }), + })); + this._entry.add_controller(controller); + + this._stack = new Gtk.Stack(); + this._stack.add_named(box, 'display'); + this._stack.add_named(this._entry, 'edit'); + this.child = this._stack; + + this._entry.connect('activate', () => { + this.activate_action('workspaces.rename', + new GLib.Variant('(ss)', [this.name, this._entry.text])); + this.name = this._entry.text; + this._stopEdit(); + }); + this._entry.connect('notify::has-focus', () => { + if (this._entry.has_focus) + return; + this._stopEdit(); + }); + } + + edit() { + this._entry.text = this.name; + this._entry.grab_focus(); + this._stack.visible_child_name = 'edit'; + } + + _stopEdit() { + this.grab_focus(); + this._stack.visible_child_name = 'display'; + } +} + +class NewWorkspaceRow extends Adw.PreferencesRow { + static { + GObject.registerClass(this); + } + + constructor() { + super({ + action_name: 'workspaces.add', + child: new Gtk.Image({ + icon_name: 'list-add-symbolic', + pixel_size: 16, + margin_top: 12, + margin_bottom: 12, + margin_start: 12, + margin_end: 12, + }), + }); + this.update_property( + [Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]); + } +} + +export class WorkspacesPage extends Adw.PreferencesPage { + static { + GObject.registerClass(this); + } + + constructor(settings) { + super(); + + this.add(new GeneralGroup(settings)); + this.add(new WorkspacesGroup()); + } +} diff --git a/po/POTFILES.in b/po/POTFILES.in index 447465a1..ce3ceb2d 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -18,6 +18,6 @@ extensions/window-list/extension.js extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml extensions/window-list/prefs.js extensions/windowsNavigator/extension.js -extensions/workspace-indicator/prefs.js extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml extensions/workspace-indicator/workspaceIndicator.js +extensions/workspace-indicator/workspacePrefs.js From e6bc9fc2fc13ad14590cd81c21e0d2e51da52727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 15 Oct 2024 23:21:40 +0200 Subject: [PATCH 027/101] workspace-indicator: Use Adw.ButtonRow for new-item row libadwaita added a dedicated widget for button rows, so let's use that instead of rolling our own. While at it, promote the accessible label to the (visible) title to be more in line with current design patterns. Part-of: --- .../workspace-indicator/workspacePrefs.js | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js index 39cd2666..63a54a0a 100644 --- a/extensions/workspace-indicator/workspacePrefs.js +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -169,9 +169,15 @@ class WorkspacesGroup extends Adw.PreferencesGroup { this._list.connect('row-activated', (l, row) => row.edit()); this.add(this._list); + const newRowProps = { + title: _('Add Workspace'), + action_name: 'workspaces.add', + start_icon_name: 'list-add-symbolic', + }; + this._list.bind_model(listModel, item => { return item instanceof NewItem - ? new NewWorkspaceRow() + ? new Adw.ButtonRow({...newRowProps}) : new WorkspaceRow(item.string); }); } @@ -260,28 +266,6 @@ class WorkspaceRow extends Adw.PreferencesRow { } } -class NewWorkspaceRow extends Adw.PreferencesRow { - static { - GObject.registerClass(this); - } - - constructor() { - super({ - action_name: 'workspaces.add', - child: new Gtk.Image({ - icon_name: 'list-add-symbolic', - pixel_size: 16, - margin_top: 12, - margin_bottom: 12, - margin_start: 12, - margin_end: 12, - }), - }); - this.update_property( - [Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]); - } -} - export class WorkspacesPage extends Adw.PreferencesPage { static { GObject.registerClass(this); From 1459e3d6f9e6d83624b9d993fe0a57fce4fcabd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 2 Jul 2022 18:38:48 +0200 Subject: [PATCH 028/101] workspace-indicator: Use Adw.EntryRow for workspace rows Entries in lists are tricky, so best stick with default patterns provided by libadwaita than rolling our own. Part-of: --- .../workspace-indicator/workspacePrefs.js | 72 +++---------------- 1 file changed, 11 insertions(+), 61 deletions(-) diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js index 63a54a0a..e0dc03ce 100644 --- a/extensions/workspace-indicator/workspacePrefs.js +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -9,7 +9,6 @@ import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; import Gtk from 'gi://Gtk'; -import Pango from 'gi://Pango'; import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; @@ -166,7 +165,6 @@ class WorkspacesGroup extends Adw.PreferencesGroup { selection_mode: Gtk.SelectionMode.NONE, css_classes: ['boxed-list'], }); - this._list.connect('row-activated', (l, row) => row.edit()); this.add(this._list); const newRowProps = { @@ -183,38 +181,26 @@ class WorkspacesGroup extends Adw.PreferencesGroup { } } -class WorkspaceRow extends Adw.PreferencesRow { +class WorkspaceRow extends Adw.EntryRow { static { GObject.registerClass(this); } constructor(name) { - super({name}); - - const box = new Gtk.Box({ - spacing: 12, - margin_top: 6, - margin_bottom: 6, - margin_start: 6, - margin_end: 6, + super({ + name, + text: name, }); - const label = new Gtk.Label({ - hexpand: true, - xalign: 0, - max_width_chars: 25, - ellipsize: Pango.EllipsizeMode.END, - }); - this.bind_property('name', label, 'label', - GObject.BindingFlags.SYNC_CREATE); - box.append(label); - const button = new Gtk.Button({ + tooltip_text: _('Remove'), action_name: 'workspaces.remove', icon_name: 'edit-delete-symbolic', has_frame: false, + halign: Gtk.Align.CENTER, + valign: Gtk.Align.CENTER, }); - box.append(button); + this.add_suffix(button); this.bind_property_full('name', button, 'action-target', @@ -222,47 +208,11 @@ class WorkspaceRow extends Adw.PreferencesRow { (bind, target) => [true, new GLib.Variant('s', target)], null); - this._entry = new Gtk.Entry({ - max_width_chars: 25, - }); - - const controller = new Gtk.ShortcutController(); - controller.add_shortcut(new Gtk.Shortcut({ - trigger: Gtk.ShortcutTrigger.parse_string('Escape'), - action: Gtk.CallbackAction.new(() => { - this._stopEdit(); - return true; - }), - })); - this._entry.add_controller(controller); - - this._stack = new Gtk.Stack(); - this._stack.add_named(box, 'display'); - this._stack.add_named(this._entry, 'edit'); - this.child = this._stack; - - this._entry.connect('activate', () => { + this.connect('changed', () => { this.activate_action('workspaces.rename', - new GLib.Variant('(ss)', [this.name, this._entry.text])); - this.name = this._entry.text; - this._stopEdit(); + new GLib.Variant('(ss)', [this.name, this.text])); + this.name = this.text; }); - this._entry.connect('notify::has-focus', () => { - if (this._entry.has_focus) - return; - this._stopEdit(); - }); - } - - edit() { - this._entry.text = this.name; - this._entry.grab_focus(); - this._stack.visible_child_name = 'edit'; - } - - _stopEdit() { - this.grab_focus(); - this._stack.visible_child_name = 'display'; } } From fc265fbe59988a49fccebf1a6829a668f31aa65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:13:05 +0200 Subject: [PATCH 029/101] workspace-indicator: Don't mention "top bar" in prefs The preferences will be shared with the window-list extension, so avoid mentioning a specific placement. Part-of: --- extensions/workspace-indicator/workspacePrefs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js index e0dc03ce..95537bc7 100644 --- a/extensions/workspace-indicator/workspacePrefs.js +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -26,7 +26,7 @@ class GeneralGroup extends Adw.PreferencesGroup { super(); const row = new Adw.SwitchRow({ - title: _('Show Previews In Top Bar'), + title: _('Show Previews'), }); this.add(row); From 832cf0fc84c3a867ff6b0a55dab7a3ee794287c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:31:36 +0200 Subject: [PATCH 030/101] workspace-indicator: Set title and icon on prefs page The window-list extension will add the workspace prefs as additional page, so it needs a title and icon for the view switcher. Part-of: --- extensions/workspace-indicator/workspacePrefs.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js index 95537bc7..6103d4d3 100644 --- a/extensions/workspace-indicator/workspacePrefs.js +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -222,7 +222,10 @@ export class WorkspacesPage extends Adw.PreferencesPage { } constructor(settings) { - super(); + super({ + title: _('Workspaces'), + icon_name: 'view-grid-symbolic', + }); this.add(new GeneralGroup(settings)); this.add(new WorkspacesGroup()); From 3bc06bb78fbedeaade3fc509af0a2e8fb3031167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:45:54 +0200 Subject: [PATCH 031/101] window-list: Set title and icon on prefs page Like the workspace prefs page, the existing window list prefs should set title and icon for the view switcher. Part-of: --- extensions/window-list/prefs.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 0633d590..a97de997 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -18,7 +18,10 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { } constructor(settings) { - super(); + super({ + title: _('Window List'), + icon_name: 'focus-windows-symbolic', + }); this._actionGroup = new Gio.SimpleActionGroup(); this.insert_action_group('window-list', this._actionGroup); From 63ea38a16dae775c0c1594e407afb34c25a95f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:45:54 +0200 Subject: [PATCH 032/101] window-list: Remove workspace-previews setting from prefs We are about to include the workspace prefs page from the workspace-indicator extension, which already includes the setting. Part-of: --- extensions/window-list/prefs.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index a97de997..19bd0fa5 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -74,12 +74,6 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { action_name: 'window-list.display-all-workspaces', }); miscGroup.add(row); - - row = new Adw.SwitchRow({ - title: _('Show workspace previews'), - action_name: 'window-list.embed-previews', - }); - miscGroup.add(row); } } From 51ce4981c84e4bc1f06b3917bafac5b65619ae4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 12:45:54 +0200 Subject: [PATCH 033/101] window-list: Add workspaces page to prefs This brings back the workspace-previews setting, and adds the ability to change the workspace names. Given that those names are used as tooltips or preview titles, it makes sense to allow editing them from the extension prefs rather than relying on external tools (like dconf-editor). Part-of: --- extensions/window-list/meson.build | 1 + extensions/window-list/prefs.js | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/extensions/window-list/meson.build b/extensions/window-list/meson.build index 6fd17007..e19c1d0f 100644 --- a/extensions/window-list/meson.build +++ b/extensions/window-list/meson.build @@ -37,6 +37,7 @@ workspaceIndicatorSources = [ command: transform_stylesheet, capture: true, ), + files('../workspace-indicator/workspacePrefs.js'), ] extension_sources += files('prefs.js') + workspaceIndicatorSources diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 19bd0fa5..3d00163e 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -12,7 +12,9 @@ import Gtk from 'gi://Gtk'; import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; -class WindowListPrefsWidget extends Adw.PreferencesPage { +import {WorkspacesPage} from './workspacePrefs.js'; + +class WindowListPage extends Adw.PreferencesPage { static { GObject.registerClass(this); } @@ -78,7 +80,9 @@ class WindowListPrefsWidget extends Adw.PreferencesPage { } export default class WindowListPrefs extends ExtensionPreferences { - getPreferencesWidget() { - return new WindowListPrefsWidget(this.getSettings()); + fillPreferencesWindow(window) { + const settings = this.getSettings(); + window.add(new WindowListPage(settings)); + window.add(new WorkspacesPage(settings)); } } From 527ce99851cca026e25bf4d1e2106f63630555b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 02:29:36 +0200 Subject: [PATCH 034/101] places-menu: Remove superfluous error handling None of the constructors checks whether the file exists, so there is no reason to check for `NOT_FOUND` errors. Part-of: --- extensions/places-menu/placeDisplay.js | 34 +++----------------------- 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 930f92c6..75d66f5a 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -343,16 +343,8 @@ export class PlacesManager extends EventEmitter { if (!specialPath || specialPath === homePath) continue; - let file = Gio.File.new_for_path(specialPath), info; - try { - info = new PlaceInfo('special', file); - } catch (e) { - if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) - continue; - throw e; - } - - specials.push(info); + const file = Gio.File.new_for_path(specialPath); + specials.push(new PlaceInfo('special', file)); } specials.sort((a, b) => GLib.utf8_collate(a.name, b.name)); @@ -509,30 +501,12 @@ export class PlacesManager extends EventEmitter { } _addMount(kind, mount) { - let devItem; - - try { - devItem = new PlaceDeviceInfo(kind, mount); - } catch (e) { - if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) - return; - throw e; - } - + const devItem = new PlaceDeviceInfo(kind, mount); this._places[kind].push(devItem); } _addVolume(kind, volume) { - let volItem; - - try { - volItem = new PlaceVolumeInfo(kind, volume); - } catch (e) { - if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) - return; - throw e; - } - + const volItem = new PlaceVolumeInfo(kind, volume); this._places[kind].push(volItem); } From 1506a730c52acad665c47bae0b45dc46c00b8e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 00:50:45 +0200 Subject: [PATCH 035/101] places-menu: Use Gio.File to check for equality Strings may be different, but still refer to the same file ('/home/user' vs. '/home/user/', or even '/home/user/./'). Account for that by comparing files for equality rather than paths. Part-of: --- extensions/places-menu/placeDisplay.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 75d66f5a..bd1b0466 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -325,11 +325,11 @@ export class PlacesManager extends EventEmitter { this._places.special.forEach(p => p.destroy()); this._places.special = []; - let homePath = GLib.get_home_dir(); + const homeFile = Gio.File.new_for_path(GLib.get_home_dir()); this._places.special.push(new PlaceInfo( 'special', - Gio.File.new_for_path(homePath), + homeFile, _('Home'))); let specials = []; @@ -340,11 +340,12 @@ export class PlacesManager extends EventEmitter { for (let i = 0; i < dirs.length; i++) { let specialPath = GLib.get_user_special_dir(dirs[i]); - if (!specialPath || specialPath === homePath) - continue; + const specialFile = specialPath + ? Gio.File.new_for_path(specialPath) + : null; - const file = Gio.File.new_for_path(specialPath); - specials.push(new PlaceInfo('special', file)); + if (specialFile && !specialFile.equal(homeFile)) + specials.push(new PlaceInfo('special', file)); } specials.sort((a, b) => GLib.utf8_collate(a.name, b.name)); From 60f30c5bbe7e2da67db50fd2e60b6e2d82fa8cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 00:31:47 +0200 Subject: [PATCH 036/101] places-menu: Drop network item Nautilus replaced its support for the `network:///` scheme with an internal network view. The former now shows as empty folder, so drop it from the list of places. Part-of: --- extensions/places-menu/placeDisplay.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index bd1b0466..f3bca005 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -365,11 +365,6 @@ export class PlacesManager extends EventEmitter { /* Add standard places */ this._places.devices.push(new RootInfo()); - this._places.network.push(new PlaceInfo( - 'network', - Gio.File.new_for_uri('network:///'), - _('Browse Network'), - 'network-workgroup-symbolic')); /* first go through all connected drives */ let drives = this._volumeMonitor.get_connected_drives(); From 411da924a7c54a5138c56d892f1173811576be14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 00:36:27 +0200 Subject: [PATCH 037/101] places-menu: Drop root location Nautilus no longer exposes it, so stop including it here as well. Part-of: --- extensions/places-menu/placeDisplay.js | 48 -------------------------- 1 file changed, 48 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index f3bca005..ac53913c 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -24,13 +24,6 @@ Gio._promisify(Gio.File.prototype, 'mount_enclosing_volume'); const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; -const Hostname1Iface = ' \ - \ - \ - \ -'; -const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface); - class PlaceInfo extends EventEmitter { constructor(...params) { super(); @@ -130,44 +123,6 @@ class PlaceInfo extends EventEmitter { } } -class RootInfo extends PlaceInfo { - _init() { - super._init('devices', Gio.File.new_for_path('/'), _('Computer')); - - let busName = 'org.freedesktop.hostname1'; - let objPath = '/org/freedesktop/hostname1'; - new Hostname1(Gio.DBus.system, busName, objPath, (obj, error) => { - if (error) - return; - - this._proxy = obj; - this._proxy.connectObject('g-properties-changed', - this._propertiesChanged.bind(this), this); - this._propertiesChanged(obj); - }); - } - - getIcon() { - return new Gio.ThemedIcon({name: 'drive-harddisk-symbolic'}); - } - - _propertiesChanged(proxy) { - // GDBusProxy will emit a g-properties-changed when hostname1 goes down - // ignore it - if (proxy.g_name_owner) { - this.name = proxy.PrettyHostname || _('Computer'); - this.emit('changed'); - } - } - - destroy() { - this._proxy?.disconnectObject(this); - this._proxy = null; - super.destroy(); - } -} - - class PlaceDeviceInfo extends PlaceInfo { _init(kind, mount) { this._mount = mount; @@ -363,9 +318,6 @@ export class PlacesManager extends EventEmitter { this._places.network.forEach(p => p.destroy()); this._places.network = []; - /* Add standard places */ - this._places.devices.push(new RootInfo()); - /* first go through all connected drives */ let drives = this._volumeMonitor.get_connected_drives(); for (let i = 0; i < drives.length; i++) { From c4e344f1d7b50ff3f2485498798d527d51dbcce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 01:01:30 +0200 Subject: [PATCH 038/101] places-menu: Drop user-special dirs Nautilus no longer special-cases user directories, and instead added them to the default bookmarks, so the user can customize which they want to have displayed. We already show bookmarked places, so just dropping the hard-coded list gives us the same locations as nautilus. Part-of: --- extensions/places-menu/placeDisplay.js | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index ac53913c..fd2aafe5 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -201,14 +201,6 @@ class PlaceVolumeInfo extends PlaceInfo { } } -const DEFAULT_DIRECTORIES = [ - GLib.UserDirectory.DIRECTORY_DOCUMENTS, - GLib.UserDirectory.DIRECTORY_PICTURES, - GLib.UserDirectory.DIRECTORY_MUSIC, - GLib.UserDirectory.DIRECTORY_DOWNLOAD, - GLib.UserDirectory.DIRECTORY_VIDEOS, -]; - export class PlacesManager extends EventEmitter { constructor() { super(); @@ -288,19 +280,16 @@ export class PlacesManager extends EventEmitter { _('Home'))); let specials = []; - let dirs = DEFAULT_DIRECTORIES.slice(); - if (this._settings.get_boolean('show-desktop-icons')) - dirs.push(GLib.UserDirectory.DIRECTORY_DESKTOP); - - for (let i = 0; i < dirs.length; i++) { - let specialPath = GLib.get_user_special_dir(dirs[i]); - const specialFile = specialPath - ? Gio.File.new_for_path(specialPath) + if (this._settings.get_boolean('show-desktop-icons')) { + const desktopPath = GLib.get_user_special_dir( + GLib.UserDirectory.DIRECTORY_DESKTOP); + const desktopFile = desktopPath + ? Gio.File.new_for_path(desktopPath) : null; - if (specialFile && !specialFile.equal(homeFile)) - specials.push(new PlaceInfo('special', file)); + if (desktopFile && !desktopFile.equal(homeFile)) { + specials.push(new PlaceInfo('special', desktopFile)); } specials.sort((a, b) => GLib.utf8_collate(a.name, b.name)); From f0e7358de46e19f96cbab3d5420aa2f2a08ca30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 01:08:26 +0200 Subject: [PATCH 039/101] places-menu: Stop sorting special locations Nautilus uses a fixed order rather than sorting items alphabetically, so do the same. Part-of: --- extensions/places-menu/placeDisplay.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index fd2aafe5..a8249ce8 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -279,8 +279,6 @@ export class PlacesManager extends EventEmitter { homeFile, _('Home'))); - let specials = []; - if (this._settings.get_boolean('show-desktop-icons')) { const desktopPath = GLib.get_user_special_dir( GLib.UserDirectory.DIRECTORY_DESKTOP); @@ -289,12 +287,11 @@ export class PlacesManager extends EventEmitter { : null; if (desktopFile && !desktopFile.equal(homeFile)) { - specials.push(new PlaceInfo('special', desktopFile)); + this._places.special.push( + new PlaceInfo('special', desktopFile)); + } } - specials.sort((a, b) => GLib.utf8_collate(a.name, b.name)); - this._places.special = this._places.special.concat(specials); - this.emit('special-updated'); } From 8da874355c42c6b6c606068f5490c1221a6c4ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 01:06:04 +0200 Subject: [PATCH 040/101] places-menu: Add "Recent" item Recent files are much more prominent in Nautilus nowadays, so it makes sense to include it in the list of places. Part-of: --- extensions/places-menu/placeDisplay.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index a8249ce8..4d1d919a 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -215,6 +215,12 @@ export class PlacesManager extends EventEmitter { this._settings = new Gio.Settings({schema_id: BACKGROUND_SCHEMA}); this._settings.connectObject('changed::show-desktop-icons', () => this._updateSpecials(), this); + + this._privacySettings = new Gio.Settings({ + schema_id: 'org.gnome.desktop.privacy', + }); + this._privacySettings.connectObject('changed::remember-recent-files', + () => this._updateSpecials(), this); this._updateSpecials(); /* @@ -260,6 +266,9 @@ export class PlacesManager extends EventEmitter { this._settings?.disconnectObject(this); this._settings = null; + this._privacySettings.disconnectObject(this); + this._privacySettings = null; + this._volumeMonitor.disconnectObject(this); if (this._monitor) @@ -268,6 +277,13 @@ export class PlacesManager extends EventEmitter { GLib.source_remove(this._bookmarkTimeoutId); } + _shouldShowRecent() { + const vfs = Gio.Vfs.get_default(); + const schemes = vfs.get_supported_uri_schemes(); + return this._privacySettings.get_boolean('remember-recent-files') && + schemes.includes('recent'); + } + _updateSpecials() { this._places.special.forEach(p => p.destroy()); this._places.special = []; @@ -279,6 +295,13 @@ export class PlacesManager extends EventEmitter { homeFile, _('Home'))); + if (this._shouldShowRecent()) { + this._places.special.push(new PlaceInfo( + 'special', + Gio.File.new_for_uri('recent:///'), + _('Recent'))); + } + if (this._settings.get_boolean('show-desktop-icons')) { const desktopPath = GLib.get_user_special_dir( GLib.UserDirectory.DIRECTORY_DESKTOP); From 8a62e491a8367dbf7a5a811ead5076747553595a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 01:07:25 +0200 Subject: [PATCH 041/101] places-menu: Add "Trash" item While much less prominent then "Recent", let's include it for consistency with nautilus. Part-of: --- extensions/places-menu/placeDisplay.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 4d1d919a..597ef7c5 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -315,6 +315,11 @@ export class PlacesManager extends EventEmitter { } } + this._places.special.push(new PlaceInfo( + 'special', + Gio.File.new_for_uri('trash:///'), + _('Trash'))); + this.emit('special-updated'); } From a81f4f48854f303f3efd9bd58738b28687f9f8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 29 Sep 2024 01:25:14 +0200 Subject: [PATCH 042/101] places-menu: Add nautilus-specific items Both the "Starred" and "Network" locations are internal to nautilus and not exposed to gvfs. We can still support them by opening them explicitly in nautilus, so add corresponding places if nautilus is installed and set up as default file manager. After this change, the list of places should be consistent with the sidebar in the file manager again. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/522 Part-of: --- extensions/places-menu/placeDisplay.js | 34 ++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 597ef7c5..faf1d3ac 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -123,6 +123,20 @@ class PlaceInfo extends EventEmitter { } } +class NautilusSpecialInfo extends PlaceInfo { + constructor(file, name, icon) { + super('special', file, name, icon); + + const appSystem = Shell.AppSystem.get_default(); + this._app = appSystem.lookup_app('org.gnome.Nautilus.desktop'); + } + + launch(timestamp) { + const launchContext = global.create_app_launch_context(timestamp, -1); + this._app.appInfo.launch([this.file], launchContext); + } +} + class PlaceDeviceInfo extends PlaceInfo { _init(kind, mount) { this._mount = mount; @@ -288,6 +302,12 @@ export class PlacesManager extends EventEmitter { this._places.special.forEach(p => p.destroy()); this._places.special = []; + const appSystem = Shell.AppSystem.get_default(); + const nautilusApp = appSystem.lookup_app('org.gnome.Nautilus.desktop'); + const defaultFm = Gio.AppInfo.get_default_for_type('inode/directory', true); + const showNautilusSpecials = + nautilusApp && defaultFm && nautilusApp.appInfo.equal(defaultFm); + const homeFile = Gio.File.new_for_path(GLib.get_home_dir()); this._places.special.push(new PlaceInfo( @@ -302,6 +322,13 @@ export class PlacesManager extends EventEmitter { _('Recent'))); } + if (showNautilusSpecials) { + this._places.special.push(new NautilusSpecialInfo( + Gio.File.new_for_uri('starred:///'), + _('Starred'), + 'starred-symbolic')); + } + if (this._settings.get_boolean('show-desktop-icons')) { const desktopPath = GLib.get_user_special_dir( GLib.UserDirectory.DIRECTORY_DESKTOP); @@ -315,6 +342,13 @@ export class PlacesManager extends EventEmitter { } } + if (showNautilusSpecials) { + this._places.special.push(new NautilusSpecialInfo( + Gio.File.new_for_uri('x-network-view:///'), + _('Network'), + 'network-workgroup-symbolic')); + } + this._places.special.push(new PlaceInfo( 'special', Gio.File.new_for_uri('trash:///'), From 8f75ccae345bf79b00838c8d5be1f7c538058445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 16 Oct 2024 12:04:40 +0200 Subject: [PATCH 043/101] export-zips: Use --destdir instead of custom prefix meson skips some steps like schema compilation when DESTDIR is set, so this is slightly more efficient. Part-of: --- export-zips.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/export-zips.sh b/export-zips.sh index 2d7383c3..af0cb9a6 100755 --- a/export-zips.sh +++ b/export-zips.sh @@ -8,16 +8,16 @@ srcdir=`dirname $0` srcdir=`(cd $srcdir && pwd)` builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1 -installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1 +destdir=`mktemp -p $srcdir -d _dest.XXXXXX` || exit 1 -meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir -meson install -C $builddir +meson setup --prefix=/usr -Dextension_set=all $srcdir $builddir +meson install --destdir $destdir -C $builddir rm -rf $srcdir/zip-files mkdir $srcdir/zip-files -extensiondir=$installdir/share/gnome-shell/extensions -schemadir=$installdir/share/glib-2.0/schemas +extensiondir=$destdir/usr/share/gnome-shell/extensions +schemadir=$destdir/usr/share/glib-2.0/schemas for f in $extensiondir/*; do name=`basename ${f%%@*}` @@ -50,4 +50,4 @@ for f in $extensiondir/*; do done rm -rf $builddir -rm -rf $installdir +rm -rf $destdir From 97d64614af9a56aa26f32482cacbd5232211dbc6 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 16 Oct 2024 21:42:58 +0000 Subject: [PATCH 044/101] Update Slovenian translation --- po/sl.po | 115 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 63 insertions(+), 52 deletions(-) diff --git a/po/sl.po b/po/sl.po index 43097073..7ea8265f 100644 --- a/po/sl.po +++ b/po/sl.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-05-02 00:11+0200\n" +"POT-Creation-Date: 2024-10-16 14:41+0000\n" +"PO-Revision-Date: 2024-10-16 23:41+0200\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Slovenian GNOME Translation Team \n" "Language: sl_SI\n" @@ -69,7 +69,7 @@ msgstr "Dodaj pravilo" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Izmetavanje pogona »%s« je spodletelo:" @@ -115,28 +115,35 @@ msgstr "" msgid "Places" msgstr "Mesta" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "Zaganjanje »%s« je spodletelo." -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Priklapljanje nosilca za »%s« je spodletelo" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Računalnik" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Osebna mapa" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Prebrskaj omrežje" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Nedavno" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Z zvezdico" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Omrežje" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Koš" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -226,47 +233,47 @@ msgstr "Ime teme" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Ime teme, ki bo naložena iz ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Zapri" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Povečaj" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Skrči" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Pomanjšaj" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "Razpni" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Skrči vse" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Pomanjšaj vse" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Razpni vse" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Pomanjšaj vse" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Zapri vse" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "Seznam oken" @@ -283,7 +290,7 @@ msgstr "" "Veljavne vrednosti so »nikoli«, »samodejno« in »vedno«." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "Pokaži okna vseh delovnih površin" @@ -307,47 +314,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Pokaži predoglede delovne površine na seznamu oken" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "Združevanje oken" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "Nikoli ne združuj oken" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "Združi okna, ko je prostor omejen" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "Okna vedno združuj" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "Pokaži na vseh zaslonih" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Pokaži predoglede delovne površine" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Pokaži predoglede v zgornji vrstici" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Delovna površina %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Imena delovnih površin" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Dodaj delovno površino" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Pokaži predoglede delovne površine v zgornji vrstici" @@ -355,3 +341,28 @@ msgstr "Pokaži predoglede delovne površine v zgornji vrstici" #: extensions/workspace-indicator/workspaceIndicator.js:430 msgid "Workspace Indicator" msgstr "Kazalnik delovnih površin" + +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "Pokaži predoglede" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "Delovna površina %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "Imena delovnih površin" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "Dodaj delovno površino" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "Odstrani" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "Delovne površine" From 46a4fa09761067f0b5027c7268726326b7c97d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 17 Oct 2024 22:52:17 +0200 Subject: [PATCH 045/101] cleanup: Use null for nick/blurb in ParamSpecs As they are only used by gstreamer for gst-inspect & other tools. Projects like mutter and gtk have already completely dropped them, so follow their lead. Part-of: --- extensions/auto-move-windows/prefs.js | 6 +++--- extensions/window-list/extension.js | 2 +- extensions/workspace-indicator/workspaceIndicator.js | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/extensions/auto-move-windows/prefs.js b/extensions/auto-move-windows/prefs.js index 10c14717..683bbdcc 100644 --- a/extensions/auto-move-windows/prefs.js +++ b/extensions/auto-move-windows/prefs.js @@ -45,11 +45,11 @@ class NewItemModel extends GObject.Object { class Rule extends GObject.Object { static [GObject.properties] = { 'app-info': GObject.ParamSpec.object( - 'app-info', 'app-info', 'app-info', + 'app-info', null, null, GObject.ParamFlags.READWRITE, Gio.DesktopAppInfo), 'workspace': GObject.ParamSpec.uint( - 'workspace', 'workspace', 'workspace', + 'workspace', null, null, GObject.ParamFlags.READWRITE, 1, WORKSPACE_MAX, 1), }; @@ -196,7 +196,7 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup { class WorkspaceSelector extends Gtk.Widget { static [GObject.properties] = { 'number': GObject.ParamSpec.uint( - 'number', 'number', 'number', + 'number', null, null, GObject.ParamFlags.READWRITE, 1, WORKSPACE_MAX, 1), }; diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 885bb5ac..a4268589 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -282,7 +282,7 @@ class BaseButton extends DashItemContainer { GTypeFlags: GObject.TypeFlags.ABSTRACT, Properties: { 'ignore-workspace': GObject.ParamSpec.boolean( - 'ignore-workspace', 'ignore-workspace', 'ignore-workspace', + 'ignore-workspace', null, null, GObject.ParamFlags.READWRITE, false), }, diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 20d4caa2..18a8d4e9 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -113,11 +113,11 @@ class WorkspaceLayout extends Clutter.LayoutManager { class WorkspaceThumbnail extends St.Button { static [GObject.properties] = { 'active': GObject.ParamSpec.boolean( - 'active', '', '', + 'active', null, null, GObject.ParamFlags.READWRITE, false), 'show-label': GObject.ParamSpec.boolean( - 'show-label', '', '', + 'show-label', null, null, GObject.ParamFlags.READWRITE, false), }; @@ -311,7 +311,7 @@ class WorkspaceThumbnail extends St.Button { class WorkspacePreviews extends Clutter.Actor { static [GObject.properties] = { 'show-labels': GObject.ParamSpec.boolean( - 'show-labels', '', '', + 'show-labels', null, null, GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, false), }; From c8b54bdf255125fe21c6da048fab7536692931a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 17 Oct 2024 22:57:06 +0200 Subject: [PATCH 046/101] docs: Remove obsolete sass submodule documentation Thankfully the submodule is gone, so we don't have to document how to updated it. Part-of: --- REUSE.toml | 2 +- data/HACKING | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 data/HACKING diff --git a/REUSE.toml b/REUSE.toml index d5f1da95..8e8f4ca1 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -7,7 +7,7 @@ SPDX-PackageSupplier = "Florian Müllner " SPDX-PackageDownloadLocation = "https://gitlab.gnome.org/GNOME/gnome-shell-extensions" [[annotations]] -path = ["NEWS", "README.md", "HACKING.md", "data/HACKING"] +path = ["NEWS", "README.md", "HACKING.md"] SPDX-FileCopyrightText = "No rights reserved" SPDX-License-Identifier = "CC0-1.0" diff --git a/data/HACKING b/data/HACKING deleted file mode 100644 index 8e053392..00000000 --- a/data/HACKING +++ /dev/null @@ -1,2 +0,0 @@ -To update the gnome-shell-sass submodule to latest upstream commit: -git submodule update --rebase From 62e95e4b28edffeef3427cbe45facbc9ddad101c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 00:08:38 +0200 Subject: [PATCH 047/101] reuse: Use CC-BY-SA-4.0 for licensing project documentation Writing and maintaining free-form documentation is non-trivial work, and CC0 is therefore not the right license. Reflect that by changing the license to CC-BY-SA and update the list of copyright holders based on the files' git history. Part-of: --- LICENSES/CC-BY-SA-4.0.txt | 170 ++++++++++++++++++++++++++++++++++++++ REUSE.toml | 27 +++++- 2 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 LICENSES/CC-BY-SA-4.0.txt diff --git a/LICENSES/CC-BY-SA-4.0.txt b/LICENSES/CC-BY-SA-4.0.txt new file mode 100644 index 00000000..835a6836 --- /dev/null +++ b/LICENSES/CC-BY-SA-4.0.txt @@ -0,0 +1,170 @@ +Creative Commons Attribution-ShareAlike 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. + +Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution-ShareAlike 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. + + C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + + 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/REUSE.toml b/REUSE.toml index 8e8f4ca1..dc979c12 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -7,9 +7,30 @@ SPDX-PackageSupplier = "Florian Müllner " SPDX-PackageDownloadLocation = "https://gitlab.gnome.org/GNOME/gnome-shell-extensions" [[annotations]] -path = ["NEWS", "README.md", "HACKING.md"] -SPDX-FileCopyrightText = "No rights reserved" -SPDX-License-Identifier = "CC0-1.0" +path = "NEWS" +SPDX-FileCopyrightText = """ +2011 Giovanni Campagna +2013 Florian Müllner """ +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "README.md" +SPDX-FileCopyrightText = """ +2011 Giovanni Campagna +2011 Adam Dingle +2011 Vamsi Krishna Brahmajosyula +2014 Michael Catanzaro +2015 Florian Müllner +2019 Fabian P. Schmidt +2024 Aral Balkan """ +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "HACKING.md" +SPDX-FileCopyrightText = """ +2011 Giovanni Campagna +2017 Florian Müllner """ +SPDX-License-Identifier = "CC-BY-SA-4.0" [[annotations]] path = ["**.json.in", "**.desktop.in", "**.gschema.override"] From de6b9bf47358f71aa9874df91a11b287ff31f9b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 00:19:49 +0200 Subject: [PATCH 048/101] reuse: Use inline comments for markdown documents Comments are hidden in gitlab, so including the copyright information in the documents themselves doesn't get too much in the way. Part-of: --- HACKING.md | 6 ++++++ README.md | 11 +++++++++++ REUSE.toml | 19 ------------------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/HACKING.md b/HACKING.md index 6d87c52c..f7a393a5 100644 --- a/HACKING.md +++ b/HACKING.md @@ -1,3 +1,9 @@ + + ## Creating a New Extension To create a new extension, add a subdirectory in extensions. Then create diff --git a/README.md b/README.md index 5fd1c37d..c8b78eca 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ + + # GNOME Shell Extensions GNOME Shell Extensions is a collection of extensions providing additional diff --git a/REUSE.toml b/REUSE.toml index dc979c12..9a5ff985 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -13,25 +13,6 @@ SPDX-FileCopyrightText = """ 2013 Florian Müllner """ SPDX-License-Identifier = "CC-BY-SA-4.0" -[[annotations]] -path = "README.md" -SPDX-FileCopyrightText = """ -2011 Giovanni Campagna -2011 Adam Dingle -2011 Vamsi Krishna Brahmajosyula -2014 Michael Catanzaro -2015 Florian Müllner -2019 Fabian P. Schmidt -2024 Aral Balkan """ -SPDX-License-Identifier = "CC-BY-SA-4.0" - -[[annotations]] -path = "HACKING.md" -SPDX-FileCopyrightText = """ -2011 Giovanni Campagna -2017 Florian Müllner """ -SPDX-License-Identifier = "CC-BY-SA-4.0" - [[annotations]] path = ["**.json.in", "**.desktop.in", "**.gschema.override"] SPDX-FileCopyrightText = "Florian Müllner " From 10884351206dde4192685c4a5b35db91b712a648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 17:29:27 +0200 Subject: [PATCH 049/101] build: Rename meson_options.txt to meson.options The name is a bit cleaner, and has been the preferred option(!) since meson 1.1. Mutter recently updated the name, so follow suite. The meson version bump shouldn't be an issue, given that several hard dependencies like mutter and glib already require higher versions. Part-of: --- meson.build | 2 +- meson_options.txt => meson.options | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename meson_options.txt => meson.options (100%) diff --git a/meson.build b/meson.build index 46adf6cf..efd69755 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,7 @@ project('gnome-shell-extensions', version: '47.0', - meson_version: '>= 0.58.0', + meson_version: '>= 1.1.0', license: 'GPL2+' ) diff --git a/meson_options.txt b/meson.options similarity index 100% rename from meson_options.txt rename to meson.options From 2c922a6d3a7c692a7056bed9c46d69e2432f3163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 19 Oct 2024 04:17:43 +0200 Subject: [PATCH 050/101] gitlab: Add issue templates Providing templates is good practice, to guide users towards more actionable reports. This also gives us a place to point out where to report issues with gnome-shell's extension system or the website, and thus hopefully reducing the number of misfiled issues. Part-of: --- .gitlab/issue_templates/Default.md | 72 ++++++++++++++++++++++ .gitlab/issue_templates/Default.md.license | 2 + .gitlab/issue_templates/Feature.md | 47 ++++++++++++++ .gitlab/issue_templates/Feature.md.license | 3 + 4 files changed, 124 insertions(+) create mode 100644 .gitlab/issue_templates/Default.md create mode 100644 .gitlab/issue_templates/Default.md.license create mode 100644 .gitlab/issue_templates/Feature.md create mode 100644 .gitlab/issue_templates/Feature.md.license diff --git a/.gitlab/issue_templates/Default.md b/.gitlab/issue_templates/Default.md new file mode 100644 index 00000000..b1b34dc6 --- /dev/null +++ b/.gitlab/issue_templates/Default.md @@ -0,0 +1,72 @@ + + +### Which extension + + + +### Affected version + + + +### Bug summary + + + +### Steps to reproduce + + + +### What happened + + + +### What did you expect to happen + + + +### Relevant logs, screenshots, screencasts etc. + + + + + +/label ~"1. Bug" diff --git a/.gitlab/issue_templates/Default.md.license b/.gitlab/issue_templates/Default.md.license new file mode 100644 index 00000000..46e30135 --- /dev/null +++ b/.gitlab/issue_templates/Default.md.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2024 Florian Müllner +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/.gitlab/issue_templates/Feature.md b/.gitlab/issue_templates/Feature.md new file mode 100644 index 00000000..48c13a6f --- /dev/null +++ b/.gitlab/issue_templates/Feature.md @@ -0,0 +1,47 @@ + + +### Which extension + + + +### Feature summary + + + +### How would you like it to work + + + +### Relevant links, screenshots, screencasts etc. + + + + + +/label ~"1. Feature" diff --git a/.gitlab/issue_templates/Feature.md.license b/.gitlab/issue_templates/Feature.md.license new file mode 100644 index 00000000..772a7d7b --- /dev/null +++ b/.gitlab/issue_templates/Feature.md.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2024 Florian Müllner +SPDX-License-Identifier: CC-BY-SA-4.0 + From 0cb409f1c27ff83a0a1bcc6715291100cfb75b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 00:36:28 +0200 Subject: [PATCH 051/101] docs: Drop default branch section from README It's been more than 3 years since we renamed the default branch, people have probably got the message by now. Part-of: --- README.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/README.md b/README.md index c8b78eca..4ff25a68 100644 --- a/README.md +++ b/README.md @@ -80,19 +80,6 @@ GSettings key. Adds a simple workspace switcher to the top bar. -## Default branch - -The default development branch is `main`. If you still have a local -checkout under the old name, use: -```sh -git checkout master -git branch -m master main -git fetch -git branch --unset-upstream -git branch -u origin/master -git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main -``` - ## License GNOME Shell Extensions are distributed under the terms of the GNU General From 6e5cef8761f95dfd828d3eed71090a43f1f1ad47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 23:51:42 +0200 Subject: [PATCH 052/101] docs: Remove project wiki reference from README The wiki is in the process of being retired, so we should stop linking to it. Death to the wiki! Part-of: --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 4ff25a68..fd53edc1 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,6 @@ specific version of the shell, usually the same as this package (see "configure --version"). The extensions in this package are supported by GNOME and will be updated to reflect future API changes in GNOME Shell. -The GNOME wiki has more information about [GNOME Shell Extensions][project-page], -as well as some general information about [GNOME Shell][shell-page]. - Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. ## Extensions @@ -87,8 +84,6 @@ Public License, version 2 or later. See the [COPYING file][license] for details. Individual extensions may be licensed under different terms, see each source file for details. -[project-page]: https://wiki.gnome.org/Projects/GnomeShell/Extensions -[shell-page]: https://wiki.gnome.org/Projects/GnomeShell [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues [license]: COPYING [alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/ From f12badc7aa2c595b62dea5b516adb07c55a1b1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 01:51:39 +0200 Subject: [PATCH 053/101] docs: Improve tone of support notice Instead of a generic note about gnome-shell API stability and extension compatibility in general, positively state what is supported by the project. Part-of: --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fd53edc1..3089a4bc 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,19 @@ SPDX-License-Identifier: CC-BY-SA-4.0 GNOME Shell Extensions is a collection of extensions providing additional and optional functionality to GNOME Shell. -Since GNOME Shell is not API stable, extensions work only against a very -specific version of the shell, usually the same as this package (see -"configure --version"). The extensions in this package are supported by GNOME -and will be updated to reflect future API changes in GNOME Shell. +The extensions in this package are supported by GNOME and will be updated +to reflect future API changes in GNOME Shell. + +Both the most recent stable release and the previous stable release of +GNOME Shell are actively supported, as well as the current development +branch. + +Please refer to the [schedule] to see when a new version will be released. Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. +[schedule]: https://release.gnome.org/calendar + ## Extensions * alternate-tab (**OBSOLETE**) From 6cfdd9db38027372cece8a1addb6c3866003a9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 00:46:20 +0200 Subject: [PATCH 054/101] docs: Update list of extensions The README has a list of extensions with a brief description, but the most recent additions haven't been added yet. Rectify that. Part-of: --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 3089a4bc..91586384 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,11 @@ GSettings key. Changes application icons to always launch a new instance when activated. + * light-style + + Changes the default shell style to "light", while still following the + system-wide "dark" preference. + * native-window-placement An alternative algorithm for layouting the thumbnails in the windows overview, that @@ -67,6 +72,14 @@ GSettings key. Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots. Ctrl + Alt + s cycles forwards through the available sizes and Ctrl + Alt + Shift + s cycles backwards. + * status-icons + + Show (XEmbed) status icons in the top bar. + + * system-monitor + + Shows system usage information in the top bar. + * user-theme Loads a shell theme from ~/.themes//gnome-shell. From e41da8fcae15b8efba630b8002d5bc92c0a32dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 19 Oct 2024 02:59:55 +0200 Subject: [PATCH 055/101] docs: Use user data theme dir in user-themes description The XDG paths are preferred over the old `~/.themes`. Part-of: --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 91586384..d2a72b31 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ GSettings key. * user-theme - Loads a shell theme from ~/.themes//gnome-shell. + Loads a shell theme from `$XDG_DATA_HOME/themes//gnome-shell`. * window-list From 84fc1b671fac0b0accbad15456ac5f73791aa5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 19 Oct 2024 03:35:55 +0200 Subject: [PATCH 056/101] docs: Don't mention gsettings in auto-move description The extension has included a preference dialog for a long time, which is much more user-friendly than manually changing a (relocatable!) gsetting. Part-of: --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d2a72b31..f2b8a982 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,7 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. * auto-move-windows Lets you manage your workspaces more easily, assigning a specific workspace to -each application as soon as it creates a window, in a manner configurable with a -GSettings key. + each application as soon as it creates a window. * drive-menu From 3f631c7398f8646e3618f1ae0c67bc5d5970e4a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 01:28:10 +0200 Subject: [PATCH 057/101] docs: Add new "Ex-Extensions" subsection It is odd that the first entry of the list of extensions refers to an obsolete extension that was removed years ago. Move it into a new "Ex-Extensions" subsection at the bottom of the list. Part-of: --- README.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f2b8a982..fe0f5d2e 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,6 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. ## Extensions - * alternate-tab (**OBSOLETE**) - - Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell. - This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post] - for further details. - * apps-menu Lets you reach an application using gnome 2.x style menu on the panel. @@ -95,6 +89,23 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. Adds a simple workspace switcher to the top bar. +### Ex-Extensions + + Occasionally over the years, some extensions were removed. + + The following list is not complete, but limited to cases that + are notable for some reason; either the removal happened + relatively recently, or the extension used to be particularly + popular in the past. + + * alternate-tab + + Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell. + This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post] + for further details. + +[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/ + ## License GNOME Shell Extensions are distributed under the terms of the GNU General @@ -104,4 +115,3 @@ file for details. [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues [license]: COPYING -[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/ From 3201a1f8ac0387b813c1fa0f26d4ee31568dcdbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 19 Oct 2024 03:37:40 +0200 Subject: [PATCH 058/101] docs: Add small introduction to extensions section Directly starting the section with a long list doesn't look very good :-) Part-of: --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fe0f5d2e..fc1b97a3 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,9 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. ## Extensions +The following is a complete list of extensions that are provided by this +project. + * apps-menu Lets you reach an application using gnome 2.x style menu on the panel. From 15ffbf147ff6f1d37d37c3639bbfd36d595ad4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 03:37:34 +0200 Subject: [PATCH 059/101] docs: Elaborate on issue reporting We currently just link to the issue tracker without providing any further guidance. Improve on that by pointing to the appropriate handbook chapter, point out extensions as a possible source of issues, and direct users towards discourse/matrix for support/discussions. Based on a similar section in gnome-shell's README. Part-of: --- README.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fc1b97a3..526d3a8b 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,6 @@ branch. Please refer to the [schedule] to see when a new version will be released. -Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. - [schedule]: https://release.gnome.org/calendar ## Extensions @@ -109,6 +107,27 @@ project. [alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/ +## Reporting bugs + +Bugs should be reported to the [issue tracking system][bug-tracker]. + +The [GNOME handbook][bug-handbook] has useful information for creating +effective issue reports. + +Please note that the issue tracker is meant to be used for +actionable issues only. + +For support questions, feedback on changes or general discussions, +you can use: + + - the [#gnome-shell matrix room][matrix-room] + - the `Desktop` category or `extensions` and `shell` tags on [GNOME Discourse][discourse] + +[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues +[bug-handbook]: https://handbook.gnome.org/issues/reporting.html +[matrix-room]: https://matrix.to/#/#gnome-shell:gnome.org +[discourse]: https://discourse.gnome.org + ## License GNOME Shell Extensions are distributed under the terms of the GNU General @@ -116,5 +135,4 @@ Public License, version 2 or later. See the [COPYING file][license] for details. Individual extensions may be licensed under different terms, see each source file for details. -[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues [license]: COPYING From eb4a17c2c828076935a13fda49281a8f717a1375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 18 Oct 2024 03:39:15 +0200 Subject: [PATCH 060/101] docs: Mention code of conduct in README All project interactions are subject to the code of conduct, so it seems like a good idea to explicitly mention that in the README. Part-of: --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 526d3a8b..e5054f2e 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,12 @@ you can use: [matrix-room]: https://matrix.to/#/#gnome-shell:gnome.org [discourse]: https://discourse.gnome.org +## Code of Conduct + +All interactions with the project should follow the [Code of Conduct][conduct]. + +[conduct]: https://conduct.gnome.org/ + ## License GNOME Shell Extensions are distributed under the terms of the GNU General From 7fc2bbb8963f46ee2adea630aad531b469975f87 Mon Sep 17 00:00:00 2001 From: Fabio Tomat Date: Sun, 20 Oct 2024 20:05:12 +0000 Subject: [PATCH 061/101] Update Friulian translation --- po/fur.po | 125 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/po/fur.po b/po/fur.po index 2981645b..132a2a03 100644 --- a/po/fur.po +++ b/po/fur.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-10-07 15:05+0000\n" -"Last-Translator: Fabio T. \n" +"POT-Creation-Date: 2024-10-19 02:53+0000\n" +"PO-Revision-Date: 2024-10-20 20:04+0000\n" +"Last-Translator: Fabio Tomat \n" "Language-Team: Friulian \n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Editor: HaiPO 2.0 beta\n" +"X-Editor: HaiPO 2.1 beta\n" "X-Generator: Poedit 3.4.2\n" #: data/gnome-classic.desktop.in:3 @@ -65,7 +65,7 @@ msgstr "Zonte regule" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "No si è rivâts a parâ fûr la unitât “%s”»:" @@ -112,28 +112,35 @@ msgstr "" msgid "Places" msgstr "Puescj" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "No si è rivâts a inviâ “%s”" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "No si è rivâts a montâ il volum par “%s”" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Computer" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Home" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Esplore rêt" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Resint" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Preferît" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Rêt" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Scovacere" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -223,47 +230,47 @@ msgstr "Non dal teme" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Il non dal teme, che si cjame da ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Siere" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Gjave minimizazion" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Minimize" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Gjave massimizazion" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "Massimize" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Minimize ducj" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Gjave a ducj la minimizazion" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Massimize ducj" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Gjave a ducj la massimizazion" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Siere ducj" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "Liste barcons" @@ -280,7 +287,7 @@ msgstr "" "barcons. I valôrs pussibii a son “never”, “auto” e “always”." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "Mostre i barcons di ducj i spazis di lavôr" @@ -305,47 +312,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Mostre lis anteprimis dai spazis di lavôr te liste dai barcons" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "Intropament di barcons" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "No sta meti mai in grup i barcons" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "Met dongje i barcons cuant che il spazi al è limitât" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "Met simpri in grup i barcons" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "Mostre su ducj i visôrs" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Mostre anteprimis dai spazis di lavôr" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Mostre anteprimis te sbare superiôr" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Spazi di lavôr %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Nons dai spazis di lavôr" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Zonte spazi di lavôr" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Mostre anteprimis dai spazis di lavôr te sbare superiôr" @@ -354,6 +340,37 @@ msgstr "Mostre anteprimis dai spazis di lavôr te sbare superiôr" msgid "Workspace Indicator" msgstr "Indicadôr spazi di lavôr" +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "Mostre anteprimis" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "Spazi di lavôr %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "Nons dai spazis di lavôr" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "Zonte spazi di lavôr" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "Gjave" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "Spazis di lavôr" + +#~ msgid "Computer" +#~ msgstr "Computer" + +#~ msgid "Show workspace previews" +#~ msgstr "Mostre anteprimis dai spazis di lavôr" + #~ msgid "Applications" #~ msgstr "Aplicazions" From 0ca156a2b69a8e8126532024c532d5b997c00691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 22:52:16 +0200 Subject: [PATCH 062/101] Add .editorconfig This should ensure that all editors which support https://editorconfig.org/ use the correct indentation with spaces (not tabs) by default. This is hardly a full specification of our coding style, but it's a correct subset and better than nothing. Part-of: --- .editorconfig | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..c16d08a3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2024 Florian Müllner +# SPDX-License-Identifier: CC0-1.0 + +root = true + +[*] +charset = utf-8 +end_of_line = lf + +indent_style = space +trim_trailing_whitespace = true + +[*.js] +indent_size = 4 + +[meson.build] +indent_size = 2 From 253ddb864288c466072c49d541444ad94a97e50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 22:55:15 +0200 Subject: [PATCH 063/101] extensions: Remove modelines We already include an .editorconfig that is supported by many editors, including emacs, so no need to repeat an emacs-specific modeline in every source file. Part-of: --- HACKING.md | 3 --- extensions/apps-menu/extension.js | 1 - extensions/auto-move-windows/extension.js | 3 --- extensions/auto-move-windows/prefs.js | 3 --- extensions/native-window-placement/extension.js | 1 - extensions/places-menu/extension.js | 1 - extensions/user-theme/extension.js | 3 --- extensions/user-theme/prefs.js | 2 -- extensions/window-list/prefs.js | 1 - extensions/windowsNavigator/extension.js | 1 - extensions/workspace-indicator/prefs.js | 1 - extensions/workspace-indicator/workspacePrefs.js | 1 - 12 files changed, 21 deletions(-) diff --git a/HACKING.md b/HACKING.md index f7a393a5..0ae4cd87 100644 --- a/HACKING.md +++ b/HACKING.md @@ -26,9 +26,6 @@ need in gnome-shell. Generally, we follow [GJS coding style][coding-style], which in short is: indent 4 spaces, no tabs, space after comma, no space after function call. -The Emacs mode line for this -/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ - Imports should be at the top, in two groups, one for standard imports (like imports.lang or imports.dbus) and introspection, the other for Shell API. Within the same group, put everything diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js index 17bcf3b5..688c7595 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js @@ -5,7 +5,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ import Atk from 'gi://Atk'; import Clutter from 'gi://Clutter'; import Gio from 'gi://Gio'; diff --git a/extensions/auto-move-windows/extension.js b/extensions/auto-move-windows/extension.js index 4f972cd7..34decce7 100644 --- a/extensions/auto-move-windows/extension.js +++ b/extensions/auto-move-windows/extension.js @@ -4,9 +4,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -// Start apps on custom workspaces - import Shell from 'gi://Shell'; import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; diff --git a/extensions/auto-move-windows/prefs.js b/extensions/auto-move-windows/prefs.js index 683bbdcc..98e424e0 100644 --- a/extensions/auto-move-windows/prefs.js +++ b/extensions/auto-move-windows/prefs.js @@ -3,9 +3,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -// Start apps on custom workspaces - import Adw from 'gi://Adw'; import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; diff --git a/extensions/native-window-placement/extension.js b/extensions/native-window-placement/extension.js index 03935275..9daa9537 100644 --- a/extensions/native-window-placement/extension.js +++ b/extensions/native-window-placement/extension.js @@ -5,7 +5,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- import Clutter from 'gi://Clutter'; import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js'; diff --git a/extensions/places-menu/extension.js b/extensions/places-menu/extension.js index 1431878b..bf68c029 100644 --- a/extensions/places-menu/extension.js +++ b/extensions/places-menu/extension.js @@ -5,7 +5,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ import Clutter from 'gi://Clutter'; import GObject from 'gi://GObject'; import St from 'gi://St'; diff --git a/extensions/user-theme/extension.js b/extensions/user-theme/extension.js index fd7a7b43..7cc73e0f 100644 --- a/extensions/user-theme/extension.js +++ b/extensions/user-theme/extension.js @@ -5,9 +5,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- -// Load shell theme from ~/.local/share/themes/name/gnome-shell - import Gio from 'gi://Gio'; import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; diff --git a/extensions/user-theme/prefs.js b/extensions/user-theme/prefs.js index 9b4cf951..29f4993f 100644 --- a/extensions/user-theme/prefs.js +++ b/extensions/user-theme/prefs.js @@ -2,8 +2,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- - // we use async/await here to not block the mainloop, not to parallelize /* eslint-disable no-await-in-loop */ diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js index 3d00163e..ca795067 100644 --- a/extensions/window-list/prefs.js +++ b/extensions/window-list/prefs.js @@ -3,7 +3,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- import Adw from 'gi://Adw'; import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; diff --git a/extensions/windowsNavigator/extension.js b/extensions/windowsNavigator/extension.js index f40c4a10..49dce1e8 100644 --- a/extensions/windowsNavigator/extension.js +++ b/extensions/windowsNavigator/extension.js @@ -6,7 +6,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ import Clutter from 'gi://Clutter'; import Graphene from 'gi://Graphene'; import St from 'gi://St'; diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index 2abfc3a8..7ee988cb 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -3,7 +3,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; import {WorkspacesPage} from './workspacePrefs.js'; diff --git a/extensions/workspace-indicator/workspacePrefs.js b/extensions/workspace-indicator/workspacePrefs.js index 6103d4d3..339a1a5a 100644 --- a/extensions/workspace-indicator/workspacePrefs.js +++ b/extensions/workspace-indicator/workspacePrefs.js @@ -3,7 +3,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- import Adw from 'gi://Adw'; import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; From 6df4905286b665b9eb671c45efd18677e51325d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 23:14:33 +0200 Subject: [PATCH 064/101] build: Use SPDX identifier for license Meson strongly recommends to use SPDX identifiers for the license string, and there's no reason for us to not do so. Part-of: --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index efd69755..cab14421 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ project('gnome-shell-extensions', version: '47.0', meson_version: '>= 1.1.0', - license: 'GPL2+' + license: 'GPL-2.0-or-later' ) gettext_domain = meson.project_name() From 85ee8829bfdb65d3f3f4642b0840907be4650db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 23:12:57 +0200 Subject: [PATCH 065/101] cleanup: Use format strings in meson.build Those are a bit more concise than ''.format(), and have been in meson for a long time. Part-of: --- meson.build | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index cab14421..34c0c451 100644 --- a/meson.build +++ b/meson.build @@ -75,8 +75,7 @@ if classic_mode_enabled # Sanity check: Make sure all classic extensions are enabled foreach e : classic_extensions if not enabled_extensions.contains(e) - error('Classic mode is enabled, ' + - 'but the required extension @0@ is not.'.format(e)) + error(f'Classic mode is enabled, but the required extension @e@ is not') endif endforeach endif @@ -84,7 +83,7 @@ endif # Sanity check: Make sure enabled extensions are valid foreach e : enabled_extensions if not all_extensions.contains(e) - error('Invalid extension @0@.'.format(e)) + error(f'Invalid extension @e@.') endif endforeach From 720933b08e1f1ee9f070633b69b3d760e82d3408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 23:43:09 +0200 Subject: [PATCH 066/101] cleanup: Always use dangling commas in meson.build This is meson's default formatting, and matches what we already do in JS. Part-of: --- data/meson.build | 4 ++-- meson.build | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/data/meson.build b/data/meson.build index 8b70f70f..80060c59 100644 --- a/data/meson.build +++ b/data/meson.build @@ -30,7 +30,7 @@ foreach name: session_desktops po_dir: '../po', install: true, install_dir: session_instdir, - type: 'desktop' + type: 'desktop', ) endforeach @@ -47,7 +47,7 @@ configure_file( input: mode_file + '.in', output: mode_file, configuration: mode_conf, - install_dir: modedir + install_dir: modedir, ) classic_override = '00_org.gnome.shell.extensions.classic.gschema.override' diff --git a/meson.build b/meson.build index 34c0c451..31e683e6 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ project('gnome-shell-extensions', version: '47.0', meson_version: '>= 1.1.0', - license: 'GPL-2.0-or-later' + license: 'GPL-2.0-or-later', ) gettext_domain = meson.project_name() @@ -34,7 +34,7 @@ classic_extensions = [ 'apps-menu', 'places-menu', 'launch-new-instance', - 'window-list' + 'window-list', ] default_extensions = classic_extensions @@ -45,14 +45,14 @@ default_extensions += [ 'status-icons', 'system-monitor', 'windowsNavigator', - 'workspace-indicator' + 'workspace-indicator', ] all_extensions = default_extensions all_extensions += [ 'auto-move-windows', 'native-window-placement', - 'user-theme' + 'user-theme', ] enabled_extensions = get_option('enable_extensions') @@ -91,7 +91,7 @@ if classic_mode_enabled subdir('data') meson.add_install_script( 'meson/session-post-install.py', - join_paths(get_option('prefix'), datadir) + join_paths(get_option('prefix'), datadir), ) endif From b9036180500363afa51df56fefc52904c4e8e935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 23:49:02 +0200 Subject: [PATCH 067/101] cleanup: Fix indent errors in meson.build We are supposed to use a 2-space indent, but some inconsistencies sneaked in over time. Part-of: --- data/meson.build | 46 +++++++++++++++++++++++----------------------- meson.build | 14 +++++--------- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/data/meson.build b/data/meson.build index 80060c59..35f00e72 100644 --- a/data/meson.build +++ b/data/meson.build @@ -10,33 +10,33 @@ session_desktops = [ session_desktop_base + '-wayland', ] -foreach name: session_desktops - session_desktop = name + '.desktop' - if name.endswith('-xorg') - session_instdir = xsessiondir - elif name.endswith('-wayland') - session_instdir = wlsessiondir - else - # FIXME: The same target can not be copied into two directories. - # There is a workaround in meson/session-post-install.py until proper - # solution arises: - # https://github.com/mesonbuild/meson/issues/2416 - session_instdir = xsessiondir - #session_instdir = [ xesssiondir, wlsessiondir ] - endif - i18n.merge_file( - input: session_desktop + '.in', - output: session_desktop, - po_dir: '../po', - install: true, - install_dir: session_instdir, - type: 'desktop', - ) +foreach name : session_desktops + session_desktop = name + '.desktop' + if name.endswith('-xorg') + session_instdir = xsessiondir + elif name.endswith('-wayland') + session_instdir = wlsessiondir + else +# FIXME: The same target can not be copied into two directories. + # There is a workaround in meson/session-post-install.py until proper + # solution arises: + # https://github.com/mesonbuild/meson/issues/2416 + session_instdir = xsessiondir + #session_instdir = [ xesssiondir, wlsessiondir ] + endif + i18n.merge_file( + input: session_desktop + '.in', + output: session_desktop, + po_dir: '../po', + install: true, + install_dir: session_instdir, + type: 'desktop', + ) endforeach classic_uuids = [] foreach e : classic_extensions - classic_uuids += e + uuid_suffix + classic_uuids += e + uuid_suffix endforeach mode_conf = configuration_data() diff --git a/meson.build b/meson.build index 31e683e6..c6c212c8 100644 --- a/meson.build +++ b/meson.build @@ -72,7 +72,7 @@ endif classic_mode_enabled = get_option('classic_mode') if classic_mode_enabled - # Sanity check: Make sure all classic extensions are enabled +# Sanity check: Make sure all classic extensions are enabled foreach e : classic_extensions if not enabled_extensions.contains(e) error(f'Classic mode is enabled, but the required extension @e@ is not') @@ -98,17 +98,13 @@ endif subdir('extensions') subdir('po') -gnome.post_install( - glib_compile_schemas: true, -) +gnome.post_install(glib_compile_schemas: true) -meson.add_dist_script('meson/check-version.py', - meson.project_version(), - 'NEWS') +meson.add_dist_script('meson/check-version.py', meson.project_version(), 'NEWS') summary_options = { - 'extensions': enabled_extensions, - 'classic_mode': get_option('classic_mode'), + 'extensions': enabled_extensions, + 'classic_mode': get_option('classic_mode'), } summary_dirs = { From 265935e14ba1c094815d9c91bed5e92b0eef52fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 20 Oct 2024 23:53:29 +0200 Subject: [PATCH 068/101] cleanup: Use consistent line break style in meson.build Either have all arguments on the same line, or have a separate line for every argument (that is, don't special-case the first arg). Part-of: --- extensions/meson.build | 14 ++++++++------ meson.build | 9 +++------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/extensions/meson.build b/extensions/meson.build index 9140b889..505bb23d 100644 --- a/extensions/meson.build +++ b/extensions/meson.build @@ -16,18 +16,20 @@ foreach e : enabled_extensions metadata_conf.set('gschemaname', 'org.gnome.shell.extensions.' + e) metadata_conf.set('gettext_domain', gettext_domain) metadata_conf.set('shell_current', shell_version) - metadata_conf.set('url', 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions') + metadata_conf.set( + 'url', + 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions', + ) extension_sources = files(e + '/extension.js') extension_data = [] subdir(e) - install_data (extension_sources + extension_data, - install_dir: join_paths(extensiondir, uuid) + install_data( + extension_sources + extension_data, + install_dir: join_paths(extensiondir, uuid), ) endforeach -install_data (extension_schemas, - install_dir: schemadir -) +install_data(extension_schemas, install_dir: schemadir) diff --git a/meson.build b/meson.build index c6c212c8..623c3420 100644 --- a/meson.build +++ b/meson.build @@ -2,7 +2,8 @@ # # SPDX-License-Identifier: GPL-2.0-or-later -project('gnome-shell-extensions', +project( + 'gnome-shell-extensions', version: '47.0', meson_version: '>= 1.1.0', license: 'GPL-2.0-or-later', @@ -49,11 +50,7 @@ default_extensions += [ ] all_extensions = default_extensions -all_extensions += [ - 'auto-move-windows', - 'native-window-placement', - 'user-theme', -] +all_extensions += ['auto-move-windows', 'native-window-placement', 'user-theme'] enabled_extensions = get_option('enable_extensions') From e31d7828e9751b9090b52d85738e20ebc1132608 Mon Sep 17 00:00:00 2001 From: Jordi Mas i Hernandez Date: Mon, 21 Oct 2024 08:38:45 +0000 Subject: [PATCH 069/101] Update Catalan translation --- po/ca.po | 121 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 52 deletions(-) diff --git a/po/ca.po b/po/ca.po index f52fdf76..1b10b398 100644 --- a/po/ca.po +++ b/po/ca.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-08-12 20:31+0000\n" -"PO-Revision-Date: 2024-08-19 23:26+0200\n" +"POT-Creation-Date: 2024-10-16 14:41+0000\n" +"PO-Revision-Date: 2024-10-20 21:54+0200\n" "Last-Translator: Jordi Mas \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -69,7 +69,7 @@ msgstr "Afegeix una regla" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Ha fallat l'expulsió de la unitat «%s»:" @@ -118,28 +118,35 @@ msgstr "" msgid "Places" msgstr "Llocs" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "No s'ha pogut iniciar «%s»" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "No s'ha pogut muntar el volum «%s»" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Ordinador" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Inici" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Navega per la xarxa" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Recent" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Destacat" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Xarxa" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Paperera" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -229,47 +236,47 @@ msgstr "Nom del tema" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:70 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Tanca" -#: extensions/window-list/extension.js:97 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Desminimitza" -#: extensions/window-list/extension.js:97 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Minimitza" -#: extensions/window-list/extension.js:104 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Desmaximitza" -#: extensions/window-list/extension.js:104 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "Maximitza" -#: extensions/window-list/extension.js:489 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Minimitza-ho tot" -#: extensions/window-list/extension.js:495 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Desminimitza-ho tot" -#: extensions/window-list/extension.js:501 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Maximitza-ho tot" -#: extensions/window-list/extension.js:509 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Desmaximitza-ho tot" -#: extensions/window-list/extension.js:517 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Tanca-ho tot" -#: extensions/window-list/extension.js:789 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "Llista de finestres" @@ -287,7 +294,7 @@ msgstr "" "«auto» (automàticament) i «always» (sempre)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "Mostra les finestres de tots els espais de treball" @@ -314,47 +321,26 @@ msgid "Show workspace previews in window list" msgstr "" "Mostra les previsualitzacions dels espais de treball a la llista de finestres" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "Agrupació de finestres" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "Mai agrupis les finestres" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "Agrupa les finestres quan l'espai estigui limitat" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "Agrupa les finestres sempre" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "Mostra a tots els monitors" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Mostra les previsualitzacions dels espais de treball" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Mostra previsualitzacions a la barra superior" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Espai de treball %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Noms dels espais de treball" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Afegeix un espai de treball" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "" @@ -364,5 +350,36 @@ msgstr "" msgid "Workspace Indicator" msgstr "Indicador de l'espai de treball" +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "Mostra previsualitzacions" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "Espai de treball %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "Noms dels espais de treball" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "Afegeix un espai de treball" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "Suprimeix" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "Espais de treball" + +#~ msgid "Computer" +#~ msgstr "Ordinador" + +#~ msgid "Show workspace previews" +#~ msgstr "Mostra les previsualitzacions dels espais de treball" + #~ msgid "Applications" #~ msgstr "Aplicacions" From 1218aee87fc2adef109cbbb75bc79072290c4a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 21 Oct 2024 02:17:08 +0200 Subject: [PATCH 070/101] build: Sync check-version script with gnome-shell The script was updated to not require appstream-util to check for a corresponding release element in metainfo. Part-of: --- meson/check-version.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/meson/check-version.py b/meson/check-version.py index 237c8f9f..73e969c3 100755 --- a/meson/check-version.py +++ b/meson/check-version.py @@ -6,7 +6,8 @@ import os, sys from pathlib import Path -import argparse, subprocess +from xml.etree.ElementTree import ElementTree +import argparse def check_version(version, file, type='news'): if type == 'news': @@ -16,8 +17,11 @@ def check_version(version, file, type='news'): if not ok: raise Exception("{} does not start with {}".format(file, version)) elif type == 'metainfo': - subprocess.run(['appstream-util', 'validate-version', file, version], - check=True) + query = './releases/release[@version="{}"]'.format(version) + ok = ElementTree(file=file).find(query) is not None + print("{}: {}".format(file, "OK" if ok else "FAILED")) + if not ok: + raise Exception("{} does not contain release {}".format(file, version)) else: raise Exception('Not implemented') From ad707e643da5f0f780b57a54423f49d09632a22a Mon Sep 17 00:00:00 2001 From: Vasil Pupkin <3abac@3a.by> Date: Tue, 22 Oct 2024 14:21:09 +0000 Subject: [PATCH 071/101] Update Belarusian translation --- po/be.po | 123 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/po/be.po b/po/be.po index a2135b8b..a10a7ae9 100644 --- a/po/be.po +++ b/po/be.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-08-23 16:00+0300\n" +"POT-Creation-Date: 2024-10-16 14:41+0000\n" +"PO-Revision-Date: 2024-10-22 16:27+0300\n" "Last-Translator: Yuras Shumovich \n" "Language-Team: Belarusian \n" "Language: be\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.4\n" +"X-Generator: Poedit 3.5\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -67,7 +67,7 @@ msgstr "Дадаць правіла" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Не ўдалося выняць дыск «%s»:" @@ -114,28 +114,35 @@ msgstr "" msgid "Places" msgstr "Месцы" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "Не ўдалося запусціць «%s»" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Не ўдалося прымацаваць том для «%s»." -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Камп'ютар" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Хатняя папка" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Агляд сеткі" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Нядаўнія" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Абраныя" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Сетка" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Сметніца" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -225,47 +232,47 @@ msgstr "Назва тэмы" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Закрыць" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Скасаваць згортванне" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Згарнуць" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Скасаваць разгортванне" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "Разгарнуць" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Згарнуць усе" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Скасаваць згортванне для ўсіх" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Разгарнуць усе" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Скасаваць разгортванне для ўсіх" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Закрыць усе" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "Спіс вокнаў" @@ -282,7 +289,7 @@ msgstr "" "значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "Паказваць вокны з усіх працоўных прастор" @@ -305,47 +312,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Паказваць папярэдні прагляд працоўных прастор у спісе акон" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "Групаванне вокнаў" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "Ніколі не групаваць вокны" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "Групаваць вокны калі не хапае месца" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "Заўсёды групаваць вокны" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "Паказваць на ўсіх маніторах" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Паказваць папярэдні прагляд працоўных прастор" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Паказваць папярэдні прагляд у верхняй панэлі" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Працоўная прастора %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Назвы працоўных прастор" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Дадаць працоўную прастору" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Паказваць папярэдні прагляд працоўных прастор у верхняй панэлі" @@ -354,6 +340,37 @@ msgstr "Паказваць папярэдні прагляд працоўных msgid "Workspace Indicator" msgstr "Індыкатар працоўнай прасторы" +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "Паказваць папярэдні прагляд" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "Працоўная прастора %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "Назвы працоўных прастор" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "Дадаць працоўную прастору" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "Выдаліць" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "Працоўныя прасторы" + +#~ msgid "Computer" +#~ msgstr "Камп'ютар" + +#~ msgid "Show workspace previews" +#~ msgstr "Паказваць папярэдні прагляд працоўных прастор" + #~ msgid "Applications" #~ msgstr "Праграмы" From a8168d47fafd8e767902a3130ba2d23d6f6d5ff1 Mon Sep 17 00:00:00 2001 From: Nathan Follens Date: Sun, 27 Oct 2024 22:37:35 +0000 Subject: [PATCH 072/101] Update Dutch translation (cherry picked from commit 598007f9943a711af83be4b1e3dda9ac08ecb452) --- po/nl.po | 83 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/po/nl.po b/po/nl.po index 8e99fa2c..92685b3b 100644 --- a/po/nl.po +++ b/po/nl.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-02-06 18:43+0000\n" -"PO-Revision-Date: 2024-02-18 17:17+0100\n" +"POT-Creation-Date: 2024-10-15 16:32+0000\n" +"PO-Revision-Date: 2024-10-27 23:36+0100\n" "Last-Translator: Nathan Follens \n" "Language-Team: GNOME-NL https://matrix.to/#/#nl:gnome.org\n" "Language: nl\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" "X-Project-Style: gnome\n" #: data/gnome-classic.desktop.in:3 @@ -42,7 +42,7 @@ msgstr "GNOME klassiek op Xorg" msgid "Favorites" msgstr "Favorieten" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Toepassingen" @@ -159,43 +159,43 @@ msgstr "Geheugenstatistieken" msgid "Swap stats" msgstr "Wisselgeheugenstatistieken" -#: extensions/system-monitor/extension.js:327 +#: extensions/system-monitor/extension.js:336 msgid "Upload stats" msgstr "Uploadstatistieken" -#: extensions/system-monitor/extension.js:341 +#: extensions/system-monitor/extension.js:350 msgid "Download stats" msgstr "Downloadstatistieken" -#: extensions/system-monitor/extension.js:355 +#: extensions/system-monitor/extension.js:364 msgid "System stats" msgstr "Systeemstatistieken" -#: extensions/system-monitor/extension.js:403 +#: extensions/system-monitor/extension.js:412 msgid "Show" msgstr "Tonen" -#: extensions/system-monitor/extension.js:405 +#: extensions/system-monitor/extension.js:414 msgid "CPU" msgstr "CPU" -#: extensions/system-monitor/extension.js:407 +#: extensions/system-monitor/extension.js:416 msgid "Memory" msgstr "Geheugen" -#: extensions/system-monitor/extension.js:409 +#: extensions/system-monitor/extension.js:418 msgid "Swap" msgstr "Wisselgeheugen" -#: extensions/system-monitor/extension.js:411 +#: extensions/system-monitor/extension.js:420 msgid "Upload" msgstr "Upload" -#: extensions/system-monitor/extension.js:413 +#: extensions/system-monitor/extension.js:422 msgid "Download" msgstr "Download" -#: extensions/system-monitor/extension.js:418 +#: extensions/system-monitor/extension.js:427 msgid "Open System Monitor" msgstr "Systeemmonitor openen" @@ -227,47 +227,47 @@ msgstr "Themanaam" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "De naam van het thema, te laden vanuit ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:71 +#: extensions/window-list/extension.js:70 msgid "Close" msgstr "Sluiten" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:97 msgid "Unminimize" msgstr "Zichtbaar maken" -#: extensions/window-list/extension.js:98 +#: extensions/window-list/extension.js:97 msgid "Minimize" msgstr "Minimaliseren" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:104 msgid "Unmaximize" msgstr "Herstellen" -#: extensions/window-list/extension.js:105 +#: extensions/window-list/extension.js:104 msgid "Maximize" msgstr "Maximaliseren" -#: extensions/window-list/extension.js:470 +#: extensions/window-list/extension.js:489 msgid "Minimize all" msgstr "Alles minimaliseren" -#: extensions/window-list/extension.js:476 +#: extensions/window-list/extension.js:495 msgid "Unminimize all" msgstr "Alles zichtbaar maken" -#: extensions/window-list/extension.js:482 +#: extensions/window-list/extension.js:501 msgid "Maximize all" msgstr "Alles maximaliseren" -#: extensions/window-list/extension.js:490 +#: extensions/window-list/extension.js:509 msgid "Unmaximize all" msgstr "Alles herstellen" -#: extensions/window-list/extension.js:498 +#: extensions/window-list/extension.js:517 msgid "Close all" msgstr "Alles sluiten" -#: extensions/window-list/extension.js:772 +#: extensions/window-list/extension.js:789 msgid "Window List" msgstr "Vensterlijst" @@ -281,8 +281,8 @@ msgid "" "Possible values are “never”, “auto” and “always”." msgstr "" "Beslist wanneer vensters van dezelfde toepassing in de vensterlijst te " -"groeperen. Mogelijke waarden zijn ‘never’ (nooit), ‘auto’ en " -"‘always’ (altijd)." +"groeperen. Mogelijke waarden zijn ‘never’ (nooit), ‘auto’ en ‘always’ " +"(altijd)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 #: extensions/window-list/prefs.js:79 @@ -307,6 +307,10 @@ msgstr "" "Bepaalt of de vensterlijst op alle verbonden beeldschermen of enkel op het " "primaire beeldscherm wordt weergegeven." +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Voorbeelden van werkbladen tonen in vensterlijst" + #: extensions/window-list/prefs.js:35 msgid "Window Grouping" msgstr "Venstergroepering" @@ -327,24 +331,35 @@ msgstr "Vensters altijd groeperen" msgid "Show on all monitors" msgstr "Tonen op alle beeldschermen" -#: extensions/window-list/workspaceIndicator.js:253 -#: extensions/workspace-indicator/extension.js:259 -msgid "Workspace Indicator" -msgstr "Werkbladindicator" +#: extensions/window-list/prefs.js:92 +msgid "Show workspace previews" +msgstr "Voorbeelden van werkbladen tonen" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Voorbeelden tonen in bovenste balk" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "Werkblad %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Werkbladnamen" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Werkblad toevoegen" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Voorbeelden van werkbladen tonen in bovenste balk" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Werkbladindicator" + #~ msgid "Applications" #~ msgstr "Toepassingen" From 2cbab10188cee51d8b7ac95a8c908fc68b0ad68d Mon Sep 17 00:00:00 2001 From: Artur S0 Date: Mon, 28 Oct 2024 14:20:30 +0000 Subject: [PATCH 073/101] Update Russian translation --- po/ru.po | 123 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/po/ru.po b/po/ru.po index b676367e..e328557a 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-05-25 14:46+0300\n" +"POT-Creation-Date: 2024-10-16 14:41+0000\n" +"PO-Revision-Date: 2024-10-27 14:01+0300\n" "Last-Translator: Artur So \n" "Language-Team: Русский \n" "Language: ru\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.4\n" +"X-Generator: Poedit 3.5\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -68,7 +68,7 @@ msgstr "Добавить правило" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Не удалось извлечь диск «%s»:" @@ -115,28 +115,35 @@ msgstr "" msgid "Places" msgstr "Места" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "Не удалось запустить «%s»" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Не удалось смонтировать том для «%s»" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Компьютер" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Домашняя папка" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Обзор сети" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Недавние" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Избранные" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Сеть" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Корзина" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -226,49 +233,49 @@ msgstr "Название темы" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Название темы, загружаемой из ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Закрыть" # ну или "восстановить", правда тогда появляется неоднозначный повтор (unmaximize) -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Вернуть" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Свернуть" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Восстановить" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "Развернуть" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Свернуть все" # ну или "восстановить", правда тогда появляется неоднозначный повтор (unmaximize) -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Вернуть все" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Развернуть все" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Восстановить все" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Закрыть все" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "Список окон" @@ -286,7 +293,7 @@ msgstr "" "«always» — всегда." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "Показывать окна со всех рабочих столов" @@ -311,47 +318,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Показывать предпросмотры рабочих столов в списке окон" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "Группировка окон" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "Никогда не группировать окна" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "Группировать окна, если место ограничено" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "Всегда группировать окна" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "Показывать на всех мониторах" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Показывать предпросмотры рабочих столов" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Показывать предпросмотры в верхней панели" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Рабочий стол %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Названия рабочих столов" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Добавить рабочий стол" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Показывать предпросмотры рабочих столов в верхней панели" @@ -360,5 +346,36 @@ msgstr "Показывать предпросмотры рабочих стол msgid "Workspace Indicator" msgstr "Индикатор рабочих столов" +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "Показывать предпросмотры" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "Рабочий стол %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "Названия рабочих столов" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "Добавить рабочий стол" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "Удалить" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "Рабочие столы" + +#~ msgid "Computer" +#~ msgstr "Компьютер" + +#~ msgid "Show workspace previews" +#~ msgstr "Показывать предпросмотры рабочих столов" + #~ msgid "Applications" #~ msgstr "Приложения" From fde934fed7e945f9e147059eab9bc23d4e9349b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA=D0=BE=20=D0=9A=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D1=9B?= Date: Mon, 4 Nov 2024 07:15:02 +0000 Subject: [PATCH 074/101] Update Serbian translation (cherry picked from commit 0a153b78f9d5a57db6b8e19d17ca8ca17c0bcba7) --- po/sr.po | 75 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/po/sr.po b/po/sr.po index cc7007cb..b162375a 100644 --- a/po/sr.po +++ b/po/sr.po @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 14:28+0000\n" -"PO-Revision-Date: 2024-06-20 01:27+0200\n" +"POT-Creation-Date: 2024-10-27 22:37+0000\n" +"PO-Revision-Date: 2024-11-04 08:14+0100\n" "Last-Translator: Марко М. Костић \n" "Language-Team: Serbian \n" "Language: sr\n" @@ -21,7 +21,7 @@ msgstr "" "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " "n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Project-Style: gnome\n" -"X-Generator: Gtranslator 45.3\n" +"X-Generator: Poedit 3.4.4\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -44,7 +44,7 @@ msgstr "Класичан Гном на Икс серверу" msgid "Favorites" msgstr "Омиљено" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:400 msgid "Apps" msgstr "Апликације" @@ -227,47 +227,47 @@ msgstr "Назив теме" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "Назив теме који се учитава из датотеке „~/.themes/name/gnome-shell“" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:70 msgid "Close" msgstr "Затвори" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:97 msgid "Unminimize" msgstr "Поништи умањење" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:97 msgid "Minimize" msgstr "Умањи" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:104 msgid "Unmaximize" msgstr "Поништи увећање" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:104 msgid "Maximize" msgstr "Увећај" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:485 msgid "Minimize all" msgstr "Умањи све" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:491 msgid "Unminimize all" msgstr "Поништи умањење свега" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:497 msgid "Maximize all" msgstr "Увећај све" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:505 msgid "Unmaximize all" msgstr "Поништи увећање свега" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:513 msgid "Close all" msgstr "Затвори све" -#: extensions/window-list/extension.js:773 +#: extensions/window-list/extension.js:780 msgid "Window List" msgstr "Списак прозора" @@ -281,11 +281,11 @@ msgid "" "Possible values are “never”, “auto” and “always”." msgstr "" "Одређује када ће бити груписани прозори истог програма у списку прозора. " -"Дозвољене вредности су „never“ (никад), „auto“ (аутоматски) и " -"„always“ (увек)." +"Дозвољене вредности су „never“ (никад), „auto“ (аутоматски) и „always“ " +"(увек)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:70 msgid "Show windows from all workspaces" msgstr "Прикажи прозоре свих радних простора" @@ -305,44 +305,59 @@ msgstr "" "Да ли да прикаже списак прозора на свим прикљученим мониторима или само на " "главном." -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "Прикажи прегледе радних простора у списку прозора" + +#: extensions/window-list/prefs.js:37 msgid "Window Grouping" msgstr "Груписање прозора" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:42 msgid "Never group windows" msgstr "Никад не групиши прозоре" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:43 msgid "Group windows when space is limited" msgstr "Групиши прозоре када је простор ограничен" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:44 msgid "Always group windows" msgstr "Увек групиши прозоре" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:64 msgid "Show on all monitors" msgstr "Прикажи на свим мониторима" -#: extensions/window-list/workspaceIndicator.js:255 -#: extensions/workspace-indicator/extension.js:261 -msgid "Workspace Indicator" -msgstr "Показатељ радних простора" +#: extensions/window-list/prefs.js:76 +msgid "Show workspace previews" +msgstr "Прикажи прегледе радних простора" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:30 +msgid "Show Previews In Top Bar" +msgstr "Прикажи прегледе у горњој траци" + +#: extensions/workspace-indicator/prefs.js:88 #, javascript-format msgid "Workspace %d" msgstr "%d. радни простор" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:155 msgid "Workspace Names" msgstr "Називи радних простора" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:281 msgid "Add Workspace" msgstr "Додај радни простор" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "Прикажи прегледе радних простора у горњој траци" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Показатељ радних простора" + #~ msgid "Applications" #~ msgstr "Програми" From 568826e489779ddd9c2f4708180fd27f79210bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 19 Nov 2024 14:03:09 +0100 Subject: [PATCH 075/101] places-menu: Inherit from PopupImageMenuItem PopupImageMenuItems used to position the icon after the label, so we ended up with our own icon+label items. However the icon position was changed years ago in the shell, so inherit from PopupImageMenuItem instead. This does not only simplify the code a bit, but also pulls in features we are currently missing, like a11y labelling. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/542 --- extensions/places-menu/extension.js | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/extensions/places-menu/extension.js b/extensions/places-menu/extension.js index bf68c029..8c1793cd 100644 --- a/extensions/places-menu/extension.js +++ b/extensions/places-menu/extension.js @@ -19,32 +19,17 @@ import {PlacesManager} from './placeDisplay.js'; const N_ = x => x; -const PLACE_ICON_SIZE = 16; - -class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { +class PlaceMenuItem extends PopupMenu.PopupImageMenuItem { static { GObject.registerClass(this); } constructor(info) { - super({ + super(info.name, info.icon, { style_class: 'place-menu-item', }); this._info = info; - this._icon = new St.Icon({ - gicon: info.icon, - icon_size: PLACE_ICON_SIZE, - }); - this.add_child(this._icon); - - this._label = new St.Label({ - text: info.name, - x_expand: true, - y_align: Clutter.ActorAlign.CENTER, - }); - this.add_child(this._label); - if (info.isRemovable()) { this._ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic', @@ -69,8 +54,8 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { } _propertiesChanged(info) { - this._icon.gicon = info.icon; - this._label.text = info.name; + this.setIcon(info.icon); + this.label.text = info.name; } } From d9ee5fdf55152b844c53ab94dacfa7c375c4c5ed Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Mon, 25 Nov 2024 08:46:27 +0000 Subject: [PATCH 076/101] Update Hebrew translation --- po/he.po | 127 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 72 insertions(+), 55 deletions(-) diff --git a/po/he.po b/po/he.po index 007d74a1..a27e65b6 100644 --- a/po/he.po +++ b/po/he.po @@ -9,17 +9,17 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-06-28 10:34+0300\n" -"Last-Translator: Yosef Or Boczko \n" +"POT-Creation-Date: 2024-10-16 14:41+0000\n" +"PO-Revision-Date: 2024-11-25 10:45+0200\n" +"Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" "Language: he\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==0) ? 1 : 2\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 : 2;\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Gtranslator 46.1\n" +"X-Generator: Poedit 3.4.2\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -68,7 +68,7 @@ msgstr "הוספת כלל" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "שליפת הכונן „%s” נכשלה:" @@ -114,28 +114,35 @@ msgstr "" msgid "Places" msgstr "מקומות" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "הרצת „%s” נכשלה" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "עיגון הכרך „%s” נכשל" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "מחשב" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "בית" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "עיון ברשת" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "אחרונים" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "מסומנים בכוכב" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "רשת" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "אשפה" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -225,47 +232,47 @@ msgstr "Theme name" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "סגירה" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "ביטול המזעור" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "מזעור" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "ביטול ההגדלה" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "הגדלה" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "מזעור הכל" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "ביטול מזעור הכל" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "הגדלת הכל" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "ביטול הגדלת הכל" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "סגירת הכל" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24 msgid "Window List" msgstr "רשימת חלונות" @@ -282,7 +289,7 @@ msgstr "" "Possible values are “never”, “auto” and “always”." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:75 msgid "Show windows from all workspaces" msgstr "הצגת חלונות מכל מרחבי העבודה" @@ -306,47 +313,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "הצגת תצוגה מקדימה של מרחבי העבודה ברשימת החלונות" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:42 msgid "Window Grouping" msgstr "קיבוץ חלונות" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:47 msgid "Never group windows" msgstr "לעולם לא לקבץ חלונות" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:48 msgid "Group windows when space is limited" msgstr "קיבוץ חלונות כאשר המקום מוגבל" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:49 msgid "Always group windows" msgstr "תמיד לקבץ חלונות" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:69 msgid "Show on all monitors" msgstr "הצגה בכל הצגים" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "הצגת תצוגה מקדימה של מרחבי העבודה" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "הצגת תצוגה מקדימה בלוח העליון" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "מרחב עבודה %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "שם מרחב העבודה" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "הוספת מרחב עבודה" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "הצגת תצוגה מקדימה של מרחבי העבודה בלוח העליון" @@ -355,6 +341,37 @@ msgstr "הצגת תצוגה מקדימה של מרחבי העבודה בלוח msgid "Workspace Indicator" msgstr "מחוון מרחבי עבודה" +#: extensions/workspace-indicator/workspacePrefs.js:29 +msgid "Show Previews" +msgstr "הצגת תצוגות מקדימות" + +#: extensions/workspace-indicator/workspacePrefs.js:87 +#, javascript-format +msgid "Workspace %d" +msgstr "מרחב עבודה %d" + +#: extensions/workspace-indicator/workspacePrefs.js:154 +msgid "Workspace Names" +msgstr "שם מרחב העבודה" + +#: extensions/workspace-indicator/workspacePrefs.js:171 +msgid "Add Workspace" +msgstr "הוספת מרחב עבודה" + +#: extensions/workspace-indicator/workspacePrefs.js:196 +msgid "Remove" +msgstr "הסרה" + +#: extensions/workspace-indicator/workspacePrefs.js:226 +msgid "Workspaces" +msgstr "מרחבי עבודה" + +#~ msgid "Computer" +#~ msgstr "מחשב" + +#~ msgid "Show workspace previews" +#~ msgstr "הצגת תצוגה מקדימה של מרחבי העבודה" + #~ msgid "Applications" #~ msgstr "יישומים" From 3f1aa9f2214cd4ab3b95b7bc7113df9ba6246c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 25 Nov 2024 14:52:06 +0100 Subject: [PATCH 077/101] screenshot-window-sizer: Mention shortcut in description Loosely based on the README entry, so users know how to actually use the extension. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/541 Part-of: --- extensions/screenshot-window-sizer/metadata.json.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/screenshot-window-sizer/metadata.json.in b/extensions/screenshot-window-sizer/metadata.json.in index 185e63fc..3dc2cc44 100644 --- a/extensions/screenshot-window-sizer/metadata.json.in +++ b/extensions/screenshot-window-sizer/metadata.json.in @@ -4,7 +4,7 @@ "settings-schema": "@gschemaname@", "gettext-domain": "@gettext_domain@", "name": "Screenshot Window Sizer", -"description": "Resize windows for GNOME Software screenshots", +"description": "Resize windows for GNOME Software screenshots with Ctrl+Alt+s shortcut", "shell-version": [ "@shell_current@" ], "url": "@url@" } From e0b68a319e3ec5d47b42ba720211c8d6139fdf82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 30 Nov 2024 14:43:14 +0100 Subject: [PATCH 078/101] places-menu: Catch errors during async operation Uncaught errors in async functions don't provide a good stack, because the unhandled promise rejection masks the error that triggered it. While we already handle *expected* errors inside the function, make sure we catch all errors to get useful stack information for unexpected errors as well. Part-of: --- extensions/places-menu/placeDisplay.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index faf1d3ac..70165661 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -62,7 +62,7 @@ class PlaceInfo extends EventEmitter { await this.file.mount_enclosing_volume(0, op.mountOp, null); if (tryMount) - this._ensureMountAndLaunch(context, false); + this._ensureMountAndLaunch(context, false).catch(logError); } catch (e) { if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message); @@ -74,7 +74,7 @@ class PlaceInfo extends EventEmitter { launch(timestamp) { let launchContext = global.create_app_launch_context(timestamp, -1); - this._ensureMountAndLaunch(launchContext, true); + this._ensureMountAndLaunch(launchContext, true).catch(logError); } getIcon() { From 8957f488dc9e305abb93af790ae0afc008837fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 30 Nov 2024 14:56:27 +0100 Subject: [PATCH 079/101] places-menu: Update fake mount operation source gnome-shell now checks for an associated drive to automatically cancel the operation on disconnect, so fake the corresponding method. While at it, drop the `get_icon()` method that hasn't been used for quite a while now. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/508 Part-of: --- extensions/places-menu/placeDisplay.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 70165661..44362885 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -54,8 +54,8 @@ class PlaceInfo extends EventEmitter { return; } - let source = { - get_icon: () => this.icon, + const source = { + get_drive: () => null, }; let op = new ShellMountOperation.ShellMountOperation(source); try { From 4a841dfd4977c3d497b0241c7d0016c4290b3e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 2 Dec 2024 13:10:50 +0100 Subject: [PATCH 080/101] window-list: Fix disconnecting window signals in context menu Menus are not actors themselves, so they are not "destroyables" in terms of automatic signal disconnection, with the result that we currently leak window signals. Fix this by using the menu's actor as tracked object, so the signals are disconnected automatically when the actor is destroyed. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/474 Part-of: --- extensions/window-list/extension.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index a4268589..2c8f4ad4 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -99,7 +99,7 @@ class WindowContextMenu extends PopupMenu.PopupMenu { 'notify::minimized', this._updateMinimizeItem.bind(this), 'notify::maximized-horizontally', this._updateMaximizeItem.bind(this), 'notify::maximized-vertically', this._updateMaximizeItem.bind(this), - this); + this.actor); this._updateMinimizeItem(); this._updateMaximizeItem(); From 981e8e42e20338b5488fefddf291970caf525bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 3 Dec 2024 12:11:55 +0100 Subject: [PATCH 081/101] window-list: Untrack chrome while in overview The window list is set up to track the monitor's fullscreen state. Monitors are never considered in fullscreen while showing the overview, so if shell's layout manager updates the fullscreen visibility after we hid the bottom bar, it ends up being visible in the overview. To avoid this, untrack the actor while the overview is visible. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/509 Part-of: --- extensions/window-list/extension.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 2c8f4ad4..83342d1d 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -903,10 +903,11 @@ class WindowList extends St.Widget { () => this._onWorkspaceMenuSet(), this); this._onWorkspaceMenuSet(); - Main.layoutManager.addChrome(this, { + const chromeOptions = { affectsStruts: true, trackFullscreen: true, - }); + }; + Main.layoutManager.addChrome(this, chromeOptions); Main.uiGroup.set_child_above_sibling(this, Main.layoutManager.panelBox); Main.ctrlAltTabManager.addGroup(this, _('Window List'), 'start-here-symbolic'); @@ -943,10 +944,12 @@ class WindowList extends St.Widget { Main.overview.connectObject( 'showing', () => { + Main.layoutManager.untrackChrome(this); this.hide(); this._updateKeyboardAnchor(); }, 'hidden', () => { + Main.layoutManager.trackChrome(this); this.visible = !this._monitor.inFullscreen; this._updateKeyboardAnchor(); }, this); From 77a11fd9cd9a4f7908fdf626929954491f4c13c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 2 Dec 2024 14:45:42 +0100 Subject: [PATCH 082/101] workspace-indicator: Do not only exclude DESKTOP windows There are other window types that should be excluded from workspace previews, including more common ones like menus. Instead of checking for a variety of window types, delegate the decision to mutter by checking for the `skip-taskbar` property. (The internal `skip-pager` property would be more apt in this case, but as it only differs from `skip-taskbar` for X11 clients that explicitly set one and not the other, it shouldn't matter in practice) Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/537 Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 18a8d4e9..9f54acbb 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -43,7 +43,7 @@ class WindowPreview extends St.Button { 'size-changed', () => this._checkRelayout(), 'position-changed', () => this._checkRelayout(), 'notify::minimized', this._updateVisible.bind(this), - 'notify::window-type', this._updateVisible.bind(this), + 'notify::skip-taskbar', this._updateVisible.bind(this), this); this._updateVisible(); @@ -72,7 +72,7 @@ class WindowPreview extends St.Button { } _updateVisible() { - this.visible = this._window.window_type !== Meta.WindowType.DESKTOP && + this.visible = !this._window.skip_taskbar && this._window.showing_on_its_workspace(); } } From b30871d105d0ab3509ff097c74cc08893d1f0bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 5 Dec 2024 13:26:28 +0100 Subject: [PATCH 083/101] ci: Bump js image gnome-shell switched to F41 for its JS image, follow suit. Part-of: --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3f158383..418c1f09 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,7 +16,7 @@ stages: - deploy default: - image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/40:2024-07-11.0 + image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/41:2024-10-18.0 # Cancel jobs if newer commits are pushed to the branch interruptible: true # Auto-retry jobs in case of infra failures From 0d1b279a64a7988bfd362bc2883f3a2d4e0b5062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 17 Dec 2024 19:39:57 +0100 Subject: [PATCH 084/101] Revert "ci: Use `meson introspect` to generate artifact path" The new release service that now moved into production expects the tag to match the release version. Instead of using the $VERSION-real pattern in case of error, switch to a pre-push hook to hopefully prevent those errors in the first place: https://gitlab.gnome.org/-/snippets/6710 This reverts commit 8c014a6b1da26fd72001064ba7fdfd3b41103e84. Part-of: --- .gitlab-ci.yml | 21 +-------------------- .gitlab-ci/export-artifact-path | 21 --------------------- 2 files changed, 1 insertion(+), 41 deletions(-) delete mode 100755 .gitlab-ci/export-artifact-path diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 418c1f09..2dbf0c8d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -149,21 +149,6 @@ fedora-build: paths: - build -fedora-distinfo: - stage: deploy - needs: - - fedora-build - script: - - .gitlab-ci/export-artifact-path build > dist.env - artifacts: - reports: - dotenv: dist.env - paths: - - build - - dist.env - rules: - - if: '$CI_COMMIT_TAG' - fedora-dist: stage: deploy needs: @@ -180,14 +165,10 @@ fedora-dist: fedora-dist-tarball: extends: fedora-dist - needs: - - fedora-distinfo artifacts: expose_as: 'Get tarball here' paths: - - $TARBALL_ARTIFACT_PATH - reports: - dotenv: dist.env + - build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz rules: - if: '$CI_COMMIT_TAG' diff --git a/.gitlab-ci/export-artifact-path b/.gitlab-ci/export-artifact-path deleted file mode 100755 index f9a7534f..00000000 --- a/.gitlab-ci/export-artifact-path +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/gjs -m -// SPDX-FileCopyrightText: 2024 Florian Müllner -// -// SPDX-License-Identifier: GPL-2.0-or-later - -import Gio from 'gi://Gio'; -import {programArgs, programInvocationName, exit} from 'system'; - -const [buildDir] = programArgs; -if (!buildDir) { - printerr(`usage: ${programInvocationName} `); - exit(1); -} - -const subprocess = Gio.Subprocess.new( - ['meson', 'introspect', '--projectinfo', buildDir], - Gio.SubprocessFlags.STDOUT_PIPE); -const [, out] = subprocess.communicate_utf8(null, null); - -const {descriptive_name, version} = JSON.parse(out); -print(`TARBALL_ARTIFACT_PATH=${buildDir}/meson-dist/${descriptive_name}-${version}.tar.xz`); From 9f48149346ea30cfb871da4bfd2901aadd5313d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 17 Dec 2024 22:18:10 +0100 Subject: [PATCH 085/101] ci: Use variable for meson build directory This ensures that the value is consistent between jobs. Part-of: --- .gitlab-ci.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2dbf0c8d..27134534 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,6 +30,7 @@ default: variables: FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions + MESON_BUILD_DIR: build LINT_LOG: "eslint-report.xml" workflow: @@ -141,13 +142,13 @@ fedora-build: stage: build <<: *prereview_req script: - - meson setup build --werror -Dextension_set=all -Dclassic_mode=true - - meson compile -C build - - meson test -C build - - meson install -C build + - meson setup "$MESON_BUILD_DIR" --werror -Dextension_set=all -Dclassic_mode=true + - meson compile -C "$MESON_BUILD_DIR" + - meson test -C "$MESON_BUILD_DIR" + - meson install -C "$MESON_BUILD_DIR" artifacts: paths: - - build + - "$MESON_BUILD_DIR" fedora-dist: stage: deploy @@ -156,7 +157,7 @@ fedora-dist: variables: GIT_SUBMODULE_STRATEGY: normal script: - - meson dist -C build + - meson dist -C "$MESON_BUILD_DIR" rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: @@ -168,7 +169,7 @@ fedora-dist-tarball: artifacts: expose_as: 'Get tarball here' paths: - - build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz + - "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz" rules: - if: '$CI_COMMIT_TAG' From ea77b557e5ef6162e1e1d9bc04dd45a80ecf6ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 17 Dec 2024 22:20:26 +0100 Subject: [PATCH 086/101] ci: Move LINT_LOG variable out of global section It is only used by the eslint job, so better define it there. While at it, make sure the variable is quoted as that's considered good practice (even when safe to use unquoted as in this case). Part-of: --- .gitlab-ci.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 27134534..50410dd3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,6 @@ default: variables: FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions MESON_BUILD_DIR: build - LINT_LOG: "eslint-report.xml" workflow: rules: @@ -109,14 +108,16 @@ js_check: eslint: stage: review <<: *prereview_req + variables: + LINT_LOG: "eslint-report.xml" script: - export NODE_PATH=$(npm root -g) - - ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit --stdout + - ./.gitlab-ci/run-eslint --output-file "$LINT_LOG" --format junit --stdout artifacts: paths: - - ${LINT_LOG} + - "$LINT_LOG" reports: - junit: ${LINT_LOG} + junit: "$LINT_LOG" potfile_js_check: stage: review From 5d8d3601b4901d7a47f3ed86b40e4b1e99f18470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 17 Dec 2024 19:43:39 +0100 Subject: [PATCH 087/101] ci: Adapt to updated release module template The release module moved into production now. The process changed slightly with regard to the testing period, so we will have to adapt the existing job a bit. Part-of: --- .gitlab-ci.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 50410dd3..6e2044de 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,8 +5,11 @@ include: - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml" - - project: 'Infrastructure/openshift-images/gnome-release-service' - file: '/ci-templates/release-module.yml' + - component: gitlab.gnome.org/GNOME/citemplates/release-service@master + inputs: + job-stage: deploy + dist-job-name: fedora-dist-tarball + tarball-artifact-path: "$TARBALL_ARTIFACT_PATH" stages: - pre_review @@ -31,6 +34,7 @@ default: variables: FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions MESON_BUILD_DIR: build + TARBALL_ARTIFACT_PATH: "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz" workflow: rules: @@ -169,15 +173,9 @@ fedora-dist-tarball: extends: fedora-dist artifacts: expose_as: 'Get tarball here' + name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" + when: always paths: - - "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz" - rules: - - if: '$CI_COMMIT_TAG' - -release-module: - stage: deploy - needs: - - fedora-dist-tarball - extends: .release-module + - "$TARBALL_ARTIFACT_PATH" rules: - if: '$CI_COMMIT_TAG' From 0f69d7663b9258dda175ac5e8942c5b8def9e01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Fri, 27 Dec 2024 10:17:38 +0100 Subject: [PATCH 088/101] ci: Switch to GNOME GitLab mirror of ci-templates Part-of: --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e2044de..521e642f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,8 +3,8 @@ # SPDX-License-Identifier: GPL-2.0-or-later include: - - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml" + - remote: 'https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' + - remote: "https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml" - component: gitlab.gnome.org/GNOME/citemplates/release-service@master inputs: job-stage: deploy From 2a45d8c14547fd27389ed54bd7df1e0974b603c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 17 Dec 2024 01:09:34 +0100 Subject: [PATCH 089/101] window-list: Add attention indicator Some X11 clients still rely on the traditional urgent/demand-attention hints instead of notifications to request the user's attention. Support these by adding a visual indication to the corresponding buttons, based on the visual indicator in libadwaita's tabs. Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/543 Part-of: --- extensions/window-list/extension.js | 90 ++++++++++++++++++++-- extensions/window-list/stylesheet-dark.css | 9 +++ 2 files changed, 94 insertions(+), 5 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 83342d1d..d20e5270 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -37,6 +37,9 @@ const DRAG_PROXIMITY_THRESHOLD = 30; const SAVED_POSITIONS_KEY = 'window-list-positions'; +const ATTENTION_INDICATOR_MAX_SCALE = 0.4; +const ATTENTION_INDICATOR_TRANSITION_DURATION = 300; + const GroupingMode = { NEVER: 0, AUTO: 1, @@ -127,7 +130,7 @@ class WindowContextMenu extends PopupMenu.PopupMenu { } } -class TitleWidget extends St.BoxLayout { +class TitleWidget extends St.Widget { static { GObject.registerClass({ GTypeFlags: GObject.TypeFlags.ABSTRACT, @@ -142,20 +145,27 @@ class TitleWidget extends St.BoxLayout { constructor() { super({ - style_class: 'window-button-box', + layout_manager: new Clutter.BinLayout(), x_expand: true, y_expand: true, }); + const hbox = new St.BoxLayout({ + style_class: 'window-button-box', + x_expand: true, + y_expand: true, + }); + this.add_child(hbox); + this._icon = new St.Bin({ style_class: 'window-button-icon', }); - this.add_child(this._icon); + hbox.add_child(this._icon); this._label = new St.Label({ y_align: Clutter.ActorAlign.CENTER, }); - this.add_child(this._label); + hbox.add_child(this._label); this.label_actor = this._label; this.bind_property('abstract-label', @@ -168,11 +178,28 @@ class TitleWidget extends St.BoxLayout { x_expand: true, y_expand: true, }); - this.add_child(this._abstractLabel); + hbox.add_child(this._abstractLabel); this.bind_property('abstract-label', this._abstractLabel, 'visible', GObject.BindingFlags.SYNC_CREATE); + + this._attentionIndicator = new St.Widget({ + style_class: 'window-button-attention-indicator', + x_expand: true, + y_expand: true, + y_align: Clutter.ActorAlign.END, + scale_x: 0, + }); + this._attentionIndicator.set_pivot_point(0.5, 0.5); + this.add_child(this._attentionIndicator); + } + + setNeedsAttention(enable) { + this._attentionIndicator.ease({ + scaleX: enable ? ATTENTION_INDICATOR_MAX_SCALE : 0, + duration: ATTENTION_INDICATOR_TRANSITION_DURATION, + }); } } @@ -193,10 +220,13 @@ class WindowTitle extends TitleWidget { () => this._updateIcon(), GObject.ConnectFlags.AFTER, 'notify::title', () => this._updateTitle(), 'notify::minimized', () => this._minimizedChanged(), + 'notify::demands-attention', () => this._updateNeedsAttention(), + 'notify::urgent', () => this._updateNeedsAttention(), this); this._updateIcon(); this._minimizedChanged(); + this._updateNeedsAttention(); } _minimizedChanged() { @@ -204,6 +234,11 @@ class WindowTitle extends TitleWidget { this._updateTitle(); } + _updateNeedsAttention() { + const {urgent, demandsAttention} = this._metaWindow; + this.setNeedsAttention(urgent || demandsAttention); + } + _updateTitle() { if (!this._metaWindow.title) return; @@ -236,9 +271,54 @@ class AppTitle extends TitleWidget { super(); this._app = app; + this._windows = new Set(); this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE); this._label.text = app.get_name(); + + this._app.connectObject( + 'windows-changed', () => this._onWindowsChanged(), + this); + this._onWindowsChanged(); + + this.connect('destroy', () => { + console.debug(`Clearing windows of app ${this._app.id}`); + this._windows.clear(); + }); + } + + _onWindowsChanged() { + const windows = this._app.get_windows(); + const removed = [...this._windows].filter(w => !windows.includes(w)); + removed.forEach(w => this._untrackWindow(w)); + windows.forEach(w => this._trackWindow(w)); + this._updateNeedsAttention(); + } + + _trackWindow(window) { + if (this._windows.has(window)) + return; + + console.debug(`Tracking window ${window} for app ${this._app.id}`); + window.connectObject( + 'notify::urgent', () => this._updateNeedsAttention(), + 'notify::demands-attention', () => this._updateNeedsAttention(), + this); + this._windows.add(window); + } + + _untrackWindow(window) { + if (!this._windows.delete(window)) + return; + + console.debug(`Untracking window ${window} for app ${this._app.id}`); + window.disconnectObject(this); + } + + _updateNeedsAttention() { + const needsAttention = + [...this._windows].some(w => w.urgent || w.demandsAttention); + this.setNeedsAttention(needsAttention); } } diff --git a/extensions/window-list/stylesheet-dark.css b/extensions/window-list/stylesheet-dark.css index 4c06ebc0..af332686 100644 --- a/extensions/window-list/stylesheet-dark.css +++ b/extensions/window-list/stylesheet-dark.css @@ -103,3 +103,12 @@ border-radius: 99px; margin: 6px; } + +.window-button-attention-indicator { + background-color: -st-accent-color; + height: 2px; +} + +.window-button.minimized .window-button-attention-indicator { + background-color: st-transparentize(-st-accent-color, 0.4); +} From 83c41bad30f0cd0d05e0cd3290521565a536ccc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 10 Jan 2025 13:40:03 +0100 Subject: [PATCH 090/101] places-menu: Remove left-over modeline This one slipped through commit 253ddb864 ... Part-of: --- extensions/places-menu/placeDisplay.js | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/places-menu/placeDisplay.js b/extensions/places-menu/placeDisplay.js index 44362885..3ae46523 100644 --- a/extensions/places-menu/placeDisplay.js +++ b/extensions/places-menu/placeDisplay.js @@ -6,7 +6,6 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- import Gio from 'gi://Gio'; import GLib from 'gi://GLib'; import Shell from 'gi://Shell'; From 5a3812e5d69caeb1a39b1974f1131f56f308e3eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sabri=20=C3=9Cnal?= Date: Sat, 11 Jan 2025 14:39:59 +0000 Subject: [PATCH 091/101] Update Turkish translation --- po/tr.po | 133 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 61 deletions(-) diff --git a/po/tr.po b/po/tr.po index 880b10ec..d4e1a4e4 100644 --- a/po/tr.po +++ b/po/tr.po @@ -14,8 +14,8 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-08-12 20:31+0000\n" -"PO-Revision-Date: 2024-05-06 05:17+0300\n" +"POT-Creation-Date: 2024-11-25 08:47+0000\n" +"PO-Revision-Date: 2024-11-30 23:58+0300\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "Language: tr\n" @@ -23,7 +23,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.5\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -42,11 +42,11 @@ msgstr "Wayland üstünde GNOME Klasik" msgid "GNOME Classic on Xorg" msgstr "Xorg üstünde GNOME Klasik" -#: extensions/apps-menu/extension.js:126 +#: extensions/apps-menu/extension.js:125 msgid "Favorites" msgstr "Gözdeler" -#: extensions/apps-menu/extension.js:400 +#: extensions/apps-menu/extension.js:399 msgid "Apps" msgstr "Uygulamalar" @@ -62,17 +62,17 @@ msgstr "" "Her biri, bir uygulama kimliği (masaüstü dosya adı) ardından gelen iki nokta " "üst üste ve çalışma alanı numarasını içeren dizgeler listesi" -#: extensions/auto-move-windows/prefs.js:159 +#: extensions/auto-move-windows/prefs.js:156 msgid "Workspace Rules" msgstr "Çalışma Alanı Kuralları" -#: extensions/auto-move-windows/prefs.js:314 +#: extensions/auto-move-windows/prefs.js:311 msgid "Add Rule" msgstr "Kural Ekle" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:187 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "“%s” sürücüsü çıkarılamadı:" @@ -115,33 +115,40 @@ msgstr "" "Yapılan değişikliklerin etkili olması için kabuğun yeniden başlatılması " "gerekir." -#: extensions/places-menu/extension.js:91 -#: extensions/places-menu/extension.js:94 +#: extensions/places-menu/extension.js:75 +#: extensions/places-menu/extension.js:78 msgid "Places" msgstr "Yerler" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:53 #, javascript-format msgid "Failed to launch “%s”" msgstr "“%s” başlatılamadı" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:68 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "“%s” için birim bağlanamadı" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Bilgisayar" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:316 msgid "Home" msgstr "Ev" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Ağa Gözat" +#: extensions/places-menu/placeDisplay.js:322 +msgid "Recent" +msgstr "Son" + +#: extensions/places-menu/placeDisplay.js:328 +msgid "Starred" +msgstr "Yıldızlı" + +#: extensions/places-menu/placeDisplay.js:348 +msgid "Network" +msgstr "Ağ" + +#: extensions/places-menu/placeDisplay.js:355 +msgid "Trash" +msgstr "Çöp" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -231,47 +238,47 @@ msgstr "Tema adı" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "~/.themes/name/gnome-shell konumundan edinilen tema adı" -#: extensions/window-list/extension.js:70 +#: extensions/window-list/extension.js:92 msgid "Close" msgstr "Kapat" -#: extensions/window-list/extension.js:97 +#: extensions/window-list/extension.js:119 msgid "Unminimize" msgstr "Önceki duruma getir" -#: extensions/window-list/extension.js:97 +#: extensions/window-list/extension.js:119 msgid "Minimize" msgstr "Simge durumuna küçült" -#: extensions/window-list/extension.js:104 +#: extensions/window-list/extension.js:126 msgid "Unmaximize" msgstr "Önceki duruma getir" -#: extensions/window-list/extension.js:104 +#: extensions/window-list/extension.js:126 msgid "Maximize" msgstr "En büyük duruma getir" -#: extensions/window-list/extension.js:489 +#: extensions/window-list/extension.js:641 msgid "Minimize all" msgstr "Tümünü simge durumuna küçült" -#: extensions/window-list/extension.js:495 +#: extensions/window-list/extension.js:647 msgid "Unminimize all" msgstr "Tümünü önceki duruma getir" -#: extensions/window-list/extension.js:501 +#: extensions/window-list/extension.js:653 msgid "Maximize all" msgstr "Tümünü en büyük duruma getir" -#: extensions/window-list/extension.js:509 +#: extensions/window-list/extension.js:661 msgid "Unmaximize all" msgstr "Tümünü önceki duruma getir" -#: extensions/window-list/extension.js:517 +#: extensions/window-list/extension.js:669 msgid "Close all" msgstr "Tümünü kapat" -#: extensions/window-list/extension.js:789 +#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:23 msgid "Window List" msgstr "Pencere Listesi" @@ -285,11 +292,11 @@ msgid "" "Possible values are “never”, “auto” and “always”." msgstr "" "Pencere listesinde aynı uygulamaların ne zaman kümeleneceğine karar verir. " -"Olası değerler: “never” (hiçbir zaman), “auto” (kendiliğinden) ve “always” " -"(her zaman)." +"Olası değerler: “never” (hiçbir zaman), “auto” (kendiliğinden) ve " +"“always” (her zaman)." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:74 msgid "Show windows from all workspaces" msgstr "Tüm çalışma alanlarındaki pencereleri göster" @@ -315,47 +322,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Pencere listesinde çalışma alanı ön izlemelerini göster" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:41 msgid "Window Grouping" msgstr "Pencere Kümeleme" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:46 msgid "Never group windows" msgstr "Pencereleri asla kümeleme" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:47 msgid "Group windows when space is limited" msgstr "Yer kısıtlıyken pencereleri kümele" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:48 msgid "Always group windows" msgstr "Pencereleri her zaman kümele" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:68 msgid "Show on all monitors" msgstr "Tüm monitörlerde göster" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Çalışma alanı ön izlemelerini göster" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Ön İzlemeleri Üst Çubukta Göster" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Çalışma Alanı %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Çalışma Alanı Adları" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Çalışma Alanı Ekle" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Çalışma alanı ön izlemelerini üst çubukta göster" @@ -363,3 +349,28 @@ msgstr "Çalışma alanı ön izlemelerini üst çubukta göster" #: extensions/workspace-indicator/workspaceIndicator.js:430 msgid "Workspace Indicator" msgstr "Çalışma Alanı Belirteci" + +#: extensions/workspace-indicator/workspacePrefs.js:28 +msgid "Show Previews" +msgstr "Ön İzlemeleri Göster" + +#: extensions/workspace-indicator/workspacePrefs.js:86 +#, javascript-format +msgid "Workspace %d" +msgstr "Çalışma Alanı %d" + +#: extensions/workspace-indicator/workspacePrefs.js:153 +msgid "Workspace Names" +msgstr "Çalışma Alanı Adları" + +#: extensions/workspace-indicator/workspacePrefs.js:170 +msgid "Add Workspace" +msgstr "Çalışma Alanı Ekle" + +#: extensions/workspace-indicator/workspacePrefs.js:195 +msgid "Remove" +msgstr "Kaldır" + +#: extensions/workspace-indicator/workspacePrefs.js:225 +msgid "Workspaces" +msgstr "Çalışma Alanları" From 459d654b23d48ce64dcf07c45b6b88570eedffda Mon Sep 17 00:00:00 2001 From: Yi-Jyun Pan Date: Sun, 12 Jan 2025 15:59:38 +0000 Subject: [PATCH 092/101] Update Chinese (Taiwan) translation (cherry picked from commit 97d0a0e51475dfd7721e86271292cbb93237aba7) --- po/zh_TW.po | 87 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/po/zh_TW.po b/po/zh_TW.po index a91c8bc5..ab8e9ea1 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: gnome-shell-extensions gnome-3-0\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 14:28+0000\n" -"PO-Revision-Date: 2024-07-24 10:25+0000\n" -"Last-Translator: Chao-Hsiung Liao \n" +"POT-Creation-Date: 2024-11-25 15:07+0000\n" +"PO-Revision-Date: 2025-01-12 23:57+0800\n" +"Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.6.2\n" +"X-Generator: Poedit 3.5\n" #: data/gnome-classic.desktop.in:3 msgid "GNOME Classic" @@ -38,11 +38,11 @@ msgstr "GNOME Classic 採行 Wayland" msgid "GNOME Classic on Xorg" msgstr "GNOME Classic 採行 Xorg" -#: extensions/apps-menu/extension.js:126 +#: extensions/apps-menu/extension.js:125 msgid "Favorites" msgstr "喜愛" -#: extensions/apps-menu/extension.js:397 +#: extensions/apps-menu/extension.js:399 msgid "Apps" msgstr "程式" @@ -58,11 +58,11 @@ msgstr "" "字串的列表,每個都包含一個應用程式 id (桌面檔名稱),後面接著半形分號 \";\" 與" "工作區號碼" -#: extensions/auto-move-windows/prefs.js:159 +#: extensions/auto-move-windows/prefs.js:156 msgid "Workspace Rules" msgstr "工作區規則" -#: extensions/auto-move-windows/prefs.js:314 +#: extensions/auto-move-windows/prefs.js:311 msgid "Add Rule" msgstr "加入規則" @@ -107,8 +107,8 @@ msgstr "" "如果為真,在對映的縮圖頂端放置視窗說明標題,凌駕 Shell 將它放置在底部的預設" "值。變更這個設定值需要重新啟動 Shell 來套用效果。" -#: extensions/places-menu/extension.js:91 -#: extensions/places-menu/extension.js:94 +#: extensions/places-menu/extension.js:75 +#: extensions/places-menu/extension.js:78 msgid "Places" msgstr "位置" @@ -223,47 +223,47 @@ msgstr "主題名稱" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:70 msgid "Close" msgstr "關閉" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:97 msgid "Unminimize" msgstr "取消最小化" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:97 msgid "Minimize" msgstr "最小化" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:104 msgid "Unmaximize" msgstr "取消最大化" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:104 msgid "Maximize" msgstr "最大化" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:485 msgid "Minimize all" msgstr "全部最小化" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:491 msgid "Unminimize all" msgstr "全部取消最小化" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:497 msgid "Maximize all" msgstr "全部最大化" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:505 msgid "Unmaximize all" msgstr "全部取消最大化" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:513 msgid "Close all" msgstr "全部關閉" -#: extensions/window-list/extension.js:773 +#: extensions/window-list/extension.js:780 msgid "Window List" msgstr "視窗列表" @@ -279,7 +279,7 @@ msgstr "" "決定在視窗列表中何時群組視窗。可能的數值有「never」、「auto」、「always」。" #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:69 msgid "Show windows from all workspaces" msgstr "顯示所有工作區的視窗" @@ -297,44 +297,59 @@ msgid "" "primary one." msgstr "是否在所有連接的螢幕顯示視窗列表或是只出現在主要螢幕上。" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "在視窗清單顯示工作區預覽" + +#: extensions/window-list/prefs.js:36 msgid "Window Grouping" msgstr "視窗群組" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:41 msgid "Never group windows" msgstr "永不群組視窗" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:42 msgid "Group windows when space is limited" msgstr "當空間受限時群組視窗" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:43 msgid "Always group windows" msgstr "永遠群組視窗" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:63 msgid "Show on all monitors" msgstr "顯示於所有螢幕" -#: extensions/window-list/workspaceIndicator.js:255 -#: extensions/workspace-indicator/extension.js:261 -msgid "Workspace Indicator" -msgstr "工作區指示器" +#: extensions/window-list/prefs.js:75 +msgid "Show workspace previews" +msgstr "顯示工作區預覽" -#: extensions/workspace-indicator/prefs.js:69 +#: extensions/workspace-indicator/prefs.js:29 +msgid "Show Previews In Top Bar" +msgstr "在頂端列顯示預覽" + +#: extensions/workspace-indicator/prefs.js:87 #, javascript-format msgid "Workspace %d" msgstr "工作區 %d" -#: extensions/workspace-indicator/prefs.js:136 +#: extensions/workspace-indicator/prefs.js:154 msgid "Workspace Names" msgstr "工作區名稱" -#: extensions/workspace-indicator/prefs.js:262 +#: extensions/workspace-indicator/prefs.js:280 msgid "Add Workspace" msgstr "新增工作區" +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "在頂端列顯示工作區預覽" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "工作區指示器" + #~ msgid "Applications" #~ msgstr "應用程式" @@ -468,8 +483,8 @@ msgstr "新增工作區" #~ msgid "" #~ "Configures how the windows are shown in the switcher. Valid possibilities " -#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" -#~ "only' (shows only the application icon) or 'both'." +#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' " +#~ "(shows only the application icon) or 'both'." #~ msgstr "" #~ "設定視窗在切換器中顯示的方式。有效的選項為「thumbnail-only」(顯示視窗的縮" #~ "圖)、「app-icon-only」(僅顯示應用程式圖示),或「both」(兩者)" From 4e50e9f8dc3ca9714e5d4eff67654bbe381b28fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 13 Jan 2025 16:11:09 +0100 Subject: [PATCH 093/101] ci: Switch ci-templates to master The alternative is to monitor the upstream repository and update the references when necessary. I don't have the resources to do that, so trust upstream to not mess up their development branch. Part-of: --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 521e642f..7ad53942 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,8 +3,8 @@ # SPDX-License-Identifier: GPL-2.0-or-later include: - - remote: 'https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - - remote: "https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml" + - remote: 'https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/master/templates/fedora.yml' + - remote: "https://gitlab.gnome.org/Infrastructure/freedesktop-ci-templates/-/raw/master/templates/ci-fairy.yml" - component: gitlab.gnome.org/GNOME/citemplates/release-service@master inputs: job-stage: deploy From b7de6808051bc0d0bd5335117d22b083e34d0ae1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sun, 12 Jan 2025 21:51:30 +0100 Subject: [PATCH 094/101] Bump version to 48.alpha Update NEWS. --- NEWS | 24 ++++++++++++++++++++++++ meson.build | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 41c1f253..b7c91577 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,27 @@ +48.alpha +======== +* classic: Add missing top-bar indicators [Florian; !339] +* window-list: Fix window state styling [Florian; !342] +* window-list: Fix "ignore-workspace" setting getting reset [Florian; !341] +* window-list: Allow rearranging window buttons [Florian, Jakub; !338] +* window-list: Add workspaces page to preference dialog [Florian; !344] +* places-menu: Sync list of places with nautilus [Florian; !340] +* places-menu: Fix a11y labelling [Florian; #542] +* places-menu: Fix opening drives with mount operations [Florian; !361] +* window-list: Fix hiding when entering overview with gestures [Florian; !364] +* workspace-indicator: Only show previews of regular windows [Florian; !363] +* window-list: Add attention indicator [Florian; !366] +* Misc. bug fixes and cleanups [Florian, Bartłomiej; !337, !343, !345, !347, + !348, !349, !351, !352, !353, !354, !358, !362, !365, !367, !368, !370, !375] + +Contributors: + Florian Müllner, Bartłomiej Piotrowski, Jakub Steiner + +Translators: + Fabio Tomat [fur], Martin [sl], Jordi Mas i Hernandez [ca], Vasil Pupkin [be], + Nathan Follens [nl], Artur S0 [ru], Марко Костић [sr], + Yaron Shahrabani [he], Sabri Ünal [tr], Yi-Jyun Pan [zh_TW] + 47.0 ==== diff --git a/meson.build b/meson.build index 623c3420..315d5e59 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,7 @@ project( 'gnome-shell-extensions', - version: '47.0', + version: '48.alpha', meson_version: '>= 1.1.0', license: 'GPL-2.0-or-later', ) From 01f7df1e8a2de1340589dbcd47f98ff6a1744035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 15 Jan 2025 12:36:51 +0100 Subject: [PATCH 095/101] window-list: Use correct params when re-tracking chrome Since commit 981e8e42, we temporarily untrack the window-list actor while in the overview. However as we don't pass pass the chrome parameters when re-tracking chrome, the window-list no longer contributes to struts or tracks fullscreen changes, whoops. Make sure to pass the original parameters when re-tracking chrome to restore the expected behavior. Fixes: 981e8e42 ("window-list: Untrack chrome while in overview") Closes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/550 Part-of: --- extensions/window-list/extension.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index d20e5270..a768d735 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -1029,7 +1029,7 @@ class WindowList extends St.Widget { this._updateKeyboardAnchor(); }, 'hidden', () => { - Main.layoutManager.trackChrome(this); + Main.layoutManager.trackChrome(this, chromeOptions); this.visible = !this._monitor.inFullscreen; this._updateKeyboardAnchor(); }, this); From e2b1503acdca353a016d6a187a59c6527c4d3573 Mon Sep 17 00:00:00 2001 From: Rafael Fontenelle Date: Mon, 20 Jan 2025 00:13:23 +0000 Subject: [PATCH 096/101] Update Brazilian Portuguese translation --- po/pt_BR.po | 145 +++++++++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 64 deletions(-) diff --git a/po/pt_BR.po b/po/pt_BR.po index 32605993..3c756ccf 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,5 +1,5 @@ # Brazilian Portuguese translation for gnome-shell-extensions. -# Copyright (C) 2022 gnome-shell-extensions's COPYRIGHT HOLDER +# Copyright (C) 2025 gnome-shell-extensions's COPYRIGHT HOLDER # This file is distributed under the same license as the gnome-shell-extensions package. # Felipe Borges , 2011. # Rodrigo Padula , 2011. @@ -9,15 +9,15 @@ # Og Maciel , 2012. # Enrico Nicoletto , 2013, 2014. # Matheus Polkorny , 2024. -# Rafael Fontenelle , 2013-2024. +# Rafael Fontenelle , 2013-2025. # msgid "" msgstr "" "Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "issues\n" -"POT-Creation-Date: 2024-04-29 15:27+0000\n" -"PO-Revision-Date: 2024-08-25 23:48-0300\n" +"POT-Creation-Date: 2025-01-13 16:23+0000\n" +"PO-Revision-Date: 2025-01-19 21:11-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" -"X-Generator: Gtranslator 46.1\n" +"X-Generator: Gtranslator 47.1\n" "X-Project-Style: gnome\n" #: data/gnome-classic.desktop.in:3 @@ -45,11 +45,11 @@ msgstr "GNOME Clássico no Wayland" msgid "GNOME Classic on Xorg" msgstr "GNOME Clássico no Xorg" -#: extensions/apps-menu/extension.js:126 +#: extensions/apps-menu/extension.js:125 msgid "Favorites" msgstr "Favoritos" -#: extensions/apps-menu/extension.js:400 +#: extensions/apps-menu/extension.js:399 msgid "Apps" msgstr "Aplicativos" @@ -65,17 +65,17 @@ msgstr "" "Uma lista de strings, cada uma contendo um id de aplicativo (nome de arquivo " "desktop), seguido por dois pontos e o número do espaço de trabalho" -#: extensions/auto-move-windows/prefs.js:159 +#: extensions/auto-move-windows/prefs.js:156 msgid "Workspace Rules" msgstr "Regras de espaços de trabalho" -#: extensions/auto-move-windows/prefs.js:314 +#: extensions/auto-move-windows/prefs.js:311 msgid "Add Rule" msgstr "Adicionar regra" #. TRANSLATORS: %s is the filesystem name #: extensions/drive-menu/extension.js:123 -#: extensions/places-menu/placeDisplay.js:218 +#: extensions/places-menu/placeDisplay.js:186 #, javascript-format msgid "Ejecting drive “%s” failed:" msgstr "Falha ao ejetar a unidade “%s”:" @@ -117,33 +117,40 @@ msgstr "" "sobrescrevendo o padrão do shell de colocá-lo na parte inferior. A alteração " "dessa configuração requer o reinício do shell para ter algum efeito." -#: extensions/places-menu/extension.js:91 -#: extensions/places-menu/extension.js:94 +#: extensions/places-menu/extension.js:75 +#: extensions/places-menu/extension.js:78 msgid "Places" msgstr "Locais" -#: extensions/places-menu/placeDisplay.js:60 +#: extensions/places-menu/placeDisplay.js:52 #, javascript-format msgid "Failed to launch “%s”" msgstr "Falha ao iniciar “%s”" -#: extensions/places-menu/placeDisplay.js:75 +#: extensions/places-menu/placeDisplay.js:67 #, javascript-format msgid "Failed to mount volume for “%s”" msgstr "Falha ao montar volume para “%s”" -#: extensions/places-menu/placeDisplay.js:135 -#: extensions/places-menu/placeDisplay.js:158 -msgid "Computer" -msgstr "Computador" - -#: extensions/places-menu/placeDisplay.js:333 +#: extensions/places-menu/placeDisplay.js:315 msgid "Home" msgstr "Pasta pessoal" -#: extensions/places-menu/placeDisplay.js:378 -msgid "Browse Network" -msgstr "Navegar na rede" +#: extensions/places-menu/placeDisplay.js:321 +msgid "Recent" +msgstr "Recentes" + +#: extensions/places-menu/placeDisplay.js:327 +msgid "Starred" +msgstr "Favoritos" + +#: extensions/places-menu/placeDisplay.js:347 +msgid "Network" +msgstr "Rede" + +#: extensions/places-menu/placeDisplay.js:354 +msgid "Trash" +msgstr "Lixeira" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 msgid "Cycle Screenshot Sizes" @@ -233,47 +240,47 @@ msgstr "Nome do tema" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "O nome do tema, para ser carregado de ~/.themes/nome/gnome-shell" -#: extensions/window-list/extension.js:72 +#: extensions/window-list/extension.js:95 msgid "Close" msgstr "Fechar" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:122 msgid "Unminimize" msgstr "Desfazer janelas minimizadas" -#: extensions/window-list/extension.js:99 +#: extensions/window-list/extension.js:122 msgid "Minimize" msgstr "Minimizar" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:129 msgid "Unmaximize" msgstr "Desfazer janelas maximizadas" -#: extensions/window-list/extension.js:106 +#: extensions/window-list/extension.js:129 msgid "Maximize" msgstr "Maximizar" -#: extensions/window-list/extension.js:471 +#: extensions/window-list/extension.js:721 msgid "Minimize all" msgstr "Minimizar todas" -#: extensions/window-list/extension.js:477 +#: extensions/window-list/extension.js:727 msgid "Unminimize all" msgstr "Desfazer todas as janelas minimizadas" -#: extensions/window-list/extension.js:483 +#: extensions/window-list/extension.js:733 msgid "Maximize all" msgstr "Maximizar todas" -#: extensions/window-list/extension.js:491 +#: extensions/window-list/extension.js:741 msgid "Unmaximize all" msgstr "Desfazer todas as janelas maximizadas" -#: extensions/window-list/extension.js:499 +#: extensions/window-list/extension.js:749 msgid "Close all" msgstr "Fechar todas" -#: extensions/window-list/extension.js:778 +#: extensions/window-list/extension.js:992 extensions/window-list/prefs.js:23 msgid "Window List" msgstr "Lista de janelas" @@ -290,7 +297,7 @@ msgstr "" "Valores possíveis são “nunca”, “auto” e “sempre”." #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 -#: extensions/window-list/prefs.js:79 +#: extensions/window-list/prefs.js:74 msgid "Show windows from all workspaces" msgstr "Mostrar janelas de todos espaços de trabalho" @@ -316,47 +323,26 @@ msgstr "" msgid "Show workspace previews in window list" msgstr "Mostra prévias do espaço de trabalho na lista de janelas" -#: extensions/window-list/prefs.js:35 +#: extensions/window-list/prefs.js:41 msgid "Window Grouping" msgstr "Agrupamento de janelas" -#: extensions/window-list/prefs.js:40 +#: extensions/window-list/prefs.js:46 msgid "Never group windows" msgstr "Nunca agrupar janelas" -#: extensions/window-list/prefs.js:41 +#: extensions/window-list/prefs.js:47 msgid "Group windows when space is limited" msgstr "Agrupar janelas quando o espaço estiver limitado" -#: extensions/window-list/prefs.js:42 +#: extensions/window-list/prefs.js:48 msgid "Always group windows" msgstr "Sempre agrupar janelas" -#: extensions/window-list/prefs.js:66 +#: extensions/window-list/prefs.js:68 msgid "Show on all monitors" msgstr "Mostrar em todos os monitores" -#: extensions/window-list/prefs.js:92 -msgid "Show workspace previews" -msgstr "Mostra prévias do espaço de trabalho" - -#: extensions/workspace-indicator/prefs.js:30 -msgid "Show Previews In Top Bar" -msgstr "Mostra prévias na barra superior" - -#: extensions/workspace-indicator/prefs.js:88 -#, javascript-format -msgid "Workspace %d" -msgstr "Espaço de trabalho %d" - -#: extensions/workspace-indicator/prefs.js:155 -msgid "Workspace Names" -msgstr "Nomes de espaços de trabalho" - -#: extensions/workspace-indicator/prefs.js:281 -msgid "Add Workspace" -msgstr "Adicionar espaço de trabalho" - #: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 msgid "Show workspace previews in top bar" msgstr "Mostra prévias do espaço de trabalho na barra superior" @@ -365,6 +351,40 @@ msgstr "Mostra prévias do espaço de trabalho na barra superior" msgid "Workspace Indicator" msgstr "Indicador de espaços de trabalho" +#: extensions/workspace-indicator/workspacePrefs.js:28 +msgid "Show Previews" +msgstr "Mostrar prévias" + +#: extensions/workspace-indicator/workspacePrefs.js:86 +#, javascript-format +msgid "Workspace %d" +msgstr "Espaço de trabalho %d" + +#: extensions/workspace-indicator/workspacePrefs.js:153 +msgid "Workspace Names" +msgstr "Nomes de espaços de trabalho" + +#: extensions/workspace-indicator/workspacePrefs.js:170 +msgid "Add Workspace" +msgstr "Adicionar espaço de trabalho" + +#: extensions/workspace-indicator/workspacePrefs.js:195 +msgid "Remove" +msgstr "Remove" + +#: extensions/workspace-indicator/workspacePrefs.js:225 +msgid "Workspaces" +msgstr "Espaços de trabalho" + +#~ msgid "Computer" +#~ msgstr "Computador" + +#~ msgid "Browse Network" +#~ msgstr "Navegar na rede" + +#~ msgid "Show workspace previews" +#~ msgstr "Mostra prévias do espaço de trabalho" + #~ msgid "Applications" #~ msgstr "Aplicativos" @@ -583,9 +603,6 @@ msgstr "Indicador de espaços de trabalho" #~ msgid "Bookmarks" #~ msgstr "Marcadores" -#~ msgid "Network" -#~ msgstr "Rede" - #~ msgid "File System" #~ msgstr "Sistema de arquivos" From b1b16bcfe152e22e01653857cb4f9fa6dd33a6ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Sep=C3=BAlveda?= Date: Mon, 20 Jan 2025 21:45:01 +0000 Subject: [PATCH 097/101] Add Interlingua translation --- po/LINGUAS | 1 + po/ia.po | 365 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 366 insertions(+) create mode 100644 po/ia.po diff --git a/po/LINGUAS b/po/LINGUAS index 0c6a41e9..02c2399c 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -29,6 +29,7 @@ he hi hr hu +ia id is it diff --git a/po/ia.po b/po/ia.po new file mode 100644 index 00000000..0df1f4b6 --- /dev/null +++ b/po/ia.po @@ -0,0 +1,365 @@ +# Interlingua translation for gnome-shell-extensions. +# Copyright (C) 2025 gnome-shell-extensions's COPYRIGHT HOLDER +# This file is distributed under the same license as the gnome-shell-extensions package. +# FIRST AUTHOR , YEAR. +# Emilio Sepúlveda , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions main\n" +"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" +"issues\n" +"POT-Creation-Date: 2025-01-20 00:13+0000\n" +"PO-Revision-Date: 2025-01-20 18:36-0300\n" +"Last-Translator: Emilio Sepúlveda \n" +"Language-Team: Interlingua\n" +"Language: ia\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-DL-Lang: ia\n" +"X-DL-Module: gnome-shell-extensions\n" +"X-DL-Branch: main\n" +"X-DL-Domain: po\n" +"X-DL-State: Translating\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Gtranslator 47.1\n" + +#: data/gnome-classic.desktop.in:3 +msgid "GNOME Classic" +msgstr "GNOME Classic" + +#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4 +#: data/gnome-classic-xorg.desktop.in:4 +msgid "This session logs you into GNOME Classic" +msgstr "Iste session es initiate in GNOME Classic" + +#: data/gnome-classic-wayland.desktop.in:3 +msgid "GNOME Classic on Wayland" +msgstr "GNOME Classic sur Wayland" + +#: data/gnome-classic-xorg.desktop.in:3 +msgid "GNOME Classic on Xorg" +msgstr "GNOME Classic sur Xorg" + +#: extensions/apps-menu/extension.js:125 +msgid "Favorites" +msgstr "Favoritos" + +#: extensions/apps-menu/extension.js:399 +msgid "Apps" +msgstr "Applicationes" + +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12 +msgid "Application and workspace list" +msgstr "Lista de applicationes e spatios de travalio" + +#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13 +msgid "" +"A list of strings, each containing an application id (desktop file name), " +"followed by a colon and the workspace number" +msgstr "" + +#: extensions/auto-move-windows/prefs.js:156 +msgid "Workspace Rules" +msgstr "Regulas de spatio de travalio" + +#: extensions/auto-move-windows/prefs.js:311 +msgid "Add Rule" +msgstr "Adder regula" + +#. TRANSLATORS: %s is the filesystem name +#: extensions/drive-menu/extension.js:123 +#: extensions/places-menu/placeDisplay.js:186 +#, javascript-format +msgid "Ejecting drive “%s” failed:" +msgstr "Falleva le ejection del unitate “%s”:" + +#: extensions/drive-menu/extension.js:142 +msgid "Removable devices" +msgstr "Dispositivos removibile" + +#: extensions/drive-menu/extension.js:164 +msgid "Open Files" +msgstr "Aperir files" + +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 +msgid "Use more screen for windows" +msgstr "Usar plus schermo pro fenestras" + +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 +msgid "" +"Try to use more screen for placing window thumbnails by adapting to screen " +"aspect ratio, and consolidating them further to reduce the bounding box. " +"This setting applies only with the natural placement strategy." +msgstr "" +"Tenta de usar plus schermo pro localisar miniaturas de fenestra con le " +"adaptation al ration de aspecto del schermo, e consolidar lo ulteriormente " +"pro reducer le area occupate. Iste configuration applica solmente con le " +"strategia de placiamento natural." + +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17 +msgid "Place window captions on top" +msgstr "Localisar le subtitulos del fenestras in alto" + +#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18 +msgid "" +"If true, place window captions on top the respective thumbnail, overriding " +"shell default of placing it at the bottom. Changing this setting requires " +"restarting the shell to have any effect." +msgstr "" + +#: extensions/places-menu/extension.js:75 +#: extensions/places-menu/extension.js:78 +msgid "Places" +msgstr "Locos" + +#: extensions/places-menu/placeDisplay.js:52 +#, javascript-format +msgid "Failed to launch “%s”" +msgstr "Falleva le lanceamento de “%s”" + +#: extensions/places-menu/placeDisplay.js:67 +#, javascript-format +msgid "Failed to mount volume for “%s”" +msgstr "Falleva le montage de volumine “%s”" + +#: extensions/places-menu/placeDisplay.js:315 +msgid "Home" +msgstr "Initio" + +#: extensions/places-menu/placeDisplay.js:321 +msgid "Recent" +msgstr "Recente" + +#: extensions/places-menu/placeDisplay.js:327 +msgid "Starred" +msgstr "" + +#: extensions/places-menu/placeDisplay.js:347 +msgid "Network" +msgstr "Rete" + +#: extensions/places-menu/placeDisplay.js:354 +msgid "Trash" +msgstr "Immunditia" + +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14 +msgid "Cycle Screenshot Sizes" +msgstr "" + +#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18 +msgid "Cycle Screenshot Sizes Backward" +msgstr "" + +#: extensions/system-monitor/extension.js:135 +msgid "CPU stats" +msgstr "Statos de CPU " + +#: extensions/system-monitor/extension.js:159 +msgid "Memory stats" +msgstr "Statisticas de memoria" + +#: extensions/system-monitor/extension.js:177 +msgid "Swap stats" +msgstr "" + +#: extensions/system-monitor/extension.js:336 +msgid "Upload stats" +msgstr "Statisticas de carga" + +#: extensions/system-monitor/extension.js:350 +msgid "Download stats" +msgstr "Statisticas de discarga" + +#: extensions/system-monitor/extension.js:364 +msgid "System stats" +msgstr "Statisticas de systema" + +#: extensions/system-monitor/extension.js:412 +msgid "Show" +msgstr "Monstrar" + +#: extensions/system-monitor/extension.js:414 +msgid "CPU" +msgstr "CPU" + +#: extensions/system-monitor/extension.js:416 +msgid "Memory" +msgstr "Memoria" + +#: extensions/system-monitor/extension.js:418 +msgid "Swap" +msgstr "" + +#: extensions/system-monitor/extension.js:420 +msgid "Upload" +msgstr "Carga" + +#: extensions/system-monitor/extension.js:422 +msgid "Download" +msgstr "Discarga" + +#: extensions/system-monitor/extension.js:427 +msgid "Open System Monitor" +msgstr "Aperir monitor de systema" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12 +msgid "Show CPU usage" +msgstr "Monstrar uso de CPU" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16 +msgid "Show memory usage" +msgstr "Monstrar uso de memoria" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20 +msgid "Show swap usage" +msgstr "" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24 +msgid "Show upload" +msgstr "Monstrar carga" + +#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28 +msgid "Show download" +msgstr "Monstrar discarga" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11 +msgid "Theme name" +msgstr "Nomine de thema" + +#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12 +msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" +msgstr "Le nomine del thema a cargar desde ~/.themes/nomine/gnome-shell" + +#: extensions/window-list/extension.js:95 +msgid "Close" +msgstr "Clauder" + +#: extensions/window-list/extension.js:122 +msgid "Unminimize" +msgstr "Disminimisar" + +#: extensions/window-list/extension.js:122 +msgid "Minimize" +msgstr "Minimisar" + +#: extensions/window-list/extension.js:129 +msgid "Unmaximize" +msgstr "Dismaximisar" + +#: extensions/window-list/extension.js:129 +msgid "Maximize" +msgstr "Maximisar" + +#: extensions/window-list/extension.js:721 +msgid "Minimize all" +msgstr "Minimisar toto" + +#: extensions/window-list/extension.js:727 +msgid "Unminimize all" +msgstr "Disminimisar toto" + +#: extensions/window-list/extension.js:733 +msgid "Maximize all" +msgstr "Maximisar toto" + +#: extensions/window-list/extension.js:741 +msgid "Unmaximize all" +msgstr "Dismaximisar toto" + +#: extensions/window-list/extension.js:749 +msgid "Close all" +msgstr "Clauder toto" + +#: extensions/window-list/extension.js:992 extensions/window-list/prefs.js:23 +msgid "Window List" +msgstr "Lista de fenestras" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18 +msgid "When to group windows" +msgstr "Quando gruppar le fenestras" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19 +msgid "" +"Decides when to group windows from the same application on the window list. " +"Possible values are “never”, “auto” and “always”." +msgstr "" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26 +#: extensions/window-list/prefs.js:74 +msgid "Show windows from all workspaces" +msgstr "Monstrar fenestras de tote le spatios de travalio" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27 +msgid "Whether to show windows from all workspaces or only the current one." +msgstr "" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33 +msgid "Show the window list on all monitors" +msgstr "Monstrar le lista de fenestras sur tote le monitores" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34 +msgid "" +"Whether to show the window list on all connected monitors or only on the " +"primary one." +msgstr "" + +#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41 +msgid "Show workspace previews in window list" +msgstr "" +"Monstrar previsualisationes de spatios de travalio in le lista de fenestras" + +#: extensions/window-list/prefs.js:41 +msgid "Window Grouping" +msgstr "Gruppamento de fenestras" + +#: extensions/window-list/prefs.js:46 +msgid "Never group windows" +msgstr "Nunquam gruppar fenestras" + +#: extensions/window-list/prefs.js:47 +msgid "Group windows when space is limited" +msgstr "Gruppar fenestras quando le spatio es limitate" + +#: extensions/window-list/prefs.js:48 +msgid "Always group windows" +msgstr "Sempre gruppar fenestras" + +#: extensions/window-list/prefs.js:68 +msgid "Show on all monitors" +msgstr "Monstrar sur tote le monitores" + +#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12 +msgid "Show workspace previews in top bar" +msgstr "" +"Monstra le previsualisationes de spatios de travalio in le barra superior" + +#: extensions/workspace-indicator/workspaceIndicator.js:430 +msgid "Workspace Indicator" +msgstr "Indicator de spatios de travalio" + +#: extensions/workspace-indicator/workspacePrefs.js:28 +msgid "Show Previews" +msgstr "Monstrar previsualisationes" + +#: extensions/workspace-indicator/workspacePrefs.js:86 +#, javascript-format +msgid "Workspace %d" +msgstr "Spatio de travalio %d" + +#: extensions/workspace-indicator/workspacePrefs.js:153 +msgid "Workspace Names" +msgstr "Nomines de spatio de travalio" + +#: extensions/workspace-indicator/workspacePrefs.js:170 +msgid "Add Workspace" +msgstr "Adder spatio de travalio" + +#: extensions/workspace-indicator/workspacePrefs.js:195 +msgid "Remove" +msgstr "Remover" + +#: extensions/workspace-indicator/workspacePrefs.js:225 +msgid "Workspaces" +msgstr "Spatios de travalio" From 3929dd86bcb64ea192474cfeef5fa2827d258801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 27 Jan 2025 19:59:38 +0100 Subject: [PATCH 098/101] workspace-indicator: Set BoxLayout orientation Use the new `orientation` property instead of `vertical`, as the latter is deprecated. Part-of: --- extensions/workspace-indicator/workspaceIndicator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 9f54acbb..0e92fd74 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -132,7 +132,7 @@ class WorkspaceThumbnail extends St.Button { const box = new St.BoxLayout({ style_class: 'workspace-box', y_expand: true, - vertical: true, + orientation: Clutter.Orientation.VERTICAL, }); this.set_child(box); From aa5df48c45328c43d1325be2dc3e46840a80ceac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 27 Jan 2025 20:00:47 +0100 Subject: [PATCH 099/101] apps-menu: Set BoxLayout orientation Use the new `orientation` property instead of `vertical`, as the latter is deprecated. Part-of: --- extensions/apps-menu/extension.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js index 688c7595..c9deecfa 100644 --- a/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js @@ -547,7 +547,9 @@ class ApplicationsButton extends PanelMenu.Button { let section = new PopupMenu.PopupMenuSection(); this.menu.addMenuItem(section); this.mainBox = new St.BoxLayout({layoutManager: new MainLayout()}); - this.leftBox = new St.BoxLayout({vertical: true}); + this.leftBox = new St.BoxLayout({ + orientation: Clutter.Orientation.VERTICAL, + }); this.applicationsScrollBox = new St.ScrollView({ style_class: 'apps-menu vfade', x_expand: true, @@ -557,9 +559,13 @@ class ApplicationsButton extends PanelMenu.Button { }); this.leftBox.add_child(this.categoriesScrollBox); - this.applicationsBox = new St.BoxLayout({vertical: true}); + this.applicationsBox = new St.BoxLayout({ + orientation: Clutter.Orientation.VERTICAL, + }); this.applicationsScrollBox.set_child(this.applicationsBox); - this.categoriesBox = new St.BoxLayout({vertical: true}); + this.categoriesBox = new St.BoxLayout({ + orientation: Clutter.Orientation.VERTICAL, + }); this.categoriesScrollBox.set_child(this.categoriesBox); this.mainBox.add_child(this.leftBox); From 61b5bdb4e9a37164d502bdf24ae4b7d823a9a63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 5 Feb 2025 00:43:25 +0100 Subject: [PATCH 100/101] Bump version to 48.beta Update NEWS. --- NEWS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/NEWS b/NEWS index b7c91577..d5c1f7d9 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +48.beta +======= +* window-list: Fix regression in chrome tracking [Florian; !379] +* Misc. bug fixes and cleanups [Florian; !380] + +Contributors: + Florian Müllner, Emilio Sepúlveda + +Translators: + Rafael Fontenelle [pt_BR], Emilio Sepúlveda [ia] + 48.alpha ======== * classic: Add missing top-bar indicators [Florian; !339] From af35772b7241048b0d3dd7c773feeb09d0755cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 5 Feb 2025 12:11:54 +0100 Subject: [PATCH 101/101] Actually bump version Fixes: 61b5bdb4 ("Bump version to 48.beta") Part-of: --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 315d5e59..9f0dc4cc 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,7 @@ project( 'gnome-shell-extensions', - version: '48.alpha', + version: '48.beta', meson_version: '>= 1.1.0', license: 'GPL-2.0-or-later', )