[Galago-commits] r2931 - in branches/libgalago/dbus-glib: . libgalago

galago-commits at freedesktop.org galago-commits at freedesktop.org
Mon Oct 16 02:52:47 PDT 2006


Author: chipx86
Date: 2006-10-16 02:52:39 -0700 (Mon, 16 Oct 2006)
New Revision: 2931

Modified:
   branches/libgalago/dbus-glib/ChangeLog
   branches/libgalago/dbus-glib/libgalago/galago-core.c
   branches/libgalago/dbus-glib/libgalago/galago-core.h
   branches/libgalago/dbus-glib/libgalago/galago-object.c
   branches/libgalago/dbus-glib/libgalago/galago-object.h
   branches/libgalago/dbus-glib/libgalago/galago-presence.c
Log:
- Give each GalagoObject a DBusGProxy.
- Initialize Galago using dbus-glib and register through a proxy call.


Modified: branches/libgalago/dbus-glib/ChangeLog
===================================================================
--- branches/libgalago/dbus-glib/ChangeLog	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/ChangeLog	2006-10-16 09:52:39 UTC (rev 2931)
@@ -1,3 +1,13 @@
+Mon Oct 16 02:51:56 PDT 2006  Christian Hammond <chipx86 at chipx86.com>
+
+	* libgalago/galago-core.c:
+	* libgalago/galago-core.h:
+	* libgalago/galago-object.c:
+	* libgalago/galago-object.h:
+	* libgalago/galago-presence.c:
+	  - Give each GalagoObject a DBusGProxy.
+	  - Initialize Galago using dbus-glib and register through a proxy call.
+
 ==================== 0.5.2 ====================
 
 Sat Oct 07 11:53:37 EDT 2006  Christian Hammond <chipx86 at chipx86.com>

Modified: branches/libgalago/dbus-glib/libgalago/galago-core.c
===================================================================
--- branches/libgalago/dbus-glib/libgalago/galago-core.c	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/libgalago/galago-core.c	2006-10-16 09:52:39 UTC (rev 2931)
@@ -50,7 +50,7 @@
 	char *conn_obj_path;
 	char *uid;
 
-	DBusConnection *dbus_conn;
+	DBusGConnection *bus;
 
 	gboolean filters_added;
 	gboolean watch_all;
@@ -316,6 +316,7 @@
 /**************************************************************************
  * D-BUS Processing
  **************************************************************************/
+#if 0
 static void
 reregister_client(void)
 {
@@ -729,6 +730,7 @@
 
 	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }
