Files
gnome-shell-extensions/debian/patches/02-Revert-all-remove-all-GSettings-usage.patch
T
Michael Biebl 8a04a843f6 Add debian/patches/02-Revert-all-remove-all-GSettings-usage.patch: Use
GSettings since we install the extensions system-wide.
2012-02-11 21:55:11 +00:00

527 lines
21 KiB
Diff

From cd9d86ce3938465b4c9f08ae20e351906cdaf44c Mon Sep 17 00:00:00 2001
From: Michael Biebl <biebl@debian.org>
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 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <enum id="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
+ <value value="1" nick="all_thumbnails"/>
+ <value value="2" nick="workspace_icons"/>
+ </enum>
+ <schema id="org.gnome.shell.extensions.alternate-tab" path="/org/gnome/shell/extensions/alternate-tab/">
+ <key name="behaviour" enum="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
+ <default>'all_thumbnails'</default>
+ <_summary>The alt tab behaviour.</_summary>
+ <_description>Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and workspace_icons.</_description>
+ </key>
+ <key type="b" name="first-time">
+ <default>true</default>
+ <_summary>Indicates if Alternate Tab is newly installed</_summary>
+ <_description>Ask the user for a default behaviour if true.</_description>
+ </key>
+ </schema>
+</schemalist>
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:<num>"
-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 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <schema id="org.gnome.shell.extensions.auto-move-windows" path="/org/gnome/shell/extensions/auto-move-windows/">
+ <key name="application-list" type="as">
+ <!-- FIXME: should be a(su), when JS supports more of GVariant -->
+ <default>[ ]</default>
+ <_summary>Application and workspace list</_summary>
+ <_description>A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number</_description>
+ </key>
+ </schema>
+</schemalist>
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 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <enum id='org.gnome.shell.extensions.dock.PositionMode'>
+ <value nick='left' value='0'/>
+ <value nick='right' value='1'/>
+ </enum>
+ <enum id='org.gnome.shell.extensions.dock.AutoHideEffect'>
+ <value nick='resize' value='0'/>
+ <value nick='rescale' value='1'/>
+ <value nick='move' value='2'/>
+ </enum>
+
+ <schema id="org.gnome.shell.extensions.dock" path="/org/gnome/shell/extensions/dock/">
+ <key name="position" enum="org.gnome.shell.extensions.dock.PositionMode">
+ <default>'right'</default>
+ <_summary>Position of the dock</_summary>
+ <_description>Sets the position of the dock in the screen. Allowed values are 'right' or 'left'</_description>
+ </key>
+ <key name="size" type="i">
+ <default>48</default>
+ <_summary>Icon size</_summary>
+ <_description>Sets icon size of the dock.</_description>
+ </key>
+ <key name="autohide" type="b">
+ <default>true</default>
+ <_summary>Enable/disable autohide</_summary>
+ </key>
+ <key name="hide-effect" enum="org.gnome.shell.extensions.dock.AutoHideEffect">
+ <default>'resize'</default>
+ <_summary>Autohide effect</_summary>
+ <_description>Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'</_description>
+ </key>
+ <key name="hide-effect-duration" type="d">
+ <default>0.3</default>
+ <_summary>Autohide duration</_summary>
+ <_description>Sets the time duration of the autohide effect.</_description>
+ </key>
+ </schema>
+</schemalist>
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 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <enum id="org.gnome.shell.extensions.native-window-placement.strategy">
+ <value nick="natural" value="0" />
+ <value nick="grid" value="1" />
+ </enum>
+ <schema id="org.gnome.shell.extensions.native-window-placement" path="/org/gnome/shell/extensions/native-window-placement/">
+ <key name="strategy" enum="org.gnome.shell.extensions.native-window-placement.strategy">
+ <default>'natural'</default>
+ <_summary>Window placement strategy</_summary>
+ <_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</_description>
+ </key>
+ <key name="use-more-screen" type="b">
+ <default>true</default>
+ <_summary>Use more screen for windows</_summary>
+ <_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.</_description>
+ </key>
+ <key name="window-captions-on-top" type="b">
+ <default>true</default>
+ <_summary>Place window captions on top</_summary>
+ <_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.</_description>
+ </key>
+ </schema>
+</schemalist>
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