]>
Commit | Line | Data |
---|---|---|
142ca628 MAL |
1 | /* |
2 | * QEMU DBus display | |
3 | * | |
4 | * Copyright (c) 2021 Marc-André Lureau <marcandre.lureau@redhat.com> | |
5 | * | |
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy | |
7 | * of this software and associated documentation files (the "Software"), to deal | |
8 | * in the Software without restriction, including without limitation the rights | |
9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
10 | * copies of the Software, and to permit persons to whom the Software is | |
11 | * furnished to do so, subject to the following conditions: | |
12 | * | |
13 | * The above copyright notice and this permission notice shall be included in | |
14 | * all copies or substantial portions of the Software. | |
15 | * | |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
19 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
22 | * THE SOFTWARE. | |
23 | */ | |
24 | #ifndef UI_DBUS_H_ | |
25 | #define UI_DBUS_H_ | |
26 | ||
3e301c8d | 27 | #include "chardev/char-socket.h" |
142ca628 MAL |
28 | #include "qemu/dbus.h" |
29 | #include "qom/object.h" | |
30 | #include "ui/console.h" | |
ff1a5810 | 31 | #include "ui/clipboard.h" |
142ca628 MAL |
32 | |
33 | #include "dbus-display1.h" | |
34 | ||
ff1a5810 MAL |
35 | typedef struct DBusClipboardRequest { |
36 | GDBusMethodInvocation *invocation; | |
37 | QemuClipboardType type; | |
38 | guint timeout_id; | |
39 | } DBusClipboardRequest; | |
40 | ||
142ca628 MAL |
41 | struct DBusDisplay { |
42 | Object parent; | |
43 | ||
44 | DisplayGLMode gl_mode; | |
99997823 | 45 | bool p2p; |
142ca628 | 46 | char *dbus_addr; |
739362d4 | 47 | char *audiodev; |
142ca628 MAL |
48 | DisplayGLCtx glctx; |
49 | ||
50 | GDBusConnection *bus; | |
51 | GDBusObjectManagerServer *server; | |
52 | QemuDBusDisplay1VM *iface; | |
53 | GPtrArray *consoles; | |
99997823 | 54 | GCancellable *add_client_cancellable; |
ff1a5810 MAL |
55 | |
56 | QemuClipboardPeer clipboard_peer; | |
57 | QemuDBusDisplay1Clipboard *clipboard; | |
58 | QemuDBusDisplay1Clipboard *clipboard_proxy; | |
59 | DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT]; | |
3e301c8d MAL |
60 | |
61 | Notifier notifier; | |
142ca628 MAL |
62 | }; |
63 | ||
64 | #define TYPE_DBUS_DISPLAY "dbus-display" | |
65 | OBJECT_DECLARE_SIMPLE_TYPE(DBusDisplay, DBUS_DISPLAY) | |
66 | ||
3e301c8d MAL |
67 | void dbus_display_notifier_add(Notifier *notifier); |
68 | ||
142ca628 MAL |
69 | #define DBUS_DISPLAY_TYPE_CONSOLE dbus_display_console_get_type() |
70 | G_DECLARE_FINAL_TYPE(DBusDisplayConsole, | |
71 | dbus_display_console, | |
72 | DBUS_DISPLAY, | |
73 | CONSOLE, | |
74 | GDBusObjectSkeleton) | |
75 | ||
76 | DBusDisplayConsole * | |
77 | dbus_display_console_new(DBusDisplay *display, QemuConsole *con); | |
78 | ||
79 | int | |
80 | dbus_display_console_get_index(DBusDisplayConsole *ddc); | |
81 | ||
82 | #define DBUS_DISPLAY_TYPE_LISTENER dbus_display_listener_get_type() | |
83 | G_DECLARE_FINAL_TYPE(DBusDisplayListener, | |
84 | dbus_display_listener, | |
85 | DBUS_DISPLAY, | |
86 | LISTENER, | |
87 | GObject) | |
88 | ||
89 | DBusDisplayListener * | |
90 | dbus_display_listener_new(const char *bus_name, | |
91 | GDBusConnection *conn, | |
92 | DBusDisplayConsole *console); | |
93 | ||
94 | DBusDisplayConsole * | |
95 | dbus_display_listener_get_console(DBusDisplayListener *ddl); | |
96 | ||
97 | const char * | |
98 | dbus_display_listener_get_bus_name(DBusDisplayListener *ddl); | |
99 | ||
100 | extern const DisplayChangeListenerOps dbus_gl_dcl_ops; | |
101 | extern const DisplayChangeListenerOps dbus_dcl_ops; | |
102 | ||
3e301c8d MAL |
103 | #define TYPE_CHARDEV_DBUS "chardev-dbus" |
104 | ||
105 | typedef struct DBusChardevClass { | |
106 | SocketChardevClass parent_class; | |
107 | ||
108 | void (*parent_chr_be_event)(Chardev *s, QEMUChrEvent event); | |
109 | } DBusChardevClass; | |
110 | ||
111 | DECLARE_CLASS_CHECKERS(DBusChardevClass, DBUS_CHARDEV, | |
112 | TYPE_CHARDEV_DBUS) | |
113 | ||
114 | typedef struct DBusChardev { | |
115 | SocketChardev parent; | |
116 | ||
117 | bool exported; | |
118 | QemuDBusDisplay1Chardev *iface; | |
119 | } DBusChardev; | |
120 | ||
121 | DECLARE_INSTANCE_CHECKER(DBusChardev, DBUS_CHARDEV, TYPE_CHARDEV_DBUS) | |
122 | ||
123 | #define CHARDEV_IS_DBUS(chr) \ | |
124 | object_dynamic_cast(OBJECT(chr), TYPE_CHARDEV_DBUS) | |
125 | ||
126 | typedef enum { | |
127 | DBUS_DISPLAY_CHARDEV_OPEN, | |
128 | DBUS_DISPLAY_CHARDEV_CLOSE, | |
129 | } DBusDisplayEventType; | |
130 | ||
131 | typedef struct DBusDisplayEvent { | |
132 | DBusDisplayEventType type; | |
133 | union { | |
134 | DBusChardev *chardev; | |
135 | }; | |
136 | } DBusDisplayEvent; | |
137 | ||
138 | void dbus_display_notify(DBusDisplayEvent *event); | |
139 | ||
140 | void dbus_chardev_init(DBusDisplay *dpy); | |
141 | ||
ff1a5810 MAL |
142 | void dbus_clipboard_init(DBusDisplay *dpy); |
143 | ||
142ca628 | 144 | #endif /* UI_DBUS_H_ */ |