summaryrefslogtreecommitdiff
path: root/mate-session
diff options
context:
space:
mode:
authorWu Xiaotian <[email protected]>2020-04-28 17:06:07 +0800
committerWu Xiaotian <[email protected]>2020-08-19 22:01:55 +0800
commit431efb1de32bac835bdc03387a2e5fc03891f6d2 (patch)
treef388c88129c6bfebc7a35d5e151285b1b4988209 /mate-session
parentdbd99d0919e12fdef30cb79b1f6753f0b5f2f5c2 (diff)
downloadmate-session-manager-431efb1de32bac835bdc03387a2e5fc03891f6d2.tar.bz2
mate-session-manager-431efb1de32bac835bdc03387a2e5fc03891f6d2.tar.xz
update
Diffstat (limited to 'mate-session')
-rw-r--r--mate-session/Makefile.am84
-rw-r--r--mate-session/gs-idle-monitor.c4
-rw-r--r--mate-session/gsm-app.c127
-rw-r--r--mate-session/gsm-app.h11
-rw-r--r--mate-session/gsm-autostart-app.c18
-rw-r--r--mate-session/gsm-client.c242
-rw-r--r--mate-session/gsm-client.h20
-rw-r--r--mate-session/gsm-consolekit.c8
-rw-r--r--mate-session/gsm-dbus-client.c496
-rw-r--r--mate-session/gsm-dbus-client.h26
-rw-r--r--mate-session/gsm-inhibitor.c228
-rw-r--r--mate-session/gsm-inhibitor.h20
-rw-r--r--mate-session/gsm-manager.c203
-rw-r--r--mate-session/gsm-presence.c368
-rw-r--r--mate-session/gsm-presence.h14
-rw-r--r--mate-session/gsm-systemd.c10
-rw-r--r--mate-session/gsm-xsmp-client.c26
-rw-r--r--mate-session/org.gnome.SessionManager.xml4
18 files changed, 773 insertions, 1136 deletions
diff --git a/mate-session/Makefile.am b/mate-session/Makefile.am
index 448ee76..7e1efa4 100644
--- a/mate-session/Makefile.am
+++ b/mate-session/Makefile.am
@@ -104,29 +104,75 @@ gsm-marshal.c: gsm-marshal.list
gsm-marshal.h: gsm-marshal.list
$(AM_V_GEN)$(GLIB_GENMARSHAL) $< --prefix=gsm_marshal --header > [email protected]
-gsm-manager-glue.h: org.gnome.SessionManager.xml Makefile.am
- $(AM_V_GEN)dbus-binding-tool --prefix=gsm_manager --mode=glib-server --output=gsm-manager-glue.h $(srcdir)/org.gnome.SessionManager.xml
-
-gsm-client-glue.h: org.gnome.SessionManager.Client.xml Makefile.am
- $(AM_V_GEN)dbus-binding-tool --prefix=gsm_client --mode=glib-server --output=gsm-client-glue.h $(srcdir)/org.gnome.SessionManager.Client.xml
-
-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
-
-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
-
-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
+org.gnome.SessionManager.h: org.gnome.SessionManager.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager. \
+ --generate-c-code org.gnome.SessionManager \
+ --c-namespace Gsm \
+ --annotate "org.gnome.SessionManager" "org.gtk.GDBus.C.Name" ExportedManager \
+ $(srcdir)/org.gnome.SessionManager.xml
+org.gnome.SessionManager.c: org.gnome.SessionManager.h
+ @: # generated as a side-effect
+
+org.gnome.SessionManager.Client.h: org.gnome.SessionManager.Client.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager.Client. \
+ --generate-c-code org.gnome.SessionManager.Client \
+ --c-namespace Gsm \
+ --annotate "org.gnome.SessionManager.Client" "org.gtk.GDBus.C.Name" ExportedClient \
+ $(srcdir)/org.gnome.SessionManager.Client.xml
+org.gnome.SessionManager.Client.c: org.gnome.SessionManager.Client.h
+ @: # generated as a side-effect
+
+org.gnome.SessionManager.ClientPrivate.h: org.gnome.SessionManager.ClientPrivate.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager.ClientPrivate. \
+ --generate-c-code org.gnome.SessionManager.ClientPrivate \
+ --c-namespace Gsm \
+ --annotate "org.gnome.SessionManager.ClientPrivate" "org.gtk.GDBus.C.Name" ExportedClientPrivate \
+ $(srcdir)/org.gnome.SessionManager.ClientPrivate.xml
+org.gnome.SessionManager.ClientPrivate.c: org.gnome.SessionManager.ClientPrivate.h
+ @: # generated as a side-effect
+
+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
+
+org.gnome.SessionManager.Inhibitor.h: org.gnome.SessionManager.Inhibitor.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager.Inhibitor. \
+ --generate-c-code org.gnome.SessionManager.Inhibitor \
+ --c-namespace Gsm \
+ --annotate "org.gnome.SessionManager.Inhibitor" "org.gtk.GDBus.C.Name" ExportedInhibitor \
+ $(srcdir)/org.gnome.SessionManager.Inhibitor.xml
+org.gnome.SessionManager.Inhibitor.c: org.gnome.SessionManager.Inhibitor.h
+ @: # generated as a side-effect
+
+org.gnome.SessionManager.Presence.h: org.gnome.SessionManager.Presence.xml Makefile.am
+ $(AM_V_GEN) gdbus-codegen --interface-prefix org.gnome.SessionManager.Presence. \
+ --generate-c-code org.gnome.SessionManager.Presence \
+ --c-namespace Gsm \
+ --annotate "org.gnome.SessionManager.Presence" "org.gtk.GDBus.C.Name" ExportedPresence \
+ $(srcdir)/org.gnome.SessionManager.Presence.xml
+org.gnome.SessionManager.Presence.c: org.gnome.SessionManager.Presence.h
+ @: # generated as a side-effect
BUILT_SOURCES = \
gsm-marshal.c \
gsm-marshal.h \
- gsm-manager-glue.h \
- gsm-presence-glue.h \
- gsm-inhibitor-glue.h \
- gsm-client-glue.h \
- gsm-app-glue.h
+ 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 \
+ org.gnome.SessionManager.ClientPrivate.c \
+ org.gnome.SessionManager.Inhibitor.h \
+ org.gnome.SessionManager.Inhibitor.c \
+ org.gnome.SessionManager.h \
+ org.gnome.SessionManager.c \
+ org.gnome.SessionManager.Presence.h \
+ org.gnome.SessionManager.Presence.c
EXTRA_DIST = \
README \
diff --git a/mate-session/gs-idle-monitor.c b/mate-session/gs-idle-monitor.c
index a188af5..e1ad441 100644
--- a/mate-session/gs-idle-monitor.c
+++ b/mate-session/gs-idle-monitor.c
@@ -103,7 +103,7 @@ gs_idle_monitor_dispose (GObject *object)
}
static gboolean
-_find_alarm (gpointer key,
+_find_alarm (gpointer key G_GNUC_UNUSED,
GSIdleMonitorWatch *watch,
XSyncAlarm *alarm)
{
@@ -216,7 +216,7 @@ handle_alarm_notify_event (GSIdleMonitor *monitor,
static GdkFilterReturn
xevent_filter (GdkXEvent *xevent,
- GdkEvent *event,
+ GdkEvent *event G_GNUC_UNUSED,
GSIdleMonitor *monitor)
{
XEvent *ev;
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;
-}
diff --git a/mate-session/gsm-app.h b/mate-session/gsm-app.h
index af7db2b..5baedd6 100644
--- a/mate-session/gsm-app.h
+++ b/mate-session/gsm-app.h
@@ -103,17 +103,6 @@ gboolean gsm_app_has_autostart_condition (GsmApp *app,
void gsm_app_registered (GsmApp *app);
int gsm_app_peek_autostart_delay (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__ */
diff --git a/mate-session/gsm-autostart-app.c b/mate-session/gsm-autostart-app.c
index 8c90759..f6ebda1 100644
--- a/mate-session/gsm-autostart-app.c
+++ b/mate-session/gsm-autostart-app.c
@@ -187,9 +187,9 @@ parse_condition_string (const char *condition_string,
}
static void
-if_exists_condition_cb (GFileMonitor *monitor,
- GFile *file,
- GFile *other_file,
+if_exists_condition_cb (GFileMonitor *monitor G_GNUC_UNUSED,
+ GFile *file G_GNUC_UNUSED,
+ GFile *other_file G_GNUC_UNUSED,
GFileMonitorEvent event,
GsmApp *app)
{
@@ -218,9 +218,9 @@ if_exists_condition_cb (GFileMonitor *monitor,
}
static void
-unless_exists_condition_cb (GFileMonitor *monitor,
- GFile *file,
- GFile *other_file,
+unless_exists_condition_cb (GFileMonitor *monitor G_GNUC_UNUSED,
+ GFile *file G_GNUC_UNUSED,
+ GFile *other_file G_GNUC_UNUSED,
GFileMonitorEvent event,
GsmApp *app)
{
@@ -811,8 +811,8 @@ autostart_app_stop_spawn (GsmAutostartApp *app,
}
static gboolean
-autostart_app_stop_activate (GsmAutostartApp *app,
- GError **error)
+autostart_app_stop_activate (GsmAutostartApp *app G_GNUC_UNUSED,
+ GError **error G_GNUC_UNUSED)
{
return TRUE;
}
@@ -905,7 +905,7 @@ autostart_app_start_spawn (GsmAutostartApp *app,
}
static void
-start_notify (GObject *source_object,
+start_notify (GObject *source_object G_GNUC_UNUSED,
GAsyncResult *res,
gpointer data)
{
diff --git a/mate-session/gsm-client.c b/mate-session/gsm-client.c
index 13c6169..e82d79f 100644
--- a/mate-session/gsm-client.c
+++ b/mate-session/gsm-client.c
@@ -21,13 +21,11 @@
#include "config.h"
-#include <dbus/dbus-glib.h>
-
#include "eggdesktopfile.h"
#include "gsm-marshal.h"
#include "gsm-client.h"
-#include "gsm-client-glue.h"
+#include "org.gnome.SessionManager.Client.h"
static guint32 client_serial = 1;
@@ -37,7 +35,8 @@ typedef struct {
char *startup_id;
char *app_id;
guint status;
- DBusGConnection *connection;
+ GsmExportedClient *skeleton;
+ GDBusConnection *connection;
} GsmClientPrivate;
enum {
@@ -58,71 +57,155 @@ static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GsmClient, gsm_client, G_TYPE_OBJECT)
+#define GSM_CLIENT_DBUS_IFACE "org.gnome.SessionManager.Client"
+
+static const GDBusErrorEntry gsm_client_error_entries[] = {
+ { GSM_CLIENT_ERROR_GENERAL, GSM_CLIENT_DBUS_IFACE ".GeneralError" },
+ { GSM_CLIENT_ERROR_NOT_REGISTERED, GSM_CLIENT_DBUS_IFACE ".NotRegistered" }
+};
+
GQuark
gsm_client_error_quark (void)
{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("gsm_client_error");
+ static volatile gsize quark_volatile = 0;
+
+ g_dbus_error_register_error_domain ("gsm_client_error",
+ &quark_volatile,
+ gsm_client_error_entries,
+ G_N_ELEMENTS (gsm_client_error_entries));
+ return quark_volatile;
+}
+
+static guint32
+get_next_client_serial (void)
+{
+ guint32 serial;
+
+ serial = client_serial++;
+
+ if ((gint32)client_serial < 0) {
+ client_serial = 1;
}
- return ret;
+ return serial;
}
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
+static gboolean
+gsm_client_get_startup_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ GsmClientPrivate *priv;
+
+ priv = gsm_client_get_instance_private (client);
+ gsm_exported_client_complete_get_startup_id (skeleton, invocation, priv->startup_id);
+ return TRUE;
+}
-GType
-gsm_client_error_get_type (void)
+static gboolean
+gsm_client_get_app_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
{
- static GType etype = 0;
+ GsmClientPrivate *priv;
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY (GSM_CLIENT_ERROR_GENERAL, "GeneralError"),
- ENUM_ENTRY (GSM_CLIENT_ERROR_NOT_REGISTERED, "NotRegistered"),
- { 0, 0, 0 }
- };
+ priv = gsm_client_get_instance_private (client);
+ gsm_exported_client_complete_get_app_id (skeleton, invocation, priv->app_id);
+ return TRUE;
+}
- g_assert (GSM_CLIENT_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
+static gboolean
+gsm_client_get_restart_style_hint (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ guint hint;
- etype = g_enum_register_static ("GsmClientError", values);
- }
+ hint = GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
+ gsm_exported_client_complete_get_restart_style_hint (skeleton, invocation, hint);
+ return TRUE;
+}
+
+static gboolean
+gsm_client_get_status (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ GsmClientPrivate *priv;
- return etype;
+ priv = gsm_client_get_instance_private (client);
+ gsm_exported_client_complete_get_status (skeleton, invocation, priv->status);
+ return TRUE;
}
-static guint32
-get_next_client_serial (void)
+static gboolean
+gsm_client_get_unix_process_id (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
{
- guint32 serial;
+ guint pid;
- serial = client_serial++;
+ pid = GSM_CLIENT_GET_CLASS (client)->impl_get_unix_process_id (client);
+ gsm_exported_client_complete_get_unix_process_id (skeleton, invocation, pid);
+ return TRUE;
+}
- if ((gint32)client_serial < 0) {
- client_serial = 1;
- }
+static gboolean
+gsm_client_stop_dbus (GsmExportedClient *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmClient *client)
+{
+ GError *error = NULL;
+ gsm_client_stop (client, &error);
- return serial;
+ if (error != NULL) {
+ g_dbus_method_invocation_take_error (invocation, error);
+ } else {
+ gsm_exported_client_complete_stop (skeleton, invocation);
+ }
+ return TRUE;
}
static gboolean
register_client (GsmClient *client)
{
- GError *error;
+ GError *error = NULL;
+ GsmExportedClient *skeleton;
GsmClientPrivate *priv;
- error = NULL;
priv = gsm_client_get_instance_private (client);
- priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+ priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
if (priv->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting session bus: %s", error->message);
- g_error_free (error);
- }
+ g_critical ("error getting session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ skeleton = gsm_exported_client_skeleton_new ();
+ priv->skeleton = skeleton;
+ g_debug ("exporting client to object path: %s", priv->id);
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ priv->connection,
+ priv->id, &error);
+
+ if (error != NULL) {
+ g_critical ("error exporting client on session bus: %s", error->message);
+ g_error_free (error);
return FALSE;
}
- dbus_g_connection_register_g_object (priv->connection, priv->id, G_OBJECT (client));
+ g_signal_connect (skeleton, "handle-get-app-id",
+ G_CALLBACK (gsm_client_get_app_id), client);
+ g_signal_connect (skeleton, "handle-get-restart-style-hint",
+ G_CALLBACK (gsm_client_get_restart_style_hint), client);
+ g_signal_connect (skeleton, "handle-get-startup-id",
+ G_CALLBACK (gsm_client_get_startup_id), client);
+ g_signal_connect (skeleton, "handle-get-status",
+ G_CALLBACK (gsm_client_get_status), client);
+ g_signal_connect (skeleton, "handle-get-unix-process-id",
+ G_CALLBACK (gsm_client_get_unix_process_id), client);
+ g_signal_connect (skeleton, "handle-stop",
+ G_CALLBACK (gsm_client_stop_dbus), client);
return TRUE;
}
@@ -152,7 +235,7 @@ gsm_client_constructor (GType type,
}
static void
-gsm_client_init (GsmClient *client)
+gsm_client_init (GsmClient *client G_GNUC_UNUSED)
{
}
@@ -174,6 +257,14 @@ gsm_client_finalize (GObject *object)
g_free (priv->startup_id);
g_free (priv->app_id);
+ 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_client_parent_class)->finalize (object);
}
@@ -285,7 +376,7 @@ gsm_client_get_property (GObject *object,
static gboolean
default_stop (GsmClient *client,
- GError **error)
+ GError **error G_GNUC_UNUSED)
{
g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
@@ -366,8 +457,6 @@ gsm_client_class_init (GsmClientClass *klass)
G_MAXINT,
GSM_CLIENT_UNREGISTERED,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
- dbus_g_object_type_install_info (GSM_TYPE_CLIENT, &dbus_glib_gsm_client_object_info);
}
const char *
@@ -432,75 +521,6 @@ gsm_client_peek_restart_style_hint (GsmClient *client)
return GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
}
-gboolean
-gsm_client_get_startup_id (GsmClient *client,
- char **id,
- GError **error)
-{
- GsmClientPrivate *priv;
- g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
-
- priv = gsm_client_get_instance_private (client);
-
- *id = g_strdup (priv->startup_id);
-
- return TRUE;
-}
-
-gboolean
-gsm_client_get_app_id (GsmClient *client,
- char **id,
- GError **error)
-{
- GsmClientPrivate *priv;
- g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
-
- priv = gsm_client_get_instance_private (client);
-
- *id = g_strdup (priv->app_id);
-
- return TRUE;
-}
-
-gboolean
-gsm_client_get_restart_style_hint (GsmClient *client,
- guint *hint,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
-
- *hint = GSM_CLIENT_GET_CLASS (client)->impl_get_restart_style_hint (client);
-
- return TRUE;
-}
-
-gboolean
-gsm_client_get_status (GsmClient *client,
- guint *status,
- GError **error)
-{
- GsmClientPrivate *priv;
- g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
-
- priv = gsm_client_get_instance_private (client);
-
- *status = priv->status;
-
- return TRUE;
-}
-
-gboolean
-gsm_client_get_unix_process_id (GsmClient *client,
- guint *pid,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_CLIENT (client), FALSE);
-
- *pid = GSM_CLIENT_GET_CLASS (client)->impl_get_unix_process_id (client);
-
- return TRUE;
-}
-
/**
* gsm_client_get_app_name:
* @client: a #GsmClient.
diff --git a/mate-session/gsm-client.h b/mate-session/gsm-client.h
index 0afff15..5ba6bb1 100644
--- a/mate-session/gsm-client.h
+++ b/mate-session/gsm-client.h
@@ -89,9 +89,6 @@ typedef enum
} GsmClientError;
#define GSM_CLIENT_ERROR gsm_client_error_quark ()
-#define GSM_CLIENT_TYPE_ERROR (gsm_client_error_get_type ())
-
-GType gsm_client_error_get_type (void);
GQuark gsm_client_error_quark (void);
const char *gsm_client_peek_id (GsmClient *client);
@@ -122,24 +119,9 @@ void gsm_client_disconnected (GsmClient *client)
GKeyFile *gsm_client_save (GsmClient *client,
GError **error);
-/* exported to bus */
+
gboolean gsm_client_stop (GsmClient *client,
GError **error);
-gboolean gsm_client_get_startup_id (GsmClient *client,
- char **startup_id,
- GError **error);
-gboolean gsm_client_get_app_id (GsmClient *client,
- char **app_id,
- GError **error);
-gboolean gsm_client_get_restart_style_hint (GsmClient *client,
- guint *hint,
- GError **error);
-gboolean gsm_client_get_status (GsmClient *client,
- guint *status,
- GError **error);
-gboolean gsm_client_get_unix_process_id (GsmClient *client,
- guint *pid,
- GError **error);
/* private */
diff --git a/mate-session/gsm-consolekit.c b/mate-session/gsm-consolekit.c
index 82e04a5..870fc80 100644
--- a/mate-session/gsm-consolekit.c
+++ b/mate-session/gsm-consolekit.c
@@ -149,7 +149,7 @@ gsm_consolekit_class_init (GsmConsolekitClass *manager_class)
}
static DBusHandlerResult
-gsm_consolekit_dbus_filter (DBusConnection *connection,
+gsm_consolekit_dbus_filter (DBusConnection *connection G_GNUC_UNUSED,
DBusMessage *message,
void *user_data)
{
@@ -271,10 +271,10 @@ out:
}
static void
-gsm_consolekit_on_name_owner_changed (DBusGProxy *bus_proxy,
+gsm_consolekit_on_name_owner_changed (DBusGProxy *bus_proxy G_GNUC_UNUSED,
const char *name,
- const char *prev_owner,
- const char *new_owner,
+ const char *prev_owner G_GNUC_UNUSED,
+ const char *new_owner G_GNUC_UNUSED,
GsmConsolekit *manager)
{
GsmConsolekitPrivate *priv;
diff --git a/mate-session/gsm-dbus-client.c b/mate-session/gsm-dbus-client.c
index eba098c..64cf2d3 100644
--- a/mate-session/gsm-dbus-client.c
+++ b/mate-session/gsm-dbus-client.c
@@ -27,11 +27,9 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
+#include <gio/gio.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
-
+#include "org.gnome.SessionManager.ClientPrivate.h"
#include "gsm-dbus-client.h"
#include "gsm-marshal.h"
@@ -47,7 +45,9 @@ struct _GsmDBusClient
char *bus_name;
GPid caller_pid;
GsmClientRestartStyle restart_style_hint;
- DBusConnection *connection;
+
+ GDBusConnection *connection;
+ GsmExportedClientPrivate *skeleton;
};
enum {
@@ -57,176 +57,37 @@ enum {
G_DEFINE_TYPE (GsmDBusClient, gsm_dbus_client, GSM_TYPE_CLIENT)
-GQuark
-gsm_dbus_client_error_quark (void)
-{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("gsm_dbus_client_error");
- }
-
- return ret;
-}
-
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-GType
-gsm_dbus_client_error_get_type (void)
-{
- static GType etype = 0;
-
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY (GSM_DBUS_CLIENT_ERROR_GENERAL, "GeneralError"),
- ENUM_ENTRY (GSM_DBUS_CLIENT_ERROR_NOT_CLIENT, "NotClient"),
- { 0, 0, 0 }
- };
-
- g_assert (GSM_DBUS_CLIENT_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
-
- etype = g_enum_register_static ("GsmDbusClientError", values);
- }
-
- return etype;
-}
-
static gboolean
setup_connection (GsmDBusClient *client)
{
- DBusError error;
-
- dbus_error_init (&error);
+ GError *error = NULL;
if (client->connection == NULL) {
- client->connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
- if (client->connection == NULL) {
- if (dbus_error_is_set (&error)) {
- g_debug ("GsmDbusClient: Couldn't connect to session bus: %s",
- error.message);
- dbus_error_free (&error);
- }
+ client->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (error != NULL) {
+ g_debug ("GsmDbusClient: Couldn't connect to session bus: %s",
+ error->message);
+ g_error_free (error);
return FALSE;
}
-
- dbus_connection_setup_with_g_main (client->connection, NULL);
- dbus_connection_set_exit_on_disconnect (client->connection, FALSE);
}
return TRUE;
}
static void
-raise_error (DBusConnection *connection,
- DBusMessage *in_reply_to,
- const char *error_name,
- char *format, ...)
+handle_end_session_response (GsmExportedClientPrivate *skeleton,
+ GDBusMethodInvocation *invocation,
+ gboolean is_ok,
+ const char *reason,
+ GsmDBusClient *client)
{
- char buf[512];
- DBusMessage *reply;
-
- va_list args;
- va_start (args, format);
- vsnprintf (buf, sizeof (buf), format, args);
- va_end (args);
-
- reply = dbus_message_new_error (in_reply_to, error_name, buf);
- if (reply == NULL) {
- g_error ("No memory");
- }
- if (! dbus_connection_send (connection, reply, NULL)) {
- g_error ("No memory");
- }
-
- dbus_message_unref (reply);
-}
-
-static void
-handle_end_session_response (GsmDBusClient *client,
- DBusMessage *message)
-{
- const char *sender;
- DBusMessage *reply;
- DBusError error;
- dbus_bool_t is_ok;
- const char *reason;
-
- dbus_error_init (&error);
- if (! dbus_message_get_args (message, &error,
- DBUS_TYPE_BOOLEAN, &is_ok,
- DBUS_TYPE_STRING, &reason,
- DBUS_TYPE_INVALID)) {
- if (dbus_error_is_set (&error)) {
- g_warning ("Invalid method call: %s", error.message);
- dbus_error_free (&error);
- }
- raise_error (client->connection,
- message,
- DBUS_ERROR_FAILED,
- "There is a syntax error in the invocation of the method EndSessionResponse");
- return;
- }
-
g_debug ("GsmDBusClient: got EndSessionResponse is-ok:%d reason=%s", is_ok, reason);
- /* make sure it is from our client */
- sender = dbus_message_get_sender (message);
- if (sender == NULL
- || IS_STRING_EMPTY (client->bus_name)
- || strcmp (sender, client->bus_name) != 0) {
-
- raise_error (client->connection,
- message,
- DBUS_ERROR_FAILED,
- "Caller not recognized as the client");
- return;
- }
-
- reply = dbus_message_new_method_return (message);
- if (reply == NULL) {
- g_error ("No memory");
- }
-
gsm_client_end_session_response (GSM_CLIENT (client),
is_ok, FALSE, FALSE, reason);
-
- if (! dbus_connection_send (client->connection, reply, NULL)) {
- g_error ("No memory");
- }
-
- dbus_message_unref (reply);
-}
-
-static DBusHandlerResult
-client_dbus_filter_function (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
-{
- GsmDBusClient *client = GSM_DBUS_CLIENT (user_data);
- const char *path;
-
- g_return_val_if_fail (connection != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
- g_return_val_if_fail (message != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
- path = dbus_message_get_path (message);
-
- g_debug ("GsmDBusClient: obj_path=%s interface=%s method=%s",
- dbus_message_get_path (message),
- dbus_message_get_interface (message),
- dbus_message_get_member (message));
-
- if (dbus_message_is_method_call (message, SM_DBUS_CLIENT_PRIVATE_INTERFACE, "EndSessionResponse")) {
- g_assert (gsm_client_peek_id (GSM_CLIENT (client)) != NULL);
-
- if (path != NULL && strcmp (path, gsm_client_peek_id (GSM_CLIENT (client))) != 0) {
- /* Different object path */
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
- handle_end_session_response (client, message);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ gsm_exported_client_private_complete_end_session_response (skeleton, invocation);
}
static GObject *
@@ -235,6 +96,8 @@ gsm_dbus_client_constructor (GType type,
GObjectConstructParam *construct_properties)
{
GsmDBusClient *client;
+ GError *error = NULL;
+ GsmExportedClientPrivate *skeleton;
client = GSM_DBUS_CLIENT (G_OBJECT_CLASS (gsm_dbus_client_parent_class)->constructor (type,
n_construct_properties,
@@ -245,92 +108,121 @@ gsm_dbus_client_constructor (GType type,
return NULL;
}
- /* Object path is already registered by base class */
- dbus_connection_add_filter (client->connection, client_dbus_filter_function, client, NULL);
+ skeleton = gsm_exported_client_private_skeleton_new ();
+ client->skeleton = skeleton;
+ g_debug ("exporting dbus client to object path: %s", gsm_client_peek_id (GSM_CLIENT (client)));
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ client->connection,
+ gsm_client_peek_id (GSM_CLIENT (client)),
+ &error);
+
+ if (error != NULL) {
+ g_critical ("error exporting client private on session bus: %s", error->message);
+ g_error_free (error);
+ g_object_unref (client);
+ return NULL;
+ }
+
+ g_signal_connect (skeleton, "handle-end-session-response",
+ G_CALLBACK (handle_end_session_response), client);
return G_OBJECT (client);
}
static void
-gsm_dbus_client_init (GsmDBusClient *client)
+gsm_dbus_client_init (GsmDBusClient *client G_GNUC_UNUSED)
{
}
/* adapted from PolicyKit */
static gboolean
-get_caller_info (GsmDBusClient *client,
+get_caller_info (GsmDBusClient *client G_GNUC_UNUSED,
const char *sender,
- uid_t *calling_uid,
- pid_t *calling_pid)
+ uid_t *calling_uid_out,
+ pid_t *calling_pid_out)
{
- gboolean res;
+ GDBusConnection *connection;
+ gboolean retval;
GError *error;
- DBusGConnection *connection;
- DBusGProxy *bus_proxy;
+ GVariant *uid_variant, *pid_variant;
+ uid_t uid;
+ pid_t pid;
- res = FALSE;
- bus_proxy = NULL;
+ retval = FALSE;
if (sender == NULL) {
goto out;
}
error = NULL;
- connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (connection == NULL) {
- if (error != NULL) {
- g_warning ("error getting session bus: %s", error->message);
- g_error_free (error);
- }
+ uid_variant = pid_variant = NULL;
+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+
+ if (error != NULL) {
+ g_warning ("error getting session bus: %s", error->message);
+ g_error_free (error);
goto out;
}
- bus_proxy = dbus_g_proxy_new_for_name (connection,
- DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS);
+ uid_variant = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetConnectionUnixUser",
+ g_variant_new ("(s)", sender),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL, &error);
- error = NULL;
- if (! dbus_g_proxy_call (bus_proxy, "GetConnectionUnixUser", &error,
- G_TYPE_STRING, sender,
- G_TYPE_INVALID,
- G_TYPE_UINT, calling_uid,
- G_TYPE_INVALID)) {
+ if (error != NULL) {
g_debug ("GetConnectionUnixUser() failed: %s", error->message);
g_error_free (error);
goto out;
}
- error = NULL;
- if (! dbus_g_proxy_call (bus_proxy, "GetConnectionUnixProcessID", &error,
- G_TYPE_STRING, sender,
- G_TYPE_INVALID,
- G_TYPE_UINT, calling_pid,
- G_TYPE_INVALID)) {
+ pid_variant = g_dbus_connection_call_sync (connection,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "GetConnectionUnixProcessID",
+ g_variant_new ("(s)", sender),
+ G_VARIANT_TYPE ("(u)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL, &error);
+
+ if (error != NULL) {
g_debug ("GetConnectionUnixProcessID() failed: %s", error->message);
g_error_free (error);
goto out;
}
- res = TRUE;
+ g_variant_get (uid_variant, "(u)", &uid);
+ g_variant_get (pid_variant, "(u)", &pid);
+
+ if (calling_uid_out != NULL) {
+ *calling_uid_out = uid;
+ }
+ if (calling_pid_out != NULL) {
+ *calling_pid_out = pid;
+ }
+
+ retval = TRUE;
- g_debug ("uid = %d", *calling_uid);
- g_debug ("pid = %d", *calling_pid);
+ g_debug ("uid = %d", uid);
+ g_debug ("pid = %d", pid);
out:
- if (bus_proxy != NULL) {
- g_object_unref (bus_proxy);
- }
- return res;
+ g_clear_pointer (&uid_variant, g_variant_unref);
+ g_clear_pointer (&pid_variant, g_variant_unref);
+ g_clear_object (&connection);
+
+ return retval;
}
static void
gsm_dbus_client_set_bus_name (GsmDBusClient *client,
const char *bus_name)
{
- uid_t uid;
- pid_t pid;
-
g_return_if_fail (GSM_IS_DBUS_CLIENT (client));
g_free (client->bus_name);
@@ -338,17 +230,9 @@ gsm_dbus_client_set_bus_name (GsmDBusClient *client,
client->bus_name = g_strdup (bus_name);
g_object_notify (G_OBJECT (client), "bus-name");
- if (client->bus_name != NULL) {
- gboolean res;
-
- res = get_caller_info (client, bus_name, &uid, &pid);
- if (! res) {
- pid = 0;
- }
- } else {
- pid = 0;
+ if (!get_caller_info (client, bus_name, NULL, &client->caller_pid)) {
+ client->caller_pid = 0;
}
- client->caller_pid = pid;
}
const char *
@@ -406,12 +290,20 @@ gsm_dbus_client_finalize (GObject *object)
g_free (client->bus_name);
+ if (client->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (client->skeleton),
+ client->connection);
+ g_clear_object (&client->skeleton);
+ }
+
+ g_clear_object (&client->connection);
+
G_OBJECT_CLASS (gsm_dbus_client_parent_class)->finalize (object);
}
static GKeyFile *
dbus_client_save (GsmClient *client,
- GError **error)
+ GError **error G_GNUC_UNUSED)
{
g_debug ("GsmDBusClient: saving client with id %s",
gsm_client_peek_id (client));
@@ -424,41 +316,15 @@ dbus_client_save (GsmClient *client,
static gboolean
dbus_client_stop (GsmClient *client,
- GError **error)
+ GError **error G_GNUC_UNUSED)
{
GsmDBusClient *dbus_client = (GsmDBusClient *) client;
- DBusMessage *message;
- gboolean ret;
-
- ret = FALSE;
-
- /* unicast the signal to only the registered bus name */
- message = dbus_message_new_signal (gsm_client_peek_id (client),
- SM_DBUS_CLIENT_PRIVATE_INTERFACE,
- "Stop");
- if (message == NULL) {
- goto out;
- }
- if (!dbus_message_set_destination (message, dbus_client->bus_name)) {
- goto out;
- }
-
- if (!dbus_connection_send (dbus_client->connection, message, NULL)) {
- goto out;
- }
-
- ret = TRUE;
-
- out:
- if (message != NULL) {
- dbus_message_unref (message);
- }
-
- return ret;
+ gsm_exported_client_private_emit_stop (dbus_client->skeleton);
+ return TRUE;
}
static char *
-dbus_client_get_app_name (GsmClient *client)
+dbus_client_get_app_name (GsmClient *client G_GNUC_UNUSED)
{
/* Always use app-id instead */
return NULL;
@@ -482,11 +348,6 @@ dbus_client_query_end_session (GsmClient *client,
GError **error)
{
GsmDBusClient *dbus_client = (GsmDBusClient *) client;
- DBusMessage *message;
- DBusMessageIter iter;
- gboolean ret;
-
- ret = FALSE;
if (dbus_client->bus_name == NULL) {
g_set_error (error,
@@ -498,155 +359,29 @@ dbus_client_query_end_session (GsmClient *client,
g_debug ("GsmDBusClient: sending QueryEndSession signal to %s", dbus_client->bus_name);
- /* unicast the signal to only the registered bus name */
- message = dbus_message_new_signal (gsm_client_peek_id (client),
- SM_DBUS_CLIENT_PRIVATE_INTERFACE,
- "QueryEndSession");
- if (message == NULL) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send QueryEndSession message");
- goto out;
- }
- if (!dbus_message_set_destination (message, dbus_client->bus_name)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send QueryEndSession message");
- goto out;
- }
-
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
-
- if (!dbus_connection_send (dbus_client->connection, message, NULL)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send QueryEndSession message");
- goto out;
- }
-
- ret = TRUE;
-
- out:
- if (message != NULL) {
- dbus_message_unref (message);
- }
-
- return ret;
+ gsm_exported_client_private_emit_query_end_session (dbus_client->skeleton, flags);
+ return TRUE;
}
static gboolean
dbus_client_end_session (GsmClient *client,
guint flags,
- GError **error)
+ GError **error G_GNUC_UNUSED)
{
GsmDBusClient *dbus_client = (GsmDBusClient *) client;
- DBusMessage *message;
- DBusMessageIter iter;
- gboolean ret;
-
- ret = FALSE;
-
- /* unicast the signal to only the registered bus name */
- message = dbus_message_new_signal (gsm_client_peek_id (client),
- SM_DBUS_CLIENT_PRIVATE_INTERFACE,
- "EndSession");
- if (message == NULL) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send EndSession message");
- goto out;
- }
- if (!dbus_message_set_destination (message, dbus_client->bus_name)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send EndSession message");
- goto out;
- }
-
- dbus_message_iter_init_append (message, &iter);
- dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &flags);
- if (!dbus_connection_send (dbus_client->connection, message, NULL)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send EndSession message");
- goto out;
- }
-
- ret = TRUE;
-
- out:
- if (message != NULL) {
- dbus_message_unref (message);
- }
- return ret;
+ gsm_exported_client_private_emit_end_session (dbus_client->skeleton, flags);
+ return TRUE;
}
static gboolean
dbus_client_cancel_end_session (GsmClient *client,
- GError **error)
+ GError **error G_GNUC_UNUSED)
{
- GsmDBusClient *dbus_client = (GsmDBusClient *) client;
- DBusMessage *message;
- gboolean ret = FALSE;
-
- /* unicast the signal to only the registered bus name */
- message = dbus_message_new_signal (gsm_client_peek_id (client),
- SM_DBUS_CLIENT_PRIVATE_INTERFACE,
- "CancelEndSession");
- if (message == NULL) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send CancelEndSession message");
- goto out;
- }
- if (!dbus_message_set_destination (message, dbus_client->bus_name)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send CancelEndSession message");
- goto out;
- }
-
- if (!dbus_connection_send (dbus_client->connection, message, NULL)) {
- g_set_error (error,
- GSM_CLIENT_ERROR,
- GSM_CLIENT_ERROR_NOT_REGISTERED,
- "Unable to send CancelEndSession message");
- goto out;
- }
-
- ret = TRUE;
-
- out:
- if (message != NULL) {
- dbus_message_unref (message);
- }
-
- return ret;
-}
-
-static void
-gsm_dbus_client_dispose (GObject *object)
-{
- GsmDBusClient *client;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GSM_IS_DBUS_CLIENT (object));
-
- client = GSM_DBUS_CLIENT (object);
-
- dbus_connection_remove_filter (client->connection, client_dbus_filter_function, client);
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
- G_OBJECT_CLASS (gsm_dbus_client_parent_class)->dispose (object);
+ gsm_exported_client_private_emit_cancel_end_session (dbus_client->skeleton);
+ return TRUE;
}
static void
@@ -659,7 +394,6 @@ gsm_dbus_client_class_init (GsmDBusClientClass *klass)
object_class->constructor = gsm_dbus_client_constructor;
object_class->get_property = gsm_dbus_client_get_property;
object_class->set_property = gsm_dbus_client_set_property;
- object_class->dispose = gsm_dbus_client_dispose;
client_class->impl_save = dbus_client_save;
client_class->impl_stop = dbus_client_stop;
diff --git a/mate-session/gsm-dbus-client.h b/mate-session/gsm-dbus-client.h
index a1007cc..a67afe9 100644
--- a/mate-session/gsm-dbus-client.h
+++ b/mate-session/gsm-dbus-client.h
@@ -28,19 +28,19 @@ G_BEGIN_DECLS
#define GSM_TYPE_DBUS_CLIENT (gsm_dbus_client_get_type ())
G_DECLARE_FINAL_TYPE (GsmDBusClient, gsm_dbus_client, GSM, DBUS_CLIENT, GsmClient)
-typedef enum
-{
- GSM_DBUS_CLIENT_ERROR_GENERAL = 0,
- GSM_DBUS_CLIENT_ERROR_NOT_CLIENT,
- GSM_DBUS_CLIENT_NUM_ERRORS
-} GsmDBusClientError;
-
-#define GSM_DBUS_CLIENT_ERROR gsm_dbus_client_error_quark ()
-
-GType gsm_dbus_client_error_get_type (void);
-#define GSM_DBUS_CLIENT_TYPE_ERROR (gsm_dbus_client_error_get_type ())
-
-GQuark gsm_dbus_client_error_quark (void);
+//typedef enum
+//{
+// GSM_DBUS_CLIENT_ERROR_GENERAL = 0,
+// GSM_DBUS_CLIENT_ERROR_NOT_CLIENT,
+// GSM_DBUS_CLIENT_NUM_ERRORS
+//} GsmDBusClientError;
+
+//#define GSM_DBUS_CLIENT_ERROR gsm_dbus_client_error_quark ()
+//
+//GType gsm_dbus_client_error_get_type (void);
+//#define GSM_DBUS_CLIENT_TYPE_ERROR (gsm_dbus_client_error_get_type ())
+
+//GQuark gsm_dbus_client_error_quark (void);
GsmClient * gsm_dbus_client_new (const char *startup_id,
const char *bus_name);
diff --git a/mate-session/gsm-inhibitor.c b/mate-session/gsm-inhibitor.c
index 6129ddb..1d99850 100644
--- a/mate-session/gsm-inhibitor.c
+++ b/mate-session/gsm-inhibitor.c
@@ -26,11 +26,9 @@
#include <time.h>
#include <unistd.h>
-#include <dbus/dbus-glib.h>
-
#include "gsm-inhibitor.h"
-#include "gsm-inhibitor-glue.h"
#include "gsm-util.h"
+#include "org.gnome.SessionManager.Inhibitor.h"
static guint32 inhibitor_serial = 1;
@@ -45,7 +43,8 @@ struct _GsmInhibitor
guint flags;
guint toplevel_xid;
guint cookie;
- DBusGConnection *connection;
+ GDBusConnection *connection;
+ GsmExportedInhibitor *skeleton;
};
enum {
@@ -61,37 +60,96 @@ enum {
G_DEFINE_TYPE (GsmInhibitor, gsm_inhibitor, G_TYPE_OBJECT)
+#define GSM_INHIBITOR_DBUS_IFACE "org.gnome.SessionManager.Inhibitor"
+
+static const GDBusErrorEntry gsm_inhibitor_error_entries[] = {
+ { GSM_INHIBITOR_ERROR_GENERAL, GSM_INHIBITOR_DBUS_IFACE ".GeneralError" },
+ { GSM_INHIBITOR_ERROR_NOT_SET, GSM_INHIBITOR_DBUS_IFACE ".NotSet" }
+};
+
GQuark
gsm_inhibitor_error_quark (void)
{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("gsm_inhibitor_error");
- }
+ static volatile gsize quark_volatile = 0;
- return ret;
+ g_dbus_error_register_error_domain ("gsm_inhibitor_error",
+ &quark_volatile,
+ gsm_inhibitor_error_entries,
+ G_N_ELEMENTS (gsm_inhibitor_error_entries));
+ return quark_volatile;
}
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
+static gboolean
+gsm_inhibitor_get_app_id (GsmExportedInhibitor *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmInhibitor *inhibitor)
+{
+ const gchar *id;
+
+ if (inhibitor->app_id != NULL) {
+ id = inhibitor->app_id;
+ } else {
+ id = "";
+ }
+
+ gsm_exported_inhibitor_complete_get_app_id (skeleton, invocation, id);
+
+ return TRUE;
+}
-GType
-gsm_inhibitor_error_get_type (void)
+static gboolean
+gsm_inhibitor_get_client_id (GsmExportedInhibitor *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmInhibitor *inhibitor)
{
- static GType etype = 0;
+ /* object paths are not allowed to be NULL or blank */
+ if (IS_STRING_EMPTY (inhibitor->client_id)) {
+ g_dbus_method_invocation_return_error (invocation,
+ GSM_INHIBITOR_ERROR,
+ GSM_INHIBITOR_ERROR_NOT_SET,
+ "Value is not set");
+ return TRUE;
+ }
+
+ gsm_exported_inhibitor_complete_get_client_id (skeleton, invocation, inhibitor->client_id);
+ g_debug ("GsmInhibitor: getting client-id = '%s'", inhibitor->client_id);
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY (GSM_INHIBITOR_ERROR_GENERAL, "GeneralError"),
- ENUM_ENTRY (GSM_INHIBITOR_ERROR_NOT_SET, "NotSet"),
- { 0, 0, 0 }
- };
+ return TRUE;
+}
- g_assert (GSM_INHIBITOR_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
+static gboolean
+gsm_inhibitor_get_reason (GsmExportedInhibitor *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmInhibitor *inhibitor)
+{
+ const gchar *reason;
- etype = g_enum_register_static ("GsmInhibitorError", values);
+ if (inhibitor->reason != NULL) {
+ reason = inhibitor->reason;
+ } else {
+ reason = "";
}
- return etype;
+ gsm_exported_inhibitor_complete_get_reason (skeleton, invocation, reason);
+ return TRUE;
+}
+
+static gboolean
+gsm_inhibitor_get_flags (GsmExportedInhibitor *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmInhibitor *inhibitor)
+{
+ gsm_exported_inhibitor_complete_get_flags (skeleton, invocation, inhibitor->flags);
+ return TRUE;
+}
+
+static gboolean
+gsm_inhibitor_get_toplevel_xid (GsmExportedInhibitor *skeleton,
+ GDBusMethodInvocation *invocation,
+ GsmInhibitor *inhibitor)
+{
+ gsm_exported_inhibitor_complete_get_toplevel_xid (skeleton, invocation, inhibitor->toplevel_xid);
+ return TRUE;
}
static guint32
@@ -112,18 +170,39 @@ static gboolean
register_inhibitor (GsmInhibitor *inhibitor)
{
GError *error;
+ GsmExportedInhibitor *skeleton;
error = NULL;
- inhibitor->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (inhibitor->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting session bus: %s", error->message);
- g_error_free (error);
- }
+ inhibitor->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;
}
- dbus_g_connection_register_g_object (inhibitor->connection, inhibitor->id, G_OBJECT (inhibitor));
+ skeleton = gsm_exported_inhibitor_skeleton_new ();
+ inhibitor->skeleton = skeleton;
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ inhibitor->connection,
+ inhibitor->id, &error);
+
+ if (error != NULL) {
+ g_critical ("error exporting inhibitor on session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_signal_connect (skeleton, "handle-get-app-id",
+ G_CALLBACK (gsm_inhibitor_get_app_id), inhibitor);
+ g_signal_connect (skeleton, "handle-get-client-id",
+ G_CALLBACK (gsm_inhibitor_get_client_id), inhibitor);
+ g_signal_connect (skeleton, "handle-get-flags",
+ G_CALLBACK (gsm_inhibitor_get_flags), inhibitor);
+ g_signal_connect (skeleton, "handle-get-reason",
+ G_CALLBACK (gsm_inhibitor_get_reason), inhibitor);
+ g_signal_connect (skeleton, "handle-get-toplevel-xid",
+ G_CALLBACK (gsm_inhibitor_get_toplevel_xid), inhibitor);
return TRUE;
}
@@ -151,7 +230,7 @@ gsm_inhibitor_constructor (GType type,
}
static void
-gsm_inhibitor_init (GsmInhibitor *inhibitor)
+gsm_inhibitor_init (GsmInhibitor *inhibitor G_GNUC_UNUSED)
{
}
@@ -261,85 +340,6 @@ gsm_inhibitor_peek_bus_name (GsmInhibitor *inhibitor)
return inhibitor->bus_name;
}
-gboolean
-gsm_inhibitor_get_app_id (GsmInhibitor *inhibitor,
- char **id,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_INHIBITOR (inhibitor), FALSE);
-
- if (inhibitor->app_id != NULL) {
- *id = g_strdup (inhibitor->app_id);
- } else {
- *id = g_strdup ("");
- }
-
- return TRUE;
-}
-
-gboolean
-gsm_inhibitor_get_client_id (GsmInhibitor *inhibitor,
- char **id,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_INHIBITOR (inhibitor), FALSE);
-
- /* object paths are not allowed to be NULL or blank */
- if (IS_STRING_EMPTY (inhibitor->client_id)) {
- g_set_error (error,
- GSM_INHIBITOR_ERROR,
- GSM_INHIBITOR_ERROR_NOT_SET,
- "Value is not set");
- return FALSE;
- }
-
- *id = g_strdup (inhibitor->client_id);
-
- g_debug ("GsmInhibitor: getting client-id = '%s'", *id);
-
- return TRUE;
-}
-
-gboolean
-gsm_inhibitor_get_reason (GsmInhibitor *inhibitor,
- char **reason,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_INHIBITOR (inhibitor), FALSE);
-
- if (inhibitor->reason != NULL) {
- *reason = g_strdup (inhibitor->reason);
- } else {
- *reason = g_strdup ("");
- }
-
- return TRUE;
-}
-
-gboolean
-gsm_inhibitor_get_flags (GsmInhibitor *inhibitor,
- guint *flags,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_INHIBITOR (inhibitor), FALSE);
-
- *flags = inhibitor->flags;
-
- return TRUE;
-}
-
-gboolean
-gsm_inhibitor_get_toplevel_xid (GsmInhibitor *inhibitor,
- guint *xid,
- GError **error)
-{
- g_return_val_if_fail (GSM_IS_INHIBITOR (inhibitor), FALSE);
-
- *xid = inhibitor->toplevel_xid;
-
- return TRUE;
-}
-
const char *
gsm_inhibitor_peek_id (GsmInhibitor *inhibitor)
{
@@ -483,6 +483,14 @@ gsm_inhibitor_finalize (GObject *object)
g_free (inhibitor->client_id);
g_free (inhibitor->reason);
+ if (inhibitor->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (inhibitor->skeleton),
+ inhibitor->connection);
+ g_clear_object (&inhibitor->skeleton);
+ }
+
+ g_clear_object (&inhibitor->connection);
+
G_OBJECT_CLASS (gsm_inhibitor_parent_class)->finalize (object);
}
@@ -552,8 +560,6 @@ gsm_inhibitor_class_init (GsmInhibitorClass *klass)
0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- dbus_g_object_type_install_info (GSM_TYPE_INHIBITOR, &dbus_glib_gsm_inhibitor_object_info);
- dbus_g_error_domain_register (GSM_INHIBITOR_ERROR, NULL, GSM_INHIBITOR_TYPE_ERROR);
}
GsmInhibitor *
diff --git a/mate-session/gsm-inhibitor.h b/mate-session/gsm-inhibitor.h
index 653f717..af9e796 100644
--- a/mate-session/gsm-inhibitor.h
+++ b/mate-session/gsm-inhibitor.h
@@ -28,7 +28,6 @@ G_BEGIN_DECLS
#define GSM_TYPE_INHIBITOR (gsm_inhibitor_get_type ())
#define GSM_INHIBITOR_ERROR (gsm_inhibitor_error_quark ())
-#define GSM_INHIBITOR_TYPE_ERROR (gsm_inhibitor_error_get_type ())
G_DECLARE_FINAL_TYPE (GsmInhibitor, gsm_inhibitor, GSM, INHIBITOR, GObject)
typedef enum {
@@ -45,8 +44,6 @@ typedef enum
GSM_INHIBITOR_NUM_ERRORS
} GsmInhibitorError;
-GType gsm_inhibitor_error_get_type (void);
-
GQuark gsm_inhibitor_error_quark (void);
GsmInhibitor * gsm_inhibitor_new (const char *app_id,
@@ -71,23 +68,6 @@ guint gsm_inhibitor_peek_cookie (GsmInhibitor *inhibitor);
guint gsm_inhibitor_peek_flags (GsmInhibitor *inhibitor);
guint gsm_inhibitor_peek_toplevel_xid (GsmInhibitor *inhibitor);
-/* exported to bus */
-gboolean gsm_inhibitor_get_app_id (GsmInhibitor *inhibitor,
- char **id,
- GError **error);
-gboolean gsm_inhibitor_get_client_id (GsmInhibitor *inhibitor,
- char **id,
- GError **error);
-gboolean gsm_inhibitor_get_reason (GsmInhibitor *inhibitor,
- char **reason,
- GError **error);
-gboolean gsm_inhibitor_get_flags (GsmInhibitor *inhibitor,
- guint *flags,
- GError **error);
-gboolean gsm_inhibitor_get_toplevel_xid (GsmInhibitor *inhibitor,
- guint *xid,
- GError **error);
-
G_END_DECLS
#endif /* __GSM_INHIBITOR_H__ */
diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
index 9b0200f..e701f74 100644
--- a/mate-session/gsm-manager.c
+++ b/mate-session/gsm-manager.c
@@ -35,15 +35,13 @@
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
#include <gtk/gtk.h> /* for logout dialog */
#include <gio/gio.h> /* for gsettings */
#include <gdk/gdkx.h>
#include "gsm-manager.h"
-#include "gsm-manager-glue.h"
+#include "org.gnome.SessionManager.h"
#include "gsm-store.h"
#include "gsm-inhibitor.h"
@@ -68,6 +66,7 @@
#define GSM_MANAGER_DBUS_PATH "/org/gnome/SessionManager"
#define GSM_MANAGER_DBUS_NAME "org.gnome.SessionManager"
+#define GSM_MANAGER_DBUS_IFACE "org.gnome.SessionManager"
#define GSM_MANAGER_PHASE_TIMEOUT 30 /* seconds */
@@ -147,8 +146,10 @@ typedef struct {
const char *renderer;
DBusGProxy *bus_proxy;
- DBusGConnection *connection;
+ GDBusConnection *connection;
+ GsmExportedManager *skeleton;
gboolean dbus_disconnected : 1;
+ guint name_owner_id;
} GsmManagerPrivate;
enum {
@@ -190,48 +191,32 @@ static gpointer manager_object = NULL;
G_DEFINE_TYPE_WITH_PRIVATE (GsmManager, gsm_manager, G_TYPE_OBJECT)
+static const GDBusErrorEntry gsm_manager_error_entries[] = {
+ { GSM_MANAGER_ERROR_GENERAL, GSM_MANAGER_DBUS_IFACE ".GeneralError" },
+ { GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION, GSM_MANAGER_DBUS_IFACE ".NotInInitialization" },
+ { GSM_MANAGER_ERROR_NOT_IN_RUNNING, GSM_MANAGER_DBUS_IFACE ".NotInRunning" },
+ { GSM_MANAGER_ERROR_ALREADY_REGISTERED, GSM_MANAGER_DBUS_IFACE ".AlreadyRegistered" },
+ { GSM_MANAGER_ERROR_NOT_REGISTERED, GSM_MANAGER_DBUS_IFACE ".NotRegistered" },
+ { GSM_MANAGER_ERROR_INVALID_OPTION, GSM_MANAGER_DBUS_IFACE ".InvalidOption" },
+ { GSM_MANAGER_ERROR_LOCKED_DOWN, GSM_MANAGER_DBUS_IFACE ".LockedDown" }
+};
+
GQuark
gsm_manager_error_quark (void)
{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("gsm_manager_error");
- }
+ static volatile gsize quark_volatile = 0;
- return ret;
-}
-
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-GType
-gsm_manager_error_get_type (void)
-{
- static GType etype = 0;
-
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY (GSM_MANAGER_ERROR_GENERAL, "GeneralError"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION, "NotInInitialization"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_NOT_IN_RUNNING, "NotInRunning"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_ALREADY_REGISTERED, "AlreadyRegistered"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_NOT_REGISTERED, "NotRegistered"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_INVALID_OPTION, "InvalidOption"),
- ENUM_ENTRY (GSM_MANAGER_ERROR_LOCKED_DOWN, "LockedDown"),
- { 0, 0, 0 }
- };
-
- g_assert (GSM_MANAGER_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
-
- etype = g_enum_register_static ("GsmManagerError", values);
- }
-
- return etype;
+ g_dbus_error_register_error_domain ("gsm_manager_error",
+ &quark_volatile,
+ gsm_manager_error_entries,
+ G_N_ELEMENTS (gsm_manager_error_entries));
+ return quark_volatile;
}
static gboolean
-_debug_client (const char *id,
+_debug_client (const char *id G_GNUC_UNUSED,
GsmClient *client,
- GsmManager *manager)
+ GsmManager *manager G_GNUC_UNUSED)
{
g_debug ("GsmManager: Client %s", gsm_client_peek_id (client));
return FALSE;
@@ -248,9 +233,9 @@ debug_clients (GsmManager *manager)
}
static gboolean
-_debug_inhibitor (const char *id,
+_debug_inhibitor (const char *id G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
- GsmManager *manager)
+ GsmManager *manager G_GNUC_UNUSED)
{
g_debug ("GsmManager: Inhibitor app:%s client:%s bus-name:%s reason:%s",
gsm_inhibitor_peek_app_id (inhibitor),
@@ -272,7 +257,7 @@ debug_inhibitors (GsmManager *manager)
}
static gboolean
-_find_by_cookie (const char *id,
+_find_by_cookie (const char *id G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
guint *cookie_ap)
{
@@ -284,7 +269,7 @@ _find_by_cookie (const char *id,
}
static gboolean
-_find_by_startup_id (const char *id,
+_find_by_startup_id (const char *id G_GNUC_UNUSED,
GsmClient *client,
const char *startup_id_a)
{
@@ -794,7 +779,7 @@ _client_end_session (GsmClient *client,
}
static gboolean
-_client_end_session_helper (const char *id,
+_client_end_session_helper (const char *id G_GNUC_UNUSED,
GsmClient *client,
ClientEndSessionData *data)
{
@@ -870,9 +855,9 @@ do_phase_end_session_part_2 (GsmManager *manager)
}
static gboolean
-_client_stop (const char *id,
+_client_stop (const char *id G_GNUC_UNUSED,
GsmClient *client,
- gpointer user_data)
+ gpointer user_data G_GNUC_UNUSED)
{
gboolean ret;
GError *error;
@@ -955,7 +940,7 @@ do_phase_exit (GsmManager *manager)
}
static gboolean
-_client_query_end_session (const char *id,
+_client_query_end_session (const char *id G_GNUC_UNUSED,
GsmClient *client,
ClientEndSessionData *data)
{
@@ -980,7 +965,7 @@ _client_query_end_session (const char *id,
}
static gboolean
-inhibitor_has_flag (gpointer key,
+inhibitor_has_flag (gpointer key G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
gpointer data)
{
@@ -1037,9 +1022,9 @@ gsm_manager_is_idle_inhibited (GsmManager *manager)
}
static gboolean
-_client_cancel_end_session (const char *id,
+_client_cancel_end_session (const char *id G_GNUC_UNUSED,
GsmClient *client,
- GsmManager *manager)
+ GsmManager *manager G_GNUC_UNUSED)
{
gboolean res;
GError *error;
@@ -1055,9 +1040,9 @@ _client_cancel_end_session (const char *id,
}
static gboolean
-inhibitor_is_jit (gpointer key,
+inhibitor_is_jit (gpointer key G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
- GsmManager *manager)
+ GsmManager *manager G_GNUC_UNUSED)
{
gboolean matches;
const char *id;
@@ -1607,7 +1592,7 @@ start_phase (GsmManager *manager)
do_phase_startup (manager);
break;
case GSM_MANAGER_PHASE_RUNNING:
- g_signal_emit (manager, signals[SESSION_RUNNING], 0);
+ gsm_exported_manager_emit_session_running (manager->priv->skeleton);
update_idle (manager);
break;
case GSM_MANAGER_PHASE_QUERY_END_SESSION:
@@ -1626,7 +1611,7 @@ start_phase (GsmManager *manager)
}
static gboolean
-_debug_app_for_phase (const char *id,
+_debug_app_for_phase (const char *id G_GNUC_UNUSED,
GsmApp *app,
gpointer data)
{
@@ -1687,7 +1672,7 @@ _gsm_manager_set_renderer (GsmManager *manager,
}
static gboolean
-_app_has_app_id (const char *id,
+_app_has_app_id (const char *id G_GNUC_UNUSED,
GsmApp *app,
const char *app_id_a)
{
@@ -1712,7 +1697,7 @@ find_app_for_app_id (GsmManager *manager,
}
static gboolean
-inhibitor_has_client_id (gpointer key,
+inhibitor_has_client_id (gpointer key G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
const char *client_id_a)
{
@@ -1735,7 +1720,7 @@ inhibitor_has_client_id (gpointer key,
}
static gboolean
-_app_has_startup_id (const char *id,
+_app_has_startup_id (const char *id G_GNUC_UNUSED,
GsmApp *app,
const char *startup_id_a)
{
@@ -1908,7 +1893,7 @@ typedef struct {
} RemoveClientData;
static gboolean
-_disconnect_dbus_client (const char *id,
+_disconnect_dbus_client (const char *id G_GNUC_UNUSED,
GsmClient *client,
RemoveClientData *data)
{
@@ -1970,7 +1955,7 @@ remove_clients_for_connection (GsmManager *manager,
}
static gboolean
-inhibitor_has_bus_name (gpointer key,
+inhibitor_has_bus_name (gpointer key G_GNUC_UNUSED,
GsmInhibitor *inhibitor,
RemoveClientData *data)
{
@@ -2013,8 +1998,8 @@ remove_inhibitors_for_connection (GsmManager *manager,
}
static void
-bus_name_owner_changed (DBusGProxy *bus_proxy,
- const char *service_name,
+bus_name_owner_changed (DBusGProxy *bus_proxy G_GNUC_UNUSED,
+ const char *service_name G_GNUC_UNUSED,
const char *old_service_name,
const char *new_service_name,
GsmManager *manager)
@@ -2034,7 +2019,7 @@ bus_name_owner_changed (DBusGProxy *bus_proxy,
}
static DBusHandlerResult
-gsm_manager_bus_filter (DBusConnection *connection,
+gsm_manager_bus_filter (DBusConnection *connection G_GNUC_UNUSED,
DBusMessage *message,
void *user_data)
{
@@ -2117,7 +2102,7 @@ gsm_manager_set_failsafe (GsmManager *manager,
}
static gboolean
-_client_has_startup_id (const char *id,
+_client_has_startup_id (const char *id G_GNUC_UNUSED,
GsmClient *client,
const char *startup_id_a)
{
@@ -2172,13 +2157,13 @@ on_xsmp_client_register_request (GsmXSMPClient *client,
if (IS_STRING_EMPTY (*id)) {
new_id = gsm_util_generate_startup_id ();
} else {
- GsmClient *client;
+ GsmClient *c;
- client = (GsmClient *)gsm_store_find (priv->clients,
+ c = (GsmClient *)gsm_store_find (priv->clients,
(GsmStoreFunc)_client_has_startup_id,
*id);
/* We can't have two clients with the same id. */
- if (client != NULL) {
+ if (c != NULL) {
goto out;
}
@@ -2393,7 +2378,7 @@ on_client_end_session_response (GsmClient *client,
}
static void
-on_xsmp_client_logout_request (GsmXSMPClient *client,
+on_xsmp_client_logout_request (GsmXSMPClient *client G_GNUC_UNUSED,
gboolean show_dialog,
GsmManager *manager)
{
@@ -2442,7 +2427,7 @@ on_store_client_added (GsmStore *store,
G_CALLBACK (on_client_end_session_response),
manager);
- g_signal_emit (manager, signals [CLIENT_ADDED], 0, id);
+ gsm_exported_manager_emit_client_added (manager->priv->skeleton, id);
/* FIXME: disconnect signal handler */
}
@@ -2453,7 +2438,7 @@ on_store_client_removed (GsmStore *store,
{
g_debug ("GsmManager: Client removed: %s", id);
- g_signal_emit (manager, signals [CLIENT_REMOVED], 0, id);
+ gsm_exported_manager_emit_client_removed (manager->priv->skeleton, id);
}
static void
@@ -2575,7 +2560,7 @@ on_store_inhibitor_added (GsmStore *store,
GsmManager *manager)
{
g_debug ("GsmManager: Inhibitor added: %s", id);
- g_signal_emit (manager, signals [INHIBITOR_ADDED], 0, id);
+ gsm_exported_manager_emit_inhibitor_added (manager->priv->skeleton, id);
update_idle (manager);
}
@@ -2585,7 +2570,7 @@ on_store_inhibitor_removed (GsmStore *store,
GsmManager *manager)
{
g_debug ("GsmManager: Inhibitor removed: %s", id);
- g_signal_emit (manager, signals [INHIBITOR_REMOVED], 0, id);
+ gsm_exported_manager_emit_inhibitor_removed (manager->priv->skeleton, id);
update_idle (manager);
}
@@ -2646,6 +2631,20 @@ gsm_manager_dispose (GObject *object)
g_object_unref (priv->settings_screensaver);
priv->settings_screensaver = NULL;
}
+
+ if (manager->priv->name_owner_id != 0) {
+ g_dbus_connection_signal_unsubscribe (manager->priv->connection, manager->priv->name_owner_id);;
+ manager->priv->name_owner_id = 0;
+ }
+
+ if (manager->priv->skeleton != NULL) {
+ g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (manager->priv->skeleton),
+ manager->priv->connection);
+ g_clear_object (&manager->priv->skeleton);
+ }
+
+ g_clear_object (&manager->priv->connection);
+
G_OBJECT_CLASS (gsm_manager_parent_class)->dispose (object);
}
@@ -2671,67 +2670,6 @@ gsm_manager_class_init (GsmManagerClass *klass)
G_TYPE_NONE,
1, G_TYPE_STRING);
- signals [SESSION_RUNNING] =
- g_signal_new ("session-running",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, session_running),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- signals [SESSION_OVER] =
- g_signal_new ("session-over",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, session_over),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- signals [CLIENT_ADDED] =
- g_signal_new ("client-added",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, client_added),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1, DBUS_TYPE_G_OBJECT_PATH);
- signals [CLIENT_REMOVED] =
- g_signal_new ("client-removed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, client_removed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1, DBUS_TYPE_G_OBJECT_PATH);
- signals [INHIBITOR_ADDED] =
- g_signal_new ("inhibitor-added",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, inhibitor_added),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1, DBUS_TYPE_G_OBJECT_PATH);
- signals [INHIBITOR_REMOVED] =
- g_signal_new ("inhibitor-removed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmManagerClass, inhibitor_removed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1, DBUS_TYPE_G_OBJECT_PATH);
-
g_object_class_install_property (object_class,
PROP_FAILSAFE,
g_param_spec_boolean ("failsafe",
@@ -2754,9 +2692,6 @@ gsm_manager_class_init (GsmManagerClass *klass)
NULL,
NULL,
G_PARAM_READABLE));
-
- dbus_g_object_type_install_info (GSM_TYPE_MANAGER, &dbus_glib_gsm_manager_object_info);
- dbus_g_error_domain_register (GSM_MANAGER_ERROR, NULL, GSM_MANAGER_TYPE_ERROR);
}
static void
diff --git a/mate-session/gsm-presence.c b/mate-session/gsm-presence.c
index 1e1d602..148519a 100644
--- a/mate-session/gsm-presence.c
+++ b/mate-session/gsm-presence.c
@@ -26,13 +26,12 @@
#include <time.h>
#include <unistd.h>
-#include <dbus/dbus-glib.h>
-
#include "gs-idle-monitor.h"
#include "gsm-presence.h"
-#include "gsm-presence-glue.h"
+#include "org.gnome.SessionManager.Presence.h"
+#define GSM_PRESENCE_DBUS_IFACE "org.gnome.SessionManager.Presence"
#define GSM_PRESENCE_DBUS_PATH "/org/gnome/SessionManager/Presence"
#define GS_NAME "org.mate.ScreenSaver"
@@ -50,59 +49,92 @@ typedef struct {
guint idle_watch_id;
guint idle_timeout;
gboolean screensaver_active;
- DBusGConnection *bus_connection;
- DBusGProxy *bus_proxy;
- DBusGProxy *screensaver_proxy;
+ GDBusConnection *connection;
+ GDBusProxy *screensaver_proxy;
+
+ GsmExportedPresence *skeleton;
} GsmPresencePrivate;
enum {
PROP_0,
- PROP_STATUS,
- PROP_STATUS_TEXT,
PROP_IDLE_ENABLED,
PROP_IDLE_TIMEOUT,
};
enum {
STATUS_CHANGED,
- STATUS_TEXT_CHANGED,
LAST_SIGNAL
};
-static guint signals [LAST_SIGNAL] = { 0 };
+static guint signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE_WITH_PRIVATE (GsmPresence, gsm_presence, G_TYPE_OBJECT);
+static const GDBusErrorEntry gsm_presence_error_entries[] = {
+ { GSM_PRESENCE_ERROR_GENERAL, GSM_PRESENCE_DBUS_IFACE ".GeneralError" }
+};
+
GQuark
gsm_presence_error_quark (void)
{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("gsm_presence_error");
- }
+ static volatile gsize quark_volatile = 0;
- return ret;
+ g_dbus_error_register_error_domain ("gsm_presence_error",
+ &quark_volatile,
+ gsm_presence_error_entries,
+ G_N_ELEMENTS (gsm_presence_error_entries));
+ return quark_volatile;
}
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-GType
-gsm_presence_error_get_type (void)
+static void idle_became_active_cb (GSIdleMonitor *idle_monitor,
+ guint id,
+ gpointer user_data);
+static void
+gsm_presence_set_status (GsmPresence *presence,
+ guint status)
{
- static GType etype = 0;
-
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY (GSM_PRESENCE_ERROR_GENERAL, "GeneralError"),
- { 0, 0, 0 }
- };
-
- g_assert (GSM_PRESENCE_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
-
- etype = g_enum_register_static ("GsmPresenceError", values);
- }
+ GsmPresencePrivate *priv;
+
+ priv = gsm_presence_get_instance_private (presence);
+ if (status != priv->status) {
+ priv->status = status;
+ gsm_exported_presence_set_status (priv->skeleton, status);
+ gsm_exported_presence_emit_status_changed (priv->skeleton, priv->status);
+ g_signal_emit (presence, signals[STATUS_CHANGED], 0, priv->status);
+ }
+}
- return etype;
+static gboolean
+gsm_presence_set_status_text (GsmPresence *presence,
+ const char *status_text,
+ GError **error)
+{
+ g_return_val_if_fail (GSM_IS_PRESENCE (presence), FALSE);
+ GsmPresencePrivate *priv;
+
+ priv = gsm_presence_get_instance_private (presence);
+
+ g_free (priv->status_text);
+ priv->status_text = NULL;
+
+ /* check length */
+ if (status_text != NULL && strlen (status_text) > MAX_STATUS_TEXT) {
+ g_set_error (error,
+ GSM_PRESENCE_ERROR,
+ GSM_PRESENCE_ERROR_GENERAL,
+ "Status text too long");
+ return FALSE;
+ }
+
+ if (status_text != NULL) {
+ priv->status_text = g_strdup (status_text);
+ } else {
+ priv->status_text = g_strdup ("");
+ }
+
+ gsm_exported_presence_set_status_text (priv->skeleton, priv->status_text);
+ gsm_exported_presence_emit_status_text_changed (priv->skeleton, priv->status_text);
+ return TRUE;
}
static void
@@ -122,7 +154,7 @@ set_session_idle (GsmPresence *presence,
/* save current status */
priv->saved_status = priv->status;
- gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE, NULL);
+ gsm_presence_set_status (presence, GSM_PRESENCE_STATUS_IDLE);
} else {
if (priv->status != GSM_PRESENCE_STATUS_IDLE) {
g_debug ("GsmPresence: already not idle, ignoring");
@@ -130,14 +162,14 @@ set_session_idle (GsmPresence *presence,
}
/* restore saved status */
- gsm_presence_set_status (presence, priv->saved_status, NULL);
+ gsm_presence_set_status (presence, priv->saved_status);
priv->saved_status = GSM_PRESENCE_STATUS_AVAILABLE;
}
}
static gboolean
-on_idle_timeout (GSIdleMonitor *monitor,
- guint id,
+on_idle_timeout (GSIdleMonitor *monitor G_GNUC_UNUSED,
+ guint id G_GNUC_UNUSED,
gboolean condition,
GsmPresence *presence)
{
@@ -179,14 +211,22 @@ reset_idle_watch (GsmPresence *presence)
}
static void
-on_screensaver_active_changed (DBusGProxy *proxy,
- gboolean is_active,
- GsmPresence *presence)
+on_screensaver_dbus_signal (GDBusProxy *proxy G_GNUC_UNUSED,
+ gchar *sender_name G_GNUC_UNUSED,
+ gchar *signal_name G_GNUC_UNUSED,
+ GVariant *parameters,
+ GsmPresence *presence)
{
GsmPresencePrivate *priv;
-
- g_debug ("screensaver status changed: %d", is_active);
priv = gsm_presence_get_instance_private (presence);
+ gboolean is_active;
+
+ if (g_strcmp0 (signal_name, "ActiveChanged") != 0) {
+ return;
+ }
+
+ g_variant_get (parameters, "(b)", &is_active);
+
if (priv->screensaver_active != is_active) {
priv->screensaver_active = is_active;
reset_idle_watch (presence);
@@ -195,70 +235,54 @@ on_screensaver_active_changed (DBusGProxy *proxy,
}
static void
-on_screensaver_proxy_destroy (GObject *proxy,
- GsmPresence *presence)
+on_screensaver_name_owner_changed (GDBusProxy *screensaver_proxy,
+ GParamSpec *pspec G_GNUC_UNUSED,
+ GsmPresence *presence)
{
GsmPresencePrivate *priv;
+ gchar *name_owner;
g_warning ("Detected that screensaver has left the bus");
priv = gsm_presence_get_instance_private (presence);
- priv->screensaver_proxy = NULL;
- priv->screensaver_active = FALSE;
- set_session_idle (presence, FALSE);
+ name_owner = g_dbus_proxy_get_name_owner (screensaver_proxy);
+ if (name_owner == NULL) {
+ g_debug ("Detected that screensaver has left the bus");
+
+ priv->screensaver_proxy = NULL;
+ priv->screensaver_active = FALSE;
+ set_session_idle (presence, FALSE);
+ }
+
+ g_free (name_owner);
reset_idle_watch (presence);
}
-static void
-on_bus_name_owner_changed (DBusGProxy *bus_proxy,
- const char *service_name,
- const char *old_service_name,
- const char *new_service_name,
- GsmPresence *presence)
+static gboolean
+gsm_presence_set_status_text_dbus (GsmExportedPresence *skeleton,
+ GDBusMethodInvocation *invocation,
+ gchar *status_text,
+ GsmPresence *presence)
{
- GError *error;
- GsmPresencePrivate *priv;
-
- priv = gsm_presence_get_instance_private (presence);
+ GError *error = NULL;
- if (service_name == NULL
- || strcmp (service_name, GS_NAME) != 0) {
- /* ignore */
- return;
+ if (gsm_presence_set_status_text (presence, status_text, &error)) {
+ gsm_exported_presence_complete_set_status_text (skeleton, invocation);
+ } else {
+ g_dbus_method_invocation_take_error (invocation, error);
}
+ return TRUE;
+}
- if (strlen (new_service_name) == 0
- && strlen (old_service_name) > 0) {
- /* service removed */
- /* let destroy signal handle this? */
- } else if (strlen (old_service_name) == 0
- && strlen (new_service_name) > 0) {
- /* service added */
- error = NULL;
- priv->screensaver_proxy = dbus_g_proxy_new_for_name_owner (priv->bus_connection,
- GS_NAME,
- GS_PATH,
- GS_INTERFACE,
- &error);
- if (priv->screensaver_proxy != NULL) {
- g_signal_connect (priv->screensaver_proxy,
- "destroy",
- G_CALLBACK (on_screensaver_proxy_destroy),
- presence);
- dbus_g_proxy_add_signal (priv->screensaver_proxy,
- "ActiveChanged",
- G_TYPE_BOOLEAN,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->screensaver_proxy,
- "ActiveChanged",
- G_CALLBACK (on_screensaver_active_changed),
- presence,
- NULL);
- } else {
- g_warning ("Unable to get screensaver proxy: %s", error->message);
- g_error_free (error);
- }
- }
+static gboolean
+gsm_presence_set_status_dbus (GsmExportedPresence *skeleton,
+ GDBusMethodInvocation *invocation,
+ guint status,
+ GsmPresence *presence)
+{
+ gsm_presence_set_status (presence, status);
+ gsm_exported_presence_complete_set_status (skeleton, invocation);
+ return TRUE;
}
static gboolean
@@ -266,21 +290,33 @@ register_presence (GsmPresence *presence)
{
GError *error;
GsmPresencePrivate *priv;
+ GsmExportedPresence *skeleton;
error = NULL;
priv = gsm_presence_get_instance_private (presence);
- priv->bus_connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
- if (priv->bus_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;
}
- dbus_g_connection_register_g_object (priv->bus_connection, GSM_PRESENCE_DBUS_PATH, G_OBJECT (presence));
+ skeleton = gsm_exported_presence_skeleton_new ();
+ priv->skeleton = skeleton;
+ g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton),
+ priv->connection,
+ GSM_PRESENCE_DBUS_PATH, &error);
+ if (error != NULL) {
+ g_critical ("error registering presence object on session bus: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+ g_signal_connect (skeleton, "handle-set-status",
+ G_CALLBACK (gsm_presence_set_status_dbus), presence);
+ g_signal_connect (skeleton, "handle-set-status-text",
+ G_CALLBACK (gsm_presence_set_status_text_dbus), presence);
return TRUE;
}
@@ -292,6 +328,7 @@ gsm_presence_constructor (GType type,
GsmPresence *presence;
gboolean res;
GsmPresencePrivate *priv;
+ GError *error = NULL;
presence = GSM_PRESENCE (G_OBJECT_CLASS (gsm_presence_parent_class)->constructor (type,
n_construct_properties,
@@ -303,22 +340,22 @@ gsm_presence_constructor (GType type,
g_warning ("Unable to register presence with session bus");
}
- priv->bus_proxy = dbus_g_proxy_new_for_name (priv->bus_connection,
- DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS);
- if (priv->bus_proxy != NULL) {
- dbus_g_proxy_add_signal (priv->bus_proxy,
- "NameOwnerChanged",
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->bus_proxy,
- "NameOwnerChanged",
- G_CALLBACK (on_bus_name_owner_changed),
- presence,
- NULL);
+ priv->screensaver_proxy = g_dbus_proxy_new_sync (priv->connection,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ GS_NAME,
+ GS_PATH,
+ GS_INTERFACE,
+ NULL, &error);
+ if (error != NULL) {
+ g_critical ("Unable to create a DBus proxy for GnomeScreensaver: %s",
+ error->message);
+ g_error_free (error);
+ } else {
+ g_signal_connect (priv->screensaver_proxy, "notify::g-name-owner",
+ G_CALLBACK (on_screensaver_name_owner_changed), presence);
+ g_signal_connect (priv->screensaver_proxy, "g-signal",
+ G_CALLBACK (on_screensaver_dbus_signal), presence);
}
return G_OBJECT (presence);
@@ -351,55 +388,6 @@ gsm_presence_set_idle_enabled (GsmPresence *presence,
}
}
-gboolean
-gsm_presence_set_status_text (GsmPresence *presence,
- const char *status_text,
- GError **error)
-{
- GsmPresencePrivate *priv;
- g_return_val_if_fail (GSM_IS_PRESENCE (presence), FALSE);
-
- priv = gsm_presence_get_instance_private (presence);
-
- g_free (priv->status_text);
-
- /* check length */
- if (status_text != NULL && strlen (status_text) > MAX_STATUS_TEXT) {
- g_set_error (error,
- GSM_PRESENCE_ERROR,
- GSM_PRESENCE_ERROR_GENERAL,
- "Status text too long");
- return FALSE;
- }
-
- if (status_text != NULL) {
- priv->status_text = g_strdup (status_text);
- } else {
- priv->status_text = g_strdup ("");
- }
- g_object_notify (G_OBJECT (presence), "status-text");
- g_signal_emit (presence, signals[STATUS_TEXT_CHANGED], 0, priv->status_text);
- return TRUE;
-}
-
-gboolean
-gsm_presence_set_status (GsmPresence *presence,
- guint status,
- GError **error)
-{
- GsmPresencePrivate *priv;
-
- g_return_val_if_fail (GSM_IS_PRESENCE (presence), FALSE);
- priv = gsm_presence_get_instance_private (presence);
-
- if (status != priv->status) {
- priv->status = status;
- g_object_notify (G_OBJECT (presence), "status");
- g_signal_emit (presence, signals[STATUS_CHANGED], 0, priv->status);
- }
- return TRUE;
-}
-
void
gsm_presence_set_idle_timeout (GsmPresence *presence,
guint timeout)
@@ -427,12 +415,6 @@ gsm_presence_set_property (GObject *object,
self = GSM_PRESENCE (object);
switch (prop_id) {
- case PROP_STATUS:
- gsm_presence_set_status (self, g_value_get_uint (value), NULL);
- break;
- case PROP_STATUS_TEXT:
- gsm_presence_set_status_text (self, g_value_get_string (value), NULL);
- break;
case PROP_IDLE_ENABLED:
gsm_presence_set_idle_enabled (self, g_value_get_boolean (value));
break;
@@ -459,12 +441,6 @@ gsm_presence_get_property (GObject *object,
priv = gsm_presence_get_instance_private (self);
switch (prop_id) {
- case PROP_STATUS:
- g_value_set_uint (value, priv->status);
- break;
- case PROP_STATUS_TEXT:
- g_value_set_string (value, priv->status_text);
- break;
case PROP_IDLE_ENABLED:
g_value_set_boolean (value, priv->idle_enabled);
break;
@@ -514,43 +490,6 @@ gsm_presence_class_init (GsmPresenceClass *klass)
object_class->get_property = gsm_presence_get_property;
object_class->set_property = gsm_presence_set_property;
- signals [STATUS_CHANGED] =
- g_signal_new ("status-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmPresenceClass, status_changed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE,
- 1, G_TYPE_UINT);
- signals [STATUS_TEXT_CHANGED] =
- g_signal_new ("status-text-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GsmPresenceClass, status_text_changed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE,
- 1, G_TYPE_STRING);
-
- g_object_class_install_property (object_class,
- PROP_STATUS,
- g_param_spec_uint ("status",
- "status",
- "status",
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
- PROP_STATUS_TEXT,
- g_param_spec_string ("status-text",
- "status text",
- "status text",
- "",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
PROP_IDLE_ENABLED,
g_param_spec_boolean ("idle-enabled",
@@ -567,9 +506,6 @@ gsm_presence_class_init (GsmPresenceClass *klass)
G_MAXINT,
300000,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
- dbus_g_object_type_install_info (GSM_TYPE_PRESENCE, &dbus_glib_gsm_presence_object_info);
- dbus_g_error_domain_register (GSM_PRESENCE_ERROR, NULL, GSM_PRESENCE_TYPE_ERROR);
}
GsmPresence *
diff --git a/mate-session/gsm-presence.h b/mate-session/gsm-presence.h
index 36041ff..30adbea 100644
--- a/mate-session/gsm-presence.h
+++ b/mate-session/gsm-presence.h
@@ -35,9 +35,6 @@ struct _GsmPresenceClass
void (* status_changed) (GsmPresence *presence,
guint status);
- void (* status_text_changed) (GsmPresence *presence,
- const char *status_text);
-
};
typedef enum {
@@ -54,9 +51,6 @@ typedef enum
} GsmPresenceError;
#define GSM_PRESENCE_ERROR gsm_presence_error_quark ()
-GType gsm_presence_error_get_type (void);
-#define GSM_PRESENCE_TYPE_ERROR (gsm_presence_error_get_type ())
-
GQuark gsm_presence_error_quark (void);
GsmPresence * gsm_presence_new (void);
@@ -66,14 +60,6 @@ void gsm_presence_set_idle_enabled (GsmPresence *presence,
void gsm_presence_set_idle_timeout (GsmPresence *presence,
guint n_seconds);
-/* exported to bus */
-gboolean gsm_presence_set_status (GsmPresence *presence,
- guint status,
- GError **error);
-gboolean gsm_presence_set_status_text (GsmPresence *presence,
- const char *status_text,
- GError **error);
-
G_END_DECLS
#endif /* __GSM_PRESENCE_H__ */
diff --git a/mate-session/gsm-systemd.c b/mate-session/gsm-systemd.c
index 1ef7ddf..8a375c2 100644
--- a/mate-session/gsm-systemd.c
+++ b/mate-session/gsm-systemd.c
@@ -149,7 +149,7 @@ gsm_systemd_class_init (GsmSystemdClass *manager_class)
}
static DBusHandlerResult
-gsm_systemd_dbus_filter (DBusConnection *connection,
+gsm_systemd_dbus_filter (DBusConnection *connection G_GNUC_UNUSED,
DBusMessage *message,
void *user_data)
{
@@ -271,10 +271,10 @@ out:
}
static void
-gsm_systemd_on_name_owner_changed (DBusGProxy *bus_proxy,
+gsm_systemd_on_name_owner_changed (DBusGProxy *bus_proxy G_GNUC_UNUSED,
const char *name,
- const char *prev_owner,
- const char *new_owner,
+ const char *prev_owner G_GNUC_UNUSED,
+ const char *new_owner G_GNUC_UNUSED,
GsmSystemd *manager)
{
GsmSystemdPrivate *priv;
@@ -420,7 +420,7 @@ emit_stop_complete (GsmSystemd *manager,
}
gboolean
-gsm_systemd_is_last_session_for_user (GsmSystemd *manager)
+gsm_systemd_is_last_session_for_user (GsmSystemd *manager G_GNUC_UNUSED)
{
char **sessions = NULL;
char *session = NULL;
diff --git a/mate-session/gsm-xsmp-client.c b/mate-session/gsm-xsmp-client.c
index 5e15744..1fcd44e 100644
--- a/mate-session/gsm-xsmp-client.c
+++ b/mate-session/gsm-xsmp-client.c
@@ -72,8 +72,8 @@ static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE_WITH_PRIVATE (GsmXSMPClient, gsm_xsmp_client, GSM_TYPE_CLIENT)
static gboolean
-client_iochannel_watch (GIOChannel *channel,
- GIOCondition condition,
+client_iochannel_watch (GIOChannel *channel G_GNUC_UNUSED,
+ GIOCondition condition G_GNUC_UNUSED,
GsmXSMPClient *client)
{
gboolean keep_going;
@@ -281,7 +281,7 @@ debug_print_property (SmProp *prop)
static void
-set_properties_callback (SmsConn conn,
+set_properties_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
int num_props,
SmProp **props)
@@ -309,7 +309,7 @@ set_properties_callback (SmsConn conn,
}
static void
-delete_properties_callback (SmsConn conn,
+delete_properties_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
int num_props,
char **prop_names)
@@ -922,17 +922,17 @@ gsm_xsmp_client_finalize (GObject *object)
gsm_xsmp_client_disconnect (client);
g_free (priv->description);
- g_ptr_array_foreach (priv->props, (GFunc)SmFreeProperty, NULL);
+ g_ptr_array_foreach (priv->props, (GFunc) SmFreeProperty, NULL);
g_ptr_array_free (priv->props, TRUE);
G_OBJECT_CLASS (gsm_xsmp_client_parent_class)->finalize (object);
}
static gboolean
-_boolean_handled_accumulator (GSignalInvocationHint *ihint,
+_boolean_handled_accumulator (GSignalInvocationHint *ihint G_GNUC_UNUSED,
GValue *return_accu,
const GValue *handler_return,
- gpointer dummy)
+ gpointer dummy G_GNUC_UNUSED)
{
gboolean continue_emission;
gboolean signal_handled;
@@ -1154,7 +1154,7 @@ register_client_callback (SmsConn conn,
static void
-save_yourself_request_callback (SmsConn conn,
+save_yourself_request_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
int save_type,
Bool shutdown,
@@ -1219,7 +1219,7 @@ save_yourself_request_callback (SmsConn conn,
}
static void
-save_yourself_phase2_request_callback (SmsConn conn,
+save_yourself_phase2_request_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data)
{
GsmXSMPClientPrivate *priv;
@@ -1240,7 +1240,7 @@ save_yourself_phase2_request_callback (SmsConn conn,
}
static void
-interact_request_callback (SmsConn conn,
+interact_request_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
int dialog_type)
{
@@ -1278,7 +1278,7 @@ interact_request_callback (SmsConn conn,
}
static void
-interact_done_callback (SmsConn conn,
+interact_done_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
Bool cancel_shutdown)
{
@@ -1297,7 +1297,7 @@ interact_done_callback (SmsConn conn,
}
static void
-save_yourself_done_callback (SmsConn conn,
+save_yourself_done_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
Bool success)
{
@@ -1333,7 +1333,7 @@ save_yourself_done_callback (SmsConn conn,
}
static void
-close_connection_callback (SmsConn conn,
+close_connection_callback (SmsConn conn G_GNUC_UNUSED,
SmPointer manager_data,
int count,
char **reason_msgs)
diff --git a/mate-session/org.gnome.SessionManager.xml b/mate-session/org.gnome.SessionManager.xml
index 47deb6b..09826ff 100644
--- a/mate-session/org.gnome.SessionManager.xml
+++ b/mate-session/org.gnome.SessionManager.xml
@@ -44,7 +44,6 @@
<!-- Running phase interfaces -->
<method name="RegisterClient">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg type="s" name="app_id" direction="in">
<doc:doc>
<doc:summary>The application identifier</doc:summary>
@@ -68,7 +67,6 @@
</method>
<method name="UnregisterClient">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg type="o" name="client_id" direction="in">
<doc:doc>
<doc:summary>The object path of the client</doc:summary>
@@ -82,7 +80,6 @@
</method>
<method name="Inhibit">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg type="s" name="app_id" direction="in">
<doc:doc>
<doc:summary>The application identifier</doc:summary>
@@ -159,7 +156,6 @@
</method>
<method name="Uninhibit">
- <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<arg type="u" name="inhibit_cookie" direction="in">
<doc:doc>
<doc:summary>The cookie</doc:summary>