summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWu Xiaotian <[email protected]>2020-08-14 19:00:52 +0800
committerVictor Kareh <[email protected]>2026-06-01 14:29:00 -0400
commit48781153e2a4ec0a06cd1ad1df4fa0742449b24f (patch)
treecefc3b34aee08fb0f18f8a564fae0912a25c0446
parentff5375d57188e07da9f0fc27fde978c0fd5b3d5f (diff)
downloadmate-screensaver-gdbus.tar.bz2
mate-screensaver-gdbus.tar.xz
gs-watcher-x11: Migrate from dbus-glib to gdbusgdbus
-rw-r--r--src/gs-watcher-x11.c182
1 files changed, 92 insertions, 90 deletions
diff --git a/src/gs-watcher-x11.c b/src/gs-watcher-x11.c
index a224548..b22f2b6 100644
--- a/src/gs-watcher-x11.c
+++ b/src/gs-watcher-x11.c
@@ -31,9 +31,6 @@
#include <string.h>
#include <gdk/gdkx.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-
#include "gs-watcher.h"
#include "gs-marshal.h"
#include "gs-debug.h"
@@ -56,7 +53,7 @@ struct GSWatcherPrivate
guint idle_id;
char *status_message;
- DBusGProxy *presence_proxy;
+ GDBusProxy *presence_proxy;
guint watchdog_timer_id;
};
@@ -397,125 +394,130 @@ set_status (GSWatcher *watcher,
}
static void
-on_presence_status_changed (DBusGProxy *presence_proxy,
- guint status,
- GSWatcher *watcher)
+on_presence_signal_cb (GDBusProxy *proxy G_GNUC_UNUSED,
+ gchar *sender_name G_GNUC_UNUSED,
+ gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
{
- set_status (watcher, status);
-}
+ GSWatcher *watcher;
+ guint status;
+ const char *status_text;
-static void
-on_presence_status_text_changed (DBusGProxy *presence_proxy,
- const char *status_text,
- GSWatcher *watcher)
-{
- set_status_text (watcher, status_text);
+ watcher = GS_WATCHER (user_data);
+
+ if (g_strcmp0 (signal_name, "StatusChanged") == 0 &&
+ g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(u)")))
+ {
+ g_variant_get (parameters, "(u)", &status);
+ set_status (watcher, status);
+ }
+ else if (g_strcmp0 (signal_name, "StatusTextChanged") == 0 &&
+ g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(s)")))
+ {
+ g_variant_get (parameters, "(&s)", &status_text);
+ set_status_text (watcher, status_text);
+ }
}
static gboolean
connect_presence_watcher (GSWatcher *watcher)
{
- DBusGConnection *bus;
- GError *error;
- gboolean ret;
+ gboolean ret = FALSE;
+ GError *error = NULL;
+
+ watcher->priv->presence_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager/Presence",
+ "org.gnome.SessionManager.Presence",
+ NULL,
+ &error);
+ if (watcher->priv->presence_proxy != NULL)
+ {
+ GDBusProxy *proxy;
- ret = FALSE;
+ g_signal_connect (watcher->priv->presence_proxy, "g-signal",
+ G_CALLBACK (on_presence_signal_cb),
+ watcher);
- error = NULL;
- bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (bus == NULL)
- {
- g_warning ("Unable to get session bus: %s", error->message);
- g_error_free (error);
- goto done;
- }
+ proxy = g_dbus_proxy_new_sync (g_dbus_proxy_get_connection (watcher->priv->presence_proxy),
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ g_dbus_proxy_get_name (watcher->priv->presence_proxy),
+ g_dbus_proxy_get_object_path (watcher->priv->presence_proxy),
+ "org.freedesktop.DBus.Properties",
+ NULL,
+ &error);
- error = NULL;
- watcher->priv->presence_proxy = dbus_g_proxy_new_for_name_owner (bus,
- "org.gnome.SessionManager",
- "/org/gnome/SessionManager/Presence",
- "org.gnome.SessionManager.Presence",
- &error);
- if (watcher->priv->presence_proxy != NULL)
- {
- DBusGProxy *proxy;
-
- dbus_g_proxy_add_signal (watcher->priv->presence_proxy,
- "StatusChanged",
- G_TYPE_UINT,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (watcher->priv->presence_proxy,
- "StatusChanged",
- G_CALLBACK (on_presence_status_changed),
- watcher,
- NULL);
- dbus_g_proxy_add_signal (watcher->priv->presence_proxy,
- "StatusTextChanged",
- G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (watcher->priv->presence_proxy,
- "StatusTextChanged",
- G_CALLBACK (on_presence_status_text_changed),
- watcher,
- NULL);
-
- proxy = dbus_g_proxy_new_from_proxy (watcher->priv->presence_proxy,
- "org.freedesktop.DBus.Properties",
- "/org/gnome/SessionManager/Presence");
if (proxy != NULL)
{
guint status;
const char *status_text;
- GValue value = { 0, };
+ GVariant *variant = NULL;
+ GVariant *inner = NULL;
status = 0;
status_text = NULL;
error = NULL;
- dbus_g_proxy_call (proxy,
- "Get",
- &error,
- G_TYPE_STRING, "org.gnome.SessionManager.Presence",
- G_TYPE_STRING, "status",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value,
- G_TYPE_INVALID);
-
- if (error != NULL)
+ variant = g_dbus_proxy_call_sync (proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ "org.gnome.SessionManager.Presence",
+ "status"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+
+ if (variant == NULL)
{
g_warning ("Couldn't get presence status: %s", error->message);
g_error_free (error);
+ g_object_unref (proxy);
goto done;
}
- else
- {
- status = g_value_get_uint (&value);
- }
- g_value_unset (&value);
+ g_variant_get (variant, "(v)", &inner);
+ status = g_variant_get_uint32 (inner);
+ g_variant_unref (inner);
+ g_variant_unref (variant);
error = NULL;
- dbus_g_proxy_call (proxy,
- "Get",
- &error,
- G_TYPE_STRING, "org.gnome.SessionManager.Presence",
- G_TYPE_STRING, "status-text",
- G_TYPE_INVALID,
- G_TYPE_VALUE, &value,
- G_TYPE_INVALID);
-
- if (error != NULL)
+ variant = g_dbus_proxy_call_sync (proxy,
+ "Get",
+ g_variant_new ("(ss)",
+ "org.gnome.SessionManager.Presence",
+ "status-text"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+
+ if (variant == NULL)
{
g_warning ("Couldn't get presence status text: %s", error->message);
g_error_free (error);
- }
- else
- {
- status_text = g_value_get_string (&value);
+ g_object_unref (proxy);
+ goto done;
}
+ g_variant_get (variant, "(v)", &inner);
+ status_text = g_variant_get_string (inner, NULL);
set_status (watcher, status);
set_status_text (watcher, status_text);
+ g_variant_unref (inner);
+ g_variant_unref (variant);
+
+ g_object_unref (proxy);
+ }
+ else
+ {
+ g_warning ("Unable to create D-Bus Properties proxy: %s", error->message);
+ g_error_free (error);
+ goto done;
}
}
else
@@ -583,7 +585,7 @@ gs_watcher_finalize (GObject *object)
(one wouldn't expect this to be rocket science.)
*/
static void
-disable_builtin_screensaver (GSWatcher *watcher,
+disable_builtin_screensaver (GSWatcher *watcher G_GNUC_UNUSED,
gboolean unblank_screen)
{
int current_server_timeout, current_server_interval;