From c51ef797a707f4e2c6f9688d4378f2b0e9898a66 Mon Sep 17 00:00:00 2001 From: Perberos Date: Thu, 1 Dec 2011 22:56:10 -0300 Subject: moving from https://github.com/perberos/mate-desktop-environment --- mate-panel/libpanel-util/panel-session-manager.c | 192 +++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 mate-panel/libpanel-util/panel-session-manager.c (limited to 'mate-panel/libpanel-util/panel-session-manager.c') diff --git a/mate-panel/libpanel-util/panel-session-manager.c b/mate-panel/libpanel-util/panel-session-manager.c new file mode 100644 index 00000000..63152e1a --- /dev/null +++ b/mate-panel/libpanel-util/panel-session-manager.c @@ -0,0 +1,192 @@ +/* + * panel-session.c: + * + * Copyright (C) 2008 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz + */ + +#include + +#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); + +G_DEFINE_TYPE (PanelSessionManager, panel_session_manager, PANEL_TYPE_DBUS_SERVICE); + +static void +panel_session_manager_class_init (PanelSessionManagerClass *klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + + object_class->constructor = panel_session_manager_constructor; +} + +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.mate.SessionManager", + "/org/mate/SessionManager", + "org.mate.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); + g_error_free (error); + } + + return obj; +} + +void +panel_session_manager_request_logout (PanelSessionManager *manager, + PanelSessionManagerLogoutType mode) +{ + GError *error; + DBusGProxy *proxy; + + 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) { + g_warning ("Could not ask session manager to log out: %s", + error->message); + g_error_free (error); + } +} + +void +panel_session_manager_request_shutdown (PanelSessionManager *manager) +{ + GError *error; + DBusGProxy *proxy; + + 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) { + g_warning ("Could not ask session manager to shut down: %s", + error->message); + g_error_free (error); + } +} + +gboolean +panel_session_manager_is_shutdown_available (PanelSessionManager *manager) +{ + GError *error; + DBusGProxy *proxy; + gboolean is_shutdown_available; + + 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) { + g_warning ("Could not ask session manager if shut down is available: %s", + error->message); + g_error_free (error); + + return FALSE; + } + + return is_shutdown_available; +} + +PanelSessionManager * +panel_session_manager_get (void) +{ + static PanelSessionManager *manager = NULL; + + if (manager == NULL) { + manager = g_object_new (PANEL_TYPE_SESSION_MANAGER, NULL); + panel_cleanup_register (panel_cleanup_unref_and_nullify, + &manager); + } + + return manager; +} -- cgit v1.2.1