summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2015-02-18 13:42:46 -0500
committerRay Strode <rstrode@redhat.com>2015-02-18 14:14:08 -0500
commitfdaa1e72d87486c2bf4448f6d7145497b8400a8e (patch)
tree5ade64784c9e6743ee2bd58a9c9f361c2b5be30c
parentb88aa0a9b2b97eddf0cf73f67c650baf96d78710 (diff)
downloadgnome-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.c54
-rw-r--r--gnome-session/gsm-app.h5
-rw-r--r--gnome-session/gsm-manager.c13
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 */