Add support for compiling under D-BUS 0.3x. Actually running has not yet been tested!

This commit is contained in:
Christian Hammond 2005-06-20 06:29:25 +00:00
parent 88afc98c6e
commit 43e3261d36
3 changed files with 114 additions and 33 deletions

View File

@ -1,3 +1,10 @@
Mon Jun 20 02:43:26 PDT 2005 Christian Hammond <chipx86@gnupdate.org>
* libnotify/notify.c:
* configure.ac:
- Add support for compiling under D-BUS 0.3x. Actually running
has not yet been tested!
Fri Apr 01 09:21:26 PST 2005 Christian Hammond <chipx86@gnupdate.org> Fri Apr 01 09:21:26 PST 2005 Christian Hammond <chipx86@gnupdate.org>
* libnotify/notify.c: * libnotify/notify.c:

View File

@ -89,11 +89,26 @@ AM_PROG_LIBTOOL
AC_CHECK_LIB([popt], [poptGetArg], , AC_MSG_ERROR([Popt is required])) AC_CHECK_LIB([popt], [poptGetArg], , AC_MSG_ERROR([Popt is required]))
pkg_modules="glib-2.0 >= 2.2.2, dbus-1 >= 0.20, dbus-glib-1 >= 0.20" pkg_modules="glib-2.0 >= 2.2.2, dbus-1 >= 0.23, dbus-glib-1 >= 0.23"
PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_CFLAGS)
AC_SUBST(PACKAGE_LIBS) AC_SUBST(PACKAGE_LIBS)
dnl
dnl Check the D-BUS version.
dnl
AC_MSG_CHECKING([dbus version])
DBUS_VERSION=`$PKG_CONFIG --modversion dbus-1`
DBUS_MAJOR_VER=`echo $DBUS_VERSION | cut -d. -f 1`
DBUS_MINOR_VER=`echo $DBUS_VERSION | cut -d. -f 2`
DBUS_MICRO_VER=`echo $DBUS_VERSION | cut -d. -f 3`
AC_MSG_RESULT($DBUS_VERSION)
AC_DEFINE_UNQUOTED(DBUS_MAJOR_VER, $DBUS_MAJOR_VER, [D-BUS major version.])
AC_DEFINE_UNQUOTED(DBUS_MINOR_VER, $DBUS_MINOR_VER, [D-BUS minor version.])
AC_DEFINE_UNQUOTED(DBUS_MICRO_VER, $DBUS_MICRO_VER, [D-BUS micro version.])
AC_DEFINE_UNQUOTED(DBUS_API_SUBJECT_TO_CHANGE, ,DBUS API is subject to change) AC_DEFINE_UNQUOTED(DBUS_API_SUBJECT_TO_CHANGE, ,DBUS API is subject to change)
dnl # Use wall if we have GCC dnl # Use wall if we have GCC

View File

