gnome-session r4782 - in branches/dbus_based: . gnome-session



Author: mccann
Date: Wed Jun 25 20:39:29 2008
New Revision: 4782
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4782&view=rev

Log:
2008-06-25  William Jon McCann  <jmccann redhat com>

	* gnome-session/gsm-dbus-client.c (gsm_dbus_client_class_init):
	* gnome-session/gsm-inhibitor.h:
	* gnome-session/gsm-logout-inhibit-dialog.c (add_inhibitor):
	* gnome-session/gsm-manager.c (do_attempt_reboot),
	(do_attempt_shutdown), (manager_attempt_reboot),
	(manager_attempt_shutdown), (manager_attempt_hibernate),
	(manager_attempt_suspend), (gsm_manager_is_switch_user_inhibited),
	(gsm_manager_is_suspend_inhibited), (do_action), (request_reboot),
	(request_shutdown), (request_suspend), (request_hibernate),
	(logout_dialog_response):
	* gnome-session/gsm-manager.h:
	Make inhibit work for shutdown, reboot, suspend, hibernate.



Modified:
   branches/dbus_based/ChangeLog
   branches/dbus_based/gnome-session/gsm-dbus-client.c
   branches/dbus_based/gnome-session/gsm-inhibitor.h
   branches/dbus_based/gnome-session/gsm-logout-inhibit-dialog.c
   branches/dbus_based/gnome-session/gsm-manager.c
   branches/dbus_based/gnome-session/gsm-manager.h

