mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-29 08:39:23 +00:00 
			
		
		
		
	 0e902f59c1
			
		
	
	
		0e902f59c1
		
	
	
	
	
		
			
			While the source directory is always included in the include path,
the corresponding directory in the build tree is not.  Therefore,
custom_targets (e.g. ui/dbus-display1.h) must be referred to using
the full path.
This avoids a build failure when ui/dbus-chardev.c is not built as
a module:
In file included from ../ui/dbus-chardev.c:32:
../ui/dbus.h:34:10: fatal error: dbus-display1.h: No such file or directory
   34 | #include "dbus-display1.h"
      |          ^~~~~~~~~~~~~~~~~
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
	
			
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * QEMU DBus display
 | |
|  *
 | |
|  * Copyright (c) 2021 Marc-André Lureau <marcandre.lureau@redhat.com>
 | |
|  *
 | |
|  * Permission is hereby granted, free of charge, to any person obtaining a copy
 | |
|  * of this software and associated documentation files (the "Software"), to deal
 | |
|  * in the Software without restriction, including without limitation the rights
 | |
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | |
|  * copies of the Software, and to permit persons to whom the Software is
 | |
|  * furnished to do so, subject to the following conditions:
 | |
|  *
 | |
|  * The above copyright notice and this permission notice shall be included in
 | |
|  * all copies or substantial portions of the Software.
 | |
|  *
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | |
|  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | |
|  * THE SOFTWARE.
 | |
|  */
 | |
| 
 | |
| #ifndef UI_DBUS_H
 | |
| #define UI_DBUS_H
 | |
| 
 | |
| #include "chardev/char-socket.h"
 | |
| #include "qemu/dbus.h"
 | |
| #include "qom/object.h"
 | |
| #include "ui/console.h"
 | |
| #include "ui/clipboard.h"
 | |
| 
 | |
| #include "ui/dbus-display1.h"
 | |
| 
 | |
| typedef struct DBusClipboardRequest {
 | |
|     GDBusMethodInvocation *invocation;
 | |
|     QemuClipboardType type;
 | |
|     guint timeout_id;
 | |
| } DBusClipboardRequest;
 | |
| 
 | |
| struct DBusDisplay {
 | |
|     Object parent;
 | |
| 
 | |
|     DisplayGLMode gl_mode;
 | |
|     bool p2p;
 | |
|     char *dbus_addr;
 | |
|     char *audiodev;
 | |
|     DisplayGLCtx glctx;
 | |
| 
 | |
|     GDBusConnection *bus;
 | |
|     GDBusObjectManagerServer *server;
 | |
|     QemuDBusDisplay1VM *iface;
 | |
|     GPtrArray *consoles;
 | |
|     GCancellable *add_client_cancellable;
 | |
| 
 | |
|     QemuClipboardPeer clipboard_peer;
 | |
|     QemuDBusDisplay1Clipboard *clipboard;
 | |
|     QemuDBusDisplay1Clipboard *clipboard_proxy;
 | |
|     DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT];
 | |
| 
 | |
|     Notifier notifier;
 | |
| };
 | |
| 
 | |
| #define TYPE_DBUS_DISPLAY "dbus-display"
 | |
| OBJECT_DECLARE_SIMPLE_TYPE(DBusDisplay, DBUS_DISPLAY)
 | |
| 
 | |
| void dbus_display_notifier_add(Notifier *notifier);
 | |
| 
 | |
| #define DBUS_DISPLAY_TYPE_CONSOLE dbus_display_console_get_type()
 | |
| G_DECLARE_FINAL_TYPE(DBusDisplayConsole,
 | |
|                      dbus_display_console,
 | |
|                      DBUS_DISPLAY,
 | |
|                      CONSOLE,
 | |
|                      GDBusObjectSkeleton)
 | |
| 
 | |
| DBusDisplayConsole *
 | |
| dbus_display_console_new(DBusDisplay *display, QemuConsole *con);
 | |
| 
 | |
| int
 | |
| dbus_display_console_get_index(DBusDisplayConsole *ddc);
 | |
| 
 | |
| 
 | |
| extern const DisplayChangeListenerOps dbus_console_dcl_ops;
 | |
| 
 | |
| #define DBUS_DISPLAY_TYPE_LISTENER dbus_display_listener_get_type()
 | |
| G_DECLARE_FINAL_TYPE(DBusDisplayListener,
 | |
|                      dbus_display_listener,
 | |
|                      DBUS_DISPLAY,
 | |
|                      LISTENER,
 | |
|                      GObject)
 | |
| 
 | |
| DBusDisplayListener *
 | |
| dbus_display_listener_new(const char *bus_name,
 | |
|                           GDBusConnection *conn,
 | |
|                           DBusDisplayConsole *console);
 | |
| 
 | |
| DBusDisplayConsole *
 | |
| dbus_display_listener_get_console(DBusDisplayListener *ddl);
 | |
| 
 | |
| const char *
 | |
| dbus_display_listener_get_bus_name(DBusDisplayListener *ddl);
 | |
| 
 | |
| extern const DisplayChangeListenerOps dbus_gl_dcl_ops;
 | |
| extern const DisplayChangeListenerOps dbus_dcl_ops;
 | |
| 
 | |
| #define TYPE_CHARDEV_DBUS "chardev-dbus"
 | |
| 
 | |
| typedef struct DBusChardevClass {
 | |
|     SocketChardevClass parent_class;
 | |
| 
 | |
|     void (*parent_chr_be_event)(Chardev *s, QEMUChrEvent event);
 | |
| } DBusChardevClass;
 | |
| 
 | |
| DECLARE_CLASS_CHECKERS(DBusChardevClass, DBUS_CHARDEV,
 | |
|                        TYPE_CHARDEV_DBUS)
 | |
| 
 | |
| typedef struct DBusChardev {
 | |
|     SocketChardev parent;
 | |
| 
 | |
|     bool exported;
 | |
|     QemuDBusDisplay1Chardev *iface;
 | |
| } DBusChardev;
 | |
| 
 | |
| DECLARE_INSTANCE_CHECKER(DBusChardev, DBUS_CHARDEV, TYPE_CHARDEV_DBUS)
 | |
| 
 | |
| #define CHARDEV_IS_DBUS(chr) \
 | |
|     object_dynamic_cast(OBJECT(chr), TYPE_CHARDEV_DBUS)
 | |
| 
 | |
| typedef enum {
 | |
|     DBUS_DISPLAY_CHARDEV_OPEN,
 | |
|     DBUS_DISPLAY_CHARDEV_CLOSE,
 | |
| } DBusDisplayEventType;
 | |
| 
 | |
| typedef struct DBusDisplayEvent {
 | |
|     DBusDisplayEventType type;
 | |
|     union {
 | |
|         DBusChardev *chardev;
 | |
|     };
 | |
| } DBusDisplayEvent;
 | |
| 
 | |
| void dbus_display_notify(DBusDisplayEvent *event);
 | |
| 
 | |
| void dbus_chardev_init(DBusDisplay *dpy);
 | |
| 
 | |
| void dbus_clipboard_init(DBusDisplay *dpy);
 | |
| 
 | |
| #endif /* UI_DBUS_H */
 |