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



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]