Modified: branches/dbus_based/gnome-session/gsm-dbus-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-dbus-client.c	(original)
+++ branches/dbus_based/gnome-session/gsm-dbus-client.c	Wed Jun 25 20:39:29 2008
@@ -143,7 +143,6 @@
 gsm_dbus_client_class_init (GsmDBusClientClass *klass)
 {
         GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-        GsmClientClass *client_class = GSM_CLIENT_CLASS (klass);
 
         object_class->finalize             = gsm_dbus_client_finalize;
         object_class->constructor          = gsm_dbus_client_constructor;

Modified: branches/dbus_based/gnome-session/gsm-inhibitor.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-inhibitor.h	(original)
+++ branches/dbus_based/gnome-session/gsm-inhibitor.h	Wed Jun 25 20:39:29 2008
@@ -38,13 +38,6 @@
 
 typedef struct GsmInhibitorPrivate GsmInhibitorPrivate;
 
-typedef enum {
-        GSM_INHIBITOR_UNREGISTERED = 0,
-        GSM_INHIBITOR_REGISTERED,
-        GSM_INHIBITOR_FINISHED,
-        GSM_INHIBITOR_FAILED,
-} GsmInhibitorStatus;
-
 struct _GsmInhibitor
 {
         GObject              parent;
@@ -56,6 +49,12 @@
         GObjectClass parent_class;
 };
 
+typedef enum {
+        GSM_INHIBITOR_FLAG_NONE              = 1 << 0,
+        GSM_INHIBITOR_FLAG_ALLOW_USER_SWITCH = 1 << 1,
+        GSM_INHIBITOR_FLAG_ALLOW_SUSPEND     = 1 << 2,
+} GsmManagerInhibitFlag;
+
 GType          gsm_inhibitor_get_type             (void) G_GNUC_CONST;
 
 GsmInhibitor * gsm_inhibitor_new                  (const char    *app_id,

Modified: branches/dbus_based/gnome-session/gsm-logout-inhibit-dialog.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-logout-inhibit-dialog.c	(original)
+++ branches/dbus_based/gnome-session/gsm-logout-inhibit-dialog.c	Wed Jun 25 20:39:29 2008
@@ -35,6 +35,7 @@
 
 #include "gsm-logout-inhibit-dialog.h"
 #include "eggdesktopfile.h"
+#include "util.h"
 
 #define GSM_LOGOUT_INHIBIT_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_LOGOUT_INHIBIT_DIALOG, GsmLogoutInhibitDialogPrivate))
 
@@ -245,7 +246,7 @@
 
         error = NULL;
         desktop_file = egg_desktop_file_new_from_dirs (desktop_filename,
-                                                       search_dirs,
+                                                       (const char **)search_dirs,
                                                        &error);
         g_strfreev (search_dirs);
 

Modified: branches/dbus_based/gnome-session/gsm-manager.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-manager.c	(original)
+++ branches/dbus_based/gnome-session/gsm-manager.c	Wed Jun 25 20:39:29 2008
@@ -1359,7 +1359,7 @@
 }
 
 static void
-do_request_reboot (GsmConsolekit *consolekit)
+do_attempt_reboot (GsmConsolekit *consolekit)
 {
         if (gsm_consolekit_can_restart (consolekit)) {
                 gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
@@ -1370,7 +1370,7 @@
 }
 
 static void
-do_request_shutdown (GsmConsolekit *consolekit)
+do_attempt_shutdown (GsmConsolekit *consolekit)
 {
         if (gsm_consolekit_can_stop (consolekit)) {
                 gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
@@ -1381,22 +1381,22 @@
 }
 
 static void
-manager_request_reboot (GsmManager *manager)
+manager_attempt_reboot (GsmManager *manager)
 {
         GsmConsolekit *consolekit;
 
         consolekit = gsm_get_consolekit ();
-        do_request_reboot (consolekit);
+        do_attempt_reboot (consolekit);
         g_object_unref (consolekit);
 }
 
 static void
-manager_request_shutdown (GsmManager *manager)
+manager_attempt_shutdown (GsmManager *manager)
 {
         GsmConsolekit *consolekit;
 
         consolekit = gsm_get_consolekit ();
-        do_request_shutdown (consolekit);
+        do_attempt_shutdown (consolekit);
         g_object_unref (consolekit);
 }
 
@@ -1422,7 +1422,7 @@
 }
 
 static void
-manager_request_hibernate (GsmManager *manager)
+manager_attempt_hibernate (GsmManager *manager)
 {
         GsmPowerManager *power_manager;
 
@@ -1436,7 +1436,7 @@
 }
 
 static void
-manager_request_sleep (GsmManager *manager)
+manager_attempt_suspend (GsmManager *manager)
 {
         GsmPowerManager *power_manager;
 
@@ -1456,7 +1456,21 @@
                 return FALSE;
         }
 
-        /* FIXME: need to check ALLOW_SWITCH flags */
+        /* FIXME: need to check ALLOW_SWITCH flag */
+        if (gsm_inhibitor_store_size (manager->priv->inhibitors) == 0) {
+                return FALSE;
+        }
+        return TRUE;
+}
+
+static gboolean
+gsm_manager_is_suspend_inhibited (GsmManager *manager)
+{
+        if (manager->priv->inhibitors == NULL) {
+                return FALSE;
+        }
+
+        /* FIXME: need to check ALLOW_SUSPEND flag */
         if (gsm_inhibitor_store_size (manager->priv->inhibitors) == 0) {
                 return FALSE;
         }
@@ -1509,16 +1523,16 @@
                 manager_switch_user (manager);
                 break;
         case GSM_LOGOUT_ACTION_HIBERNATE:
-                manager_request_hibernate (manager);
+                manager_attempt_hibernate (manager);
                 break;
         case GSM_LOGOUT_ACTION_SLEEP:
-                manager_request_sleep (manager);
+                manager_attempt_suspend (manager);
                 break;
         case GSM_LOGOUT_ACTION_SHUTDOWN:
-                manager_request_shutdown (manager);
+                manager_attempt_shutdown (manager);
                 break;
         case GSM_LOGOUT_ACTION_REBOOT:
-                manager_request_reboot (manager);
+                manager_attempt_reboot (manager);
                 break;
         case GSM_LOGOUT_ACTION_LOGOUT:
                 manager_logout (manager);
@@ -1561,6 +1575,113 @@
 }
 
 static void
+request_reboot (GsmManager *manager)
+{
+        g_debug ("GsmManager: requesting reboot");
+
+        /* shutdown uses logout inhibit */
+        if (! gsm_manager_is_logout_inhibited (manager)) {
+                manager_attempt_reboot (manager);
+                return;
+        }
+
+        if (manager->priv->inhibit_dialog != NULL) {
+                g_debug ("GsmManager: inhibit dialog already up");
+                gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog));
+                return;
+        }
+
+        manager->priv->inhibit_dialog = gsm_logout_inhibit_dialog_new (manager->priv->inhibitors,
+                                                                       GSM_LOGOUT_ACTION_REBOOT);
+
+        g_signal_connect (manager->priv->inhibit_dialog,
+                          "response",
+                          G_CALLBACK (logout_inhibit_dialog_response),
+                          manager);
+        gtk_widget_show (manager->priv->inhibit_dialog);
+}
+
+static void
+request_shutdown (GsmManager *manager)
+{
+        g_debug ("GsmManager: requesting shutdown");
+
+        /* shutdown uses logout inhibit */
+        if (! gsm_manager_is_logout_inhibited (manager)) {
+                manager_attempt_shutdown (manager);
+                return;
+        }
+
+        if (manager->priv->inhibit_dialog != NULL) {
+                g_debug ("GsmManager: inhibit dialog already up");
+                gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog));
+                return;
+        }
+
+        manager->priv->inhibit_dialog = gsm_logout_inhibit_dialog_new (manager->priv->inhibitors,
+                                                                       GSM_LOGOUT_ACTION_SHUTDOWN);
+
+        g_signal_connect (manager->priv->inhibit_dialog,
+                          "response",
+                          G_CALLBACK (logout_inhibit_dialog_response),
+                          manager);
+        gtk_widget_show (manager->priv->inhibit_dialog);
+}
+
+static void
+request_suspend (GsmManager *manager)
+{
+        g_debug ("GsmManager: requesting suspend");
+
+        if (! gsm_manager_is_suspend_inhibited (manager)) {
+                manager_attempt_suspend (manager);
+                return;
+        }
+
+        if (manager->priv->inhibit_dialog != NULL) {
+                g_debug ("GsmManager: inhibit dialog already up");
+                gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog));
+                return;
+        }
+
+        manager->priv->inhibit_dialog = gsm_logout_inhibit_dialog_new (manager->priv->inhibitors,
+                                                                       GSM_LOGOUT_ACTION_SLEEP);
+
+        g_signal_connect (manager->priv->inhibit_dialog,
+                          "response",
+                          G_CALLBACK (logout_inhibit_dialog_response),
+                          manager);
+        gtk_widget_show (manager->priv->inhibit_dialog);
+}
+
+static void
+request_hibernate (GsmManager *manager)
+{
+        g_debug ("GsmManager: requesting hibernate");
+
+        /* hibernate uses suspend inhibit */
+        if (! gsm_manager_is_suspend_inhibited (manager)) {
+                manager_attempt_hibernate (manager);
+                return;
+        }
+
+        if (manager->priv->inhibit_dialog != NULL) {
+                g_debug ("GsmManager: inhibit dialog already up");
+                gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog));
+                return;
+        }
+
+        manager->priv->inhibit_dialog = gsm_logout_inhibit_dialog_new (manager->priv->inhibitors,
+                                                                       GSM_LOGOUT_ACTION_HIBERNATE);
+
+        g_signal_connect (manager->priv->inhibit_dialog,
+                          "response",
+                          G_CALLBACK (logout_inhibit_dialog_response),
+                          manager);
+        gtk_widget_show (manager->priv->inhibit_dialog);
+}
+
+static void
 request_logout (GsmManager *manager)
 {
         g_debug ("GsmManager: requesting logout");
@@ -1633,16 +1754,16 @@
                 request_switch_user (manager);
                 break;
         case GSM_LOGOUT_RESPONSE_HIBERNATE:
-                manager_request_hibernate (manager);
+                request_hibernate (manager);
                 break;
         case GSM_LOGOUT_RESPONSE_SLEEP:
-                manager_request_sleep (manager);
+                request_suspend (manager);
                 break;
         case GSM_LOGOUT_RESPONSE_SHUTDOWN:
-                manager_request_shutdown (manager);
+                request_shutdown (manager);
                 break;
         case GSM_LOGOUT_RESPONSE_REBOOT:
-                manager_request_reboot (manager);
+                request_reboot (manager);
                 break;
         case GSM_LOGOUT_RESPONSE_LOGOUT:
                 request_logout (manager);

Modified: branches/dbus_based/gnome-session/gsm-manager.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-manager.h	(original)
+++ branches/dbus_based/gnome-session/gsm-manager.h	Wed Jun 25 20:39:29 2008
@@ -98,12 +98,6 @@
         GSM_MANAGER_LOGOUT_MODE_FORCE
 } GsmManagerLogoutMode;
 
-typedef enum {
-        GSM_MANAGER_INHIBIT_FLAG_NONE              = 1 << 0,
-        GSM_MANAGER_INHIBIT_FLAG_ALLOW_USER_SWITCH = 1 << 1,
-        GSM_MANAGER_INHIBIT_FLAG_ALLOW_SUSPEND     = 1 << 2,
-} GsmManagerInhibitFlag;
-
 GType               gsm_manager_error_get_type       (void);
 #define GSM_MANAGER_TYPE_ERROR (gsm_manager_error_get_type ())
 
@@ -150,9 +144,6 @@
                                                       const char     *message,
                                                       gboolean        fatal,
                                                       GError        **error);
-gboolean            gsm_manager_set_name             (GsmManager     *manager,
-                                                      const char     *session_name,
-                                                      GError        **error);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]