diff --git a/ChangeLog b/ChangeLog index b17ae83..d8ba59e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Jul 16 02:51:42 PDT 2005 Christian Hammond + + * libnotify/dbus-compat.h: + * libnotify/notify.c: + - Fixed a couple of D-BUS 0.3x bugs. Several remain though. + Tue Jul 12 12:29:08 PDT 2005 Christian Hammond * AUTHORS: diff --git a/libnotify/dbus-compat.h b/libnotify/dbus-compat.h index 2a2d198..0f2f52a 100644 --- a/libnotify/dbus-compat.h +++ b/libnotify/dbus-compat.h @@ -40,20 +40,59 @@ dbus_message_iter_append_basic((iter), DBUS_TYPE_DOUBLE, &(val)) # define _notify_dbus_message_iter_append_byte_array(iter, data, len) \ - dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_BYTE, &(data), \ - (len)) + { \ + DBusMessageIter array_iter; \ + dbus_message_iter_open_container((iter), DBUS_TYPE_ARRAY, \ + DBUS_TYPE_BYTE_AS_STRING, \ + &array_iter); \ + dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_BYTE, \ + &(data), (len)); \ + dbus_message_iter_close_container((iter), &array_iter); \ + } # define _notify_dbus_message_iter_append_boolean_array(iter, data, len) \ - dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_BOOLEAN, &(data), \ - (len)) + { \ + DBusMessageIter array_iter; \ + dbus_message_iter_open_container((iter), DBUS_TYPE_ARRAY, \ + DBUS_TYPE_BOOLEAN_AS_STRING, \ + &array_iter); \ + dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_BOOLEAN, \ + &(data), (len)); \ + dbus_message_iter_close_container((iter), &array_iter); \ + } # define _notify_dbus_message_iter_append_int32_array(iter, data, len) \ - dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_INT32, &(data), \ - (len)) + { \ + DBusMessageIter array_iter; \ + dbus_message_iter_open_container((iter), DBUS_TYPE_ARRAY, \ + DBUS_TYPE_INT32_AS_STRING, \ + &array_iter); \ + dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_INT32, \ + &(data), (len)); \ + dbus_message_iter_close_container((iter), &array_iter); \ + } # define _notify_dbus_message_iter_append_uint32_array(iter, data, len) \ - dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_UINT32, &(data), \ - (len)) + { \ + DBusMessageIter array_iter; \ + dbus_message_iter_open_container((iter), DBUS_TYPE_ARRAY, \ + DBUS_TYPE_UINT32_AS_STRING, \ + &array_iter); \ + dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_UINT32, \ + &(data), (len)); \ + dbus_message_iter_close_container((iter), &array_iter); \ + } # define _notify_dbus_message_iter_append_string_array(iter, data, len) \ - dbus_message_iter_append_fixed_array((iter), DBUS_TYPE_STRING, \ - &(data), (len)) + { \ + DBusMessageIter array_iter; \ + int i; \ + dbus_message_iter_open_container((iter), DBUS_TYPE_ARRAY, \ + DBUS_TYPE_STRING_AS_STRING, \ + &array_iter); \ + for (i = 0; i < len; i++) \ + { \ + dbus_message_iter_append_basic(&array_iter, DBUS_TYPE_STRING, \ + &((char **)data)[i]); \ + } \ + dbus_message_iter_close_container((iter), &array_iter); \ + } # define _notify_dbus_message_iter_get_byte(iter, retvar) \ dbus_message_iter_get_basic((iter), &(retvar)) @@ -68,16 +107,21 @@ # define _notify_dbus_message_iter_get_double(iter, retvar) \ dbus_message_iter_get_basic((iter), &(retvar)) -# define _notify_dbus_message_iter_get_byte_array \ - dbus_message_iter_get_fixed_array -# define _notify_dbus_message_iter_get_boolean_array \ - dbus_message_iter_get_fixed_array -# define _notify_dbus_message_iter_get_int32_array \ - dbus_message_iter_get_fixed_array -# define _notify_dbus_message_iter_get_uint32_array \ - dbus_message_iter_get_fixed_array -# define _notify_dbus_message_iter_get_string_array(iter, array, num_items) \ - dbus_message_iter_get_fixed_array((iter), (array), (num_items)) +# define _notify_dbus_message_iter_get_fixed_array(iter, data, len) \ + { \ + DBusMessageIter array_iter; \ + dbus_message_iter_recurse((iter), &array_iter); \ + dbus_message_iter_get_fixed_array(&array_iter, (data), (len)); \ + } + +# define _notify_dbus_message_iter_get_byte_array(iter, data, len) \ + _notify_dbus_message_iter_get_fixed_array((iter), (data), (len)) +# define _notify_dbus_message_iter_get_boolean_array(iter, data, len) \ + _notify_dbus_message_iter_get_fixed_array((iter), (data), (len)) +# define _notify_dbus_message_iter_get_int32_array(iter, data, len) \ + _notify_dbus_message_iter_get_fixed_array((iter), (data), (len)) +# define _notify_dbus_message_iter_get_uint32_array(iter, data, len) \ + _notify_dbus_message_iter_get_fixed_array((iter), (data), (len)) #else /* D-BUS < 0.30 */ # define DBUS_INTERFACE_DBUS DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS @@ -85,10 +129,6 @@ # define DBUS_PATH_DBUS DBUS_PATH_ORG_FREEDESKTOP_DBUS # define DBUS_ERROR_SERVICE_UNKNOWN DBUS_ERROR_SERVICE_DOES_NOT_EXIST -# define dbus_bus_start_service_by_name dbus_bus_activate_service - -# define dbus_message_iter_close_container(iter, container_iter) - # define dbus_message_iter_init_append(msg, iter) \ dbus_message_iter_init(msg, iter) @@ -137,8 +177,6 @@ dbus_message_iter_get_int32_array((iter), (data), (len)) # define _notify_dbus_message_iter_get_uint32_array(iter, data, len) \ dbus_message_iter_get_uint32_array((iter), (data), (len)) -# define _notify_dbus_message_iter_get_string_array(iter, data, len) \ - dbus_message_iter_get_string_array((iter), (data), (len)) #endif #endif /* NOTIFY_DBUS_COMPAT_H_ */ diff --git a/libnotify/notify.c b/libnotify/notify.c index ca5aa37..e9468d2 100644 --- a/libnotify/notify.c +++ b/libnotify/notify.c @@ -468,8 +468,12 @@ notify_get_server_caps(void) DBusMessageIter iter; DBusError error; GList *caps = NULL; +#if NOTIFY_CHECK_DBUS_VERSION(0, 30) + DBusMessageIter array_iter; +#else char **temp_array; int num_items, i; +#endif message = _notify_dbus_message_new("GetCapabilities", NULL); @@ -495,15 +499,29 @@ notify_get_server_caps(void) dbus_message_iter_init(reply, &iter); - _notify_dbus_message_iter_get_string_array(&iter, &temp_array, - &num_items); +#if NOTIFY_CHECK_DBUS_VERSION(0, 30) + dbus_message_iter_recurse(&iter, &array_iter); - dbus_message_unref(reply); + while (dbus_message_iter_get_arg_type(&array_iter) == DBUS_TYPE_STRING) + { + const char *value; + + dbus_message_iter_get_basic(&array_iter, &value); + + caps = g_list_append(caps, g_strdup(value)); + + dbus_message_iter_next(&array_iter); + } +#else /* D-BUS < 0.30 */ + dbus_message_iter_get_string_array(&iter, &temp_array, &num_items); for (i = 0; i < num_items; i++) caps = g_list_append(caps, g_strdup(temp_array[i])); dbus_free_string_array(temp_array); +#endif /* D-BUS < 0.30 */ + + dbus_message_unref(reply); return caps; } @@ -674,8 +692,8 @@ hint_foreach_func(const gchar *key, const gchar *value, DBusMessageIter *iter) dbus_message_iter_open_container(iter, DBUS_TYPE_DICT_ENTRY, NULL, &entry_iter); - dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_STRING, key); - dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_STRING, value); + dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_STRING, &key); + dbus_message_iter_append_basic(&entry_iter, DBUS_TYPE_STRING, &value); dbus_message_iter_close_container(iter, &entry_iter); #else dbus_message_iter_append_dict_key(iter, key);