From 31ff2d4c974fd09667082ca4e2d490f865a48e6b Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sun, 29 Apr 2012 23:23:45 +0200 Subject: [PATCH] auto-move-windows: make the suspend and hibernate items configurable Desktop users rarely use suspend, and in general hibernate is more trouble than it's worth to show at all times, so make their visibility configurable in GSettings. Supend defaults to true (since that's the GNOME 3 message anyway), while hibernate is normally false. No UI is provided, since it's unlikely that changing this is necessary. --- extensions/alternative-status-menu/Makefile.am | 1 + extensions/alternative-status-menu/extension.js | 17 +++++++++++++++-- ...sions.alternative-status-menu.gschema.xml.in | 14 ++++++++++++++ po/POTFILES.in | 1 + 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in diff --git a/extensions/alternative-status-menu/Makefile.am b/extensions/alternative-status-menu/Makefile.am index 4f95d47d..8823849d 100644 --- a/extensions/alternative-status-menu/Makefile.am +++ b/extensions/alternative-status-menu/Makefile.am @@ -1,3 +1,4 @@ EXTENSION_ID = alternative-status-menu include ../../extension.mk +include ../../settings.mk diff --git a/extensions/alternative-status-menu/extension.js b/extensions/alternative-status-menu/extension.js index fbc65851..94d35a4d 100644 --- a/extensions/alternative-status-menu/extension.js +++ b/extensions/alternative-status-menu/extension.js @@ -15,13 +15,15 @@ let suspend_item = null; let hibernate_item = null; let poweroff_item = null; let suspend_signal_id = 0, hibernate_signal_id = 0; +let settings = null; +let setting_changed_id = 0; function updateSuspend(object, pspec, item) { - item.actor.visible = object.get_can_suspend(); + item.actor.visible = object.get_can_suspend() && settings.get_boolean('allow-suspend'); } function updateHibernate(object, pspec, item) { - item.actor.visible = object.get_can_hibernate(); + item.actor.visible = object.get_can_hibernate() && settings.get_boolean('allow-hibernate'); } function onSuspendActivate(item) { @@ -48,6 +50,8 @@ function init(metadata) { function enable() { let statusMenu = Main.panel._statusArea.userMenu; + settings = Convenience.getSettings(); + let children = statusMenu.menu._getMenuItems(); let index = children.length; @@ -85,6 +89,11 @@ function enable() { // clear out this to avoid criticals (we don't mess with // updateSuspendOrPowerOff) statusMenu._suspendOrPowerOffItem = null; + + setting_changed_id = settings.connect('changed', function() { + updateSuspend(statusMenu._upClient, null, suspend_item); + updateHibernate(statusMenu._upClient, null, hibernate_item); + }); } function disable() { @@ -106,6 +115,10 @@ function disable() { statusMenu._upClient.disconnect(hibernate_signal_id); suspend_signal_id = hibernate_signal_id = 0; + settings.disconnect(setting_changed_id); + setting_changed_id = 0; + settings = null; + /* destroy the entries we had created */ suspend_item.destroy(); hibernate_item.destroy(); diff --git a/extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in b/extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in new file mode 100644 index 00000000..77ec3203 --- /dev/null +++ b/extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in @@ -0,0 +1,14 @@ + + + + true + <_summary>Enable suspending + <_description>Control the visibility of the Suspend menu item + + + false + <_summary>Enable hibernating + <_description>Control the visibility of the Hibernate menu item + + + diff --git a/po/POTFILES.in b/po/POTFILES.in index 9c3d6a40..7ddd177e 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -2,6 +2,7 @@ extensions/alternate-tab/extension.js extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in extensions/alternate-tab/prefs.js extensions/alternative-status-menu/extension.js +extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in extensions/apps-menu/extension.js extensions/auto-move-windows/extension.js extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in