summaryrefslogtreecommitdiff
path: root/mate-session/gsm-app.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-session/gsm-app.c')
-rw-r--r--mate-session/gsm-app.c127
1 files changed, 77 insertions, 50 deletions
diff --git a/mate-session/gsm-app.c b/mate-session/gsm-app.c
index 7d693b8..42aebb2 100644
--- a/mate-session/gsm-app.c
+++ b/mate-session/gsm-app.c
@@ -27,14 +27,15 @@
#include <string.h>
#include "gsm-app.h"
-#include "gsm-app-glue.h"
+#include "org.gnome.SessionManager.App.h"
typedef struct {
char *id;
char *app_id;
int phase;
char *startup_id;
- DBusGConnection *connection;
+ GDBusConnection *connection;
+ GsmExportedApp *skeleton;
} GsmAppPrivate;
enum {
@@ -70,6 +71,46 @@ gsm_app_error_quark (void)
}
+static gboolean
+gsm_app_get_app_id (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ const gchar *id;
+
+ id = GSM_APP_GET_CLASS (app)->impl_get_app_id (app);
+ gsm_exported_app_complete_get_app_id (skeleton, invocation, id);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_app_get_startup_id (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ const gchar *id;
+ GsmAppPrivate *priv;
+
+ priv = gsm_app_get_instance_private (app);
+ id = g_strdup (priv->startup_id);
+ gsm_exported_app_complete_get_startup_id (skeleton, invocation, id);
+
+ return TRUE;
+}
+
+static gboolean
+gsm_app_get_phase (GsmExportedApp *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmApp *app)
+{
+ GsmAppPrivate *priv;
+
+ priv = gsm_app_get_instance_private (app);
+ gsm_exported_app_complete_get_phase (skeleton, invocation, priv->phase);
+ return TRUE;
+}
+
static guint32
get_next_app_serial (void)
{
@@ -89,20 +130,36 @@ register_app (GsmApp *app)
{
GError *error;
GsmAppPrivate *priv;
+ GsmExportedApp *skeleton;
error = NULL;
priv = gsm_app_get_instance_private (app);
- priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (priv->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting session bus: %s", error->message);
- g_error_free (error);
- }
+ priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (error != NULL) {
+ g_critical ("error getting session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ skeleton = gsm_exported_app_skeleton_new ();
+ priv->skeleton = skeleton;
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ priv->connection, priv->id,
+ &error);
+
+ if (error != NULL) {
+ g_critical ("error registering app on session bus: %s", error->message);
+ g_error_free (error);
return FALSE;
}
- dbus_g_connection_register_g_object (priv->connection, priv->id, G_OBJECT (app));
+ g_signal_connect (skeleton, "handle-get-app-id",
+ G_CALLBACK (gsm_app_get_app_id), app);
+ g_signal_connect (skeleton, "handle-get-phase",
+ G_CALLBACK (gsm_app_get_phase), app);
+ g_signal_connect (skeleton, "handle-get-startup-id",
+ G_CALLBACK (gsm_app_get_startup_id), app);
return TRUE;
}
@@ -133,7 +190,7 @@ gsm_app_constructor (GType type,
}
static void
-gsm_app_init (GsmApp *app)
+gsm_app_init (GsmApp G_GNUC_UNUSED *app)
{
}
@@ -184,7 +241,7 @@ static void
gsm_app_set_property (GObject *object,
guint prop_id,
const GValue *value,
- GParamSpec *pspec)
+ GParamSpec *pspec G_GNUC_UNUSED)
{
GsmApp *app = GSM_APP (object);
@@ -207,7 +264,7 @@ static void
gsm_app_get_property (GObject *object,
guint prop_id,
GValue *value,
- GParamSpec *pspec)
+ GParamSpec *pspec G_GNUC_UNUSED)
{
GsmAppPrivate *priv;
GsmApp *app = GSM_APP (object);
@@ -243,6 +300,14 @@ gsm_app_dispose (GObject *object)
g_free (priv->id);
priv->id = NULL;
+ if (priv->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (priv->skeleton),
+ priv->connection);
+ g_clear_object (&priv->skeleton);
+ }
+
+ g_clear_object (&priv->connection);
+
G_OBJECT_CLASS (gsm_app_parent_class)->dispose (object);
}
@@ -315,8 +380,6 @@ gsm_app_class_init (GsmAppClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
-
- dbus_g_object_type_install_info (GSM_TYPE_APP, &dbus_glib_gsm_app_object_info);
}
const char *
@@ -500,39 +563,3 @@ gsm_app_died (GsmApp *app)
g_signal_emit (app, signals[DIED], 0);
}
-
-gboolean
-gsm_app_get_app_id (GsmApp *app,
- char **id,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_APP (app), FALSE);
- *id = g_strdup (GSM_APP_GET_CLASS (app)->impl_get_app_id (app));
- return TRUE;
-}
-
-gboolean
-gsm_app_get_startup_id (GsmApp *app,
- char **id,
- GError **error)
-{
- GsmAppPrivate *priv;
- g_return_val_if_fail (GSM_IS_APP (app), FALSE);
-
- priv = gsm_app_get_instance_private (app);
- *id = g_strdup (priv->startup_id);
- return TRUE;
-}
-
-gboolean
-gsm_app_get_phase (GsmApp *app,
- guint *phase,
- GError **error)
-{
- GsmAppPrivate *priv;
- g_return_val_if_fail (GSM_IS_APP (app), FALSE);
-
- priv = gsm_app_get_instance_private (app);
- *phase = priv->phase;
- return TRUE;
-}