Qemu UI subsystem

Qemu Clipboard

Introduction

The header ui/clipboard.h declares the qemu clipboard interface.

All qemu elements which want use the clipboard can register as clipboard peer. Subsequently they can set the clipboard content and get notifications for clipboard updates.

Typical users are user interfaces (gtk), remote access protocols (vnc) and devices talking to the guest (vdagent).

Even though the design allows different data types only plain text is supported for now.

enum QemuClipboardType

Constants

QEMU_CLIPBOARD_TYPE_TEXT

text/plain; charset=utf-8

QEMU_CLIPBOARD_TYPE__COUNT

type count.

enum QemuClipboardSelection

Constants

QEMU_CLIPBOARD_SELECTION_CLIPBOARD

clipboard (explitcit cut+paste).

QEMU_CLIPBOARD_SELECTION_PRIMARY

primary selection (select + middle mouse button).

QEMU_CLIPBOARD_SELECTION_SECONDARY

secondary selection (dunno).

QEMU_CLIPBOARD_SELECTION__COUNT

selection count.

struct QemuClipboardPeer

Definition

struct QemuClipboardPeer {
  const char *name;
  Notifier update;
  void (*request)(QemuClipboardInfo *info, QemuClipboardType type);
};

Members

name

peer name.

update

notifier for clipboard updates.

request

callback for clipboard data requests.

Description

Clipboard peer description.

struct QemuClipboardInfo

Definition

struct QemuClipboardInfo {
  uint32_t refcount;
  QemuClipboardPeer *owner;
  QemuClipboardSelection selection;
  struct {
    bool available;
    bool requested;
    size_t size;
    void *data;
  } types[QEMU_CLIPBOARD_TYPE__COUNT];
};

Members

refcount

reference counter.

owner

clipboard owner.

selection

clipboard selection.

types

clipboard data array (one entry per type).

Description

Clipboard content data and metadata.

void qemu_clipboard_peer_register(QemuClipboardPeer *peer)

Parameters

QemuClipboardPeer *peer

peer information.

Description

Register clipboard peer. Registering is needed for both active (set+grab clipboard) and passive (watch clipboard for updates) interaction with the qemu clipboard.

void qemu_clipboard_peer_unregister(QemuClipboardPeer *peer)

Parameters

QemuClipboardPeer *peer

peer information.

Description

Unregister clipboard peer.

QemuClipboardInfo *qemu_clipboard_info_new(QemuClipboardPeer *owner, QemuClipboardSelection selection)

Parameters

QemuClipboardPeer *owner

clipboard owner.

QemuClipboardSelection selection

clipboard selection.

Description

Allocate a new QemuClipboardInfo and initialize it with the given owner and selection.

QemuClipboardInfo is a reference-counted struct. The new struct is returned with a reference already taken (i.e. reference count is one).

QemuClipboardInfo *qemu_clipboard_info_ref(QemuClipboardInfo *info)

Parameters

QemuClipboardInfo *info

clipboard info.

Description

Increase info reference count.

void qemu_clipboard_info_unref(QemuClipboardInfo *info)

Parameters

QemuClipboardInfo *info

clipboard info.

Description

Decrease info reference count. When the count goes down to zero free the info struct itself and all clipboard data.

void qemu_clipboard_update(QemuClipboardInfo *info)

Parameters

QemuClipboardInfo *info

clipboard info.

Description

Update the qemu clipboard. Notify all registered peers (including the clipboard owner) that the qemu clipboard has been updated.

This is used for both new completely clipboard content and for clipboard data updates in response to qemu_clipboard_request() calls.

void qemu_clipboard_request(QemuClipboardInfo *info, QemuClipboardType type)

Parameters

QemuClipboardInfo *info

clipboard info.

QemuClipboardType type

clipboard data type.

Description

Request clipboard content. Typically the clipboard owner only advertises the available data types and provides the actual data only on request.

void qemu_clipboard_set_data(QemuClipboardPeer *peer, QemuClipboardInfo *info, QemuClipboardType type, uint32_t size, const void *data, bool update)

Parameters

QemuClipboardPeer *peer

clipboard peer.

QemuClipboardInfo *info

clipboard info.

QemuClipboardType type

clipboard data type.

uint32_t size

data size.

const void *data

data blob.

bool update

notify peers about the update.

Description

Set clipboard content for the given type. This function will make a copy of the content data and store that.