summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-05-16 10:19:02 +0200
committerLars Knoll <lars.knoll@nokia.com>2011-05-16 10:19:02 +0200
commit276d60a4d6c9d1b72c4aa7df1f86e7ce9097beeb (patch)
tree73130ce8a80181fb9d234028c5057d7eb86f02ab /src/plugins/platforms
parent850b602c7a72635eb37a998089ee085d5d505c34 (diff)
parent173099696f44073441975febfa35ddfb3585e8c5 (diff)
Merge remote branch 'origin/master' into refactor
Conflicts: src/modules/qt_openvg.pri src/widgets/to_be_moved/qlinecontrol_p.h
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/wayland/qwaylandclipboard.cpp25
-rw-r--r--src/plugins/platforms/wayland/qwaylandclipboard.h9
-rw-r--r--src/plugins/platforms/xcb/xcb.pro2
3 files changed, 24 insertions, 12 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandclipboard.cpp b/src/plugins/platforms/wayland/qwaylandclipboard.cpp
index e463af5d47..77c9990d9e 100644
--- a/src/plugins/platforms/wayland/qwaylandclipboard.cpp
+++ b/src/plugins/platforms/wayland/qwaylandclipboard.cpp
@@ -96,7 +96,6 @@ public:
QWaylandSelection(QWaylandDisplay *display, QMimeData *data);
~QWaylandSelection();
-private:
static uint32_t getTime();
static void send(void *data, struct wl_selection *selection, const char *mime_type, int fd);
static void cancelled(void *data, struct wl_selection *selection);
@@ -164,7 +163,7 @@ void QWaylandSelection::cancelled(void *data, struct wl_selection *selection)
}
QWaylandClipboard::QWaylandClipboard(QWaylandDisplay *display)
- : mDisplay(display), mSelection(0), mMimeDataIn(0), mOffer(0)
+ : mDisplay(display), mMimeDataIn(0), mOffer(0)
{
clipboard = this;
}
@@ -222,6 +221,8 @@ QVariant QWaylandClipboard::retrieveData(const QString &mimeType, QVariant::Type
QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode)
{
Q_ASSERT(mode == QClipboard::Clipboard);
+ if (!mSelections.isEmpty())
+ return mSelections.last()->mMimeData;
if (!mMimeDataIn)
mMimeDataIn = new QWaylandMimeData;
mMimeDataIn->clearAll();
@@ -236,7 +237,7 @@ void QWaylandClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode)
if (!mDisplay->inputDevices().isEmpty()) {
if (!data)
data = new QMimeData;
- mSelection = new QWaylandSelection(mDisplay, data);
+ mSelections.append(new QWaylandSelection(mDisplay, data));
} else {
qWarning("QWaylandClipboard::setMimeData: No input devices");
}
@@ -266,21 +267,27 @@ void QWaylandClipboard::offer(void *data,
struct wl_selection_offer *selection_offer,
const char *type)
{
+ Q_UNUSED(data);
Q_UNUSED(selection_offer);
- QWaylandClipboard *self = static_cast<QWaylandClipboard *>(data);
- self->mOfferedMimeTypes.append(QString::fromLatin1(type));
+ clipboard->mOfferedMimeTypes.append(QString::fromLatin1(type));
}
void QWaylandClipboard::keyboardFocus(void *data,
struct wl_selection_offer *selection_offer,
wl_input_device *input_device)
{
- QWaylandClipboard *self = static_cast<QWaylandClipboard *>(data);
+ Q_UNUSED(data);
if (!input_device) {
wl_selection_offer_destroy(selection_offer);
- self->mOffer = 0;
+ clipboard->mOffer = 0;
return;
}
- self->mOffer = selection_offer;
- self->emitChanged(QClipboard::Clipboard);
+ clipboard->mOffer = selection_offer;
+ if (clipboard->mSelections.isEmpty())
+ QMetaObject::invokeMethod(&clipboard->mEmitter, "emitChanged", Qt::QueuedConnection);
+}
+
+void QWaylandClipboardSignalEmitter::emitChanged()
+{
+ clipboard->emitChanged(QClipboard::Clipboard);
}
diff --git a/src/plugins/platforms/wayland/qwaylandclipboard.h b/src/plugins/platforms/wayland/qwaylandclipboard.h
index 6a02254cae..db436b890a 100644
--- a/src/plugins/platforms/wayland/qwaylandclipboard.h
+++ b/src/plugins/platforms/wayland/qwaylandclipboard.h
@@ -51,6 +51,13 @@ class QWaylandSelection;
class QWaylandMimeData;
struct wl_selection_offer;
+class QWaylandClipboardSignalEmitter : public QObject
+{
+ Q_OBJECT
+public slots:
+ void emitChanged();
+};
+
class QWaylandClipboard : public QPlatformClipboard
{
public:
@@ -80,11 +87,11 @@ private:
static void forceRoundtrip(struct wl_display *display);
QWaylandDisplay *mDisplay;
- QWaylandSelection *mSelection;
QWaylandMimeData *mMimeDataIn;
QList<QWaylandSelection *> mSelections;
QStringList mOfferedMimeTypes;
struct wl_selection_offer *mOffer;
+ QWaylandClipboardSignalEmitter mEmitter;
};
#endif // QWAYLANDCLIPBOARD_H
diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro
index 175bdd8451..93a226bd06 100644
--- a/src/plugins/platforms/xcb/xcb.pro
+++ b/src/plugins/platforms/xcb/xcb.pro
@@ -5,8 +5,6 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
QT += core-private gui-private
-QT+=gui-private core-private
-
SOURCES = \
qxcbconnection.cpp \
qxcbintegration.cpp \