+#endif
 
 /**************************************************************************
  * Core API
@@ -736,42 +738,43 @@
 static gboolean
 _galago_core_connect(void)
 {
-	DBusError error;
+	GError *error = NULL;
+	DBusConnection *conn;
 
-	dbus_error_init(&error);
+	_core->priv->bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
 
-	_core->priv->dbus_conn = dbus_bus_get(DBUS_BUS_SESSION, &error);
-
-	if (_core->priv->dbus_conn == NULL)
+	if (error != NULL)
 	{
-		g_error("Unable to connect to session bus: %s", error.message);
-		dbus_error_free(&error);
+		g_error("Unable to connect to session bus: %s", error->message);
+		g_error_free(error);
 
 		return FALSE;
 	}
 
-	dbus_connection_setup_with_g_main(_core->priv->dbus_conn, NULL);
-	dbus_connection_set_exit_on_disconnect(_core->priv->dbus_conn, FALSE);
+	conn = dbus_g_connection_get_connection(_core->priv->bus);
 
+	dbus_connection_set_exit_on_disconnect(conn, FALSE);
+
 	if (_core->priv->daemon)
-	{
-		dbus_error_free(&error);
-
 		return TRUE;
-	}
 
 	if (!(_core->priv->flags & GALAGO_INIT_NO_ACTIVATION))
 	{
-		if (!dbus_bus_start_service_by_name(_core->priv->dbus_conn,
-											GALAGO_DBUS_SERVICE,
-											0, NULL, &error))
+		DBusError dbus_error;
+
+		dbus_error_init(&dbus_error);
+
+		if (!dbus_bus_start_service_by_name(conn, GALAGO_DBUS_SERVICE,
+											0, NULL, &dbus_error))
 		{
-			g_warning("Unable to activate Galago service: %s", error.message);
-			dbus_error_free(&error);
-			dbus_error_init(&error);
+			g_warning("Unable to activate Galago service: %s",
+					  dbus_error.message);
 		}
+
+		dbus_error_free(&dbus_error);
 	}
 
+#if 0
 	if (!dbus_connection_add_filter(_core->priv->dbus_conn,
 									filter_func, NULL, NULL))
 	{
@@ -799,14 +802,14 @@
 	}
 
 	dbus_error_free(&error);
+#endif
 
 	_core->priv->filters_added = TRUE;
 
-	if (dbus_bus_name_has_owner(_core->priv->dbus_conn,
-								GALAGO_DBUS_SERVICE, NULL))
-	{
+	galago_object_set_dbus_path(GALAGO_OBJECT(_core), GALAGO_DBUS_CORE_OBJECT);
+
+	if (dbus_bus_name_has_owner(conn, GALAGO_DBUS_SERVICE, NULL))
 		_galago_dbus_register_connection();
-	}
 
 	return TRUE;
 }
@@ -814,22 +817,24 @@
 static void
 _galago_core_disconnect(void)
 {
-	if (_core->priv->dbus_conn != NULL)
+	if (_core->priv->bus != NULL)
 	{
 		if (!_core->priv->daemon && galago_is_registered())
 		{
 			_galago_dbus_unregister_connection();
 		}
 
-		if (_core->priv->dbus_conn != NULL)
+		if (_core->priv->bus != NULL)
 		{
+#if 0
 			if (_core->priv->filters_added)
 			{
 				dbus_connection_remove_filter(_core->priv->dbus_conn,
 											  filter_func, NULL);
 			}
+#endif
 
-			dbus_connection_dispatch(_core->priv->dbus_conn);
+			dbus_g_connection_flush(_core->priv->bus);
 
 			/*
 			 * NOTE: There seems to be a big problem when uninitting and
@@ -845,7 +850,7 @@
 			dbus_connection_close(_core->priv->dbus_conn);
 			dbus_connection_unref(_core->priv->dbus_conn);
 #endif
-			_core->priv->dbus_conn = NULL;
+			_core->priv->bus = NULL;
 		}
 	}
 
@@ -939,7 +944,6 @@
 	_core->priv->init_ref_count = 1;
 	G_UNLOCK(_core_lock);
 
-	galago_object_set_dbus_path(GALAGO_OBJECT(_core), GALAGO_DBUS_CORE_OBJECT);
 	_core->priv->app_name = g_strdup(name);
 	_core->priv->flags = flags;
 
@@ -999,10 +1003,10 @@
 gboolean
 galago_is_connected(void)
 {
-	return (galago_is_initted() && _core->priv->dbus_conn != NULL &&
+	return (galago_is_initted() && _core->priv->bus != NULL &&
 			(_core->priv->registering_connection || _core->priv->uid != NULL ||
 			 galago_is_daemon()) &&
-			dbus_connection_get_is_connected(_core->priv->dbus_conn));
+			dbus_connection_get_is_connected(galago_get_dbus_conn()));
 }
 
 /**
@@ -1056,10 +1060,25 @@
 {
 	g_return_val_if_fail(galago_is_initted(), NULL);
 
-	return _core->priv->dbus_conn;
+	return dbus_g_connection_get_connection(_core->priv->bus);
 }
 
 /**
+ * galago_get_bus
+ *
+ * Returns Galago's D-BUS connection.
+ *
+ * Returns: The D-BUS connection.
+ */
+DBusGConnection *
+galago_get_bus(void)
+{
+	g_return_val_if_fail(galago_is_initted(), NULL);
+
+	return _core->priv->bus;
+}
+
+/**
  * galago_get_uid
  *
  * Returns the local Galago connection's unique ID.
@@ -1519,40 +1538,26 @@
 static gboolean
 _galago_dbus_register_connection(void)
 {
-	GList *list, *return_list = NULL;
-	gboolean is_feed;
+	GError *error = NULL;
 
-	return_list = g_list_append(return_list,
-		galago_value_new(GALAGO_VALUE_TYPE_STRING, NULL, NULL));
-	return_list = g_list_append(return_list,
-		galago_value_new(GALAGO_VALUE_TYPE_STRING, NULL, NULL));
-
 	_core->priv->registering_connection = TRUE;
 
-	is_feed = galago_is_feed();
-
-	list = galago_dbus_send_message_with_reply_list(
-		GALAGO_OBJECT(_core), "Register", return_list,
-		galago_value_new(GALAGO_VALUE_TYPE_STRING,  &_core->priv->app_name, NULL),
-		galago_value_new(GALAGO_VALUE_TYPE_BOOLEAN, &is_feed,         NULL),
-		NULL);
-
-	_core->priv->registering_connection = FALSE;
-
-	if (list == NULL)
+	if (!dbus_g_proxy_call(galago_object_get_dbus_proxy(GALAGO_OBJECT(_core)),
+						   "Register", &error,
+						   G_TYPE_STRING, _core->priv->app_name,
+						   G_TYPE_BOOLEAN, galago_is_feed(),
+						   G_TYPE_INVALID,
+						   G_TYPE_STRING, &_core->priv->uid,
+						   G_TYPE_STRING, &_core->priv->conn_obj_path,
+						   G_TYPE_INVALID))
 	{
 		g_warning("Unable to register local Galago connection.");
 
 		return FALSE;
 	}
 
-	/* TODO: Do safety checks. */
-	_core->priv->uid           = list->data;
-	_core->priv->conn_obj_path = list->next->data;
 	galago_context_set_obj_path_prefix(_core->priv->conn_obj_path);
 
