/* The content of this function is copied in verbatim from dbus 0.20 file tools/dbus-print-message.c */ static DBusHandlerResult _filter(DBusConnection *conn, DBusMessage *msg, void *data) { const char *sender; int msg_type; DBusMessageIter args; DBusMessage *reply; char* sigvalue; msg_type = dbus_message_get_type (msg); sender = dbus_message_get_sender (msg); if (dbus_message_is_method_call(msg, "org.freedesktop.DBus.Introspectable", "Introspect")) { const char *introspection_xml; introspection_xml = get_introspection_xml (); reply = dbus_message_new_method_return (msg); dbus_message_append_args (reply, DBUS_TYPE_STRING, &introspection_xml, DBUS_TYPE_INVALID); } if (dbus_message_is_signal(msg, INTERFACE, // interface name of the signal NAME)) { if (dbus_message_iter_init(msg, &args)) { if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) { int redalert = FALSE; dbus_message_iter_get_basic(&args, &sigvalue); if (strcmp(sigvalue, REDALERT) == 0) { redalert = TRUE; } if (dbus_message_iter_next(&args)) { if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) { dbus_message_iter_get_basic(&args, &sigvalue); } } alert_func(data, redalert, sigvalue); return DBUS_HANDLER_RESULT_HANDLED; } } } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; }
void OS_Android::alert(const String &p_alert, const String &p_title) { //print("ALERT: %s\n", p_alert.utf8().get_data()); if (alert_func) alert_func(p_alert, p_title); }