From f0a72ce5a327d15fd3b97b9f9507d8d5b3a08b08 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Fri, 5 Apr 2024 00:35:05 +0200 Subject: [PATCH 1/7] Set default zoom mode to 2 This change is necessary for updating wallpapers to work on clean installs. The number 2 now maps to zoom. Unfortunately, the number has no direct relation to the valid values and changing the filter on the available picture-options will cause a regression here. --- ...ome.shell.extensions.space.iflow.randomwallpaper.gschema.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml b/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml index d83e4c5..e1fc34b 100644 --- a/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml +++ b/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml @@ -56,7 +56,7 @@ - 4 + 2 Choose which zoom mode wallpapers get Allows to choose what setting 'picture-options' will get. From 802a96d053322eb535636bc495d41b106e1ea2e3 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Fri, 5 Apr 2024 00:45:40 +0200 Subject: [PATCH 2/7] Simplify getZoomModeEnum function --- src/manager/wallpaperManager.ts | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/manager/wallpaperManager.ts b/src/manager/wallpaperManager.ts index 8760c30..9408d0c 100644 --- a/src/manager/wallpaperManager.ts +++ b/src/manager/wallpaperManager.ts @@ -113,19 +113,15 @@ function getModeNameList(): string[] { * @returns {string[]} Array of string containing valid enum values */ function getZoomModeEnum(): string[] { - return getEnumFromSettings(new Settings('org.gnome.desktop.background'), 'picture-options').filter(s => { - const negatives = [ - 'none', // No wallpaper - 'wallpaper', // Tiled wallpapers, repeating pattern - 'stretched', // Ignoring aspect ratio - 'spanned', // Ignoring aspect ratio - ]; - - if (negatives.includes(s)) - return false; - - return true; - }); + const excludes = [ + 'none', // No wallpaper + 'wallpaper', // Tiled wallpapers, repeating pattern + 'stretched', // Ignoring aspect ratio + 'spanned', // Ignoring aspect ratio + ]; + + return getEnumFromSettings(new Settings('org.gnome.desktop.background'), 'picture-options') + .filter(s => !excludes.includes(s)); } export { From f9b651c9beecf766e71a9606e652a603856afcc6 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Fri, 5 Apr 2024 01:11:36 +0200 Subject: [PATCH 3/7] Update picture-options when changing zoom-mode This is solely done for user feedback when changing the value. --- src/prefs.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/prefs.ts b/src/prefs.ts index fc984d3..fd74ff4 100644 --- a/src/prefs.ts +++ b/src/prefs.ts @@ -77,6 +77,12 @@ class RandomWallpaperSettings extends ExtensionPreferences { comboZoomMode, 'selected', Gio.SettingsBindFlags.DEFAULT); + settings.observe('zoom-mode', () => { + new Settings.Settings('org.gnome.desktop.background') + .setString('picture-options', WallpaperManager.getZoomModeEnum()[settings.getInt('zoom-mode')]); + new Settings.Settings('org.gnome.desktop.screensaver') + .setString('picture-options', WallpaperManager.getZoomModeEnum()[settings.getInt('zoom-mode')]); + }); const comboLogLevel = this._getAs(builder, 'log_level'); comboLogLevel.model = Gtk.StringList.new(Logger.getLogLevelNameList()); From 916ca08e7f57ac29e14f3a0670b82dfb6597dbb9 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Fri, 5 Apr 2024 01:43:14 +0200 Subject: [PATCH 4/7] Make version backwards compatible with 45 The recommended "add_child" call doesn't behave exactly the same as "add_actor" in 45 and causes the history section to render incorrectly. With this commit, the working function is used depending on the major version. --- src/historyMenuElements.ts | 9 ++++++++- types/misc/index.d.ts | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/historyMenuElements.ts b/src/historyMenuElements.ts index 74dba77..71c4896 100644 --- a/src/historyMenuElements.ts +++ b/src/historyMenuElements.ts @@ -20,6 +20,9 @@ import {Logger} from './logger.js'; Gio._promisify(Gio.File.prototype, 'copy_async', 'copy_finish'); Gio._promisify(Gio.File.prototype, 'replace_contents_bytes_async', 'replace_contents_finish'); +import * as Config from 'resource:///org/gnome/shell/misc/config.js'; +const [MAJOR, unused_MINOR] = Config.PACKAGE_VERSION.split('.').map(s => Number(s)); + // FIXME: Generated static class code produces a no-unused-expressions rule error /* eslint-disable no-unused-expressions */ @@ -595,7 +598,11 @@ class HistorySection extends PopupMenu.PopupMenuSection { overlay_scrollbars: true, }); - this.actor.add_child(this.box); + // https://gjs.guide/extensions/upgrading/gnome-shell-46.html#clutter-container + if (MAJOR < 46) + this.actor.add_actor(this.box); + else + this.actor.add_child(this.box); } /** diff --git a/types/misc/index.d.ts b/types/misc/index.d.ts index 05e5fc3..c1de8fb 100644 --- a/types/misc/index.d.ts +++ b/types/misc/index.d.ts @@ -153,3 +153,7 @@ declare module 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js' { getPreferencesWidget(): Gtk.Widget; } } + +declare module 'resource:///org/gnome/shell/misc/config.js' { + export const PACKAGE_VERSION: string; +} From 5b9baa69b114706ce4277eac7ce97a5a48ff6f37 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Sun, 5 May 2024 22:30:00 +0200 Subject: [PATCH 5/7] Enable extension in container on startup --- container/runx11docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/container/runx11docker.sh b/container/runx11docker.sh index 35bc785..a2f1ac4 100755 --- a/container/runx11docker.sh +++ b/container/runx11docker.sh @@ -18,6 +18,6 @@ $SCRIPT_DIR/x11docker/x11docker \ --network \ --init=systemd \ --user=RETAIN \ - --runasuser="journalctl -f &" \ + --runasuser="gnome-extensions enable randomwallpaper@iflow.space; journalctl -f &" \ -- --mount type=bind,source=$SRC_DIR,target=$DST_DIR,readonly -- \ $1 From cc045e20051393eecade910e4ac31ab2923b3fb3 Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Sun, 5 May 2024 22:31:01 +0200 Subject: [PATCH 6/7] Rename zoomMode and bind it directly to gnome settings * Change the name to "Scaling Mode" to be more generic * Bind settings UI directly to the gnome shell background and screen-saver settings to provide direct feedback when changing the value * The internal copy of the currently selected mode is kept as string to restore the selected value when not using an external wallpaper manager with multi-monitor support --- src/manager/defaultWallpaperManager.ts | 12 ++++---- src/manager/wallpaperManager.ts | 5 ++-- src/prefs.ts | 28 +++++++++++-------- ...ns.space.iflow.randomwallpaper.gschema.xml | 4 +-- src/ui/pageGeneral.blp | 4 +-- 5 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/manager/defaultWallpaperManager.ts b/src/manager/defaultWallpaperManager.ts index d7b916d..3bf8e07 100644 --- a/src/manager/defaultWallpaperManager.ts +++ b/src/manager/defaultWallpaperManager.ts @@ -1,6 +1,6 @@ import * as Utils from '../utils.js'; -import {WallpaperManager, getZoomModeEnum} from './wallpaperManager.js'; +import {WallpaperManager} from './wallpaperManager.js'; import {Logger} from '../logger.js'; import {Settings} from '../settings.js'; @@ -50,11 +50,12 @@ class DefaultWallpaperManager extends WallpaperManager { * @returns {Promise} Only resolves */ static setSingleBackground(wallpaperURI: string, backgroundSettings: Settings): Promise { + const storedScalingMode = new Settings().getString('scaling-mode'); if (Utils.isImageMerged(wallpaperURI)) // merged wallpapers need mode "spanned" backgroundSettings.setString('picture-options', 'spanned'); - else - backgroundSettings.setString('picture-options', getZoomModeEnum()[new Settings().getInt('zoom-mode')]); + else if (storedScalingMode) + backgroundSettings.setString('picture-options', storedScalingMode); Utils.setPictureUriOfSettingsObject(backgroundSettings, wallpaperURI); return Promise.resolve(); @@ -69,11 +70,12 @@ class DefaultWallpaperManager extends WallpaperManager { * @returns {Promise} Only resolves */ static setSingleLockScreen(wallpaperURI: string, backgroundSettings: Settings, screensaverSettings: Settings): Promise { + const storedScalingMode = new Settings().getString('scaling-mode'); if (Utils.isImageMerged(wallpaperURI)) // merged wallpapers need mode "spanned" screensaverSettings.setString('picture-options', 'spanned'); - else - screensaverSettings.setString('picture-options', getZoomModeEnum()[new Settings().getInt('zoom-mode')]); + else if (storedScalingMode) + screensaverSettings.setString('picture-options', storedScalingMode); Utils.setPictureUriOfSettingsObject(screensaverSettings, wallpaperURI); return Promise.resolve(); diff --git a/src/manager/wallpaperManager.ts b/src/manager/wallpaperManager.ts index 9408d0c..a94b99f 100644 --- a/src/manager/wallpaperManager.ts +++ b/src/manager/wallpaperManager.ts @@ -112,11 +112,10 @@ function getModeNameList(): string[] { * * @returns {string[]} Array of string containing valid enum values */ -function getZoomModeEnum(): string[] { +function getScalingModeEnum(): string[] { const excludes = [ 'none', // No wallpaper 'wallpaper', // Tiled wallpapers, repeating pattern - 'stretched', // Ignoring aspect ratio 'spanned', // Ignoring aspect ratio ]; @@ -128,5 +127,5 @@ export { WallpaperManager, Mode, getModeNameList, - getZoomModeEnum + getScalingModeEnum }; diff --git a/src/prefs.ts b/src/prefs.ts index fd74ff4..9693cd5 100644 --- a/src/prefs.ts +++ b/src/prefs.ts @@ -71,17 +71,23 @@ class RandomWallpaperSettings extends ExtensionPreferences { 'selected', Gio.SettingsBindFlags.DEFAULT); - const comboZoomMode = this._getAs(builder, 'combo_zoom_mode'); - comboZoomMode.model = Gtk.StringList.new(WallpaperManager.getZoomModeEnum()); - settings.bind('zoom-mode', - comboZoomMode, - 'selected', - Gio.SettingsBindFlags.DEFAULT); - settings.observe('zoom-mode', () => { - new Settings.Settings('org.gnome.desktop.background') - .setString('picture-options', WallpaperManager.getZoomModeEnum()[settings.getInt('zoom-mode')]); - new Settings.Settings('org.gnome.desktop.screensaver') - .setString('picture-options', WallpaperManager.getZoomModeEnum()[settings.getInt('zoom-mode')]); + const comboScalingMode = this._getAs(builder, 'combo_scaling_mode'); + comboScalingMode.model = Gtk.StringList.new(WallpaperManager.getScalingModeEnum()); + const gnomeDesktopSettings = new Settings.Settings('org.gnome.desktop.background'); + const gnomeScreensaverSettings = new Settings.Settings('org.gnome.desktop.screensaver'); + + let storedScalingModeIdx = WallpaperManager.getScalingModeEnum().indexOf(settings.getString('scaling-mode')); + if (storedScalingModeIdx < 0) + // fallback to the current value set in gnome-shell for the desktop + storedScalingModeIdx = WallpaperManager.getScalingModeEnum().indexOf(gnomeDesktopSettings.getString('picture-options')); + + // can't bind a string to "selected" and "active-item" is not available on Adw.ComboRow, binding is implemented manually below + comboScalingMode.selected = storedScalingModeIdx >= 0 ? storedScalingModeIdx : Gtk.INVALID_LIST_POSITION; + comboScalingMode.connect('notify::selected', () => { + const selectedString = WallpaperManager.getScalingModeEnum()[comboScalingMode.selected]; + gnomeDesktopSettings.setString('picture-options', selectedString); + gnomeScreensaverSettings.setString('picture-options', selectedString); + settings.setString('scaling-mode', selectedString); }); const comboLogLevel = this._getAs(builder, 'log_level'); diff --git a/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml b/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml index e1fc34b..e4714c4 100644 --- a/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml +++ b/src/schemas/org.gnome.shell.extensions.space.iflow.randomwallpaper.gschema.xml @@ -55,8 +55,8 @@ Allows to choose what backgrounds will be changed. - - 2 + + "" Choose which zoom mode wallpapers get Allows to choose what setting 'picture-options' will get. diff --git a/src/ui/pageGeneral.blp b/src/ui/pageGeneral.blp index 8e771f3..7ed0086 100644 --- a/src/ui/pageGeneral.blp +++ b/src/ui/pageGeneral.blp @@ -31,8 +31,8 @@ Adw.PreferencesPage page_general { use-subtitle: true; } - Adw.ComboRow combo_zoom_mode { - title: _("Wallpaper Zoom Mode"); + Adw.ComboRow combo_scaling_mode { + title: _("Wallpaper Scaling Mode"); use-subtitle: true; } From 85be7788d7f1233873b01e0eeb592db2c40fc9ba Mon Sep 17 00:00:00 2001 From: Wolfgang Rumpler Date: Tue, 26 Mar 2024 01:46:23 +0100 Subject: [PATCH 7/7] Bump version to v3.0.2 --- src/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/metadata.json b/src/metadata.json index 6aee2b7..ca9231b 100644 --- a/src/metadata.json +++ b/src/metadata.json @@ -4,8 +4,8 @@ "settings-schema": "org.gnome.shell.extensions.space.iflow.randomwallpaper", "name": "Random Wallpaper", "description": "Load new desktop wallpapers from various online sources with ease!", - "version": 34, - "semantic-version": "3.0.1", + "version": 35, + "semantic-version": "3.0.2", "url": "https://github.com/ifl0w/RandomWallpaperGnome3", "issue-url": "https://github.com/ifl0w/RandomWallpaperGnome3/issues" }