[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