-	g_list_free(list);
-
 	_core->priv->daemon_active = TRUE;
 	galago_set_watch_all(TRUE);
 	_core->priv->registered = TRUE;
@@ -1574,7 +1579,7 @@
 		galago_value_new(GALAGO_VALUE_TYPE_STRING, &obj_path, NULL),
 		NULL);
 
-	dbus_connection_flush(_core->priv->dbus_conn); /* Keep this here! */
+	dbus_g_connection_flush(_core->priv->bus); /* Keep this here! */
 
 	_galago_dbus_unregister_connection_finish();
 }

Modified: branches/libgalago/dbus-glib/libgalago/galago-core.h
===================================================================
--- branches/libgalago/dbus-glib/libgalago/galago-core.h	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/libgalago/galago-core.h	2006-10-16 09:52:39 UTC (rev 2931)
@@ -100,6 +100,7 @@
 gboolean galago_is_feed(void);
 
 DBusConnection *galago_get_dbus_conn(void);
+DBusGConnection *galago_get_bus(void);
 
 const char *galago_get_uid(void);
 const char *galago_get_client_obj_path(void);

Modified: branches/libgalago/dbus-glib/libgalago/galago-object.c
===================================================================
--- branches/libgalago/dbus-glib/libgalago/galago-object.c	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/libgalago/galago-object.c	2006-10-16 09:52:39 UTC (rev 2931)
@@ -30,7 +30,7 @@
 struct _GalagoObjectPrivate
 {
 	GalagoContext *context;
-	gchar *dbus_path;
+	DBusGProxy *proxy;
 	GalagoOrigin origin;
 	GHashTable *attrs_table;
 	GList *attrs_list;
@@ -188,11 +188,8 @@
 
 	if (object->priv != NULL)
 	{
-		if (object->priv->dbus_path != NULL)
-		{
-			g_free(object->priv->dbus_path);
-			object->priv->dbus_path = NULL;
-		}
+		if (object->priv->proxy != NULL)
+			g_object_unref(G_OBJECT(object->priv->proxy));
 
 		if (object->priv->attrs_table != NULL)
 			g_hash_table_destroy(object->priv->attrs_table);
@@ -344,27 +341,44 @@
 void
 galago_object_set_dbus_path(GalagoObject *object, const gchar *obj_path)
 {
+	GalagoObjectClass *klass;
+
 	g_return_if_fail(object != NULL && GALAGO_IS_OBJECT(object));
 
-	galago_context_push(object->priv->context);
-
-	if (object->priv->dbus_path != NULL)
+	if (object->priv->proxy != NULL && obj_path == NULL)
 	{
+		galago_context_push(object->priv->context);
 		galago_context_remove_object(object);
+		galago_context_pop();
 		object->priv->in_context = FALSE;
 
-		g_free(object->priv->dbus_path);
+		g_object_unref(G_OBJECT(object->priv->proxy));
+		object->priv->proxy = NULL;
+		return;
 	}
 
-	object->priv->dbus_path = (obj_path != NULL ? g_strdup(obj_path) : NULL);
+	g_assert(object->priv->proxy == NULL);
 
-	if (object->priv->dbus_path != NULL && !object->priv->in_context)
+	klass = GALAGO_OBJECT_GET_CLASS(object);
+
+	if (klass->dbus_interface == NULL)
 	{
-		galago_context_add_object(object);
-		object->priv->in_context = TRUE;
+		g_error("No D-BUS interface was registered for class '%s'. "
+				"Please report this.",
+				g_type_name(G_OBJECT_CLASS_TYPE(klass)));
+		return;
 	}
 
+	object->priv->proxy = dbus_g_proxy_new_for_name(galago_get_bus(),
+													GALAGO_DBUS_SERVICE,
+													obj_path,
+													klass->dbus_interface);
+
+	galago_context_push(object->priv->context);
+	galago_context_add_object(object);
 	galago_context_pop();
+
+	object->priv->in_context = TRUE;
 }
 
 /**
@@ -380,9 +394,20 @@
 {
 	g_return_val_if_fail(object != NULL && GALAGO_IS_OBJECT(object), NULL);
 
-	return object->priv->dbus_path;
+	if (object->priv->proxy == NULL)
+		return NULL;
+
+	return dbus_g_proxy_get_path(object->priv->proxy);
 }
 
+DBusGProxy *
+galago_object_get_dbus_proxy(const GalagoObject *object)
+{
+	g_return_val_if_fail(object != NULL && GALAGO_IS_OBJECT(object), NULL);
+
+	return object->priv->proxy;
+}
+
 /**
  * galago_object_set_watch
  * @object: The object.

Modified: branches/libgalago/dbus-glib/libgalago/galago-object.h
===================================================================
--- branches/libgalago/dbus-glib/libgalago/galago-object.h	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/libgalago/galago-object.h	2006-10-16 09:52:39 UTC (rev 2931)
@@ -24,9 +24,13 @@
 #include <glib.h>
 #include <glib-object.h>
 
-#define DBUS_API_SUBJECT_TO_CHANGE
+#ifndef DBUS_API_SUBJECT_TO_CHANGE
+# define DBUS_API_SUBJECT_TO_CHANGE
+#endif
 #include <dbus/dbus.h>
 
+#include <dbus/dbus-glib.h>
+
 typedef struct _GalagoObjectClass   GalagoObjectClass;
 typedef struct _GalagoObject        GalagoObject;
 typedef struct _GalagoObjectPrivate GalagoObjectPrivate;
@@ -138,6 +142,8 @@
 void galago_object_set_dbus_path(GalagoObject *object, const gchar *obj_path);
 const gchar *galago_object_get_dbus_path(const GalagoObject *object);
 
+DBusGProxy *galago_object_get_dbus_proxy(const GalagoObject *object);
+
 void galago_object_set_watch(GalagoObject *object, gboolean watch);
 gboolean galago_object_is_watched(const GalagoObject *object);
 

Modified: branches/libgalago/dbus-glib/libgalago/galago-presence.c
===================================================================
--- branches/libgalago/dbus-glib/libgalago/galago-presence.c	2006-10-16 07:52:13 UTC (rev 2930)
+++ branches/libgalago/dbus-glib/libgalago/galago-presence.c	2006-10-16 09:52:39 UTC (rev 2931)
@@ -649,7 +649,9 @@
 
 		g_assert(obj_path != NULL);
 
+#if 0
 		galago_object_set_dbus_path(GALAGO_OBJECT(status), obj_path);
+#endif
 		g_free(obj_path);
 	}
 



More information about the galago-commits mailing list