summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2015-11-04 16:01:57 +0100
committerBastien Nocera <hadess@hadess.net>2015-11-10 13:07:12 +0100
commit329594958f94f3917f30ecc581419b1392839e12 (patch)
tree58e419581369df1ffc05822b6443faaf6e0aa111
parent69d9d8b1eda2d50acca5b4da58003afb8b82a7f1 (diff)
downloadgnome-settings-daemon-329594958f94f3917f30ecc581419b1392839e12.tar.gz
media-keys: Shutdown when power key is pressed in VM
https://bugzilla.gnome.org/show_bug.cgi?id=755165
-rw-r--r--plugins/media-keys/gsd-media-keys-manager.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index f1335c0f..e099bc80 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -165,6 +165,7 @@ struct GsdMediaKeysManagerPrivate
GDBusProxy *power_screen_proxy;
GDBusProxy *power_keyboard_proxy;
UpDevice *composite_device;
+ char *chassis_type;
/* Shell stuff */
GsdShell *shell_proxy;
@@ -1834,6 +1835,12 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
{
GsdPowerButtonActionType action_type;
+ /* Always power off VMs when power off is pressed in the menus */
+ if (g_strcmp0 (manager->priv->chassis_type, "vm") == 0) {
+ power_action (manager, "PowerOff", !in_lock_screen);
+ return;
+ }
+
action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
switch (action_type) {
case GSD_POWER_BUTTON_ACTION_SUSPEND:
@@ -2375,6 +2382,7 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
/* for the power plugin interface code */
manager->priv->power_settings = g_settings_new (SETTINGS_POWER_DIR);
+ manager->priv->chassis_type = gnome_settings_get_chassis_type ();
/* Logic from http://git.gnome.org/browse/gnome-shell/tree/js/ui/status/accessibility.js#n163 */
manager->priv->interface_settings = g_settings_new (SETTINGS_INTERFACE_DIR);
@@ -2483,6 +2491,7 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
g_clear_object (&priv->composite_device);
g_clear_object (&priv->mpris_controller);
g_clear_object (&priv->screencast_proxy);
+ g_clear_pointer (&priv->chassis_type, g_free);
if (priv->cancellable != NULL) {
g_cancellable_cancel (priv->cancellable);