From cd9d86ce3938465b4c9f08ae20e351906cdaf44c Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Sat, 11 Feb 2012 22:51:28 +0100 Subject: [PATCH] Revert "all: remove all GSettings usage" This reverts commit 374abed8a13f81d514bcccc2ed4b4f18e7d8d058. --- extensions/alternate-tab/Makefile.am | 11 ++ extensions/alternate-tab/extension.js | 21 +++-- ...e.shell.extensions.alternate-tab.gschema.xml.in | 18 ++++ extensions/auto-move-windows/Makefile.am | 11 ++ extensions/auto-move-windows/extension.js | 10 +- ...ell.extensions.auto-move-windows.gschema.xml.in | 10 ++ extensions/dock/Makefile.am | 11 ++ extensions/dock/extension.js | 101 +++++++++++++++++--- .../org.gnome.shell.extensions.dock.gschema.xml.in | 38 ++++++++ extensions/native-window-placement/Makefile.am | 11 ++ extensions/native-window-placement/extension.js | 25 +++-- ...tensions.native-window-placement.gschema.xml.in | 26 +++++ po/POTFILES.in | 4 + 13 files changed, 259 insertions(+), 38 deletions(-) create mode 100644 extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in create mode 100644 extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in create mode 100644 extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in create mode 100644 extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in diff --git a/extensions/alternate-tab/Makefile.am b/extensions/alternate-tab/Makefile.am index b8fde76..bade7cd 100644 --- a/extensions/alternate-tab/Makefile.am +++ b/extensions/alternate-tab/Makefile.am @@ -1,3 +1,14 @@ EXTENSION_ID = alternate-tab include ../../extension.mk + +gschemas_in = $(gschemabase).alternate-tab.gschema.xml.in + +@INTLTOOL_XML_NOMERGE_RULE@ + +gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml) + +@GSETTINGS_RULES@ + +CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS) +EXTRA_DIST += $(gschemas_in) diff --git a/extensions/alternate-tab/extension.js b/extensions/alternate-tab/extension.js index ce65bf5..a53b396 100644 --- a/extensions/alternate-tab/extension.js +++ b/extensions/alternate-tab/extension.js @@ -26,9 +26,9 @@ const N_ = function(e) { return e }; const POPUP_DELAY_TIMEOUT = 150; // milliseconds -// Settings: choose one of MODES, the description is in MESSAGE -// (master branch has a nice dialog, but we cannot in gnome 3.2) -const BEHAVIOUR = 'all_thumbnails'; +const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.alternate-tab'; +const SETTINGS_BEHAVIOUR_KEY = 'behaviour'; +const SETTINGS_FIRST_TIME_KEY = 'first-time'; const MODES = { all_thumbnails: function(shellwm, binding, mask, window, backwards) { @@ -267,8 +267,6 @@ WindowSwitcher.prototype = { } }; -/* This object is never instantiated in the current branch, but - I don't trust git merge enough to remove it */ function AltTabSettingsDialog() { this._init(); } @@ -600,9 +598,16 @@ function init(metadata) { } function doAltTab(shellwm, binding, mask, window, backwards) { - let behaviour = BEHAVIOUR; - if(behaviour in MODES) { - MODES[behaviour](shellwm, binding, mask, window, backwards); + let settings = new Gio.Settings({ schema: SETTINGS_SCHEMA }); + + + if(settings.get_boolean(SETTINGS_FIRST_TIME_KEY)) { + new AltTabSettingsDialog().open(); + } else { + let behaviour = settings.get_string(SETTINGS_BEHAVIOUR_KEY); + if(behaviour in MODES) { + MODES[behaviour](shellwm, binding, mask, window, backwards); + } } } diff --git a/extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in b/extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in new file mode 100644 index 0000000..66861ad --- /dev/null +++ b/extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in @@ -0,0 +1,18 @@ + + + + + + + + 'all_thumbnails' + <_summary>The alt tab behaviour. + <_description>Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and workspace_icons. + + + true + <_summary>Indicates if Alternate Tab is newly installed + <_description>Ask the user for a default behaviour if true. + + + diff --git a/extensions/auto-move-windows/Makefile.am b/extensions/auto-move-windows/Makefile.am index a0bca70..be6e7bc 100644 --- a/extensions/auto-move-windows/Makefile.am +++ b/extensions/auto-move-windows/Makefile.am @@ -1,3 +1,14 @@ EXTENSION_ID = auto-move-windows include ../../extension.mk + +gschemas_in = $(gschemabase).auto-move-windows.gschema.xml.in + +@INTLTOOL_XML_NOMERGE_RULE@ + +gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml) + +@GSETTINGS_RULES@ + +CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS) +EXTRA_DIST += $(gschemas_in) diff --git a/extensions/auto-move-windows/extension.js b/extensions/auto-move-windows/extension.js index b08b0e3..fe5d7f9 100644 --- a/extensions/auto-move-windows/extension.js +++ b/extensions/auto-move-windows/extension.js @@ -11,9 +11,8 @@ const St = imports.gi.St; const Main = imports.ui.main; -// list of applications and workspace pairs -// format: "desktop-file-id.desktop:" -const APPLICATIONS = [ ]; +const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.auto-move-windows'; +const SETTINGS_KEY = 'application-list'; function WindowMover() { this._init(); @@ -21,6 +20,7 @@ function WindowMover() { WindowMover.prototype = { _init: function() { + this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA }); this._windowTracker = Shell.WindowTracker.get_default(); let display = global.screen.get_display(); @@ -46,7 +46,7 @@ WindowMover.prototype = { if (!this._windowTracker.is_window_interesting(window)) return; - let spaces = APPLICATIONS; + let spaces = this._settings.get_strv(SETTINGS_KEY); let app = this._windowTracker.get_window_app(window); if (!app) { @@ -159,4 +159,4 @@ function enable() { function disable() { Main._checkWorkspaces = prevCheckWorkspaces; winMover.destroy(); -} +} \ No newline at end of file diff --git a/extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in b/extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in new file mode 100644 index 0000000..59753dc --- /dev/null +++ b/extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in @@ -0,0 +1,10 @@ + + + + + [ ] + <_summary>Application and workspace list + <_description>A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number + + + diff --git a/extensions/dock/Makefile.am b/extensions/dock/Makefile.am index 2531858..827f81c 100644 --- a/extensions/dock/Makefile.am +++ b/extensions/dock/Makefile.am @@ -1,3 +1,14 @@ EXTENSION_ID = dock include ../../extension.mk + +gschemas_in = $(gschemabase).dock.gschema.xml.in + +@INTLTOOL_XML_NOMERGE_RULE@ + +gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml) + +@GSETTINGS_RULES@ + +CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS) +EXTRA_DIST += $(gschemas_in) diff --git a/extensions/dock/extension.js b/extensions/dock/extension.js index d851bb8..cc53827 100644 --- a/extensions/dock/extension.js +++ b/extensions/dock/extension.js @@ -25,6 +25,15 @@ const AltTab = imports.ui.altTab; const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = Gettext.gettext; +// Settings +const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock'; +const DOCK_POSITION_KEY = 'position'; +const DOCK_SIZE_KEY = 'size'; +const DOCK_HIDE_KEY = 'autohide'; +const DOCK_EFFECTHIDE_KEY = 'hide-effect'; +const DOCK_AUTOHIDE_ANIMATION_TIME_KEY = 'hide-effect-duration'; + + //hide //const autohide_animation_time = 0.3; @@ -40,15 +49,6 @@ const AutoHideEffect = { MOVE: 2 }; -// Settings -const DOCK_POSITION = PositionMode.RIGHT; -const DOCK_SIZE = 48; -const DOCK_AUTOHIDE = true; -const DOCK_EFFECTHIDE = AutoHideEffect.MOVE; -const DOCK_AUTOHIDE_ANIMATION_TIME = 0.3; -// Do not change anything below this line (it is intentionally duplicate to keep in -// sync with master branch) - let position = PositionMode.RIGHT; let dockicon_size = 48; let hideable = true; @@ -340,11 +340,15 @@ Dock.prototype = { this._favorites = []; // Load Settings - position = DOCK_POSITION; - dockicon_size = DOCK_SIZE; - hideDock = hideable = DOCK_AUTOHIDE; - hideEffect = DOCK_EFFECTHIDE; - autohide_animation_time = DOCK_AUTOHIDE_ANIMATION_TIME; + this._settings = new Gio.Settings({ schema: DOCK_SETTINGS_SCHEMA }); + position = this._settings.get_enum(DOCK_POSITION_KEY); + dockicon_size = this._settings.get_int(DOCK_SIZE_KEY); + hideDock = hideable = this._settings.get_boolean(DOCK_HIDE_KEY); + hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY); + autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY); + //global.log("POSITION: " + position); + //global.log("dockicon_size: " + dockicon_size); + this._spacing = 4; this._item_size = dockicon_size; @@ -378,6 +382,72 @@ Dock.prototype = { })); Main.layoutManager.addChrome(this.actor); + //hidden + this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, function (){ + if (!this._settings) + return; + + let primary = Main.layoutManager.primaryMonitor; + position = this._settings.get_enum(DOCK_POSITION_KEY); + this.actor.y=primary.y; + this._redisplay(); + })); + + this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, function (){ + if (!this._settings) + return; + + dockicon_size = this._settings.get_int(DOCK_SIZE_KEY); + this._redisplay(); + })); + + this._settings.connect('changed::'+DOCK_HIDE_KEY, Lang.bind(this, function (){ + if (!this._settings) + return; + + hideable = this._settings.get_boolean(DOCK_HIDE_KEY); + if (hideable){ + hideDock=false; + this._hideDock(); + } else { + hideDock=true; + this._showDock(); + } + })); + + this._settings.connect('changed::'+DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () { + if (!this._settings) + return; + + hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY); + + switch (hideEffect) { + case AutoHideEffect.RESCALE: + this._item_size=dockicon_size; + break; + case AutoHideEffect.RESIZE: + this.actor.set_scale (1,1); + break; + case AutoHideEffect.MOVE: + ; + } + this.actor.disconnect(this._leave_event); + this.actor.disconnect(this._enter_event); + + this._selectFunctionsHide (); + + this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock)); + this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock)); + this._redisplay(); + })); + + this._settings.connect('changed::'+DOCK_AUTOHIDE_ANIMATION_TIME_KEY, Lang.bind(this,function (){ + if (!this._settings) + return; + + autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY); + })); + this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock)); this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock)); @@ -413,13 +483,14 @@ Dock.prototype = { this.actor.destroy(); // Break reference cycles + this._settings = null; this._appSystem = null; this._tracker = null; }, // fuctions hide _restoreHideDock: function(){ - hideable = DOCK_AUTOHIDE; + hideable = this._settings.get_boolean(DOCK_HIDE_KEY); }, _disableHideDock: function (){ diff --git a/extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in b/extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in new file mode 100644 index 0000000..351c9a7 --- /dev/null +++ b/extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + 'right' + <_summary>Position of the dock + <_description>Sets the position of the dock in the screen. Allowed values are 'right' or 'left' + + + 48 + <_summary>Icon size + <_description>Sets icon size of the dock. + + + true + <_summary>Enable/disable autohide + + + 'resize' + <_summary>Autohide effect + <_description>Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale' + + + 0.3 + <_summary>Autohide duration + <_description>Sets the time duration of the autohide effect. + + + diff --git a/extensions/native-window-placement/Makefile.am b/extensions/native-window-placement/Makefile.am index c53a614..0d6c4bc 100644 --- a/extensions/native-window-placement/Makefile.am +++ b/extensions/native-window-placement/Makefile.am @@ -1,3 +1,14 @@ EXTENSION_ID = native-window-placement include ../../extension.mk + +gschemas_in = $(gschemabase).native-window-placement.gschema.xml.in + +@INTLTOOL_XML_NOMERGE_RULE@ + +gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml) + +@GSETTINGS_RULES@ + +CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS) +EXTRA_DIST += $(gschemas_in) diff --git a/extensions/native-window-placement/extension.js b/extensions/native-window-placement/extension.js index 7031ce9..67bc34f 100644 --- a/extensions/native-window-placement/extension.js +++ b/extensions/native-window-placement/extension.js @@ -25,12 +25,6 @@ const WindowPlacementStrategy = { GRID: 1, }; -/* Begin user settings */ -const PLACEMENT_STRATEGY = WindowPlacementStrategy.NATURAL; -const USE_MORE_SCREEN = true; -const WINDOW_CAPTIONS_ON_TOP = true; -/* End user settings - do not change anything below this line */ - // testing settings for natural window placement strategy: const WINDOW_PLACEMENT_NATURAL_FILLGAPS = true; // enlarge windows at the end to fill gaps // not implemented yet const WINDOW_PLACEMENT_NATURAL_GRID_FALLBACK = true; // fallback to grid mode if all windows have the same size and positions. // not implemented yet @@ -123,8 +117,19 @@ function resetState() { function enable() { resetState(); - let placementStrategy = PLACEMENT_STRATEGY; - let useMoreScreen = USE_MORE_SCREEN; + let settings = new Gio.Settings({ schema: 'org.gnome.shell.extensions.native-window-placement' }); + let placementStrategy = settings.get_enum('strategy'); + let signalId = settings.connect('changed::strategy', function() { + placementStrategy = settings.get_enum('strategy'); + // we don't update immediately, we wait for a relayout + // (and hope for the best) + }); + connectedSignals.push({ obj: settings, id: signalId }); + let useMoreScreen = settings.get_boolean('use-more-screen'); + signalId = settings.connect('changed::use-more-screen', function() { + useMoreScreen = settings.get_boolean('use-more-screen'); + }); + connectedSignals.push({ obj: settings, id: signalId }); /** * _calculateWindowTransformationsNatural: @@ -410,7 +415,7 @@ function enable() { } /// position window titles on top of windows in overlay //// - if (WINDOW_CAPTIONS_ON_TOP) { + if (settings.get_boolean('window-captions-on-top')) { winInjections['_init'] = Workspace.WindowOverlay.prototype._init; Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) { let metaWindow = windowClone.metaWindow; @@ -524,4 +529,4 @@ function disable() { function init() { /* do nothing */ -} +} \ No newline at end of file diff --git a/extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in b/extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in new file mode 100644 index 0000000..873bfd7 --- /dev/null +++ b/extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in @@ -0,0 +1,26 @@ + + + + + + + + 'natural' + <_summary>Window placement strategy + <_description>The algorithm used to layout thumbnails in the overview. 'grid' to use the default grid based algorithm, + 'natural' to use another one that reflects more the position and size of the actual window + + + true + <_summary>Use more screen for windows + <_description>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. + + + true + <_summary>Place window captions on top + <_description>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. + + + diff --git a/po/POTFILES.in b/po/POTFILES.in index b82572e..d1be54b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,9 +1,13 @@ extensions/alternative-status-menu/extension.js extensions/alternate-tab/extension.js +extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in extensions/auto-move-windows/extension.js +extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in extensions/dock/extension.js +extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in extensions/example/extension.js extensions/gajim/extension.js +extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in extensions/windowsNavigator/extension.js extensions/xrandr-indicator/extension.js -- 1.7.9