[gnome-settings-daemon] common: move screensaver proxy fetching into common code
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] common: move screensaver proxy fetching into common code
- Date: Tue, 6 Aug 2013 19:22:36 +0000 (UTC)
commit 4a0fabd4e7cb83a409c30a3a8aac83179e53ad43
Author: Ray Strode <rstrode redhat com>
Date: Fri Aug 2 17:14:49 2013 -0400
common: move screensaver proxy fetching into common code
Much like with the session manager, several plugins need to connect
to the screen saver (to lock the screen in response to various events).
This commit adds a new api:
gnome_settings_bus_get_screen_saver_proxy
that parallels the existing gnome_settings_bus_get_session_proxy call, and
changes all users of their own screen saver proxies to use this shared proxy.
https://bugzilla.gnome.org/show_bug.cgi?id=705127
gnome-settings-daemon/Makefile.am | 15 +++
gnome-settings-daemon/gnome-settings-bus.c | 30 +++++
gnome-settings-daemon/gnome-settings-bus.h | 4 +-
.../org.gnome.ScreenSaver.xml | 0
plugins/media-keys/gsd-media-keys-manager.c | 45 +++++---
plugins/power/gsd-power-manager.c | 114 ++------------------
plugins/smartcard/Makefile.am | 15 +---
plugins/smartcard/gsd-smartcard-manager.c | 40 +-------
8 files changed, 88 insertions(+), 175 deletions(-)
---
diff --git a/gnome-settings-daemon/Makefile.am b/gnome-settings-daemon/Makefile.am
index 5c3c3ec..f9e209e 100644
--- a/gnome-settings-daemon/Makefile.am
+++ b/gnome-settings-daemon/Makefile.am
@@ -31,8 +31,22 @@ $(session_manager_dbus_built_sources) : Makefile.am org.gnome.SessionManager.xml
"org.gtk.GDBus.C.Name" SessionManager \
$(srcdir)/org.gnome.SessionManager.xml
+screen_saver_dbus_built_sources = gsd-screen-saver-glue.c gsd-screen-saver-glue.h
+
+BUILT_SOURCES += $(screen_saver_dbus_built_sources)
+
+$(screen_saver_dbus_built_sources) : Makefile.am org.gnome.ScreenSaver.xml
+ gdbus-codegen \
+ --interface-prefix org.gnome.ScreenSaver. \
+ --generate-c-code gsd-screen-saver-glue \
+ --c-namespace Gsd \
+ --annotate "org.gnome.ScreenSaver" \
+ "org.gtk.GDBus.C.Name" ScreenSaver \
+ $(srcdir)/org.gnome.ScreenSaver.xml
+
libgsd_la_SOURCES = \
$(session_manager_dbus_built_sources) \
+ $(screen_saver_dbus_built_sources) \
gnome-settings-profile.c \
gnome-settings-profile.h \
gnome-settings-bus.c \
@@ -69,6 +83,7 @@ gsd_SCRIPTS = \
EXTRA_DIST = \
gnome-settings-daemon-localeexec.in \
org.gnome.SessionManager.xml \
+ org.gnome.ScreenSaver.xml \
$(NULL)
gnome-settings-daemon-localeexec: gnome-settings-daemon-localeexec.in
diff --git a/gnome-settings-daemon/gnome-settings-bus.c b/gnome-settings-daemon/gnome-settings-bus.c
index 10ebaae..dbd5df3 100644
--- a/gnome-settings-daemon/gnome-settings-bus.c
+++ b/gnome-settings-daemon/gnome-settings-bus.c
@@ -32,6 +32,9 @@
#define GNOME_SESSION_DBUS_NAME "org.gnome.SessionManager"
#define GNOME_SESSION_DBUS_OBJECT "/org/gnome/SessionManager"
+#define GNOME_SCREENSAVER_DBUS_NAME "org.gnome.ScreenSaver"
+#define GNOME_SCREENSAVER_DBUS_OBJECT "/org/gnome/ScreenSaver"
+
GsdSessionManager *
gnome_settings_bus_get_session_proxy (void)
{
@@ -57,3 +60,30 @@ gnome_settings_bus_get_session_proxy (void)
return session_proxy;
}
+
+GsdScreenSaver *
+gnome_settings_bus_get_screen_saver_proxy (void)
+{
+ static GsdScreenSaver *screen_saver_proxy;
+ GError *error = NULL;
+
+ if (screen_saver_proxy != NULL) {
+ g_object_ref (screen_saver_proxy);
+ } else {
+ screen_saver_proxy = gsd_screen_saver_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ GNOME_SCREENSAVER_DBUS_NAME,
+ GNOME_SCREENSAVER_DBUS_OBJECT,
+ NULL,
+ &error);
+ if (error) {
+ g_warning ("Failed to connect to the screen saver: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_object_add_weak_pointer (G_OBJECT (screen_saver_proxy),
(gpointer*)&screen_saver_proxy);
+ }
+ }
+
+ return screen_saver_proxy;
+}
diff --git a/gnome-settings-daemon/gnome-settings-bus.h b/gnome-settings-daemon/gnome-settings-bus.h
index 666b493..f569f14 100644
--- a/gnome-settings-daemon/gnome-settings-bus.h
+++ b/gnome-settings-daemon/gnome-settings-bus.h
@@ -24,10 +24,12 @@
#include <glib-object.h>
#include "gsd-session-manager-glue.h"
+#include "gsd-screen-saver-glue.h"
G_BEGIN_DECLS
-GsdSessionManager *gnome_settings_bus_get_session_proxy (void);
+GsdSessionManager *gnome_settings_bus_get_session_proxy (void);
+GsdScreenSaver *gnome_settings_bus_get_screen_saver_proxy (void);
G_END_DECLS
diff --git a/plugins/smartcard/org.gnome.ScreenSaver.xml b/gnome-settings-daemon/org.gnome.ScreenSaver.xml
similarity index 100%
rename from plugins/smartcard/org.gnome.ScreenSaver.xml
rename to gnome-settings-daemon/org.gnome.ScreenSaver.xml
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index ae1baab..cf677e8 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -69,10 +69,6 @@
#define GNOME_KEYRING_DBUS_PATH "/org/gnome/keyring/daemon"
#define GNOME_KEYRING_DBUS_INTERFACE "org.gnome.keyring.Daemon"
-#define GS_DBUS_NAME "org.gnome.ScreenSaver"
-#define GS_DBUS_PATH "/org/gnome/ScreenSaver"
-#define GS_DBUS_INTERFACE "org.gnome.ScreenSaver"
-
#define SHELL_DBUS_NAME "org.gnome.Shell"
#define SHELL_DBUS_PATH "/org/gnome/Shell"
@@ -172,6 +168,9 @@ struct GsdMediaKeysManagerPrivate
GCancellable *shell_cancellable;
GCancellable *grab_cancellable;
+ /* ScreenSaver stuff */
+ GsdScreenSaver *screen_saver_proxy;
+
/* systemd stuff */
GDBusProxy *logind_proxy;
gint inhibit_keys_fd;
@@ -1010,22 +1009,34 @@ do_touchpad_action (GsdMediaKeysManager *manager)
}
static void
-do_lock_screensaver (GsdMediaKeysManager *manager)
+on_screen_locked (GsdScreenSaver *screen_saver,
+ GAsyncResult *result,
+ GsdMediaKeysManager *manager)
{
- GsdMediaKeysManagerPrivate *priv = manager->priv;
+ gboolean is_locked;
+ GError *error = NULL;
+
+ is_locked = gsd_screen_saver_call_lock_finish (screen_saver, result, &error);
- if (priv->connection == NULL) {
- g_warning ("No existing D-Bus connection trying to handle screensaver lock key");
+ if (!is_locked) {
+ g_warning ("Couldn't lock screen: %s", error->message);
+ g_error_free (error);
return;
}
- g_dbus_connection_call (manager->priv->connection,
- GS_DBUS_NAME,
- GS_DBUS_PATH,
- GS_DBUS_INTERFACE,
- "Lock",
- NULL, NULL,
- G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, NULL, NULL);
+}
+
+static void
+do_lock_screensaver (GsdMediaKeysManager *manager)
+{
+ GsdMediaKeysManagerPrivate *priv = manager->priv;
+
+ if (priv->screen_saver_proxy == NULL)
+ priv->screen_saver_proxy = gnome_settings_bus_get_screen_saver_proxy ();
+
+ gsd_screen_saver_call_lock (priv->screen_saver_proxy,
+ priv->cancellable,
+ (GAsyncReadyCallback) on_screen_locked,
+ manager);
}
static void
@@ -2571,6 +2582,8 @@ gsd_media_keys_manager_finalize (GObject *object)
if (media_keys_manager->priv->inhibit_keys_fd != -1)
close (media_keys_manager->priv->inhibit_keys_fd);
+ g_clear_object (&media_keys_manager->priv->screen_saver_proxy);
+
G_OBJECT_CLASS (gsd_media_keys_manager_parent_class)->finalize (object);
}
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 297fe8d..b5a8c02 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -69,10 +69,6 @@
#define GSD_POWER_DBUS_INTERFACE_SCREEN GSD_POWER_DBUS_INTERFACE ".Screen"
#define GSD_POWER_DBUS_INTERFACE_KEYBOARD GSD_POWER_DBUS_INTERFACE ".Keyboard"
-#define GS_DBUS_NAME "org.gnome.ScreenSaver"
-#define GS_DBUS_PATH "/org/gnome/ScreenSaver"
-#define GS_DBUS_INTERFACE "org.gnome.ScreenSaver"
-
#define GSD_POWER_MANAGER_NOTIFY_TIMEOUT_SHORT 10 * 1000 /* ms */
#define GSD_POWER_MANAGER_NOTIFY_TIMEOUT_LONG 30 * 1000 /* ms */
@@ -158,9 +154,7 @@ struct GsdPowerManagerPrivate
guint low_time;
/* Screensaver */
- guint screensaver_watch_id;
- GCancellable *screensaver_cancellable;
- GDBusProxy *screensaver_proxy;
+ GsdScreenSaver *screensaver_proxy;
gboolean screensaver_active;
/* State */
@@ -2135,7 +2129,7 @@ lock_screensaver (GsdPowerManager *manager)
do_lock = g_settings_get_boolean (manager->priv->settings_screensaver,
"lock-enabled");
if (!do_lock) {
- g_dbus_proxy_call_sync (manager->priv->screensaver_proxy,
+ g_dbus_proxy_call_sync (G_DBUS_PROXY (manager->priv->screensaver_proxy),
"SetActive",
g_variant_new ("(b)", TRUE),
G_DBUS_CALL_FLAGS_NONE,
@@ -2143,7 +2137,7 @@ lock_screensaver (GsdPowerManager *manager)
return;
}
- g_dbus_proxy_call_sync (manager->priv->screensaver_proxy,
+ g_dbus_proxy_call_sync (G_DBUS_PROXY (manager->priv->screensaver_proxy),
"Lock",
NULL,
G_DBUS_CALL_FLAGS_NONE,
@@ -2816,83 +2810,6 @@ screensaver_signal_cb (GDBusProxy *proxy,
}
static void
-get_active_cb (GDBusProxy *proxy,
- GAsyncResult *result,
- GsdPowerManager *manager)
-{
- GVariant *res;
- GError *error = NULL;
-
- res = g_dbus_proxy_call_finish (proxy, result, &error);
- if (!res) {
- g_warning ("Failed to run GetActive() function on screensaver: %s", error->message);
- g_error_free (error);
- return;
- }
-
- handle_screensaver_active (manager, res);
- g_variant_unref (res);
-}
-
-static void
-screensaver_proxy_ready_cb (GObject *source_object,
- GAsyncResult *res,
- GsdPowerManager *manager)
-{
- GError *error = NULL;
- GDBusProxy *proxy;
-
- proxy = g_dbus_proxy_new_finish (res, &error);
-
- if (proxy == NULL) {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_warning ("Could not connect to screensaver: %s", error->message);
- g_error_free (error);
- return;
- }
-
- manager->priv->screensaver_proxy = proxy;
-
- g_signal_connect (manager->priv->screensaver_proxy, "g-signal",
- G_CALLBACK (screensaver_signal_cb), manager);
- g_dbus_proxy_call (manager->priv->screensaver_proxy,
- "GetActive",
- NULL,
- 0,
- G_MAXINT,
- NULL,
- (GAsyncReadyCallback)get_active_cb,
- manager);
-
-}
-
-static void
-screensaver_appeared_cb (GDBusConnection *connection,
- const char *name,
- const char *name_owner,
- GsdPowerManager *manager)
-{
- g_dbus_proxy_new (connection,
- 0,
- NULL,
- GS_DBUS_NAME,
- GS_DBUS_PATH,
- GS_DBUS_INTERFACE,
- manager->priv->screensaver_cancellable,
- (GAsyncReadyCallback) screensaver_proxy_ready_cb,
- manager);
-
-}
-
-static void
-screensaver_vanished_cb (GDBusConnection *connection,
- const char *name,
- GsdPowerManager *manager)
-{
- g_clear_object (&manager->priv->screensaver_proxy);
-}
-
-static void
power_keyboard_proxy_ready_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
@@ -3354,6 +3271,11 @@ gsd_power_manager_start (GsdPowerManager *manager,
G_CALLBACK (engine_session_properties_changed_cb),
manager);
+ manager->priv->screensaver_proxy = gnome_settings_bus_get_screen_saver_proxy ();
+
+ g_signal_connect (manager->priv->screensaver_proxy, "g-signal",
+ G_CALLBACK (screensaver_signal_cb), manager);
+
manager->priv->kbd_brightness_old = -1;
manager->priv->kbd_brightness_pre_dim = -1;
manager->priv->pre_dim_brightness = -1;
@@ -3398,15 +3320,6 @@ gsd_power_manager_start (GsdPowerManager *manager,
session_presence_proxy_ready_cb,
manager);
- manager->priv->screensaver_watch_id =
- g_bus_watch_name (G_BUS_TYPE_SESSION,
- GS_DBUS_NAME,
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- (GBusNameAppearedCallback) screensaver_appeared_cb,
- (GBusNameVanishedCallback) screensaver_vanished_cb,
- manager,
- NULL);
-
manager->priv->devices_array = g_ptr_array_new_with_free_func (g_object_unref);
/* create a fake virtual composite battery */
@@ -3478,16 +3391,6 @@ gsd_power_manager_stop (GsdPowerManager *manager)
manager->priv->inhibit_lid_switch_timer_id = 0;
}
- if (manager->priv->screensaver_cancellable != NULL) {
- g_cancellable_cancel (manager->priv->screensaver_cancellable);
- g_clear_object (&manager->priv->screensaver_cancellable);
- }
-
- if (manager->priv->screensaver_watch_id != 0) {
- g_bus_unwatch_name (manager->priv->screensaver_watch_id);
- manager->priv->screensaver_watch_id = 0;
- }
-
if (manager->priv->bus_cancellable != NULL) {
g_cancellable_cancel (manager->priv->bus_cancellable);
g_object_unref (manager->priv->bus_cancellable);
@@ -3547,7 +3450,6 @@ gsd_power_manager_init (GsdPowerManager *manager)
manager->priv = GSD_POWER_MANAGER_GET_PRIVATE (manager);
manager->priv->inhibit_lid_switch_fd = -1;
manager->priv->inhibit_suspend_fd = -1;
- manager->priv->screensaver_cancellable = g_cancellable_new ();
manager->priv->bus_cancellable = g_cancellable_new ();
}
diff --git a/plugins/smartcard/Makefile.am b/plugins/smartcard/Makefile.am
index 298113b..b0e972b 100644
--- a/plugins/smartcard/Makefile.am
+++ b/plugins/smartcard/Makefile.am
@@ -2,9 +2,8 @@ plugin_name = smartcard
libsmartcard_headers = gsd-smartcard-manager.h \
gsd-smartcard-utils.h
dbus_built_sources = org.gnome.SettingsDaemon.Smartcard.c org.gnome.SettingsDaemon.Smartcard.h
-screensaver_dbus_built_sources = org.gnome.ScreenSaver.c org.gnome.ScreenSaver.h
enum_built_sources = gsd-smartcard-enum-types.h gsd-smartcard-enum-types.c
-BUILT_SOURCES = $(dbus_built_sources) $(screensaver_dbus_built_sources) $(enum_built_sources)
+BUILT_SOURCES = $(dbus_built_sources) $(enum_built_sources)
libexec_PROGRAMS = gsd-test-smartcard
@@ -19,15 +18,6 @@ $(dbus_built_sources) : Makefile.am org.gnome.SettingsDaemon.Smartcard.xml
--generate-c-code org.gnome.SettingsDaemon.Smartcard \
$(srcdir)/org.gnome.SettingsDaemon.Smartcard.xml
-$(screensaver_dbus_built_sources) : Makefile.am org.gnome.ScreenSaver.xml
- gdbus-codegen \
- --interface-prefix org.gnome.ScreenSaver. \
- --generate-c-code org.gnome.ScreenSaver \
- --c-namespace Gsd \
- --annotate "org.gnome.ScreenSaver" \
- "org.gtk.GDBus.C.Name" ScreenSaver \
- $(srcdir)/org.gnome.ScreenSaver.xml
-
gsd-smartcard-enum-types.h: gsd-smartcard-enum-types.h.in $(libsmartcard_headers)
$(AM_V_GEN) $(GLIB_MKENUMS) --template $^ > $@
@@ -36,7 +26,6 @@ gsd-smartcard-enum-types.c: gsd-smartcard-enum-types.c.in $(libsmartcard_headers
gsd_test_smartcard_SOURCES = \
$(dbus_built_sources) \
- $(screensaver_dbus_built_sources) \
$(enum_built_sources) \
gsd-smartcard-service.c \
gsd-smartcard-service.h \
@@ -73,7 +62,6 @@ gsd_test_smartcard_LDADD = \
libsmartcard_la_SOURCES = \
$(libsmartcard_headers) \
$(dbus_built_sources) \
- $(screensaver_dbus_built_sources) \
$(enum_built_sources) \
gsd-smartcard-manager.c \
gsd-smartcard-plugin.c \
@@ -114,7 +102,6 @@ plugin_DATA = $(plugin_in_files:.gnome-settings-plugin.in=.gnome-settings-plugin
EXTRA_DIST = \
gsd-smartcard-enum-types.c.in \
gsd-smartcard-enum-types.h.in \
- org.gnome.ScreenSaver.xml \
org.gnome.SettingsDaemon.Smartcard.xml \
$(plugin_in_files)
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index e8c3b75..0385003 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -32,8 +32,6 @@
#include "gsd-smartcard-enum-types.h"
#include "gsd-smartcard-utils.h"
-#include "org.gnome.ScreenSaver.h"
-
#include <prerror.h>
#include <prinit.h>
#include <nss.h>
@@ -729,32 +727,6 @@ gsd_smartcard_manager_stop (GsdSmartcardManager *self)
}
static void
-on_got_screen_saver_to_lock_screen (GObject *object,
- GAsyncResult *result,
- GsdSmartcardManager *self)
-{
- GsdSmartcardManagerPrivate *priv = self->priv;
- GsdScreenSaver *screen_saver;
- GError *error = NULL;
-
- screen_saver = gsd_screen_saver_proxy_new_for_bus_finish (result, &error);
-
- if (screen_saver == NULL) {
- g_warning ("Couldn't find screen saver service to lock screen: %s",
- error->message);
- g_error_free (error);
- return;
- }
-
- if (priv->screen_saver != NULL)
- g_object_unref (screen_saver);
-
- priv->screen_saver = screen_saver;
-
- lock_screen (self);
-}
-
-static void
on_screen_locked (GsdScreenSaver *screen_saver,
GAsyncResult *result,
GsdSmartcardManager *self)
@@ -776,16 +748,8 @@ lock_screen (GsdSmartcardManager *self)
{
GsdSmartcardManagerPrivate *priv = self->priv;
- if (priv->screen_saver == NULL) {
- gsd_screen_saver_proxy_new_for_bus (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.ScreenSaver",
- "/org/gnome/ScreenSaver",
- priv->cancellable,
- (GAsyncReadyCallback) on_got_screen_saver_to_lock_screen,
- self);
- return;
- }
+ if (priv->screen_saver == NULL)
+ priv->screen_saver = gnome_settings_bus_get_screen_saver_proxy ();
gsd_screen_saver_call_lock (priv->screen_saver,
priv->cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]