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 | |