#define GETNEXT(iter, type, var) \ if (!err) \ { \ if (dbus_message_iter_get_arg_type(&iter) == type) \ { \ dbus_message_iter_get_basic(&iter, &var); \ dbus_message_iter_next(&iter); \ } \ else err = 1; \ } if (!err && dbus_message_iter_get_arg_type(&sub2) == DBUS_TYPE_VARIANT) { dbus_message_iter_recurse(&sub2, &sub3); if (!strcmp(key, "urgency")) { GETNEXT(sub3, DBUS_TYPE_BYTE, urgency); } else if (!strcmp(key, "category")) { GETNEXT(sub3, DBUS_TYPE_STRING, category); } else if (!strcmp(key, "desktop-entry")) { GETNEXT(sub3, DBUS_TYPE_STRING, desktop); } else if (!strcmp(key, "sound-file")) { GETNEXT(sub3, DBUS_TYPE_STRING, sound_file); } else if (!strcmp(key, "supress-sound")) { GETNEXT(sub3, DBUS_TYPE_BOOLEAN, suppress_sound); } else if (!strcmp(key, "x")) { GETNEXT(sub3, DBUS_TYPE_INT32, x); } else if (!strcmp(key, "y")) { GETNEXT(sub3, DBUS_TYPE_INT32, y); } // XXX read in image data }