]>
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 | */ | |
9c092804 MA |
24 | |
25 | #ifndef UI_DBUS_H | |
26 | #define UI_DBUS_H | |
142ca628 | 27 | |
3e301c8d | 28 | #include "chardev/char-socket.h" |
142ca628 MAL |
29 | #include "qemu/dbus.h" |
30 | #include "qom/object.h" | |
31 | #include "ui/console.h" | |
ff1a5810 | 32 | #include "ui/clipboard.h" |
142ca628 | 33 | |
0e902f59 | 34 | #include "ui/dbus-display1.h" |
142ca628 | 35 | |
ff1a5810 MAL |
36 | typedef struct DBusClipboardRequest { |
37 | GDBusMethodInvocation *invocation; | |
38 | QemuClipboardType type; | |
39 | guint timeout_id; | |
40 | } DBusClipboardRequest; | |
41 | ||
142ca628 MAL |
42 | struct DBusDisplay { |
43 | Object parent; | |
44 | ||
45 | DisplayGLMode gl_mode; | |
99997823 | 46 | bool p2p; |
142ca628 | 47 | char *dbus_addr; |
739362d4 | 48 | char *audiodev; |
142ca628 MAL |
49 | DisplayGLCtx glctx; |
50 | ||
51 | GDBusConnection *bus; | |
52 | GDBusObjectManagerServer *server; | |
53 | QemuDBusDisplay1VM *iface; | |
54 | GPtrArray *consoles; | |
99997823 | 55 | GCancellable *add_client_cancellable; |
ff1a5810 MAL |
56 | |
57 | QemuClipboardPeer clipboard_peer; | |
58 | QemuDBusDisplay1Clipboard *clipboard; | |
59 | QemuDBusDisplay1Clipboard *clipboard_proxy; | |
60 | DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT]; | |
3e301c8d MAL |
61 | |
62 | Notifier notifier; | |
142ca628 MAL |
63 | }; |
64 | ||
65 | #define TYPE_DBUS_DISPLAY "dbus-display" | |
66 | OBJECT_DECLARE_SIMPLE_TYPE(DBusDisplay, DBUS_DISPLAY) | |
67 | ||
3e301c8d MAL |
68 | void dbus_display_notifier_add(Notifier *notifier); |
69 | ||
142ca628 MAL |
70 | #define DBUS_DISPLAY_TYPE_CONSOLE dbus_display_console_get_type() |
71 | G_DECLARE_FINAL_TYPE(DBusDisplayConsole, | |
72 | dbus_display_console, | |
73 | DBUS_DISPLAY, | |
74 | CONSOLE, | |
75 | GDBusObjectSkeleton) | |
76 | ||
77 | DBusDisplayConsole * | |
78 | dbus_display_console_new(DBusDisplay *display, QemuConsole *con); | |
79 | ||
80 | int | |
81 | dbus_display_console_get_index(DBusDisplayConsole *ddc); | |
82 | ||
417a2319 MAL |
83 | |
84 | extern const DisplayChangeListenerOps dbus_console_dcl_ops; | |
85 | ||
142ca628 MAL |
86 | #define DBUS_DISPLAY_TYPE_LISTENER dbus_display_listener_get_type() |
87 | G_DECLARE_FINAL_TYPE(DBusDisplayListener, | |
88 | dbus_display_listener, | |
89 | DBUS_DISPLAY, | |
90 | LISTENER, | |
91 | GObject) | |
92 | ||
93 | DBusDisplayListener * | |
94 | dbus_display_listener_new(const char *bus_name, | |
95 | GDBusConnection *conn, | |
96 | DBusDisplayConsole *console); | |
97 | ||
98 | DBusDisplayConsole * | |
99 | dbus_display_listener_get_console(DBusDisplayListener *ddl); | |
100 | ||
101 | const char * | |
102 | dbus_display_listener_get_bus_name(DBusDisplayListener *ddl); | |
103 | ||
104 | extern const DisplayChangeListenerOps dbus_gl_dcl_ops; | |
105 | extern const DisplayChangeListenerOps dbus_dcl_ops; | |
106 | ||
3e301c8d MAL |
107 | #define TYPE_CHARDEV_DBUS "chardev-dbus" |
108 | ||
109 | typedef struct DBusChardevClass { | |
110 | SocketChardevClass parent_class; | |
111 | ||
112 | void (*parent_chr_be_event)(Chardev *s, QEMUChrEvent event); | |
113 | } DBusChardevClass; | |
114 | ||
115 | DECLARE_CLASS_CHECKERS(DBusChardevClass, DBUS_CHARDEV, | |
116 | TYPE_CHARDEV_DBUS) | |
117 | ||
118 | typedef struct DBusChardev { | |
119 | SocketChardev parent; | |
120 | ||
121 | bool exported; | |
122 | QemuDBusDisplay1Chardev *iface; | |
123 | } DBusChardev; | |
124 | ||
125 | DECLARE_INSTANCE_CHECKER(DBusChardev, DBUS_CHARDEV, TYPE_CHARDEV_DBUS) | |
126 | ||
127 | #define CHARDEV_IS_DBUS(chr) \ | |
128 | object_dynamic_cast(OBJECT(chr), TYPE_CHARDEV_DBUS) | |
129 | ||
130 | typedef enum { | |
131 | DBUS_DISPLAY_CHARDEV_OPEN, | |
132 | DBUS_DISPLAY_CHARDEV_CLOSE, | |
133 | } DBusDisplayEventType; | |
134 | ||
135 | typedef struct DBusDisplayEvent { | |
136 | DBusDisplayEventType type; | |
137 | union { | |
138 | DBusChardev *chardev; | |
139 | }; | |
140 | } DBusDisplayEvent; | |
141 | ||
142 | void dbus_display_notify(DBusDisplayEvent *event); | |
143 | ||
144 | void dbus_chardev_init(DBusDisplay *dpy); | |
145 | ||
ff1a5810 MAL |
146 | void dbus_clipboard_init(DBusDisplay *dpy); |
147 | ||
9c092804 | 148 | #endif /* UI_DBUS_H */ |