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