gnome-session r4801 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4801 - in branches/dbus_based: . gnome-session
- Date: Tue, 15 Jul 2008 18:50:03 +0000 (UTC)
Author: mccann
Date: Tue Jul 15 18:50:03 2008
New Revision: 4801
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4801&view=rev
Log:
2008-07-15 William Jon McCann <jmccann redhat com>
* gnome-session/gsm-dbus-client.c (dbus_client_stop),
(gsm_dbus_client_class_init):
Unicast the stop signal to the client.
Modified:
branches/dbus_based/ChangeLog
branches/dbus_based/gnome-session/gsm-dbus-client.c
Modified: branches/dbus_based/gnome-session/gsm-dbus-client.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-dbus-client.c (original)
+++ branches/dbus_based/gnome-session/gsm-dbus-client.c Tue Jul 15 18:50:03 2008
@@ -28,6 +28,9 @@
#include <time.h>
#include <unistd.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus.h>
+
#include "gsm-dbus-client.h"
#include "gsm-marshal.h"
@@ -35,6 +38,8 @@
#define GSM_DBUS_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_DBUS_CLIENT, GsmDBusClientPrivate))
+#define CLIENT_INTERFACE "org.gnome.SessionManager.Client"
+
struct GsmDBusClientPrivate
{
char *bus_name;
@@ -139,16 +144,64 @@
G_OBJECT_CLASS (gsm_dbus_client_parent_class)->finalize (object);
}
+static gboolean
+dbus_client_stop (GsmClient *client,
+ GError **error)
+{
+ GsmDBusClient *dbus_client = (GsmDBusClient *) client;
+ DBusMessage *message;
+ gboolean ret;
+ DBusConnection *connection;
+ DBusError local_error;
+
+ ret = FALSE;
+
+ /* unicast the signal to only the registered bus name */
+ message = dbus_message_new_signal (gsm_client_get_id (client),
+ CLIENT_INTERFACE,
+ "Stop");
+ if (message == NULL) {
+ goto out;
+ }
+ if (!dbus_message_set_destination (message, dbus_client->priv->bus_name)) {
+ goto out;
+ }
+
+ dbus_error_init (&local_error);
+ connection = dbus_bus_get (DBUS_BUS_SESSION, &local_error);
+ if (dbus_error_is_set (&local_error)) {
+ g_warning ("%s", local_error.message);
+ dbus_error_free (&local_error);
+ goto out;
+ }
+
+ if (!dbus_connection_send (connection, message, NULL)) {
+ goto out;
+ }
+
+ ret = TRUE;
+
+ out:
+ if (message != NULL) {
+ dbus_message_unref (message);
+ }
+
+ return ret;
+}
+
static void
gsm_dbus_client_class_init (GsmDBusClientClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GsmClientClass *client_class = GSM_CLIENT_CLASS (klass);
object_class->finalize = gsm_dbus_client_finalize;
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;
+ client_class->impl_stop = dbus_client_stop;
+
g_object_class_install_property (object_class,
PROP_BUS_NAME,
g_param_spec_string ("bus-name",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]