@ -30,6 +30,7 @@
#endif #endif
#include "notify.h" #include "notify.h"
#include "dbus-compat.h"
#include <dbus/dbus.h> #include <dbus/dbus.h>
#include <dbus/dbus-glib.h> #include <dbus/dbus-glib.h>
#include <stdio.h> #include <stdio.h>
@ -152,7 +153,7 @@ _notify_dbus_message_new(const char *name, DBusMessageIter *iter)
g_return_val_if_fail(message != NULL, NULL); g_return_val_if_fail(message != NULL, NULL);
if (iter != NULL) if (iter != NULL)
dbus_message_iter_init(message, iter); dbus_message_iter_init_append(message, iter);
return message; return message;
} }
@ -163,7 +164,10 @@ _notify_dbus_message_iter_append_string_or_empty(DBusMessageIter *iter,
{ {
g_return_if_fail(iter != NULL); g_return_if_fail(iter != NULL);
dbus_message_iter_append_string(iter, (str != NULL ? str : "")); if (str == NULL)
str = "";
_notify_dbus_message_iter_append_string(iter, str);
} }
static DBusHandlerResult static DBusHandlerResult
@ -178,10 +182,10 @@ _filter_func(DBusConnection *dbus_conn, DBusMessage *message, void *user_data)
dbus_message_iter_init(message, &iter); dbus_message_iter_init(message, &iter);
id = dbus_message_iter_get_uint32(&iter); _notify_dbus_message_iter_get_uint32(&iter, id);
dbus_message_iter_next(&iter); dbus_message_iter_next(&iter);
reason = dbus_message_iter_get_uint32(&iter); _notify_dbus_message_iter_get_uint32(&iter, reason);
g_hash_table_remove(_handles, &id); g_hash_table_remove(_handles, &id);
} }
@ -193,10 +197,10 @@ _filter_func(DBusConnection *dbus_conn, DBusMessage *message, void *user_data)
dbus_message_iter_init(message, &iter); dbus_message_iter_init(message, &iter);
id = dbus_message_iter_get_uint32(&iter); _notify_dbus_message_iter_get_uint32(&iter, id);
dbus_message_iter_next(&iter); dbus_message_iter_next(&iter);
action_id = dbus_message_iter_get_uint32(&iter); _notify_dbus_message_iter_get_uint32(&iter, action_id);
handle = g_hash_table_lookup(_handles, &id); handle = g_hash_table_lookup(_handles, &id);
@ -210,8 +214,7 @@ _filter_func(DBusConnection *dbus_conn, DBusMessage *message, void *user_data)
{ {
NotifyAction *action; NotifyAction *action;
action = g_hash_table_lookup(handle->actions_table, action = g_hash_table_lookup(handle->actions_table, &action_id);
&action_id);
if (action == NULL) if (action == NULL)
{ {
@ -250,8 +253,8 @@ _notify_connect(void)
dbus_connection_set_exit_on_disconnect(_dbus_conn, FALSE); dbus_connection_set_exit_on_disconnect(_dbus_conn, FALSE);
if (!dbus_bus_activate_service(_dbus_conn, NOTIFY_DBUS_SERVICE, 0, NULL, if (!dbus_bus_start_service_by_name(_dbus_conn, NOTIFY_DBUS_SERVICE,
&error)) 0, NULL, &error))
{ {
print_error("Error activating %s service: %s\n", print_error("Error activating %s service: %s\n",
NOTIFY_DBUS_SERVICE, error.message); NOTIFY_DBUS_SERVICE, error.message);
@ -272,8 +275,8 @@ _notify_connect(void)
dbus_bus_add_match(_dbus_conn, dbus_bus_add_match(_dbus_conn,
"type=signal," "type=signal,"
"interface=" DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS "," "interface=" DBUS_INTERFACE_DBUS ","
"sender=" DBUS_SERVICE_ORG_FREEDESKTOP_DBUS , "sender=" DBUS_SERVICE_DBUS ,
&error); &error);
dbus_bus_add_match(_dbus_conn, dbus_bus_add_match(_dbus_conn,
@ -391,7 +394,7 @@ notify_close(NotifyHandle *handle)
g_return_if_fail(message != NULL); g_return_if_fail(message != NULL);
dbus_message_iter_append_uint32(&iter, handle->id); _notify_dbus_message_iter_append_uint32(&iter, handle->id);
dbus_connection_send_with_reply_and_block(_dbus_conn, message, -1, NULL); dbus_connection_send_with_reply_and_block(_dbus_conn, message, -1, NULL);
dbus_message_unref(message); dbus_message_unref(message);
@ -429,13 +432,13 @@ notify_get_server_info(char **ret_name, char **ret_vendor, char **ret_version)
dbus_message_iter_init(reply, &iter); dbus_message_iter_init(reply, &iter);
name = dbus_message_iter_get_string(&iter); _notify_dbus_message_iter_get_string(&iter, name);
dbus_message_iter_next(&iter); dbus_message_iter_next(&iter);
vendor = dbus_message_iter_get_string(&iter); _notify_dbus_message_iter_get_string(&iter, vendor);
dbus_message_iter_next(&iter); dbus_message_iter_next(&iter);
version = dbus_message_iter_get_string(&iter); _notify_dbus_message_iter_get_string(&iter, version);
dbus_message_iter_next(&iter); dbus_message_iter_next(&iter);
dbus_message_unref(reply); dbus_message_unref(reply);
@ -490,8 +493,8 @@ notify_get_server_caps(void)
dbus_message_iter_init(reply, &iter); dbus_message_iter_init(reply, &iter);
if (!dbus_message_iter_get_string_array(&iter, &temp_array, &num_items)) _notify_dbus_message_iter_get_string_array(&iter, &temp_array,
return NULL; &num_items);
dbus_message_unref(reply); dbus_message_unref(reply);
@ -642,6 +645,8 @@ notify_send_notification_varg(NotifyHandle *replaces, const char *type,
GHashTable *table; GHashTable *table;
guint32 id; guint32 id;
guint32 i; guint32 i;
guint32 replaces_id;
guint32 timeout_time;
NotifyHandle *handle; NotifyHandle *handle;
g_return_val_if_fail(notify_is_initted(), NULL); g_return_val_if_fail(notify_is_initted(), NULL);
@ -650,47 +655,75 @@ notify_send_notification_varg(NotifyHandle *replaces, const char *type,
g_return_val_if_fail(message != NULL, NULL); g_return_val_if_fail(message != NULL, NULL);
replaces_id = (replaces != NULL ? replaces->id : 0);
_notify_dbus_message_iter_append_string_or_empty(&iter, _app_name); _notify_dbus_message_iter_append_string_or_empty(&iter, _app_name);
dbus_message_iter_append_string(&iter, ""); _notify_dbus_message_iter_append_string_or_empty(&iter, NULL);
dbus_message_iter_append_uint32(&iter, _notify_dbus_message_iter_append_uint32(&iter, replaces_id);
(replaces != NULL ? replaces->id : 0));
_notify_dbus_message_iter_append_string_or_empty(&iter, type); _notify_dbus_message_iter_append_string_or_empty(&iter, type);
dbus_message_iter_append_byte(&iter, urgency); _notify_dbus_message_iter_append_byte(&iter, urgency);
dbus_message_iter_append_string(&iter, summary); _notify_dbus_message_iter_append_string(&iter, summary);
_notify_dbus_message_iter_append_string_or_empty(&iter, body); _notify_dbus_message_iter_append_string_or_empty(&iter, body);
if (icon == NULL) if (icon == NULL)
{ {
dbus_message_iter_append_string(&iter, ""); _notify_dbus_message_iter_append_string_or_empty(&iter, NULL);
} }
else if (icon->raw_data) else if (icon->raw_data)
{ {
int i; int i;
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
DBUS_TYPE_ARRAY_AS_STRING,
&array_iter);
#else
dbus_message_iter_append_array(&iter, &array_iter, DBUS_TYPE_ARRAY); dbus_message_iter_append_array(&iter, &array_iter, DBUS_TYPE_ARRAY);
#endif
for (i = 0; i < icon->frames; i++) for (i = 0; i < icon->frames; i++)
{ {
dbus_message_iter_append_byte_array(&array_iter, icon->raw_data[i], _notify_dbus_message_iter_append_byte_array(&array_iter,
icon->raw_len[i]); icon->raw_data[i],
icon->raw_len[i]);
} }
dbus_message_iter_close_container(&iter, &array_iter);
} }
else else
{ {
int i; int i;
dbus_message_iter_append_array(&iter, &array_iter, DBUS_TYPE_STRING); g_assert(icon->uri != NULL); /* can be either raw data OR uri */
g_assert( icon->uri != NULL); /* can be either raw data OR uri */ #if NOTIFY_CHECK_DBUS_VERSION(0, 30)
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
DBUS_TYPE_STRING_AS_STRING,
&array_iter);
#else
dbus_message_iter_append_array(&iter, &array_iter, DBUS_TYPE_STRING);
#endif
for (i = 0; i < icon->frames; i++) for (i = 0; i < icon->frames; i++)
{ {
dbus_message_iter_append_string(&array_iter, icon->uri[i]); _notify_dbus_message_iter_append_string(&array_iter,
icon->uri[i]);
} }
dbus_message_iter_close_container(&iter, &array_iter);
} }
/* Actions */ /* Actions */
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
DBUS_TYPE_STRING_AS_STRING
DBUS_TYPE_UINT32_AS_STRING
DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
&dict_iter);
#else
dbus_message_iter_append_dict(&iter, &dict_iter); dbus_message_iter_append_dict(&iter, &dict_iter);
#endif
table = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, table = g_hash_table_new_full(g_int_hash, g_int_equal, NULL,
(GFreeFunc)_notify_action_destroy); (GFreeFunc)_notify_action_destroy);
@ -698,6 +731,9 @@ notify_send_notification_varg(NotifyHandle *replaces, const char *type,
for (i = 0; i < action_count; i++) for (i = 0; i < action_count; i++)
{ {
NotifyAction *action; NotifyAction *action;
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
DBusMessageIter entry_iter;
#endif
action = g_new0(NotifyAction, 1); action = g_new0(NotifyAction, 1);
@ -705,20 +741,43 @@ notify_send_notification_varg(NotifyHandle *replaces, const char *type,
action->text = g_strdup((va_arg(actions, char *))); action->text = g_strdup((va_arg(actions, char *)));
action->cb = va_arg(actions, NotifyCallback); action->cb = va_arg(actions, NotifyCallback);
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
dbus_message_iter_open_container(&dict_iter, DBUS_TYPE_DICT_ENTRY,
NULL, &entry_iter);
dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_STRING,
&action->text);
dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_UINT32,
&action->id);
dbus_message_iter_close_container(&dict_iter, &entry_iter);
#else
dbus_message_iter_append_dict_key(&dict_iter, action->text); dbus_message_iter_append_dict_key(&dict_iter, action->text);
dbus_message_iter_append_uint32(&dict_iter, action->id); dbus_message_iter_append_uint32(&dict_iter, action->id);
#endif
g_hash_table_insert(table, &action->id, action); g_hash_table_insert(table, &action->id, action);
} }
dbus_message_iter_close_container(&iter, &array_iter);
/* Hints */ /* Hints */
#if NOTIFY_CHECK_DBUS_VERSION(0, 30)
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
DBUS_TYPE_UINT32_AS_STRING
DBUS_TYPE_STRING_AS_STRING
DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
&dict_iter);
dbus_message_iter_close_container(&iter, &dict_iter);
#else
dbus_message_iter_append_dict(&iter, &dict_iter); dbus_message_iter_append_dict(&iter, &dict_iter);
#endif
/* Expires */ /* Expires */
dbus_message_iter_append_boolean(&iter, expires); _notify_dbus_message_iter_append_boolean(&iter, expires);
/* Expire Timeout */ /* Expire Timeout */
dbus_message_iter_append_uint32(&iter, (expires ? timeout : 0)); timeout_time = (expires ? timeout : 0);
_notify_dbus_message_iter_append_uint32(&iter, timeout_time);
dbus_error_init(&error); dbus_error_init(&error);
@ -739,7 +798,7 @@ notify_send_notification_varg(NotifyHandle *replaces, const char *type,
} }
dbus_message_iter_init(reply, &iter); dbus_message_iter_init(reply, &iter);
id = dbus_message_iter_get_uint32(&iter); _notify_dbus_message_iter_get_uint32(&iter, id);
dbus_message_unref(reply); dbus_message_unref(reply);
dbus_error_free(&error); dbus_error_free(&error);