gnome-settings-daemon/gnome-settings-daemon-shutdown-dialog-delay.patch
Bjørn Lie 27566b99d4 Accepting request 449878 from GNOME:Next
- Add gnome-settings-daemon-shutdown-dialog-delay.patch: Fix
  'Shutdown dialog delay 1 to 2 seconds' (bsc#979257, bgo#774452).

OBS-URL: https://build.opensuse.org/request/show/449878
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-settings-daemon?expand=0&rev=267
2017-01-13 21:40:07 +00:00

87 lines
2.8 KiB
Diff

From 21fb652101fbf81d16f76178da9614dcd547686a Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 17 Nov 2016 14:03:37 +0100
Subject: media-keys: Fix shutdown dialog delay when using kbd shortcut
After pressing the Ctrl+Alt+Del shortcut, the shutdown dialog doesn't
appear on screen for a couple of seconds.
The media-keys daemon calls the 'Shutdown' method synchronously. After that
gnome-session calls the daemon with 'QueryEndSession'. The daemon cannot
reply as it's blocked waiting for the reply to the Shutdown method.
Sending the message asynchronously fixes that delay.
Based on report by Xiaoguang Wang <xwang@suse.com>
https://bugzilla.gnome.org/show_bug.cgi?id=774452
---
plugins/media-keys/gsd-media-keys-manager.c | 46 +++++++++++++++++++----------
1 file changed, 31 insertions(+), 15 deletions(-)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index aec094b..c178752 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -813,26 +813,42 @@ do_media_action (GsdMediaKeysManager *manager,
}
static void
+gnome_session_shutdown_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GVariant *result;
+ GError *error = NULL;
+
+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object),
+ res,
+ &error);
+ if (result == NULL) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("Failed to call Shutdown on session manager: %s",
+ error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (result);
+ }
+}
+
+static void
gnome_session_shutdown (GsdMediaKeysManager *manager)
{
- GError *error = NULL;
- GVariant *variant;
GDBusProxy *proxy;
proxy = G_DBUS_PROXY (gnome_settings_bus_get_session_proxy ());
- variant = g_dbus_proxy_call_sync (proxy,
- "Shutdown",
- NULL,
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- &error);
- if (variant == NULL) {
- g_warning ("Failed to call Shutdown on session manager: %s", error->message);
- g_error_free (error);
- return;
- }
- g_variant_unref (variant);
+
+ g_dbus_proxy_call (proxy,
+ "Shutdown",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ manager->priv->bus_cancellable,
+ gnome_session_shutdown_cb,
+ NULL);
+
g_object_unref (proxy);
}
--
cgit v0.12