gnome-session r4785 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4785 - in branches/dbus_based: . gnome-session
- Date: Thu, 26 Jun 2008 15:48:26 +0000 (UTC)
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]