[gnome-session] app: changed registered from signal to property



commit fdaa1e72d87486c2bf4448f6d7145497b8400a8e
Author: Ray Strode <rstrode redhat com>
Date:   Wed Feb 18 13:42:46 2015 -0500

    app: changed registered from signal to property
    
    This will let us query it after the fact.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=744752

 gnome-session/gsm-app.c     |   54 ++++++++++++++++++++++++++++--------------
 gnome-session/gsm-app.h     |    5 ++-
 gnome-session/gsm-manager.c |   13 +++++++---
 3 files changed, 48 insertions(+), 24 deletions(-)
---
diff --git a/gnome-session/gsm-app.c b/gnome-session/gsm-app.c
index af09352..845e067 100644
--- a/gnome-session/gsm-app.c
+++ b/gnome-session/gsm-app.c
@@ -38,6 +38,7 @@ struct _GsmAppPrivate
         char            *app_id;
         int              phase;
         char            *startup_id;
+        gboolean         registered;
         GTimeVal         last_restart_time;
         GDBusConnection *connection;
         GsmExportedApp  *skeleton;
@@ -47,7 +48,6 @@ struct _GsmAppPrivate
 enum {
         EXITED,
         DIED,
-        REGISTERED,
         LAST_SIGNAL
 };
 
@@ -60,6 +60,7 @@ enum {
         PROP_ID,
         PROP_STARTUP_ID,
         PROP_PHASE,
+        PROP_REGISTERED,
         LAST_PROP
 };
 
@@ -243,6 +244,9 @@ gsm_app_set_property (GObject      *object,
         case PROP_PHASE:
                 gsm_app_set_phase (app, g_value_get_int (value));
                 break;
+        case PROP_REGISTERED:
+                gsm_app_set_registered (app, g_value_get_boolean (value));
+                break;
         default:
                 break;
         }
@@ -266,6 +270,9 @@ gsm_app_get_property (GObject    *object,
         case PROP_PHASE:
                 g_value_set_int (value, app->priv->phase);
                 break;
+        case PROP_REGISTERED:
+                g_value_set_boolean (value, app->priv->registered);
+                break;
         default:
                 break;
         }
@@ -334,6 +341,14 @@ gsm_app_class_init (GsmAppClass *klass)
                                                               NULL,
                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
+        g_object_class_install_property (object_class,
+                                         PROP_REGISTERED,
+                                         g_param_spec_boolean ("registered",
+                                                               "Registered",
+                                                               "Registered",
+                                                               FALSE,
+                                                               G_PARAM_READWRITE));
+
         signals[EXITED] =
                 g_signal_new ("exited",
                               G_OBJECT_CLASS_TYPE (object_class),
@@ -351,15 +366,6 @@ gsm_app_class_init (GsmAppClass *klass)
                               G_TYPE_NONE,
                               1, G_TYPE_INT);
 
-        signals[REGISTERED] =
-                g_signal_new ("registered",
-                              G_OBJECT_CLASS_TYPE (object_class),
-                              G_SIGNAL_RUN_LAST,
-                              G_STRUCT_OFFSET (GsmAppClass, registered),
-                              NULL, NULL, NULL,
-                              G_TYPE_NONE,
-                              0);
-
         g_type_class_add_private (klass, sizeof (GsmAppPrivate));
 }
 
@@ -516,14 +522,6 @@ gsm_app_stop (GsmApp  *app,
 }
 
 void
-gsm_app_registered (GsmApp *app)
-{
-        g_return_if_fail (GSM_IS_APP (app));
-
-        g_signal_emit (app, signals[REGISTERED], 0);
-}
-
-void
 gsm_app_exited (GsmApp *app,
                 guchar  exit_code)
 {
@@ -540,3 +538,23 @@ gsm_app_died (GsmApp *app,
 
         g_signal_emit (app, signals[DIED], 0, signal);
 }
+
+gboolean
+gsm_app_get_registered (GsmApp *app)
+{
+        g_return_val_if_fail (GSM_IS_APP (app), FALSE);
+
+        return app->priv->registered;
+}
+
+void
+gsm_app_set_registered (GsmApp   *app,
+                        gboolean  registered)
+{
+        g_return_if_fail (GSM_IS_APP (app));
+
+        if (app->priv->registered != registered) {
+                app->priv->registered = registered;
+                g_object_notify (G_OBJECT (app), "registered");
+        }
+}
diff --git a/gnome-session/gsm-app.h b/gnome-session/gsm-app.h
index ddaadb8..14a9f94 100644
--- a/gnome-session/gsm-app.h
+++ b/gnome-session/gsm-app.h
@@ -55,7 +55,6 @@ struct _GsmAppClass
                                      guchar  exit_code);
         void        (*died)         (GsmApp *app,
                                      int     signal);
-        void        (*registered)   (GsmApp *app);
 
         /* virtual methods */
         gboolean    (*impl_start)                     (GsmApp     *app,
@@ -118,7 +117,9 @@ gboolean         gsm_app_provides                       (GsmApp     *app,
 char           **gsm_app_get_provides                   (GsmApp     *app);
 gboolean         gsm_app_has_autostart_condition        (GsmApp     *app,
                                                          const char *condition);
-void             gsm_app_registered                     (GsmApp     *app);
+gboolean         gsm_app_get_registered                 (GsmApp     *app);
+void             gsm_app_set_registered                 (GsmApp     *app,
+                                                         gboolean  registered);
 
 G_END_DECLS
 
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 0edfef0..633045b 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -102,7 +102,7 @@
 #define KEY_DISABLE_LOG_OUT       "disable-log-out"
 #define KEY_DISABLE_USER_SWITCHING "disable-user-switching"
 
-static void app_registered (GsmApp     *app, GsmManager *manager);
+static void app_registered (GsmApp     *app, GParamSpec *spec, GsmManager *manager);
 
 typedef enum
 {
@@ -681,8 +681,13 @@ app_exited (GsmApp     *app,
 
 static void
 app_registered (GsmApp     *app,
+                GParamSpec *spec,
                 GsmManager *manager)
 {
+        if (!gsm_app_get_registered (app)) {
+                return;
+        }
+
         g_debug ("App %s registered", gsm_app_peek_app_id (app));
 
         app_event_during_startup (manager, app);
@@ -781,7 +786,7 @@ _start_app (const char *id,
                                   G_CALLBACK (app_exited),
                                   manager);
                 g_signal_connect (app,
-                                  "registered",
+                                  "notify::registered",
                                   G_CALLBACK (app_registered),
                                   manager);
                 g_signal_connect (app,
@@ -1800,7 +1805,7 @@ on_xsmp_client_register_confirmed (GsmXSMPClient *client,
         app = find_app_for_startup_id (manager, id);
 
         if (app != NULL) {
-                gsm_app_registered (app);
+                gsm_app_set_registered (app, TRUE);
         }
 }
 
@@ -2752,7 +2757,7 @@ gsm_manager_register_client (GsmExportedManager    *skeleton,
 
         if (app != NULL) {
                 gsm_client_set_app_id (client, gsm_app_peek_app_id (app));
-                gsm_app_registered (app);
+                gsm_app_set_registered (app, TRUE);
         } else {
                 /* if an app id is specified store it in the client
                    so we can save it later */


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