summaryrefslogtreecommitdiff
path: root/mate-panel/libpanel-util/panel-session-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/libpanel-util/panel-session-manager.c')
-rw-r--r--mate-panel/libpanel-util/panel-session-manager.c157
1 files changed, 64 insertions, 93 deletions
diff --git a/mate-panel/libpanel-util/panel-session-manager.c b/mate-panel/libpanel-util/panel-session-manager.c
index 65a1e330..191ca2dd 100644
--- a/mate-panel/libpanel-util/panel-session-manager.c
+++ b/mate-panel/libpanel-util/panel-session-manager.c
@@ -22,18 +22,27 @@
* Vincent Untz <[email protected]>
*/
-#include <dbus/dbus-glib.h>
-
+#include <gio/gio.h>
#include "panel-cleanup.h"
-#include "panel-dbus-service.h"
-
#include "panel-session-manager.h"
-static GObject *panel_session_manager_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties);
+struct _PanelSessionManager {
+ GObject parent;
+ GDBusProxy *proxy;
+};
+
+G_DEFINE_TYPE (PanelSessionManager, panel_session_manager, G_TYPE_OBJECT)
+
+static void
+panel_session_manager_finalize (GObject *object)
+{
+ PanelSessionManager *manager = PANEL_SESSION_MANAGER (object);
+
+ if (manager->proxy != NULL)
+ g_object_unref (manager->proxy);
-G_DEFINE_TYPE (PanelSessionManager, panel_session_manager, PANEL_TYPE_DBUS_SERVICE);
+ G_OBJECT_CLASS (panel_session_manager_parent_class)->finalize (object);
+}
static void
panel_session_manager_class_init (PanelSessionManagerClass *klass)
@@ -42,136 +51,98 @@ panel_session_manager_class_init (PanelSessionManagerClass *klass)
object_class = G_OBJECT_CLASS (klass);
- object_class->constructor = panel_session_manager_constructor;
+ object_class->finalize = panel_session_manager_finalize;
}
static void
panel_session_manager_init (PanelSessionManager *manager)
{
-}
-
-static GObject *
-panel_session_manager_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *obj;
- GError *error;
-
- obj = G_OBJECT_CLASS (panel_session_manager_parent_class)->constructor (
- type,
- n_construct_properties,
- construct_properties);
-
-
- panel_dbus_service_define_service (PANEL_DBUS_SERVICE (obj),
- "org.gnome.SessionManager",
- "/org/gnome/SessionManager",
- "org.gnome.SessionManager");
-
- error = NULL;
- if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (obj),
- &error)) {
- g_message ("Could not connect to session manager: %s",
- error->message);
+ GError *error = NULL;
+
+ manager->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager",
+ NULL,
+ &error);
+ if (manager->proxy == NULL) {
+ g_warning ("Unable to contact session manager daemon: %s\n", error->message);
g_error_free (error);
}
-
- return obj;
}
void
panel_session_manager_request_logout (PanelSessionManager *manager,
PanelSessionManagerLogoutType mode)
{
- GError *error;
- DBusGProxy *proxy;
+ GError *error = NULL;
+ GVariant *ret;
g_return_if_fail (PANEL_IS_SESSION_MANAGER (manager));
- error = NULL;
-
- if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
- &error)) {
- g_warning ("Could not connect to session manager: %s",
- error->message);
- g_error_free (error);
- return;
- }
-
- proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
-
- if (!dbus_g_proxy_call (proxy, "Logout", &error,
- G_TYPE_UINT, mode, G_TYPE_INVALID,
- G_TYPE_INVALID) &&
- error != NULL) {
+ ret = g_dbus_proxy_call_sync (manager->proxy, "Logout",
+ g_variant_new ("(u)", mode),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (ret == NULL) {
g_warning ("Could not ask session manager to log out: %s",
error->message);
g_error_free (error);
+ } else {
+ g_variant_unref (ret);
}
}
void
panel_session_manager_request_shutdown (PanelSessionManager *manager)
{
- GError *error;
- DBusGProxy *proxy;
+ GError *error = NULL;
+ GVariant *ret;
g_return_if_fail (PANEL_IS_SESSION_MANAGER (manager));
- error = NULL;
-
- if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
- &error)) {
- g_warning ("Could not connect to session manager: %s",
- error->message);
- g_error_free (error);
- return;
- }
-
- proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
-
- if (!dbus_g_proxy_call (proxy, "Shutdown", &error,
- G_TYPE_INVALID,
- G_TYPE_INVALID) &&
- error != NULL) {
+ ret = g_dbus_proxy_call_sync (manager->proxy, "Shutdown",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (ret == NULL) {
g_warning ("Could not ask session manager to shut down: %s",
error->message);
g_error_free (error);
+ } else {
+ g_variant_unref (ret);
}
}
gboolean
panel_session_manager_is_shutdown_available (PanelSessionManager *manager)
{
- GError *error;
- DBusGProxy *proxy;
+ GError *error = NULL;
gboolean is_shutdown_available;
+ GVariant *ret;
g_return_val_if_fail (PANEL_IS_SESSION_MANAGER (manager), FALSE);
- error = NULL;
-
- if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
- &error)) {
- g_warning ("Could not connect to session manager: %s",
- error->message);
- g_error_free (error);
-
- return FALSE;
- }
-
- proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager));
-
- if (!dbus_g_proxy_call (proxy, "CanShutdown", &error,
- G_TYPE_INVALID, G_TYPE_BOOLEAN,
- &is_shutdown_available, G_TYPE_INVALID) &&
- error != NULL) {
+ ret = g_dbus_proxy_call_sync (manager->proxy, "CanShutdown",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (ret == NULL) {
g_warning ("Could not ask session manager if shut down is available: %s",
error->message);
g_error_free (error);
-
return FALSE;
+ } else {
+ g_variant_get (ret, "(b)", &is_shutdown_available);
+ g_variant_unref (ret);
}
return is_shutdown_available;