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



Author: mccann
Date: Thu Jun 26 15:48:26 2008
New Revision: 4785
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4785&view=rev

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

	* gnome-session/gsm-inhibitor.h:
	* gnome-session/gsm-manager.c (manager_logout),
	(inhibitor_has_flag), (gsm_manager_is_switch_user_inhibited),
	(gsm_manager_is_suspend_inhibited),
	(gsm_manager_is_logout_inhibited), (gsm_manager_inhibit):
	* gnome-session/test-inhibit.c (do_inhibit):
	Change inhibit flags to be opt in for each scenario.



Modified:
   branches/dbus_based/ChangeLog
   branches/dbus_based/gnome-session/gsm-inhibitor.h
   branches/dbus_based/gnome-session/gsm-manager.c
   branches/dbus_based/gnome-session/test-inhibit.c

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	Thu Jun 26 15:48:26 2008
@@ -50,9 +50,9 @@
 };
 
 typedef enum {
-        GSM_INHIBITOR_FLAG_NONE              = 1 << 0,
-        GSM_INHIBITOR_FLAG_ALLOW_USER_SWITCH = 1 << 1,
-        GSM_INHIBITOR_FLAG_ALLOW_SUSPEND     = 1 << 2,
+        GSM_INHIBITOR_FLAG_LOGOUT      = 1 << 0,
+        GSM_INHIBITOR_FLAG_SWITCH_USER = 1 << 1,
+        GSM_INHIBITOR_FLAG_SUSPEND     = 1 << 2,
 } GsmManagerInhibitFlag;
 
 GType          gsm_inhibitor_get_type             (void) G_GNUC_CONST;

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	Thu Jun 26 15:48:26 2008
@@ -1412,8 +1412,6 @@
 static void
 manager_logout (GsmManager *manager)
 {
-        /* FIXME: ask clients to delay logout */
-
         gsm_client_store_foreach (manager->priv->store,
                                   (GsmClientStoreFunc)_shutdown_client,
                                   NULL);
@@ -1450,14 +1448,32 @@
 }
 
 static gboolean
+inhibitor_has_flag (gpointer      key,
+                    GsmInhibitor *inhibitor,
+                    gpointer      data)
+{
+        int flag;
+        int flags;
+
+        flag = GPOINTER_TO_INT (data);
+        flags = gsm_inhibitor_get_flags (inhibitor);
+
+        return (flags & flag);
+}
+
+static gboolean
 gsm_manager_is_switch_user_inhibited (GsmManager *manager)
 {
+        GsmInhibitor *inhibitor;
+
         if (manager->priv->inhibitors == NULL) {
                 return FALSE;
         }
 
-        /* FIXME: need to check ALLOW_SWITCH flag */
-        if (gsm_inhibitor_store_size (manager->priv->inhibitors) == 0) {
+        inhibitor = gsm_inhibitor_store_find (manager->priv->inhibitors,
+                                              (GsmInhibitorStoreFunc)inhibitor_has_flag,
+                                              GINT_TO_POINTER (GSM_INHIBITOR_FLAG_SWITCH_USER));
+        if (inhibitor == NULL) {
                 return FALSE;
         }
         return TRUE;
@@ -1466,25 +1482,34 @@
 static gboolean
 gsm_manager_is_suspend_inhibited (GsmManager *manager)
 {
+        GsmInhibitor *inhibitor;
+
         if (manager->priv->inhibitors == NULL) {
                 return FALSE;
         }
 
-        /* FIXME: need to check ALLOW_SUSPEND flag */
-        if (gsm_inhibitor_store_size (manager->priv->inhibitors) == 0) {
+        inhibitor = gsm_inhibitor_store_find (manager->priv->inhibitors,
+                                              (GsmInhibitorStoreFunc)inhibitor_has_flag,
+                                              GINT_TO_POINTER (GSM_INHIBITOR_FLAG_SUSPEND));
+        if (inhibitor == NULL) {
                 return FALSE;
         }
         return TRUE;
 }
 
-
 static gboolean
 gsm_manager_is_logout_inhibited (GsmManager *manager)
 {
+        GsmInhibitor *inhibitor;
+
         if (manager->priv->inhibitors == NULL) {
                 return FALSE;
         }
-        if (gsm_inhibitor_store_size (manager->priv->inhibitors) == 0) {
+
+        inhibitor = gsm_inhibitor_store_find (manager->priv->inhibitors,
+                                              (GsmInhibitorStoreFunc)inhibitor_has_flag,
+                                              GINT_TO_POINTER (GSM_INHIBITOR_FLAG_LOGOUT));
+        if (inhibitor == NULL) {
                 return FALSE;
         }
         return TRUE;
@@ -2160,6 +2185,18 @@
                 return FALSE;
         }
 
+        if (flags == 0) {
+                GError *new_error;
+
+                new_error = g_error_new (GSM_MANAGER_ERROR,
+                                         GSM_MANAGER_ERROR_GENERAL,
+                                         "Invalid inhibit flags");
+                g_debug ("GsmManager: Unable to inhibit: %s", new_error->message);
+                dbus_g_method_return_error (context, new_error);
+                g_error_free (new_error);
+                return FALSE;
+        }
+
         cookie = _generate_unique_cookie (manager);
         inhibitor = gsm_inhibitor_new (app_id,
                                        toplevel_xid,

Modified: branches/dbus_based/gnome-session/test-inhibit.c
==============================================================================
--- branches/dbus_based/gnome-session/test-inhibit.c	(original)
+++ branches/dbus_based/gnome-session/test-inhibit.c	Thu Jun 26 15:48:26 2008
@@ -61,6 +61,12 @@
         return (sm_proxy != NULL);
 }
 
+typedef enum {
+        GSM_INHIBITOR_FLAG_LOGOUT      = 1 << 0,
+        GSM_INHIBITOR_FLAG_SWITCH_USER = 1 << 1,
+        GSM_INHIBITOR_FLAG_SUSPEND     = 1 << 2,
+} GsmInhibitFlag;
+
 static gboolean
 do_inhibit (void)
 {
@@ -81,7 +87,9 @@
         reason = "A file transfer is in progress.";
 #endif
         toplevel_xid = 0;
-        flags = 0;
+        flags = GSM_INHIBITOR_FLAG_LOGOUT
+                | GSM_INHIBITOR_FLAG_SWITCH_USER
+                | GSM_INHIBITOR_FLAG_SUSPEND;
 
         error = NULL;
         res = dbus_g_proxy_call (sm_proxy,



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