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