diff options
author | yetist <[email protected]> | 2018-09-04 14:27:45 +0800 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-11-14 11:23:09 +0100 |
commit | a34f531da4f03eecfc38414295ebe70742dfad71 (patch) | |
tree | abfa3927f6a29faed1167f64ee7f3d96d77451f8 /mate-panel/libpanel-util/panel-session-manager.c | |
parent | a73abb84d55ed6757f05b28484bbe0080ee5d129 (diff) | |
download | mate-panel-a34f531da4f03eecfc38414295ebe70742dfad71.tar.bz2 mate-panel-a34f531da4f03eecfc38414295ebe70742dfad71.tar.xz |
Migrate mate-panel from dbus-glib to gdbus
- Code optimization
- Put GDBusProxy in PanelSessionManager struct
Diffstat (limited to 'mate-panel/libpanel-util/panel-session-manager.c')
-rw-r--r-- | mate-panel/libpanel-util/panel-session-manager.c | 157 |
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; |