gnome-session r4814 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4814 - in branches/dbus_based: . gnome-session
- Date: Fri, 18 Jul 2008 21:34:36 +0000 (UTC)
Author: mccann
Date: Fri Jul 18 21:34:36 2008
New Revision: 4814
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4814&view=rev
Log:
2008-07-18 William Jon McCann <jmccann redhat com>
* gnome-session/gsm-client.c (gsm_client_get_restart_style_hint):
* gnome-session/gsm-client.h:
* gnome-session/gsm-dbus-client.c
(dbus_client_get_restart_style_hint), (gsm_dbus_client_class_init):
* gnome-session/gsm-manager.c (disconnect_client):
* gnome-session/gsm-xsmp-client.c (xsmp_get_restart_style_hint),
(gsm_xsmp_client_class_init):
Add support for legacy restart style hints from clients.
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-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 Fri Jul 18 21:34:36 2008
@@ -332,6 +332,14 @@
return GSM_CLIENT_GET_CLASS (client)->impl_get_app_name (client);
}
+GsmClientRestartStyle
+gsm_client_get_restart_style_hint (GsmClient *client)
+{
+ g_return_val_if_fail (GSM_IS_CLIENT (client), GSM_CLIENT_RESTART_NEVER);
+
+ return GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
+}
+
void
gsm_client_cancel_end_session (GsmClient *client)
{
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 Fri Jul 18 21:34:36 2008
@@ -47,6 +47,13 @@
} GsmClientStatus;
typedef enum {
+ GSM_CLIENT_RESTART_NEVER = 0,
+ GSM_CLIENT_RESTART_IF_RUNNING,
+ GSM_CLIENT_RESTART_ANYWAY,
+ GSM_CLIENT_RESTART_IMMEDIATELY,
+} GsmClientRestartStyle;
+
+typedef enum {
GSM_CLIENT_END_SESSION_FLAG_FORCEFUL = 1 << 0,
} GsmClientEndSessionFlag;
@@ -67,45 +74,47 @@
const char *reason);
/* virtual methods */
- char * (*impl_get_app_name) (GsmClient *client);
- void (*impl_query_end_session) (GsmClient *client,
- guint flags);
- void (*impl_end_session) (GsmClient *client,
- guint flags);
- void (*impl_cancel_end_session) (GsmClient *client);
- gboolean (*impl_stop) (GsmClient *client,
- GError **error);
+ char * (*impl_get_app_name) (GsmClient *client);
+ GsmClientRestartStyle (*impl_get_restart_style_hint) (GsmClient *client);
+ void (*impl_query_end_session) (GsmClient *client,
+ guint flags);
+ void (*impl_end_session) (GsmClient *client,
+ guint flags);
+ void (*impl_cancel_end_session) (GsmClient *client);
+ gboolean (*impl_stop) (GsmClient *client,
+ GError **error);
};
GType gsm_client_get_type (void) G_GNUC_CONST;
-const char *gsm_client_get_id (GsmClient *client);
-const char *gsm_client_get_startup_id (GsmClient *client);
-const char *gsm_client_get_app_id (GsmClient *client);
-char *gsm_client_get_app_name (GsmClient *client);
-
-void gsm_client_set_app_id (GsmClient *client,
- const char *app_id);
-int gsm_client_get_status (GsmClient *client);
-void gsm_client_set_status (GsmClient *client,
- int status);
-
-void gsm_client_end_session (GsmClient *client,
- guint flags);
-void gsm_client_query_end_session (GsmClient *client,
- guint flags);
-void gsm_client_cancel_end_session (GsmClient *client);
+const char *gsm_client_get_id (GsmClient *client);
+const char *gsm_client_get_startup_id (GsmClient *client);
+const char *gsm_client_get_app_id (GsmClient *client);
+char *gsm_client_get_app_name (GsmClient *client);
+GsmClientRestartStyle gsm_client_get_restart_style_hint (GsmClient *client);
+
+void gsm_client_set_app_id (GsmClient *client,
+ const char *app_id);
+int gsm_client_get_status (GsmClient *client);
+void gsm_client_set_status (GsmClient *client,
+ int status);
+
+void gsm_client_end_session (GsmClient *client,
+ 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);
+gboolean gsm_client_stop (GsmClient *client,
+ GError **error);
-void gsm_client_disconnected (GsmClient *client);
+void gsm_client_disconnected (GsmClient *client);
/* private */
-void gdm_client_end_session_response (GsmClient *client,
- gboolean is_ok,
- const char *reason);
+void gdm_client_end_session_response (GsmClient *client,
+ gboolean is_ok,
+ const char *reason);
G_END_DECLS
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 Fri Jul 18 21:34:36 2008
@@ -45,7 +45,8 @@
struct GsmDBusClientPrivate
{
- char *bus_name;
+ char *bus_name;
+ GsmClientRestartStyle restart_style_hint;
};
enum {
@@ -270,6 +271,12 @@
return NULL;
}
+static GsmClientRestartStyle
+dbus_client_get_restart_style_hint (GsmClient *client)
+{
+ return (GSM_DBUS_CLIENT (client)->priv->restart_style_hint);
+}
+
#if 0
static void
dbus_client_query_end_session (GsmClient *client,
@@ -379,11 +386,12 @@
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_cancel_end_session = dbus_client_cancel_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;
+ client_class->impl_get_restart_style_hint = dbus_client_get_restart_style_hint;
signals [STOP] =
g_signal_new ("stop",
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 Fri Jul 18 21:34:36 2008
@@ -980,11 +980,13 @@
disconnect_client (GsmManager *manager,
GsmClient *client)
{
- gboolean is_condition_client;
- GsmApp *app;
- GError *error;
- gboolean res;
- const char *app_id;
+ gboolean is_condition_client;
+ GsmApp *app;
+ GError *error;
+ gboolean res;
+ const char *app_id;
+ gboolean app_restart;
+ GsmClientRestartStyle client_restart_hint;
g_debug ("GsmManager: disconnect client");
@@ -1018,7 +1020,12 @@
goto out;
}
- if (! gsm_app_get_autorestart (app)) {
+ app_restart = gsm_app_get_autorestart (app);
+ client_restart_hint = gsm_client_get_restart_style_hint (client);
+
+ /* allow legacy clients to override the app info */
+ if (! gsm_app_get_autorestart (app)
+ && client_restart_hint != GSM_CLIENT_RESTART_IMMEDIATELY) {
g_debug ("GsmManager: autorestart not set, not restarting application");
goto out;
}
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 Fri Jul 18 21:34:36 2008
@@ -401,20 +401,6 @@
return prop_to_command (prop);
}
-static gboolean
-xsmp_get_autorestart (GsmClient *client)
-{
- SmProp *prop;
-
- prop = find_property (GSM_XSMP_CLIENT (client), SmRestartStyleHint, NULL);
-
- if (!prop || strcmp (prop->type, SmCARD8) != 0) {
- return FALSE;
- }
-
- return ((unsigned char *)prop->vals[0].value)[0] == SmRestartImmediately;
-}
-
static void
do_save_yourself (GsmXSMPClient *client,
int save_type,
@@ -628,6 +614,40 @@
return continue_emission;
}
+static GsmClientRestartStyle
+xsmp_get_restart_style_hint (GsmClient *client)
+{
+ SmProp *prop;
+ GsmClientRestartStyle hint;
+
+ g_debug ("GsmXSMPClient: getting restart style");
+
+ prop = find_property (GSM_XSMP_CLIENT (client), SmRestartStyleHint, NULL);
+
+ if (!prop || strcmp (prop->type, SmCARD8) != 0) {
+ return GSM_CLIENT_RESTART_NEVER;
+ }
+
+ switch (((unsigned char *)prop->vals[0].value)[0]) {
+ case SmRestartIfRunning:
+ hint = GSM_CLIENT_RESTART_IF_RUNNING;
+ break;
+ case SmRestartAnyway:
+ hint = GSM_CLIENT_RESTART_ANYWAY;
+ break;
+ case SmRestartImmediately:
+ hint = GSM_CLIENT_RESTART_IMMEDIATELY;
+ break;
+ case SmRestartNever:
+ hint = GSM_CLIENT_RESTART_NEVER;
+ break;
+ default:
+ break;
+ }
+
+ return hint;
+}
+
static void
gsm_xsmp_client_class_init (GsmXSMPClientClass *klass)
{
@@ -639,11 +659,12 @@
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_cancel_end_session = xsmp_cancel_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;
+ client_class->impl_get_restart_style_hint = xsmp_get_restart_style_hint;
signals[REGISTER_REQUEST] =
g_signal_new ("register-request",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]