gnome-panel r11134 - in trunk/gnome-panel: . libpanel-util
- From: vuntz svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-panel r11134 - in trunk/gnome-panel: . libpanel-util
- Date: Fri, 6 Jun 2008 00:49:23 +0000 (UTC)
Author: vuntz
Date: Fri Jun 6 00:49:23 2008
New Revision: 11134
URL: http://svn.gnome.org/viewvc/gnome-panel?rev=11134&view=rev
Log:
2008-06-06 Vincent Untz <vuntz gnome org>
Use the gnome-session DBus API to log out/shut down. The dialog is also
displayed by gnome-session.
Fix bug #507391
* Makefile.am: remove files
* panel-gdm.[ch]: killed, not used anymore
* panel-logout.[ch]: killed, not used anymore
* panel-session.[ch]: remove panel_session_request_logout()
* libpanel-util/Makefile.am: add new files
* libpanel-util/panel-session-manager.[ch]: new, object to interact
with the session manager
* panel-action-button.c: (panel_action_logout): use PanelSessionManager
API
(panel_action_shutdown): ditto
(panel_action_shutdown_reboot_is_disabled): updated, with a comment
about a regression
* libpanel-util/panel-power-manager.c: remove useless includes
(panel_power_manager_can_suspend): add g_return_val_if_fail
(panel_power_manager_can_hibernate): add g_return_val_if_fail
(panel_power_manager_attempt_suspend): add g_return_if_fail
(panel_power_manager_attempt_hibernate): add g_return_if_fail
Added:
trunk/gnome-panel/libpanel-util/panel-session-manager.c
trunk/gnome-panel/libpanel-util/panel-session-manager.h
Removed:
trunk/gnome-panel/panel-gdm.c
trunk/gnome-panel/panel-gdm.h
trunk/gnome-panel/panel-logout.c
trunk/gnome-panel/panel-logout.h
Modified:
trunk/gnome-panel/ChangeLog
trunk/gnome-panel/Makefile.am
trunk/gnome-panel/libpanel-util/Makefile.am
trunk/gnome-panel/libpanel-util/panel-power-manager.c
trunk/gnome-panel/panel-action-button.c
trunk/gnome-panel/panel-session.c
trunk/gnome-panel/panel-session.h
Modified: trunk/gnome-panel/Makefile.am
==============================================================================
--- trunk/gnome-panel/Makefile.am (original)
+++ trunk/gnome-panel/Makefile.am Fri Jun 6 00:49:23 2008
@@ -97,8 +97,6 @@
panel-force-quit.c \
panel-lockdown.c \
panel-addto.c \
- panel-logout.c \
- panel-gdm.c \
panel-ditem-editor.c \
panel-mount-operation.c \
$(NULL)
@@ -146,8 +144,6 @@
panel-force-quit.h \
panel-lockdown.h \
panel-addto.h \
- panel-logout.h \
- panel-gdm.h \
panel-ditem-editor.h \
panel-icon-names.h \
panel-mount-operation.h \
Modified: trunk/gnome-panel/libpanel-util/Makefile.am
==============================================================================
--- trunk/gnome-panel/libpanel-util/Makefile.am (original)
+++ trunk/gnome-panel/libpanel-util/Makefile.am Fri Jun 6 00:49:23 2008
@@ -28,4 +28,6 @@
panel-keyfile.h \
panel-power-manager.c \
panel-power-manager.h \
+ panel-session-manager.c \
+ panel-session-manager.h \
$(NULL)
Modified: trunk/gnome-panel/libpanel-util/panel-power-manager.c
==============================================================================
--- trunk/gnome-panel/libpanel-util/panel-power-manager.c (original)
+++ trunk/gnome-panel/libpanel-util/panel-power-manager.c Fri Jun 6 00:49:23 2008
@@ -24,13 +24,6 @@
* Vincent Untz <vuntz gnome org>
*/
-#include <errno.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib-object.h>
-#include <glib/gi18n.h>
-
#include <dbus/dbus-glib.h>
#include <libpanel-util/panel-cleanup.h>
@@ -146,6 +139,8 @@
gboolean can_suspend;
DBusGProxy *proxy;
+ g_return_val_if_fail (PANEL_IS_POWER_MANAGER (manager), FALSE);
+
error = NULL;
if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
@@ -181,6 +176,8 @@
gboolean can_hibernate;
DBusGProxy *proxy;
+ g_return_val_if_fail (PANEL_IS_POWER_MANAGER (manager), FALSE);
+
error = NULL;
if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
@@ -215,6 +212,8 @@
GError *error;
DBusGProxy *proxy;
+ g_return_if_fail (PANEL_IS_POWER_MANAGER (manager));
+
error = NULL;
if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
@@ -248,13 +247,14 @@
}
}
-
void
panel_power_manager_attempt_hibernate (PanelPowerManager *manager)
{
GError *error;
DBusGProxy *proxy;
+ g_return_if_fail (PANEL_IS_POWER_MANAGER (manager));
+
error = NULL;
if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager),
@@ -288,7 +288,6 @@
}
}
-
PanelPowerManager *
panel_power_manager_get (void)
{
Added: trunk/gnome-panel/libpanel-util/panel-session-manager.c
==============================================================================
--- (empty file)
+++ trunk/gnome-panel/libpanel-util/panel-session-manager.c Fri Jun 6 00:49:23 2008
@@ -0,0 +1,156 @@
+/*
+ * 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 <vuntz gnome org>
+ */
+
+#include <dbus/dbus-glib.h>
+
+#include <libpanel-util/panel-cleanup.h>
+#include <libpanel-util/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.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);
+ 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_INT, 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);
+ }
+}
+
+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;
+}
Added: trunk/gnome-panel/libpanel-util/panel-session-manager.h
==============================================================================
--- (empty file)
+++ trunk/gnome-panel/libpanel-util/panel-session-manager.h Fri Jun 6 00:49:23 2008
@@ -0,0 +1,69 @@
+/*
+ * panel-session.h:
+ *
+ * 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 <vuntz gnome org>
+ */
+
+#ifndef PANEL_SESSION_MANAGER_H
+#define PANEL_SESSION_MANAGER_H
+
+#include <glib-object.h>
+
+#include <libpanel-util/panel-dbus-service.h>
+
+G_BEGIN_DECLS
+
+#define PANEL_TYPE_SESSION_MANAGER (panel_session_manager_get_type ())
+#define PANEL_SESSION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANEL_TYPE_SESSION_MANAGER, PanelSessionManager))
+#define PANEL_SESSION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANEL_TYPE_SESSION_MANAGER, PanelSessionManagerClass))
+#define PANEL_IS_SESSION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANEL_TYPE_SESSION_MANAGER))
+#define PANEL_IS_SESSION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANEL_TYPE_SESSION_MANAGER))
+#define PANEL_SESSION_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PANEL_TYPE_SESSION_MANAGER, PanelSessionManagerClass))
+
+typedef struct _PanelSessionManager PanelSessionManager;
+typedef struct _PanelSessionManagerClass PanelSessionManagerClass;
+
+struct _PanelSessionManager {
+ PanelDBusService parent;
+};
+
+struct _PanelSessionManagerClass {
+ PanelDBusServiceClass parent_class;
+};
+
+GType panel_session_manager_get_type (void);
+
+/* Keep in sync with the values defined in gnome-session/session.h */
+typedef enum {
+ PANEL_SESSION_MANAGER_LOGOUT_MODE_NORMAL = 0,
+ PANEL_SESSION_MANAGER_LOGOUT_MODE_NO_CONFIRMATION,
+ PANEL_SESSION_MANAGER_LOGOUT_MODE_FORCE
+} PanelSessionManagerLogoutType;
+
+PanelSessionManager *panel_session_manager_get (void);
+
+void panel_session_manager_request_logout (PanelSessionManager *session,
+ PanelSessionManagerLogoutType mode);
+void panel_session_manager_request_shutdown (PanelSessionManager *session);
+
+G_END_DECLS
+
+#endif /* PANEL_SESSION_MANAGER_H */
Modified: trunk/gnome-panel/panel-action-button.c
==============================================================================
--- trunk/gnome-panel/panel-action-button.c (original)
+++ trunk/gnome-panel/panel-action-button.c Fri Jun 6 00:49:23 2008
@@ -32,6 +32,8 @@
#include <glib/gi18n.h>
+#include <libpanel-util/panel-session-manager.h>
+
#include "applet.h"
#include "panel-config-global.h"
#include "panel-gconf.h"
@@ -44,9 +46,7 @@
#include "panel-run-dialog.h"
#include "panel-a11y.h"
#include "panel-lockdown.h"
-#include "panel-logout.h"
#include "panel-compatibility.h"
-#include "panel-gdm.h"
#include "panel-icon-names.h"
G_DEFINE_TYPE (PanelActionButton, panel_action_button, BUTTON_TYPE_WIDGET);
@@ -155,7 +155,8 @@
static void
panel_action_logout (GtkWidget *widget)
{
- gboolean not_prompt;
+ PanelSessionManager *manager;
+ gboolean not_prompt;
not_prompt = gconf_client_get_bool (panel_gconf_get_client (),
LOGOUT_PROMPT_KEY, NULL);
@@ -163,28 +164,40 @@
* safer */
not_prompt = !not_prompt;
+ manager = panel_session_manager_get ();
+
if (not_prompt)
- panel_session_request_logout ();
+ panel_session_manager_request_logout (manager,
+ PANEL_SESSION_MANAGER_LOGOUT_MODE_NO_CONFIRMATION);
else
- panel_logout_new (PANEL_LOGOUT_DIALOG_LOGOUT,
- gtk_widget_get_screen (widget),
- gtk_get_current_event_time ());
+ /* FIXME: we need to use widget to get the screen for the
+ * confirmation dialog, see
+ * http://bugzilla.gnome.org/show_bug.cgi?id=536914 */
+ panel_session_manager_request_logout (manager,
+ PANEL_SESSION_MANAGER_LOGOUT_MODE_NORMAL);
}
static void
panel_action_shutdown (GtkWidget *widget)
{
- panel_logout_new (PANEL_LOGOUT_DIALOG_SHUTDOWN,
- gtk_widget_get_screen (widget),
- gtk_get_current_event_time ());
+ PanelSessionManager *manager;
+
+ manager = panel_session_manager_get ();
+ panel_session_manager_request_shutdown (manager);
}
static gboolean
panel_action_shutdown_reboot_is_disabled (void)
{
+ return panel_lockdown_get_disable_log_out();
+#if 0
+ /* FIXME: waiting for a gnome-session dbus api to know if
+ * shutdown/reboot is possible:
+ * http://bugzilla.gnome.org/show_bug.cgi?id=536915 */
return (panel_lockdown_get_disable_log_out() ||
(!gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN) &&
!gdm_supports_logout_action (GDM_LOGOUT_ACTION_REBOOT)));
+#endif
}
/* Run Application
Modified: trunk/gnome-panel/panel-session.c
==============================================================================
--- trunk/gnome-panel/panel-session.c (original)
+++ trunk/gnome-panel/panel-session.c Fri Jun 6 00:49:23 2008
@@ -32,34 +32,6 @@
#include "panel-profile.h"
#include "panel-shell.h"
-void
-panel_session_request_logout (void)
-{
- GnomeClient *client;
- static int recursion_guard = 0;
-
- if (recursion_guard)
- return;
-
- recursion_guard++;
-
- if (!(client = gnome_master_client ()))
- return;
-
- /* Only request a Global save. We only want a Local
- * save if the user selects 'Save current setup'
- * from the dialog.
- */
- gnome_client_request_save (client,
- GNOME_SAVE_GLOBAL,
- TRUE,
- GNOME_INTERACT_ANY,
- TRUE, /* do not use the gnome-session gui */
- TRUE);
-
- recursion_guard--;
-}
-
static void
panel_session_handle_die_request (GnomeClient *client)
{
Modified: trunk/gnome-panel/panel-session.h
==============================================================================
--- trunk/gnome-panel/panel-session.h (original)
+++ trunk/gnome-panel/panel-session.h Fri Jun 6 00:49:23 2008
@@ -29,7 +29,6 @@
void panel_session_init (void);
void panel_session_do_not_restart (void);
-void panel_session_request_logout (void);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]