# HG changeset patch # User Alex Baines # Date 1425071849 0 # Fri Feb 27 21:17:29 2015 +0000 # Node ID d291682a8393e2ce4399a3e2b435f7c176326c98 # Parent b577c475342146ed77e581da9b3d25cefcac3582 [IBus] Only register interest in messages sent to our input context. diff -r b577c4753421 -r d291682a8393 src/core/linux/SDL_dbus.c --- a/src/core/linux/SDL_dbus.c Sun Feb 22 20:34:08 2015 -0500 +++ b/src/core/linux/SDL_dbus.c Fri Feb 27 21:17:29 2015 +0000 @@ -45,6 +45,7 @@ SDL_DBUS_SYM(connection_set_exit_on_disconnect); SDL_DBUS_SYM(connection_get_is_connected); SDL_DBUS_SYM(connection_add_filter); + SDL_DBUS_SYM(connection_try_register_object_path); SDL_DBUS_SYM(connection_send); SDL_DBUS_SYM(connection_send_with_reply_and_block); SDL_DBUS_SYM(connection_close); diff -r b577c4753421 -r d291682a8393 src/core/linux/SDL_dbus.h --- a/src/core/linux/SDL_dbus.h Sun Feb 22 20:34:08 2015 -0500 +++ b/src/core/linux/SDL_dbus.h Fri Feb 27 21:17:29 2015 +0000 @@ -41,6 +41,8 @@ dbus_bool_t (*connection_get_is_connected)(DBusConnection *); dbus_bool_t (*connection_add_filter)(DBusConnection *, DBusHandleMessageFunction, void *, DBusFreeFunction); + dbus_bool_t (*connection_try_register_object_path)(DBusConnection *, const char *, + const DBusObjectPathVTable *, void *, DBusError *); dbus_bool_t (*connection_send)(DBusConnection *, DBusMessage *, dbus_uint32_t *); DBusMessage *(*connection_send_with_reply_and_block)(DBusConnection *, DBusMessage *, int, DBusError *); void (*connection_close)(DBusConnection *); diff -r b577c4753421 -r d291682a8393 src/core/linux/SDL_ibus.c --- a/src/core/linux/SDL_ibus.c Sun Feb 22 20:34:08 2015 -0500 +++ b/src/core/linux/SDL_ibus.c Fri Feb 27 21:17:29 2015 +0000 @@ -123,7 +123,7 @@ } static DBusHandlerResult -IBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *user_data) +IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) { SDL_DBusContext *dbus = (SDL_DBusContext *)user_data; @@ -341,6 +341,8 @@ const char *path = NULL; SDL_bool result = SDL_FALSE; DBusMessage *msg; + DBusObjectPathVTable ibus_vtable = {0}; + ibus_vtable.message_function = &IBus_MessageHandler; ibus_conn = dbus->connection_open_private(addr, NULL); @@ -388,7 +390,7 @@ SDL_AddHintCallback(SDL_HINT_IME_INTERNAL_EDITING, &IBus_SetCapabilities, NULL); dbus->bus_add_match(ibus_conn, "type='signal',interface='org.freedesktop.IBus.InputContext'", NULL); - dbus->connection_add_filter(ibus_conn, &IBus_MessageFilter, dbus, NULL); + dbus->connection_try_register_object_path(ibus_conn, input_ctx_path, &ibus_vtable, dbus, NULL); dbus->connection_flush(ibus_conn); } @@ -663,7 +665,7 @@ dbus->connection_read_write(ibus_conn, 0); while (dbus->connection_dispatch(ibus_conn) == DBUS_DISPATCH_DATA_REMAINS) { - /* Do nothing, actual work happens in IBus_MessageFilter */ + /* Do nothing, actual work happens in IBus_MessageHandler */ } } }