GDBusProxy *gs_proxy;
gboolean have_screensaver_dbus;
- guint watch_id;
guint32 cookie;
gboolean old_dbus_api;
g_warning ("Problem inhibiting the screensaver: %s", error->message);
}
g_error_free (error);
+ g_object_unref (scr);
return;
}
else
scr->priv->cookie = 0;
g_variant_unref (value);
+
+ g_object_unref (scr);
}
static void
g_warning ("Problem uninhibiting the screensaver: %s", error->message);
}
g_error_free (error);
+ g_object_unref (scr);
return;
}
/* clear the cookie */
scr->priv->cookie = 0;
g_variant_unref (value);
+
+ g_object_unref (scr);
}
static void
return;
scr->priv->old_dbus_api = FALSE;
+ g_object_ref (scr);
if (inhibit) {
g_return_if_fail (scr->priv->reason != NULL);
}
static void
-screensaver_dbus_appeared_cb (GDBusConnection *connection,
- const gchar *name,
- const gchar *name_owner,
- GDBusProxy *proxy,
- gpointer user_data)
+screensaver_update_dbus_presence (TotemScrsaver *scr)
{
- TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
TotemScrsaverPrivate *priv = scr->priv;
+ gchar *name_owner;
- priv->gs_proxy = g_object_ref (proxy);
+ name_owner = g_dbus_proxy_get_name_owner (priv->gs_proxy);
+ if (name_owner) {
+ priv->have_screensaver_dbus = TRUE;
+ g_free (name_owner);
- priv->have_screensaver_dbus = TRUE;
+ /* screensaver just appeared, or reappeared */
+ if (priv->reason != NULL)
+ screensaver_disable_dbus (scr);
+ } else {
+ priv->have_screensaver_dbus = FALSE;
+ }
}
static void
-screensaver_dbus_disappeared_cb (GDBusConnection *connection,
- const gchar *name,
- gpointer user_data)
+screensaver_dbus_owner_changed_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
{
TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
- TotemScrsaverPrivate *priv = scr->priv;
- if (priv->gs_proxy) {
- g_object_unref (priv->gs_proxy);
- priv->gs_proxy = NULL;
- }
-
- priv->have_screensaver_dbus = FALSE;
+ screensaver_update_dbus_presence (scr);
}
static void
-screensaver_init_dbus (TotemScrsaver *scr)
+screensaver_dbus_proxy_new_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
{
+ TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
TotemScrsaverPrivate *priv = scr->priv;
- priv->watch_id = g_bus_watch_proxy (G_BUS_TYPE_SESSION,
- GS_SERVICE,
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- GS_PATH,
- GS_INTERFACE,
- G_TYPE_DBUS_PROXY,
- G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
- G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
- screensaver_dbus_appeared_cb,
- screensaver_dbus_disappeared_cb,
- scr, NULL);
+ priv->gs_proxy = g_dbus_proxy_new_for_bus_finish (result, NULL);
+ if (!priv->gs_proxy)
+ return;
+
+ screensaver_update_dbus_presence (scr);
+
+ g_signal_connect (priv->gs_proxy, "notify::g-name-owner",
+ G_CALLBACK (screensaver_dbus_owner_changed_cb),
+ scr);
}
static void
-screensaver_finalize_dbus (TotemScrsaver *scr)
+screensaver_init_dbus (TotemScrsaver *scr)
{
- TotemScrsaverPrivate *priv = scr->priv;
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ GS_SERVICE,
+ GS_PATH,
+ GS_INTERFACE,
+ NULL,
+ screensaver_dbus_proxy_new_cb,
+ scr);
+}
+static void
+screensaver_finalize_dbus (TotemScrsaver *scr)
+{
if (scr->priv->gs_proxy) {
g_object_unref (scr->priv->gs_proxy);
}
-
- if (priv->watch_id > 0)
- g_bus_unwatch_proxy (priv->watch_id);
}
#ifdef GDK_WINDOWING_X11
}
#endif /* HAVE_XTEST */
- XLockDisplay (GDK_DISPLAY());
- XSetScreenSaver (GDK_DISPLAY(),
+ XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
+ XSetScreenSaver (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
scr->priv->timeout,
scr->priv->interval,
scr->priv->prefer_blanking,
scr->priv->allow_exposures);
- XUnlockDisplay (GDK_DISPLAY());
+ XUnlockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
}
#ifdef HAVE_XTEST
{
if (scr->priv->disabled)
{
- XLockDisplay (GDK_DISPLAY());
- XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode,
+ XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
+ XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), *scr->priv->keycode,
True, CurrentTime);
- XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode,
+ XTestFakeKeyEvent (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), *scr->priv->keycode,
False, CurrentTime);
- XUnlockDisplay (GDK_DISPLAY());
+ XUnlockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
/* Swap the keycode */
if (scr->priv->keycode == &scr->priv->keycode1)
scr->priv->keycode = &scr->priv->keycode2;
#ifdef HAVE_XTEST
if (scr->priv->have_xtest != FALSE)
{
- XLockDisplay (GDK_DISPLAY());
- XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout,
+ XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
+ XGetScreenSaver(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &scr->priv->timeout,
&scr->priv->interval,
&scr->priv->prefer_blanking,
&scr->priv->allow_exposures);
- XUnlockDisplay (GDK_DISPLAY());
+ XUnlockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
if (scr->priv->timeout != 0) {
g_timeout_add_seconds (scr->priv->timeout / 2,
}
#endif /* HAVE_XTEST */
- XLockDisplay (GDK_DISPLAY());
- XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout,
+ XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
+ XGetScreenSaver(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &scr->priv->timeout,
&scr->priv->interval,
&scr->priv->prefer_blanking,
&scr->priv->allow_exposures);
- XSetScreenSaver(GDK_DISPLAY(), 0, 0,
+ XSetScreenSaver(GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), 0, 0,
DontPreferBlanking, DontAllowExposures);
- XUnlockDisplay (GDK_DISPLAY());
+ XUnlockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
}
static void
#ifdef HAVE_XTEST
int a, b, c, d;
- XLockDisplay (GDK_DISPLAY());
- scr->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY(), &a, &b, &c, &d) == True);
+ XLockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
+ scr->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &a, &b, &c, &d) == True);
if (scr->priv->have_xtest != FALSE)
{
- scr->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+ scr->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XK_Alt_L);
if (scr->priv->keycode1 == 0) {
g_warning ("scr->priv->keycode1 not existant");
}
- scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_R);
+ scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XK_Alt_R);
if (scr->priv->keycode2 == 0) {
- scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+ scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XK_Alt_L);
if (scr->priv->keycode2 == 0) {
g_warning ("scr->priv->keycode2 not existant");
}
}
scr->priv->keycode = &scr->priv->keycode1;
}
- XUnlockDisplay (GDK_DISPLAY());
+ XUnlockDisplay (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
#endif /* HAVE_XTEST */
}