Lines Matching +full:not +full:- +full:swapped
4 * Copyright (c) 2021 Marc-André Lureau <marcandre.lureau@redhat.com>
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 #include "qemu/error-report.h"
27 #include "qemu/main-loop.h"
35 #define MIME_TEXT_PLAIN_UTF8 "text/plain;charset=utf-8"
46 info->types[type].data, in dbus_clipboard_complete_request()
47 info->types[type].size, in dbus_clipboard_complete_request()
53 dpy->clipboard, invocation, in dbus_clipboard_complete_request()
60 bool self_update = info->owner == &dpy->clipboard_peer; in dbus_clipboard_update_info()
65 if (info->owner == NULL) { in dbus_clipboard_update_info()
66 if (dpy->clipboard_proxy) { in dbus_clipboard_update_info()
68 dpy->clipboard_proxy, in dbus_clipboard_update_info()
69 info->selection, in dbus_clipboard_update_info()
70 G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); in dbus_clipboard_update_info()
75 if (self_update || !info->has_serial) { in dbus_clipboard_update_info()
79 req = &dpy->clipboard_request[info->selection]; in dbus_clipboard_update_info()
80 if (req->invocation && info->types[req->type].data) { in dbus_clipboard_update_info()
81 dbus_clipboard_complete_request(dpy, req->invocation, info, req->type); in dbus_clipboard_update_info()
82 g_clear_object(&req->invocation); in dbus_clipboard_update_info()
83 g_source_remove(req->timeout_id); in dbus_clipboard_update_info()
84 req->timeout_id = 0; in dbus_clipboard_update_info()
88 if (info->types[QEMU_CLIPBOARD_TYPE_TEXT].available) { in dbus_clipboard_update_info()
93 if (dpy->clipboard_proxy) { in dbus_clipboard_update_info()
95 dpy->clipboard_proxy, in dbus_clipboard_update_info()
96 info->selection, in dbus_clipboard_update_info()
97 info->serial, in dbus_clipboard_update_info()
99 G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL); in dbus_clipboard_update_info()
107 if (dpy->clipboard_proxy) { in dbus_clipboard_reset_serial()
109 dpy->clipboard_proxy, in dbus_clipboard_reset_serial()
111 -1, NULL, NULL, NULL); in dbus_clipboard_reset_serial()
122 switch (notify->type) { in dbus_clipboard_notify()
124 dbus_clipboard_update_info(dpy, notify->info); in dbus_clipboard_notify()
136 DBusDisplay *dpy = container_of(info->owner, DBusDisplay, clipboard_peer); in dbus_clipboard_qemu_request()
151 if (dpy->clipboard_proxy) { in dbus_clipboard_qemu_request()
153 dpy->clipboard_proxy, in dbus_clipboard_qemu_request()
154 info->selection, in dbus_clipboard_qemu_request()
156 G_DBUS_CALL_FLAGS_NONE, -1, &mime, &v_data, NULL, &err)) { in dbus_clipboard_qemu_request()
157 error_report("Failed to request clipboard: %s", err->message); in dbus_clipboard_qemu_request()
167 qemu_clipboard_set_data(&dpy->clipboard_peer, info, type, in dbus_clipboard_qemu_request()
175 if (!req->invocation) { in dbus_clipboard_request_cancelled()
180 req->invocation, in dbus_clipboard_request_cancelled()
185 g_clear_object(&req->invocation); in dbus_clipboard_request_cancelled()
186 g_source_remove(req->timeout_id); in dbus_clipboard_request_cancelled()
187 req->timeout_id = 0; in dbus_clipboard_request_cancelled()
196 for (i = 0; i < G_N_ELEMENTS(dpy->clipboard_request); ++i) { in dbus_clipboard_unregister_proxy()
197 dbus_clipboard_request_cancelled(&dpy->clipboard_request[i]); in dbus_clipboard_unregister_proxy()
200 if (!dpy->clipboard_proxy) { in dbus_clipboard_unregister_proxy()
204 name = g_dbus_proxy_get_name(G_DBUS_PROXY(dpy->clipboard_proxy)); in dbus_clipboard_unregister_proxy()
206 g_clear_object(&dpy->clipboard_proxy); in dbus_clipboard_unregister_proxy()
218 if (dpy->clipboard_proxy) { in dbus_clipboard_register()
227 dpy->clipboard_proxy = in dbus_clipboard_register()
235 if (!dpy->clipboard_proxy) { in dbus_clipboard_register()
240 "Failed to setup proxy: %s", err->message); in dbus_clipboard_register()
244 name = g_dbus_proxy_get_name(G_DBUS_PROXY(dpy->clipboard_proxy)); in dbus_clipboard_register()
247 g_object_connect(dpy->clipboard_proxy, in dbus_clipboard_register()
248 "swapped-signal::notify::g-name-owner", in dbus_clipboard_register()
252 "swapped-signal::closed", in dbus_clipboard_register()
257 qemu_dbus_display1_clipboard_complete_register(dpy->clipboard, invocation); in dbus_clipboard_register()
264 if (!dpy->clipboard_proxy || in dbus_clipboard_check_caller()
265 g_strcmp0(g_dbus_proxy_get_name(G_DBUS_PROXY(dpy->clipboard_proxy)), in dbus_clipboard_check_caller()
290 dpy->clipboard, invocation); in dbus_clipboard_unregister()
321 info = qemu_clipboard_info_new(&dpy->clipboard_peer, s); in dbus_clipboard_grab()
323 info->types[QEMU_CLIPBOARD_TYPE_TEXT].available = true; in dbus_clipboard_grab()
325 info->serial = arg_serial; in dbus_clipboard_grab()
326 info->has_serial = true; in dbus_clipboard_grab()
333 qemu_dbus_display1_clipboard_complete_grab(dpy->clipboard, invocation); in dbus_clipboard_grab()
347 qemu_clipboard_peer_release(&dpy->clipboard_peer, arg_selection); in dbus_clipboard_release()
349 qemu_dbus_display1_clipboard_complete_release(dpy->clipboard, invocation); in dbus_clipboard_release()
384 if (dpy->clipboard_request[s].invocation) { in dbus_clipboard_request()
394 if (!info || !info->owner || info->owner == &dpy->clipboard_peer) { in dbus_clipboard_request()
404 !info->types[type].available) { in dbus_clipboard_request()
413 if (info->types[type].data) { in dbus_clipboard_request()
418 dpy->clipboard_request[s].invocation = g_object_ref(invocation); in dbus_clipboard_request()
419 dpy->clipboard_request[s].type = type; in dbus_clipboard_request()
420 dpy->clipboard_request[s].timeout_id = in dbus_clipboard_request()
422 &dpy->clipboard_request[s]); in dbus_clipboard_request()
433 assert(!dpy->clipboard); in dbus_clipboard_init()
436 dpy->clipboard = qemu_dbus_display1_clipboard_skeleton_new(); in dbus_clipboard_init()
437 g_object_connect(dpy->clipboard, in dbus_clipboard_init()
438 "swapped-signal::handle-register", in dbus_clipboard_init()
440 "swapped-signal::handle-unregister", in dbus_clipboard_init()
442 "swapped-signal::handle-grab", in dbus_clipboard_init()
444 "swapped-signal::handle-release", in dbus_clipboard_init()
446 "swapped-signal::handle-request", in dbus_clipboard_init()
452 G_DBUS_INTERFACE_SKELETON(dpy->clipboard)); in dbus_clipboard_init()
453 g_dbus_object_manager_server_export(dpy->server, clipboard); in dbus_clipboard_init()
454 dpy->clipboard_peer.name = "dbus"; in dbus_clipboard_init()
455 dpy->clipboard_peer.notifier.notify = dbus_clipboard_notify; in dbus_clipboard_init()
456 dpy->clipboard_peer.request = dbus_clipboard_qemu_request; in dbus_clipboard_init()
457 qemu_clipboard_peer_register(&dpy->clipboard_peer); in dbus_clipboard_init()