diff options
author | Ray Strode <rstrode@redhat.com> | 2015-02-18 13:42:46 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2015-02-18 14:14:08 -0500 |
commit | fdaa1e72d87486c2bf4448f6d7145497b8400a8e (patch) | |
tree | 5ade64784c9e6743ee2bd58a9c9f361c2b5be30c | |
parent | b88aa0a9b2b97eddf0cf73f67c650baf96d78710 (diff) | |
download | gnome-session-fdaa1e72d87486c2bf4448f6d7145497b8400a8e.tar.gz |
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
-rw-r--r-- | gnome-session/gsm-app.c | 54 | ||||
-rw-r--r-- | gnome-session/gsm-app.h | 5 | ||||
-rw-r--r-- | 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 af09352b..845e067a 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 ddaadb81..14a9f94b 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 0edfef0a..633045b9 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 */ |