int main (int argc, char **argv) { DBusConnection *connection; DBusError dbus_error; GOptionContext *context; gboolean retval; GError *error = NULL; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); # ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); # endif textdomain (GETTEXT_PACKAGE); #endif g_set_prgname (argv[0]); if (setlocale (LC_ALL, "") == NULL) g_warning ("Locale not understood by C library, internationalization will not work\n"); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, NULL); retval = g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (! retval) { g_warning ("%s", error->message); g_error_free (error); exit (1); } if (do_version) { g_print ("%s %s\n", argv [0], VERSION); 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); } g_idle_add ((GSourceFunc)do_command, connection); loop = g_main_loop_new (NULL, FALSE); g_main_loop_run (loop); return 0; }
static gboolean do_command (GDBusConnection *connection) { GDBusMessage *reply; if (do_quit) { reply = screensaver_send_message_void (connection, "Quit", FALSE); goto done; } if (do_query) { GVariant *body; gboolean v; if (! screensaver_is_running (connection)) { g_message ("Screensaver is not running!"); goto done; } reply = screensaver_send_message_void (connection, "GetActive", TRUE); if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } body = g_dbus_message_get_body (reply); g_variant_get (body, "(b)", &v); g_object_unref (reply); if (v) { g_print (_("The screensaver is active\n")); } else { g_print (_("The screensaver is inactive\n")); } } if (do_time) { GVariant *body; gboolean v; gint32 t; reply = screensaver_send_message_void (connection, "GetActive", TRUE); if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } body = g_dbus_message_get_body (reply); g_variant_get (body, "(b)", &v); g_object_unref (reply); if (v) { reply = screensaver_send_message_void (connection, "GetActiveTime", TRUE); if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } body = g_dbus_message_get_body (reply); g_variant_get (body, "(u)", &t); g_object_unref (reply); g_print (ngettext ("The screensaver has been active for %d second.\n", "The screensaver has been active for %d seconds.\n", t), t); } else { g_print (_("The screensaver is not currently active.\n")); } } if (do_lock) { if (g_strcmp0 (away_message, "DEFAULT") == 0) { reply = screensaver_send_message_string (connection, "Lock", away_message); } else { gchar * custom_message = g_strdup_printf("CUSTOM###%s", away_message); reply = screensaver_send_message_string (connection, "Lock", custom_message); g_free (custom_message); } if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } g_object_unref (reply); } if (do_activate) { reply = screensaver_send_message_bool (connection, "SetActive", TRUE); if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } g_object_unref (reply); } if (do_deactivate) { reply = screensaver_send_message_bool (connection, "SetActive", FALSE); if (reply == NULL) { g_message ("Did not receive a reply from the screensaver."); goto done; } g_object_unref (reply); } done: g_main_loop_quit (loop); return FALSE; }