qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

dbus.h (4372B)


      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 
     25 #ifndef UI_DBUS_H
     26 #define UI_DBUS_H
     27 
     28 #include "chardev/char-socket.h"
     29 #include "qemu/dbus.h"
     30 #include "qom/object.h"
     31 #include "ui/console.h"
     32 #include "ui/clipboard.h"
     33 
     34 #include "ui/dbus-display1.h"
     35 
     36 typedef struct DBusClipboardRequest {
     37     GDBusMethodInvocation *invocation;
     38     QemuClipboardType type;
     39     guint timeout_id;
     40 } DBusClipboardRequest;
     41 
     42 struct DBusDisplay {
     43     Object parent;
     44 
     45     DisplayGLMode gl_mode;
     46     bool p2p;
     47     char *dbus_addr;
     48     char *audiodev;
     49     DisplayGLCtx glctx;
     50 
     51     GDBusConnection *bus;
     52     GDBusObjectManagerServer *server;
     53     QemuDBusDisplay1VM *iface;
     54     GPtrArray *consoles;
     55     GCancellable *add_client_cancellable;
     56 
     57     QemuClipboardPeer clipboard_peer;
     58     QemuDBusDisplay1Clipboard *clipboard;
     59     QemuDBusDisplay1Clipboard *clipboard_proxy;
     60     DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT];
     61 
     62     Notifier notifier;
     63 };
     64 
     65 #define TYPE_DBUS_DISPLAY "dbus-display"
     66 OBJECT_DECLARE_SIMPLE_TYPE(DBusDisplay, DBUS_DISPLAY)
     67 
     68 void dbus_display_notifier_add(Notifier *notifier);
     69 
     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 
     83 
     84 extern const DisplayChangeListenerOps dbus_console_dcl_ops;
     85 
     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 
    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 
    146 void dbus_clipboard_init(DBusDisplay *dpy);
    147 
    148 #endif /* UI_DBUS_H */