SDL_bool SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode) { Uint32 result = 0; SDL_DBusContext *dbus = SDL_DBus_GetContext(); if (IBus_CheckConnection(dbus)) { Uint32 mods = IBus_ModState(); if (!SDL_DBus_CallMethodOnConnection(ibus_conn, IBUS_SERVICE, input_ctx_path, IBUS_INPUT_INTERFACE, "ProcessKeyEvent", DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &keycode, DBUS_TYPE_UINT32, &mods, DBUS_TYPE_INVALID, DBUS_TYPE_BOOLEAN, &result, DBUS_TYPE_INVALID)) { result = 0; } } SDL_IBus_UpdateTextRect(NULL); return result ? SDL_TRUE : SDL_FALSE; }
SDL_bool SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode) { SDL_bool result = SDL_FALSE; SDL_DBusContext *dbus = SDL_DBus_GetContext(); if (IBus_CheckConnection(dbus)) { DBusMessage *msg = dbus->message_new_method_call(IBUS_SERVICE, input_ctx_path, IBUS_INPUT_INTERFACE, "ProcessKeyEvent"); if (msg) { Uint32 mods = IBus_ModState(); dbus->message_append_args(msg, DBUS_TYPE_UINT32, &keysym, DBUS_TYPE_UINT32, &keycode, DBUS_TYPE_UINT32, &mods, DBUS_TYPE_INVALID); } if (msg) { DBusMessage *reply; reply = dbus->connection_send_with_reply_and_block(ibus_conn, msg, 300, NULL); if (reply) { if (!dbus->message_get_args(reply, NULL, DBUS_TYPE_BOOLEAN, &result, DBUS_TYPE_INVALID)) { result = SDL_FALSE; } dbus->message_unref(reply); } dbus->message_unref(msg); } } SDL_IBus_UpdateTextRect(NULL); return result; }