Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qxcbclipboard.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QXCBCLIPBOARD_H
5#define QXCBCLIPBOARD_H
6
7#include <qpa/qplatformclipboard.h>
8#include <qxcbobject.h>
9#include <xcb/xcb.h>
10#include <xcb/xfixes.h>
11
12#include <QtCore/qobject.h>
13#include <QtCore/qmap.h>
14
16
17#ifndef QT_NO_CLIPBOARD
18
19class QXcbConnection;
20class QXcbScreen;
21class QXcbClipboard;
23
25{
27public:
28 QXcbClipboardTransaction(QXcbClipboard *clipboard, xcb_window_t w, xcb_atom_t p,
29 QByteArray d, xcb_atom_t t, int f);
31
32 bool updateIncrementalProperty(const xcb_property_notify_event_t *event);
33
34protected:
35 void timerEvent(QTimerEvent *ev) override;
36
37private:
38 QXcbClipboard *m_clipboard;
39 xcb_window_t m_window;
40 xcb_atom_t m_property;
41 QByteArray m_data;
42 xcb_atom_t m_target;
43 uint8_t m_format;
44 uint m_offset = 0;
45 int m_abortTimerId = 0;
46};
47
49{
50public:
53
56
57 bool supportsMode(QClipboard::Mode mode) const override;
58 bool ownsMode(QClipboard::Mode mode) const override;
59
60 QXcbScreen *screen() const;
61
62 xcb_window_t requestor() const;
63 void setRequestor(xcb_window_t window);
64
65 void handleSelectionRequest(xcb_selection_request_event_t *event);
66 void handleSelectionClearRequest(xcb_selection_clear_event_t *event);
67 void handleXFixesSelectionRequest(xcb_xfixes_selection_notify_event_t *event);
68
69 bool clipboardReadProperty(xcb_window_t win, xcb_atom_t property, bool deleteProperty, QByteArray *buffer, int *size, xcb_atom_t *type, int *format);
70 QByteArray clipboardReadIncrementalProperty(xcb_window_t win, xcb_atom_t property, int nbytes, bool nullterm);
71
72 QByteArray getDataInFormat(xcb_atom_t modeAtom, xcb_atom_t fmtatom);
73
74 bool handlePropertyNotify(const xcb_generic_event_t *event);
75
76 QByteArray getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property, xcb_timestamp_t t = 0);
77
78 int increment() const { return m_maxPropertyRequestDataBytes; }
79 int clipboardTimeout() const { return clipboard_timeout; }
80
81 void removeTransaction(xcb_window_t window) { m_transactions.remove(window); }
82
83private:
84 xcb_generic_event_t *waitForClipboardEvent(xcb_window_t window, int type, bool checkManager = false);
85
86 xcb_atom_t sendTargetsSelection(QMimeData *d, xcb_window_t window, xcb_atom_t property);
87 xcb_atom_t sendSelection(QMimeData *d, xcb_atom_t target, xcb_window_t window, xcb_atom_t property);
88
89 xcb_atom_t atomForMode(QClipboard::Mode mode) const;
90 QClipboard::Mode modeForAtom(xcb_atom_t atom) const;
91
92 // Selection and Clipboard
93 QScopedPointer<QXcbClipboardMime> m_xClipboard[2];
94 QMimeData *m_clientClipboard[2];
95 xcb_timestamp_t m_timestamp[2];
96
97 xcb_window_t m_requestor = XCB_NONE;
98
99 static const int clipboard_timeout;
100
101 int m_maxPropertyRequestDataBytes = 0;
102 bool m_clipboard_closing = false;
103 xcb_timestamp_t m_incr_receive_time = 0;
104
105 using TransactionMap = QMap<xcb_window_t, QXcbClipboardTransaction *>;
106 TransactionMap m_transactions;
107};
108
109#endif // QT_NO_CLIPBOARD
110
112
113#endif // QXCBCLIPBOARD_H
\inmodule QtCore
Definition qbytearray.h:57
Mode
\keyword clipboard mode
Definition qclipboard.h:27
size_type remove(const Key &key)
Definition qmap.h:300
\inmodule QtCore
Definition qmimedata.h:16
\inmodule QtCore
Definition qobject.h:103
The QPlatformClipboard class provides an abstraction for the system clipboard.
\inmodule QtCore
Definition qcoreevent.h:366
bool updateIncrementalProperty(const xcb_property_notify_event_t *event)
void timerEvent(QTimerEvent *ev) override
This event handler can be reimplemented in a subclass to receive timer events for the object.
QXcbClipboardTransaction(QXcbClipboard *clipboard, xcb_window_t w, xcb_atom_t p, QByteArray d, xcb_atom_t t, int f)
int clipboardTimeout() const
QByteArray getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property, xcb_timestamp_t t=0)
bool clipboardReadProperty(xcb_window_t win, xcb_atom_t property, bool deleteProperty, QByteArray *buffer, int *size, xcb_atom_t *type, int *format)
QByteArray getDataInFormat(xcb_atom_t modeAtom, xcb_atom_t fmtatom)
QByteArray clipboardReadIncrementalProperty(xcb_window_t win, xcb_atom_t property, int nbytes, bool nullterm)
void removeTransaction(xcb_window_t window)
void handleSelectionClearRequest(xcb_selection_clear_event_t *event)
bool supportsMode(QClipboard::Mode mode) const override
void setRequestor(xcb_window_t window)
int increment() const
bool handlePropertyNotify(const xcb_generic_event_t *event)
QXcbClipboard(QXcbConnection *connection)
QXcbScreen * screen() const
bool ownsMode(QClipboard::Mode mode) const override
xcb_window_t requestor() const
void setMimeData(QMimeData *data, QClipboard::Mode mode) override
void handleSelectionRequest(xcb_selection_request_event_t *event)
void handleXFixesSelectionRequest(xcb_xfixes_selection_notify_event_t *event)
QXcbConnection * connection() const
Definition qxcbobject.h:17
xcb_atom_t atom(QXcbAtom::Atom atom) const
Definition qxcbobject.h:19
Combined button and popup list for selecting options.
GLenum mode
GLfloat GLfloat GLfloat w
[0]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLfloat GLfloat f
GLenum GLuint buffer
GLenum type
GLenum target
GLint GLsizei GLsizei GLenum format
struct _cl_event * event
GLdouble GLdouble t
Definition qopenglext.h:243
GLfloat GLfloat p
[1]
#define Q_OBJECT
unsigned int uint
Definition qtypes.h:34
const char property[13]
Definition qwizard.cpp:101
QWidget * win
Definition settings.cpp:6
QMimeData * mimeData
QItemSelection * selection
[0]
aWidget window() -> setWindowTitle("New Window Title")
[2]