gnome-session r4811 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4811 - in branches/dbus_based: . gnome-session
- Date: Thu, 17 Jul 2008 20:37:34 +0000 (UTC)
Author: mccann
Date: Thu Jul 17 20:37:34 2008
New Revision: 4811
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4811&view=rev
Log:
2008-07-17 William Jon McCann <jmccann redhat com>
* gnome-session/gsm-client.c (gsm_client_cancel_end_session):
* gnome-session/gsm-client.h:
* gnome-session/gsm-dbus-client.c (dbus_client_cancel_end_session),
(gsm_dbus_client_class_init):
* gnome-session/gsm-dbus-client.h:
* gnome-session/gsm-dbus-client.xml:
* gnome-session/gsm-manager.c (_cancel_shutdown_client),
(inhibitor_is_jit), (cancel_end_session),
(inhibit_dialog_response):
* gnome-session/gsm-xsmp-client.c (xsmp_cancel_end_session),
(gsm_xsmp_client_class_init), (interact_request_callback):
Send cancellation to all clients. Cancel JIT inhibitors.
Modified:
branches/dbus_based/ChangeLog
branches/dbus_based/gnome-session/gsm-client.c
branches/dbus_based/gnome-session/gsm-client.h
branches/dbus_based/gnome-session/gsm-dbus-client.c
branches/dbus_based/gnome-session/gsm-dbus-client.h
branches/dbus_based/gnome-session/gsm-dbus-client.xml
branches/dbus_based/gnome-session/gsm-manager.c
branches/dbus_based/gnome-session/gsm-xsmp-client.c
Modified: branches/dbus_based/gnome-session/gsm-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client.c (original)
+++ branches/dbus_based/gnome-session/gsm-client.c Thu Jul 17 20:37:34 2008
@@ -333,6 +333,15 @@
}
void
+gsm_client_cancel_end_session (GsmClient *client)
+{
+ g_return_if_fail (GSM_IS_CLIENT (client));
+
+ GSM_CLIENT_GET_CLASS (client)->impl_cancel_end_session (client);
+}
+
+
+void
gsm_client_query_end_session (GsmClient *client,
guint flags)
{
Modified: branches/dbus_based/gnome-session/gsm-client.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-client.h (original)
+++ branches/dbus_based/gnome-session/gsm-client.h Thu Jul 17 20:37:34 2008
@@ -68,6 +68,7 @@
guint flags);
void (*impl_end_session) (GsmClient *client,
guint flags);
+ void (*impl_cancel_end_session) (GsmClient *client);
gboolean (*impl_stop) (GsmClient *client,
GError **error);
};
@@ -89,6 +90,7 @@
guint flags);
void gsm_client_query_end_session (GsmClient *client,
guint flags);
+void gsm_client_cancel_end_session (GsmClient *client);
gboolean gsm_client_stop (GsmClient *client,
GError **error);
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 Thu Jul 17 20:37:34 2008
@@ -54,6 +54,7 @@
};
enum {
STOP,
+ CANCEL_END_SESSION,
QUERY_END_SESSION,
END_SESSION,
LAST_SIGNAL
@@ -253,6 +254,15 @@
g_signal_emit (dbus_client, signals[END_SESSION], 0, flags);
}
+static void
+dbus_client_cancel_end_session (GsmClient *client)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+ g_debug ("GsmDBusClient: sending CancelEndSession signal to %s", dbus_client->priv->bus_name);
+ /* FIXME: unicast signal */
+ g_signal_emit (dbus_client, signals[CANCEL_END_SESSION], 0);
+}
+
static char *
dbus_client_get_app_name (GsmClient *client)
{
@@ -369,10 +379,11 @@
object_class->get_property = gsm_dbus_client_get_property;
object_class->set_property = gsm_dbus_client_set_property;
- client_class->impl_stop = dbus_client_stop;
- client_class->impl_query_end_session = dbus_client_query_end_session;
- client_class->impl_end_session = dbus_client_end_session;
- client_class->impl_get_app_name = dbus_client_get_app_name;
+ client_class->impl_stop = dbus_client_stop;
+ client_class->impl_query_end_session = dbus_client_query_end_session;
+ client_class->impl_end_session = dbus_client_end_session;
+ client_class->impl_cancel_end_session = dbus_client_cancel_end_session;
+ client_class->impl_get_app_name = dbus_client_get_app_name;
signals [STOP] =
g_signal_new ("stop",
@@ -384,6 +395,16 @@
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
+ signals [CANCEL_END_SESSION] =
+ g_signal_new ("cancel-end-session",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmDBusClientClass, cancel_end_session),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
signals [QUERY_END_SESSION] =
g_signal_new ("query-end-session",
G_TYPE_FROM_CLASS (object_class),
Modified: branches/dbus_based/gnome-session/gsm-dbus-client.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-dbus-client.h (original)
+++ branches/dbus_based/gnome-session/gsm-dbus-client.h Thu Jul 17 20:37:34 2008
@@ -53,6 +53,7 @@
guint flags);
void (*end_session) (GsmClient *client,
guint flags);
+ void (*cancel_end_session) (GsmClient *client);
};
typedef enum
Modified: branches/dbus_based/gnome-session/gsm-dbus-client.xml
==============================================================================
--- branches/dbus_based/gnome-session/gsm-dbus-client.xml (original)
+++ branches/dbus_based/gnome-session/gsm-dbus-client.xml Thu Jul 17 20:37:34 2008
@@ -17,6 +17,8 @@
<signal name="EndSession">
<arg name="flags" type="u"/>
</signal>
+ <signal name="CancelEndSession">
+ </signal>
</interface>
</node>
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 Jul 17 20:37:34 2008
@@ -1516,6 +1516,16 @@
return FALSE;
}
+static gboolean
+_cancel_shutdown_client (const char *id,
+ GsmClient *client,
+ GsmManager *manager)
+{
+ gsm_client_cancel_end_session (client);
+
+ return FALSE;
+}
+
static void
manager_logout (GsmManager *manager)
{
@@ -1676,6 +1686,35 @@
}
}
+static gboolean
+inhibitor_is_jit (gpointer key,
+ GsmInhibitor *inhibitor,
+ GsmManager *manager)
+{
+ gboolean matches;
+ const char *id;
+
+ id = gsm_inhibitor_get_client_id (inhibitor);
+
+ matches = (id != NULL && id[0] != '\0');
+
+ return matches;
+}
+
+static void
+cancel_end_session (GsmManager *manager)
+{
+ /* clear all JIT inhibitors */
+
+ gsm_inhibitor_store_foreach_remove (manager->priv->inhibitors,
+ (GsmInhibitorStoreFunc)inhibitor_is_jit,
+ (gpointer)manager);
+
+ gsm_client_store_foreach (manager->priv->store,
+ (GsmClientStoreFunc)_cancel_shutdown_client,
+ NULL);
+}
+
static void
inhibit_dialog_response (GsmInhibitDialog *dialog,
guint response_id,
@@ -1685,6 +1724,13 @@
g_debug ("GsmManager: Inhibit dialog response: %d", response_id);
+ /* must destroy dialog before cancelling since we'll
+ remove JIT inhibitors and we don't want to trigger
+ action. */
+ g_object_get (dialog, "action", &action, NULL);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ manager->priv->inhibit_dialog = NULL;
+
/* In case of dialog cancel, switch user, hibernate and
* suspend, we just perform the respective action and return,
* without shutting down the session. */
@@ -1692,9 +1738,13 @@
case GTK_RESPONSE_CANCEL:
case GTK_RESPONSE_NONE:
case GTK_RESPONSE_DELETE_EVENT:
+ if (action == GSM_LOGOUT_ACTION_LOGOUT
+ || action == GSM_LOGOUT_ACTION_SHUTDOWN
+ || action == GSM_LOGOUT_ACTION_REBOOT) {
+ cancel_end_session (manager);
+ }
break;
case GTK_RESPONSE_ACCEPT:
- g_object_get (dialog, "action", &action, NULL);
g_debug ("GsmManager: doing action %d", action);
do_action (manager, action);
break;
@@ -1702,9 +1752,6 @@
g_assert_not_reached ();
break;
}
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
- manager->priv->inhibit_dialog = NULL;
}
static void
@@ -1752,7 +1799,7 @@
}
manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors,
- GSM_LOGOUT_ACTION_SHUTDOWN);
+ GSM_LOGOUT_ACTION_SHUTDOWN);
g_signal_connect (manager->priv->inhibit_dialog,
"response",
@@ -1778,7 +1825,7 @@
}
manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors,
- GSM_LOGOUT_ACTION_SLEEP);
+ GSM_LOGOUT_ACTION_SLEEP);
g_signal_connect (manager->priv->inhibit_dialog,
"response",
@@ -1805,7 +1852,7 @@
}
manager->priv->inhibit_dialog = gsm_inhibit_dialog_new (manager->priv->inhibitors,
- GSM_LOGOUT_ACTION_HIBERNATE);
+ GSM_LOGOUT_ACTION_HIBERNATE);
g_signal_connect (manager->priv->inhibit_dialog,
"response",
Modified: branches/dbus_based/gnome-session/gsm-xsmp-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-xsmp-client.c (original)
+++ branches/dbus_based/gnome-session/gsm-xsmp-client.c Thu Jul 17 20:37:34 2008
@@ -489,11 +489,11 @@
}
static void
-xsmp_shutdown_cancelled (GsmClient *client)
+xsmp_cancel_end_session (GsmClient *client)
{
GsmXSMPClient *xsmp = (GsmXSMPClient *) client;
- g_debug ("GsmXSMPClient: xsmp_shutdown_cancelled ('%s')", xsmp->priv->description);
+ g_debug ("GsmXSMPClient: xsmp_cancel_end_session ('%s')", xsmp->priv->description);
SmsShutdownCancelled (xsmp->priv->conn);
}
@@ -637,10 +637,11 @@
object_class->get_property = gsm_xsmp_client_get_property;
object_class->set_property = gsm_xsmp_client_set_property;
- client_class->impl_stop = xsmp_stop;
- client_class->impl_query_end_session = xsmp_query_end_session;
- client_class->impl_end_session = xsmp_end_session;
- client_class->impl_get_app_name = xsmp_get_app_name;
+ client_class->impl_stop = xsmp_stop;
+ client_class->impl_query_end_session = xsmp_query_end_session;
+ client_class->impl_end_session = xsmp_end_session;
+ client_class->impl_cancel_end_session = xsmp_cancel_end_session;
+ client_class->impl_get_app_name = xsmp_get_app_name;
signals[REGISTER_REQUEST] =
g_signal_new ("register-request",
@@ -840,7 +841,7 @@
This grabbing is clearly bullshit and is not supported by
the client spec or protocol spec.
*/
- xsmp_shutdown_cancelled (GSM_CLIENT (client));
+ xsmp_cancel_end_session (GSM_CLIENT (client));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]