diff options
author | Ryan C. Gordon <icculus@icculus.org> | 2017-05-28 07:08:10 -0400 |
---|---|---|
committer | Ryan C. Gordon <icculus@icculus.org> | 2017-05-28 07:08:10 -0400 |
commit | 73de35db4482ba4901a91c57321bf968cfa035df (patch) | |
tree | 7388e87b70e716065d612f3ff62ae3fead2c6607 | |
parent | 1a0ba0ecb9443482f6f7504d7ee64888599a164c (diff) | |
download | sdl-73de35db4482ba4901a91c57321bf968cfa035df.tar.gz |
linux: Make system D-Bus connection available (in addition to session).
-rw-r--r-- | src/core/linux/SDL_dbus.c | 17 | ||||
-rw-r--r-- | src/core/linux/SDL_dbus.h | 1 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c index b435b5cce..e6676f7c8 100644 --- a/src/core/linux/SDL_dbus.c +++ b/src/core/linux/SDL_dbus.c @@ -112,14 +112,15 @@ SDL_DBus_Init(void) DBusError err; dbus.error_init(&err); dbus.session_conn = dbus.bus_get_private(DBUS_BUS_SESSION, &err); + if (!dbus.error_is_set(&err)) { + dbus.system_conn = dbus.bus_get_private(DBUS_BUS_SYSTEM, &err); + } if (dbus.error_is_set(&err)) { dbus.error_free(&err); - if (dbus.session_conn) { - dbus.connection_unref(dbus.session_conn); - dbus.session_conn = NULL; - } + SDL_DBus_Quit(); return; /* oh well */ } + dbus.connection_set_exit_on_disconnect(dbus.system_conn, 0); dbus.connection_set_exit_on_disconnect(dbus.session_conn, 0); } } @@ -127,12 +128,18 @@ SDL_DBus_Init(void) void SDL_DBus_Quit(void) { + if (dbus.system_conn) { + dbus.connection_close(dbus.system_conn); + dbus.connection_unref(dbus.system_conn); + } if (dbus.session_conn) { dbus.connection_close(dbus.session_conn); dbus.connection_unref(dbus.session_conn); + } + if (dbus.shutdown) { dbus.shutdown(); - SDL_memset(&dbus, 0, sizeof(dbus)); } + SDL_zero(dbus); UnloadDBUSLibrary(); } diff --git a/src/core/linux/SDL_dbus.h b/src/core/linux/SDL_dbus.h index ab9e4d69c..ee568e818 100644 --- a/src/core/linux/SDL_dbus.h +++ b/src/core/linux/SDL_dbus.h @@ -32,6 +32,7 @@ typedef struct SDL_DBusContext { DBusConnection *session_conn; + DBusConnection *system_conn; DBusConnection *(*bus_get_private)(DBusBusType, DBusError *); dbus_bool_t (*bus_register)(DBusConnection *, DBusError *); |