[Xfce4-commits] [apps/xfce4-screensaver] 01/04: migrage -command to gdbus
noreply at xfce.org
noreply at xfce.org
Sun Jul 7 19:25:58 CEST 2019
This is an automated email from the git hooks/post-receive script.
b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository apps/xfce4-screensaver.
commit 856892c2b725d932f9bf50f830b31e94e3f7894e
Author: Alexander Butenko <a.butenka at gmail.com>
Date: Sun Jun 30 15:55:32 2019 -0400
migrage -command to gdbus
Signed-off-by: Sean Davis <smd.seandavis at gmail.com>
---
configure.ac | 2 +-
src/xfce4-screensaver-command.c | 370 +++++++++++-----------------------------
2 files changed, 103 insertions(+), 269 deletions(-)
diff --git a/configure.ac b/configure.ac
index f2b5b1e..335e8e3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -117,7 +117,7 @@ AC_SUBST(XFCE_SCREENSAVER_CAPPLET_LIBS)
PKG_CHECK_MODULES(XFCE_SCREENSAVER_COMMAND,
gobject-2.0 >= $GLIB_REQUIRED_VERSION
- dbus-glib-1 >= $DBUS_REQUIRED_VERSION)
+ gio-2.0 >= $GLIB_REQUIRED_VERSION)
AC_SUBST(XFCE_SCREENSAVER_COMMAND_CFLAGS)
AC_SUBST(XFCE_SCREENSAVER_COMMAND_LIBS)
diff --git a/src/xfce4-screensaver-command.c b/src/xfce4-screensaver-command.c
index f9ad970..78efc6f 100644
--- a/src/xfce4-screensaver-command.c
+++ b/src/xfce4-screensaver-command.c
@@ -27,11 +27,7 @@
#include <stdlib.h>
#include <glib.h>
-
-#define DBUS_API_SUBJECT_TO_CHANGE
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
+#include <gio/gio.h>
#include <libxfce4util/libxfce4util.h>
@@ -108,320 +104,168 @@ static GOptionEntry entries[] = {
static GMainLoop *loop = NULL;
-static gboolean
-screensaver_is_running (DBusConnection *connection) {
- DBusError error;
- gboolean exists;
-
- g_return_val_if_fail (connection != NULL, FALSE);
-
- dbus_error_init (&error);
- exists = dbus_bus_name_has_owner (connection, GS_SERVICE, &error);
- if (dbus_error_is_set (&error))
- dbus_error_free (&error);
-
- return exists;
-}
-
-static DBusMessage *
-screensaver_send_message_inhibit (DBusConnection *connection,
- const char *application,
- const char *reason) {
- DBusMessage *message;
- DBusMessage *reply;
- DBusError error;
- DBusMessageIter iter;
-
- g_return_val_if_fail (connection != NULL, NULL);
-
- dbus_error_init (&error);
-
- message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, "Inhibit");
- if (message == NULL) {
- g_warning ("Couldn't allocate the dbus message");
- return NULL;
- }
-
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &application);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &reason);
-
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1, &error);
- if (dbus_error_is_set (&error)) {
- g_warning ("%s raised:\n %s\n\n", error.name, error.message);
- reply = NULL;
- }
-
- dbus_connection_flush (connection);
+static GDBusMessage *
+screensaver_send_message (GDBusConnection *conn,
+ const char *name,
+ GVariant *body,
+ gboolean expect_reply) {
+ GDBusMessage *message;
+ GDBusMessage *reply = NULL;
+ GError *error = NULL;
- dbus_message_unref (message);
- dbus_error_free (&error);
-
- return reply;
-}
-
-static DBusMessage *
-screensaver_send_message_bool (DBusConnection *connection,
- const char *name,
- gboolean value) {
- DBusMessage *message;
- DBusMessage *reply;
- DBusError error;
- DBusMessageIter iter;
-
- g_return_val_if_fail (connection != NULL, NULL);
+ g_return_val_if_fail (conn != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
- dbus_error_init (&error);
-
- message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, name);
+ message = g_dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, name);
if (message == NULL) {
g_warning ("Couldn't allocate the dbus message");
return NULL;
}
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_BOOLEAN, &value);
-
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1, &error);
- if (dbus_error_is_set (&error)) {
- g_warning ("%s raised:\n %s\n\n", error.name, error.message);
- reply = NULL;
- }
-
- dbus_connection_flush (connection);
-
- dbus_message_unref (message);
- dbus_error_free (&error);
-
- return reply;
-}
-
-static DBusMessage *
-screensaver_send_message_void (DBusConnection *connection,
- const char *name,
- gboolean expect_reply) {
- DBusMessage *message;
- DBusMessage *reply;
- DBusError error;
-
- g_return_val_if_fail (connection != NULL, NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- dbus_error_init (&error);
-
- message = dbus_message_new_method_call (GS_SERVICE, GS_PATH, GS_INTERFACE, name);
- if (message == NULL) {
- g_warning ("Couldn't allocate the dbus message");
- return NULL;
- }
+ if (body)
+ g_dbus_message_set_body (message, body);
if (!expect_reply) {
- if (!dbus_connection_send (connection, message, NULL))
- g_warning ("could not send message");
- reply = NULL;
+ g_dbus_connection_send_message (conn, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE,
+ NULL, &error);
} else {
- reply = dbus_connection_send_with_reply_and_block (connection,
- message,
- -1, &error);
- if (dbus_error_is_set (&error)) {
- g_warning ("%s raised:\n %s\n\n", error.name, error.message);
- reply = NULL;
- }
- }
- dbus_connection_flush (connection);
-
- dbus_message_unref (message);
- dbus_error_free (&error);
-
- return reply;
-}
-
-static char **
-get_string_from_iter (DBusMessageIter *iter,
- int *num_elements) {
- int count;
- char **buffer;
-
- if (num_elements != NULL) {
- *num_elements = 0;
+ reply = g_dbus_connection_send_message_with_reply_sync (conn, message,
+ G_DBUS_SEND_MESSAGE_FLAGS_NONE,
+ -1, NULL, NULL, &error);
}
-
- count = 0;
- buffer = (char **)malloc (sizeof (char *) * 8);
-
- if (buffer == NULL) {
- goto oom;
+ if (error != NULL) {
+ g_warning ("unable to send message: %s", error->message);
+ g_clear_error (&error);
}
- buffer[0] = NULL;
- while (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_STRING) {
- const char *value;
- char *str;
-
- if ((count % 8) == 0 && count != 0) {
- buffer = realloc (buffer, sizeof (char *) * (count + 8));
- if (buffer == NULL) {
- goto oom;
- }
- }
-
- dbus_message_iter_get_basic (iter, &value);
- str = strdup (value);
- if (str == NULL) {
- goto oom;
- }
-
- buffer[count] = str;
-
- dbus_message_iter_next (iter);
- count++;
+ g_dbus_connection_flush_sync (conn, NULL, &error);
+ if (error != NULL) {
+ g_warning ("unable to flush message queue: %s", error->message);
+ g_clear_error (&error);
}
+ g_object_unref (message);
+ return reply;
+}
- if ((count % 8) == 0) {
- buffer = realloc (buffer, sizeof (char *) * (count + 1));
- if (buffer == NULL) {
- goto oom;
+static gboolean
+screensaver_is_running (GDBusConnection *connection)
+{
+ GVariant *reply;
+ gboolean exists = FALSE;
+
+ g_return_val_if_fail (connection != NULL, FALSE);
+
+ reply = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetNameOwner",
+ g_variant_new ("(s)", GS_SERVICE),
+ NULL,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ NULL);
+ if (reply != NULL) {
+ exists = TRUE;
+ g_variant_unref (reply);
}
- }
-
- buffer[count] = NULL;
- if (num_elements != NULL) {
- *num_elements = count;
- }
- return buffer;
-oom:
- if (buffer != NULL) {
- free (buffer);
- }
- g_debug ("%s %d : error allocating memory\n", __FILE__, __LINE__);
- return NULL;
+ return exists;
}
static gboolean
-do_command (DBusConnection *connection) {
- DBusMessage *reply;
+do_command (GDBusConnection *conn) {
+ GDBusMessage *reply;
+
+ if (!screensaver_is_running (conn)) {
+ g_message ("Screensaver is not running! Start xfce4-screensaver first");
+ goto done;
+ }
if (do_quit) {
- reply = screensaver_send_message_void (connection, "Quit", FALSE);
+ reply = screensaver_send_message (conn, "Quit", NULL, FALSE);
goto done;
}
if (do_query) {
- DBusMessageIter iter;
- DBusMessageIter array;
- dbus_bool_t v;
+ GVariant *body;
+ GVariantIter *iter;
+ gboolean is_active;
+ gchar *str;
- reply = screensaver_send_message_void (connection, "GetActive", TRUE);
+ reply = screensaver_send_message (conn, "GetActive", NULL, TRUE);
if (!reply) {
g_message ("Did not receive a reply from the screensaver.");
goto done;
}
- dbus_message_iter_init (reply, &iter);
- dbus_message_iter_get_basic (&iter, &v);
- g_print (_("The screensaver is %s\n"), v ? _("active") : _("inactive"));
-
- dbus_message_unref (reply);
+ body = g_dbus_message_get_body (reply);
+ g_variant_get (body, "(b)", &is_active);
+ g_object_unref (reply);
+ g_print (_("The screensaver is %s\n"), is_active ? _("active") : _("inactive"));
- reply = screensaver_send_message_void (connection, "GetInhibitors", TRUE);
+ reply = screensaver_send_message (conn, "GetInhibitors", NULL, TRUE);
if (!reply) {
g_message ("Did not receive a reply from screensaver.");
goto done;
}
+ body = g_dbus_message_get_body (reply);
+ g_object_unref (reply);
- dbus_message_iter_init (reply, &iter);
- dbus_message_iter_recurse (&iter, &array);
-
- if (dbus_message_iter_get_arg_type (&array) == DBUS_TYPE_INVALID) {
+ if (g_variant_n_children(body) <= 0) {
g_print (_("The screensaver is not inhibited\n"));
} else {
- char **inhibitors;
- int i;
- int num;
-
+ g_variant_get (body, "s", &iter);
g_print (_("The screensaver is being inhibited by:\n"));
- inhibitors = get_string_from_iter (&array, &num);
- for (i = 0; i < num; i++) {
- g_print ("\t%s\n", inhibitors[i]);
+ while (g_variant_iter_loop (iter, "s", &str)) {
+ g_print ("\t%s\n", str);
}
- g_strfreev (inhibitors);
+ g_variant_iter_free (iter);
}
-
- dbus_message_unref (reply);
}
if (do_time) {
- DBusMessageIter iter;
- dbus_bool_t v;
- dbus_int32_t t;
-
- reply = screensaver_send_message_void (connection, "GetActive", TRUE);
- if (!reply) {
- g_message ("Did not receive a reply from the screensaver.");
- goto done;
- }
-
- dbus_message_iter_init (reply, &iter);
- dbus_message_iter_get_basic (&iter, &v);
- dbus_message_unref (reply);
-
- if (v) {
- reply = screensaver_send_message_void (connection, "GetActiveTime", TRUE);
- dbus_message_iter_init (reply, &iter);
- dbus_message_iter_get_basic (&iter, &t);
- g_print (_("The screensaver has been active for %d seconds.\n"), t);
-
- dbus_message_unref (reply);
- } else {
- g_print (_("The screensaver is not currently active.\n"));
- }
+ GVariant *body;
+ guint32 t;
+
+ reply = screensaver_send_message (conn, "GetActiveTime", NULL, TRUE);
+ body = g_dbus_message_get_body (reply);
+ g_variant_get (body, "(u)", &t);
+ g_print (_("The screensaver has been active for %d seconds.\n"), t);
+ g_object_unref (reply);
}
if (do_lock) {
- screensaver_send_message_void (connection, "Lock", FALSE);
+ screensaver_send_message (conn, "Lock", NULL, FALSE);
}
if (do_cycle) {
- screensaver_send_message_void (connection, "Cycle", FALSE);
+ screensaver_send_message (conn, "Cycle", NULL, FALSE);
}
if (do_poke) {
- screensaver_send_message_void (connection, "SimulateUserActivity", FALSE);
+ screensaver_send_message (conn, "SimulateUserActivity", NULL, FALSE);
}
if (do_activate) {
- reply = screensaver_send_message_bool (connection, "SetActive", TRUE);
- if (!reply) {
- g_message ("Did not receive a reply from the screensaver.");
- goto done;
- }
- dbus_message_unref (reply);
+ reply = screensaver_send_message (conn, "SetActive", g_variant_new ("(b)", TRUE), FALSE);
}
if (do_deactivate) {
- reply = screensaver_send_message_bool (connection, "SetActive", FALSE);
- if (!reply) {
- g_message ("Did not receive a reply from the screensaver.");
- goto done;
- }
- dbus_message_unref (reply);
+ reply = screensaver_send_message (conn, "SetActive", g_variant_new ("(b)", FALSE), TRUE);
}
if (do_inhibit) {
- reply = screensaver_send_message_inhibit (connection,
- inhibit_application ? inhibit_application : "Unknown",
- inhibit_reason ? inhibit_reason : "Unknown");
+ GVariant *body;
+ body = g_variant_new ("(ss)", inhibit_application ? inhibit_application : "Unknown",
+ inhibit_reason ? inhibit_reason : "Unknown");
+ reply = screensaver_send_message (conn, "Inhibit", body, TRUE);
if (!reply) {
g_message ("Did not receive a reply from the screensaver.");
goto done;
}
- dbus_message_unref (reply);
+ g_object_unref (reply);
return FALSE;
}
@@ -435,8 +279,7 @@ done:
int
main (int argc,
char **argv) {
- DBusConnection *connection;
- DBusError dbus_error;
+ GDBusConnection *conn;
GOptionContext *context;
gboolean retval;
GError *error = NULL;
@@ -471,25 +314,16 @@ main (int argc,
exit (1);
}
- dbus_error_init (&dbus_error);
- connection = dbus_bus_get (DBUS_BUS_SESSION, &dbus_error);
- if (!connection) {
- g_message ("Failed to connect to the D-BUS daemon: %s", dbus_error.message);
- dbus_error_free (&dbus_error);
- exit (1);
- }
-
- dbus_connection_setup_with_g_main (connection, NULL);
-
- if (!screensaver_is_running (connection)) {
- g_message ("Screensaver is not running!");
- exit (1);
+ conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (conn == NULL) {
+ g_message ("Failed to get session bus: %s", error->message);
+ g_error_free (error);
+ return EXIT_FAILURE;
}
-
- g_idle_add ((GSourceFunc)do_command, connection);
+ g_idle_add ((GSourceFunc)do_command, conn);
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
-
+ g_object_unref (conn);
return 0;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list