Commit dfd90780 authored by Cosimo Cecchi's avatar Cosimo Cecchi Committed by Ray Strode
parent 96ce81a4
......@@ -153,8 +153,14 @@ org.gnome.SessionManager.ClientPrivate.h: org.gnome.SessionManager.ClientPrivate
org.gnome.SessionManager.ClientPrivate.c: org.gnome.SessionManager.ClientPrivate.h
@: # generated as a side-effect
gsm-app-glue.h: org.gnome.SessionManager.App.xml Makefile.am
$(AM_V_GEN)dbus-binding-tool --prefix=gsm_app --mode=glib-server --output=gsm-app-glue.h $(srcdir)/org.gnome.SessionManager.App.xml
org.gnome.SessionManager.App.h: org.gnome.SessionManager.App.xml Makefile.am
$(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager.App. \
--generate-c-code org.gnome.SessionManager.App \
--c-namespace Gsm \
--annotate "org.gnome.SessionManager.App" "org.gtk.GDBus.C.Name" ExportedApp \
$(srcdir)/org.gnome.SessionManager.App.xml
org.gnome.SessionManager.App.c: org.gnome.SessionManager.App.h
@: # generated as a side-effect
gsm-inhibitor-glue.h: org.gnome.SessionManager.Inhibitor.xml Makefile.am
$(AM_V_GEN)dbus-binding-tool --prefix=gsm_inhibitor --mode=glib-server --output=gsm-inhibitor-glue.h $(srcdir)/org.gnome.SessionManager.Inhibitor.xml
......@@ -163,6 +169,8 @@ gsm-presence-glue.h: org.gnome.SessionManager.Presence.xml Makefile.am
$(AM_V_GEN)dbus-binding-tool --prefix=gsm_presence --mode=glib-server --output=gsm-presence-glue.h $(srcdir)/org.gnome.SessionManager.Presence.xml
BUILT_SOURCES = \
org.gnome.SessionManager.App.h \
org.gnome.SessionManager.App.c \
org.gnome.SessionManager.Client.h \
org.gnome.SessionManager.Client.c \
org.gnome.SessionManager.ClientPrivate.h \
......@@ -170,8 +178,7 @@ BUILT_SOURCES = \
org.gnome.SessionManager.h \
org.gnome.SessionManager.c \
gsm-presence-glue.h \
gsm-inhibitor-glue.h \
gsm-app-glue.h
gsm-inhibitor-glue.h
EXTRA_DIST = \
README \
......
......@@ -25,7 +25,7 @@
#include <string.h>
#include "gsm-app.h"
#include "gsm-app-glue.h"
#include "org.gnome.SessionManager.App.h"
#define GSM_APP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_APP, GsmAppPrivate))
......@@ -40,7 +40,8 @@ struct _GsmAppPrivate
char *startup_id;
gboolean ever_started;
GTimeVal last_restart_time;
DBusGConnection *connection;
GDBusConnection *connection;
GsmExportedApp *skeleton;
};
......@@ -77,6 +78,41 @@ 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;
id = g_strdup (app->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)
{
gsm_exported_app_complete_get_phase (skeleton, invocation, app->priv->phase);
return TRUE;
}
static guint32
get_next_app_serial (void)
{
......@@ -95,18 +131,34 @@ static gboolean
register_app (GsmApp *app)
{
GError *error;
GsmExportedApp *skeleton;
error = NULL;
app->priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
if (app->priv->connection == NULL) {
if (error != NULL) {
g_critical ("error getting session bus: %s", error->message);
g_error_free (error);
}
app->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 ();
app->priv->skeleton = skeleton;
g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
app->priv->connection, app->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 (app->priv->connection, app->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;
}
......@@ -231,6 +283,14 @@ gsm_app_dispose (GObject *object)
g_free (app->priv->id);
app->priv->id = NULL;
if (app->priv->skeleton != NULL) {
g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (app->priv->skeleton),
app->priv->connection);
g_clear_object (&app->priv->skeleton);
}
g_clear_object (&app->priv->connection);
G_OBJECT_CLASS (gsm_app_parent_class)->dispose (object);
}
......@@ -302,7 +362,6 @@ gsm_app_class_init (GsmAppClass *klass)
0);
g_type_class_add_private (klass, sizeof (GsmAppPrivate));
dbus_g_object_type_install_info (GSM_TYPE_APP, &dbus_glib_gsm_app_object_info);
}
const char *
......@@ -482,33 +541,3 @@ gsm_app_died (GsmApp *app,
g_signal_emit (app, signals[DIED], 0, signal);
}
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)
{
g_return_val_if_fail (GSM_IS_APP (app), FALSE);
*id = g_strdup (app->priv->startup_id);
return TRUE;
}
gboolean
gsm_app_get_phase (GsmApp *app,
guint *phase,
GError **error)
{
g_return_val_if_fail (GSM_IS_APP (app), FALSE);
*phase = app->priv->phase;
return TRUE;
}
......@@ -120,17 +120,6 @@ gboolean gsm_app_has_autostart_condition (GsmApp *app,
const char *condition);
void gsm_app_registered (GsmApp *app);
/* exported to bus */
gboolean gsm_app_get_app_id (GsmApp *app,
char **id,
GError **error);
gboolean gsm_app_get_startup_id (GsmApp *app,
char **id,
GError **error);
gboolean gsm_app_get_phase (GsmApp *app,
guint *phase,
GError **error);
G_END_DECLS
#endif /* __GSM_APP_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment