DBusHandlerResult FcitxDBusMenuEventHandler(DBusConnection* connection, DBusMessage* message, void* user_data) { FcitxNotificationItem* notificationitem = user_data; DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; DBusMessage *reply = NULL; boolean flush = false; if (dbus_message_is_method_call(message, DBUS_INTERFACE_INTROSPECTABLE, "Introspect")) { reply = dbus_message_new_method_return(message); dbus_message_append_args(reply, DBUS_TYPE_STRING, &dbus_menu_interface, DBUS_TYPE_INVALID); } else if (dbus_message_is_method_call(message, DBUS_MENU_IFACE, "Event")) { /* this is no reply */ FcitxDBusMenuEvent(notificationitem, message); return DBUS_HANDLER_RESULT_HANDLED; } else if (dbus_message_is_method_call(message, DBUS_MENU_IFACE, "GetProperty")) { reply = FcitxDBusMenuGetProperty(notificationitem, message); } else if (dbus_message_is_method_call(message, DBUS_MENU_IFACE, "GetLayout")) { reply = FcitxDBusMenuGetLayout(notificationitem, message); } else if (dbus_message_is_method_call(message, DBUS_MENU_IFACE, "GetGroupProperties")) { reply = FcitxDBusMenuGetGroupProperties(notificationitem, message); } else if (dbus_message_is_method_call(message, DBUS_MENU_IFACE, "AboutToShow")) { reply = FcitxDBusMenuAboutToShow(notificationitem, message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Get")) { reply = FcitxDBusPropertyGet(notificationitem, dbusMenuPropertyTable, message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Set")) { reply = FcitxDBusPropertySet(notificationitem, dbusMenuPropertyTable, message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "GetAll")) { reply = FcitxDBusPropertyGetAll(notificationitem, dbusMenuPropertyTable, message); } if (reply) { dbus_connection_send(connection, reply, NULL); dbus_message_unref(reply); if (flush) { dbus_connection_flush(connection); } result = DBUS_HANDLER_RESULT_HANDLED; } return result; }
DBusHandlerResult FcitxNotificationItemEventHandler (DBusConnection *connection, DBusMessage *message, void *user_data) { FcitxNotificationItem* notificationitem = user_data; DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; DBusMessage *reply = NULL; boolean flush = false; if (dbus_message_is_method_call(message, DBUS_INTERFACE_INTROSPECTABLE, "Introspect")) { reply = dbus_message_new_method_return(message); dbus_message_append_args(reply, DBUS_TYPE_STRING, &_notification_item, DBUS_TYPE_INVALID); } else if (dbus_message_is_method_call(message, NOTIFICATION_ITEM_DBUS_IFACE, "Scroll")) { reply = dbus_message_new_method_return(message); } else if (dbus_message_is_method_call(message, NOTIFICATION_ITEM_DBUS_IFACE, "Activate")) { FcitxInstanceChangeIMState(notificationitem->owner, FcitxInstanceGetCurrentIC(notificationitem->owner)); reply = dbus_message_new_method_return(message); } else if (dbus_message_is_method_call(message, NOTIFICATION_ITEM_DBUS_IFACE, "SecondaryActivate")) { reply = dbus_message_new_method_return(message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Get")) { reply = FcitxDBusPropertyGet(notificationitem, propertTable, message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "Set")) { reply = FcitxDBusPropertySet(notificationitem, propertTable, message); } else if (dbus_message_is_method_call(message, DBUS_INTERFACE_PROPERTIES, "GetAll")) { reply = FcitxDBusPropertyGetAll(notificationitem, propertTable, message); } if (reply) { dbus_connection_send(connection, reply, NULL); dbus_message_unref(reply); if (flush) { dbus_connection_flush(connection); } result = DBUS_HANDLER_RESULT_HANDLED; } return result; }