From 02493579b5e4c4d9d482ba6df4c4058303bb3f3e Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Wed, 14 Dec 2022 17:41:35 +0100 Subject: [PATCH] DBus: add a reference to the connection Fixed bug #6712 --- src/core/linux/SDL_dbus.c | 1 + src/core/linux/SDL_dbus.h | 1 + src/core/linux/SDL_ibus.c | 3 +++ 3 files changed, 5 insertions(+) diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c index 6b3580d357..16604b64ed 100644 --- a/src/core/linux/SDL_dbus.c +++ b/src/core/linux/SDL_dbus.c @@ -51,6 +51,7 @@ static int LoadDBUSSyms(void) SDL_DBUS_SYM(connection_send); SDL_DBUS_SYM(connection_send_with_reply_and_block); SDL_DBUS_SYM(connection_close); + SDL_DBUS_SYM(connection_ref); SDL_DBUS_SYM(connection_unref); SDL_DBUS_SYM(connection_flush); SDL_DBUS_SYM(connection_read_write); diff --git a/src/core/linux/SDL_dbus.h b/src/core/linux/SDL_dbus.h index 7ad64a7804..20890be925 100644 --- a/src/core/linux/SDL_dbus.h +++ b/src/core/linux/SDL_dbus.h @@ -45,6 +45,7 @@ typedef struct SDL_DBusContext 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 *); + void (*connection_ref)(DBusConnection *); void (*connection_unref)(DBusConnection *); void (*connection_flush)(DBusConnection *); dbus_bool_t (*connection_read_write)(DBusConnection *, int); diff --git a/src/core/linux/SDL_ibus.c b/src/core/linux/SDL_ibus.c index f6f988d411..efa0e5d6c0 100644 --- a/src/core/linux/SDL_ibus.c +++ b/src/core/linux/SDL_ibus.c @@ -483,6 +483,9 @@ static SDL_bool IBus_SetupConnection(SDL_DBusContext *dbus, const char *addr) result = SDL_DBus_CallMethodOnConnection(ibus_conn, ibus_service, IBUS_PATH, ibus_interface, "CreateInputContext", DBUS_TYPE_STRING, &client_name, DBUS_TYPE_INVALID, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID); + } else { + /* re-using dbus->session_conn */ + dbus->connection_ref(ibus_conn); } if (result) {