| 1 | /* |
| 2 | Simple DirectMedia Layer |
| 3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> |
| 4 | |
| 5 | This software is provided 'as-is', without any express or implied |
| 6 | warranty. In no event will the authors be held liable for any damages |
| 7 | arising from the use of this software. |
| 8 | |
| 9 | Permission is granted to anyone to use this software for any purpose, |
| 10 | including commercial applications, and to alter it and redistribute it |
| 11 | freely, subject to the following restrictions: |
| 12 | |
| 13 | 1. The origin of this software must not be misrepresented; you must not |
| 14 | claim that you wrote the original software. If you use this software |
| 15 | in a product, an acknowledgment in the product documentation would be |
| 16 | appreciated but is not required. |
| 17 | 2. Altered source versions must be plainly marked as such, and must not be |
| 18 | misrepresented as being the original software. |
| 19 | 3. This notice may not be removed or altered from any source distribution. |
| 20 | */ |
| 21 | |
| 22 | #include "SDL_internal.h" |
| 23 | |
| 24 | #ifndef SDL_dbus_h_ |
| 25 | #define SDL_dbus_h_ |
| 26 | |
| 27 | #ifdef HAVE_DBUS_DBUS_H |
| 28 | #define SDL_USE_LIBDBUS 1 |
| 29 | #include <dbus/dbus.h> |
| 30 | |
| 31 | #ifndef DBUS_TIMEOUT_USE_DEFAULT |
| 32 | #define DBUS_TIMEOUT_USE_DEFAULT -1 |
| 33 | #endif |
| 34 | #ifndef DBUS_TIMEOUT_INFINITE |
| 35 | #define DBUS_TIMEOUT_INFINITE ((int) 0x7fffffff) |
| 36 | #endif |
| 37 | #ifndef DBUS_TYPE_UNIX_FD |
| 38 | #define DBUS_TYPE_UNIX_FD ((int) 'h') |
| 39 | #endif |
| 40 | |
| 41 | typedef struct SDL_DBusContext |
| 42 | { |
| 43 | DBusConnection *session_conn; |
| 44 | DBusConnection *system_conn; |
| 45 | |
| 46 | DBusConnection *(*bus_get_private)(DBusBusType, DBusError *); |
| 47 | dbus_bool_t (*bus_register)(DBusConnection *, DBusError *); |
| 48 | void (*bus_add_match)(DBusConnection *, const char *, DBusError *); |
| 49 | void (*bus_remove_match)(DBusConnection *, const char *, DBusError *); |
| 50 | DBusConnection *(*connection_open_private)(const char *, DBusError *); |
| 51 | void (*connection_set_exit_on_disconnect)(DBusConnection *, dbus_bool_t); |
| 52 | dbus_bool_t (*connection_get_is_connected)(DBusConnection *); |
| 53 | dbus_bool_t (*connection_add_filter)(DBusConnection *, DBusHandleMessageFunction, void *, DBusFreeFunction); |
| 54 | dbus_bool_t (*connection_remove_filter)(DBusConnection *, DBusHandleMessageFunction, void *); |
| 55 | dbus_bool_t (*connection_try_register_object_path)(DBusConnection *, const char *, |
| 56 | const DBusObjectPathVTable *, void *, DBusError *); |
| 57 | dbus_bool_t (*connection_send)(DBusConnection *, DBusMessage *, dbus_uint32_t *); |
| 58 | DBusMessage *(*connection_send_with_reply_and_block)(DBusConnection *, DBusMessage *, int, DBusError *); |
| 59 | void (*connection_close)(DBusConnection *); |
| 60 | void (*connection_ref)(DBusConnection *); |
| 61 | void (*connection_unref)(DBusConnection *); |
| 62 | void (*connection_flush)(DBusConnection *); |
| 63 | dbus_bool_t (*connection_read_write)(DBusConnection *, int); |
| 64 | dbus_bool_t (*connection_read_write_dispatch)(DBusConnection *, int); |
| 65 | DBusDispatchStatus (*connection_dispatch)(DBusConnection *); |
| 66 | dbus_bool_t (*message_is_signal)(DBusMessage *, const char *, const char *); |
| 67 | dbus_bool_t (*message_has_path)(DBusMessage *, const char *); |
| 68 | DBusMessage *(*message_new_method_call)(const char *, const char *, const char *, const char *); |
| 69 | dbus_bool_t (*message_append_args)(DBusMessage *, int, ...); |
| 70 | dbus_bool_t (*message_append_args_valist)(DBusMessage *, int, va_list); |
| 71 | void (*message_iter_init_append)(DBusMessage *, DBusMessageIter *); |
| 72 | dbus_bool_t (*message_iter_open_container)(DBusMessageIter *, int, const char *, DBusMessageIter *); |
| 73 | dbus_bool_t (*message_iter_append_basic)(DBusMessageIter *, int, const void *); |
| 74 | dbus_bool_t (*message_iter_close_container)(DBusMessageIter *, DBusMessageIter *); |
| 75 | dbus_bool_t (*message_get_args)(DBusMessage *, DBusError *, int, ...); |
| 76 | dbus_bool_t (*message_get_args_valist)(DBusMessage *, DBusError *, int, va_list); |
| 77 | dbus_bool_t (*message_iter_init)(DBusMessage *, DBusMessageIter *); |
| 78 | dbus_bool_t (*message_iter_next)(DBusMessageIter *); |
| 79 | void (*message_iter_get_basic)(DBusMessageIter *, void *); |
| 80 | int (*message_iter_get_arg_type)(DBusMessageIter *); |
| 81 | void (*message_iter_recurse)(DBusMessageIter *, DBusMessageIter *); |
| 82 | void (*message_unref)(DBusMessage *); |
| 83 | dbus_bool_t (*threads_init_default)(void); |
| 84 | void (*error_init)(DBusError *); |
| 85 | dbus_bool_t (*error_is_set)(const DBusError *); |
| 86 | dbus_bool_t (*error_has_name)(const DBusError *, const char *); |
| 87 | void (*error_free)(DBusError *); |
| 88 | char *(*get_local_machine_id)(void); |
| 89 | char *(*try_get_local_machine_id)(DBusError *); |
| 90 | void (*free)(void *); |
| 91 | void (*free_string_array)(char **); |
| 92 | void (*shutdown)(void); |
| 93 | |
| 94 | } SDL_DBusContext; |
| 95 | |
| 96 | extern void SDL_DBus_Init(void); |
| 97 | extern void SDL_DBus_Quit(void); |
| 98 | extern SDL_DBusContext *SDL_DBus_GetContext(void); |
| 99 | |
| 100 | // These use the built-in Session connection. |
| 101 | extern bool SDL_DBus_CallMethod(const char *node, const char *path, const char *interface, const char *method, ...); |
| 102 | extern bool SDL_DBus_CallVoidMethod(const char *node, const char *path, const char *interface, const char *method, ...); |
| 103 | extern bool SDL_DBus_QueryProperty(const char *node, const char *path, const char *interface, const char *property, int expectedtype, void *result); |
| 104 | |
| 105 | // These use whatever connection you like. |
| 106 | extern bool SDL_DBus_CallMethodOnConnection(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...); |
| 107 | extern bool SDL_DBus_CallVoidMethodOnConnection(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *method, ...); |
| 108 | extern bool SDL_DBus_QueryPropertyOnConnection(DBusConnection *conn, const char *node, const char *path, const char *interface, const char *property, int expectedtype, void *result); |
| 109 | |
| 110 | extern void SDL_DBus_ScreensaverTickle(void); |
| 111 | extern bool SDL_DBus_ScreensaverInhibit(bool inhibit); |
| 112 | |
| 113 | extern void SDL_DBus_PumpEvents(void); |
| 114 | extern char *SDL_DBus_GetLocalMachineId(void); |
| 115 | |
| 116 | extern char **SDL_DBus_DocumentsPortalRetrieveFiles(const char *key, int *files_count); |
| 117 | |
| 118 | extern int SDL_DBus_CameraPortalRequestAccess(void); |
| 119 | |
| 120 | #endif // HAVE_DBUS_DBUS_H |
| 121 | |
| 122 | #endif // SDL_dbus_h_ |
| 123 | |