diff options
Diffstat (limited to 'src/plugins/platforms/wayland')
6 files changed, 17 insertions, 28 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandclipboard.cpp b/src/plugins/platforms/wayland/qwaylandclipboard.cpp index b7f6ae535b..1ef063fec1 100644 --- a/src/plugins/platforms/wayland/qwaylandclipboard.cpp +++ b/src/plugins/platforms/wayland/qwaylandclipboard.cpp @@ -50,7 +50,7 @@ #include <QtCore/QtDebug> #include <QtGui/private/qdnd_p.h> -static QWaylandClipboard *clipboard; +static QWaylandClipboard *clipboard = 0; class QWaylandMimeData : public QInternalMimeData { @@ -162,10 +162,16 @@ void QWaylandSelection::cancelled(void *data, struct wl_selection *selection) delete static_cast<QWaylandSelection *>(data); } +QWaylandClipboard *QWaylandClipboard::instance(QWaylandDisplay *display) +{ + if (!clipboard) + clipboard = new QWaylandClipboard(display); + return clipboard; +} + QWaylandClipboard::QWaylandClipboard(QWaylandDisplay *display) : mDisplay(display), mMimeDataIn(0), mOffer(0) { - clipboard = this; } QWaylandClipboard::~QWaylandClipboard() diff --git a/src/plugins/platforms/wayland/qwaylandclipboard.h b/src/plugins/platforms/wayland/qwaylandclipboard.h index f45fb8da4c..87294342d7 100644 --- a/src/plugins/platforms/wayland/qwaylandclipboard.h +++ b/src/plugins/platforms/wayland/qwaylandclipboard.h @@ -61,7 +61,8 @@ public slots: class QWaylandClipboard : public QPlatformClipboard { public: - QWaylandClipboard(QWaylandDisplay *display); + static QWaylandClipboard *instance(QWaylandDisplay *display); + ~QWaylandClipboard(); QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard); @@ -75,6 +76,8 @@ public: QVariant retrieveData(const QString &mimeType, QVariant::Type type) const; private: + QWaylandClipboard(QWaylandDisplay *display); + static void offer(void *data, struct wl_selection_offer *selection_offer, const char *type); diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 93c98e3d7c..69ec6adc0c 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -126,9 +126,12 @@ const struct wl_shell_listener QWaylandDisplay::shellListener = { QWaylandDisplay::shellHandleConfigure, }; +static QWaylandDisplay *display = 0; + QWaylandDisplay::QWaylandDisplay(void) : argb_visual(0), premultiplied_argb_visual(0), rgb_visual(0) { + display = this; qRegisterMetaType<uint32_t>("uint32_t"); mDisplay = wl_display_connect(NULL); @@ -309,25 +312,10 @@ void QWaylandDisplay::displayHandleGlobal(uint32_t id, new QWaylandInputDevice(mDisplay, id); mInputDevices.append(inputDevice); } else if (interface == "wl_selection_offer") { - QPlatformIntegration *plat = QApplicationPrivate::platformIntegration(); - mSelectionOfferId = id; - if (plat) - handleSelectionOffer(id); - else - QMetaObject::invokeMethod(this, "handleSelectionOffer", - Qt::QueuedConnection, Q_ARG(uint32_t, id)); + QWaylandClipboard::instance(display)->createSelectionOffer(id); } } -void QWaylandDisplay::handleSelectionOffer(uint32_t id) -{ - if (mSelectionOfferId != id) - return; - QPlatformIntegration *plat = QApplicationPrivate::platformIntegration(); - QWaylandClipboard *clipboard = static_cast<QWaylandClipboard *>(plat->clipboard()); - clipboard->createSelectionOffer(id); -} - void QWaylandDisplay::handleVisual(void *data, struct wl_compositor *compositor, uint32_t id, uint32_t token) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h index 87a3167a6d..4dff24d086 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay.h @@ -97,9 +97,6 @@ public slots: void blockingReadEvents(); void flushRequests(); -private slots: - void handleSelectionOffer(uint32_t id); - private: void waitForScreens(); void displayHandleGlobal(uint32_t id, @@ -118,7 +115,6 @@ private: bool mScreensInitialized; uint32_t mSocketMask; - uint32_t mSelectionOfferId; struct wl_visual *argb_visual, *premultiplied_argb_visual, *rgb_visual; diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 8257bca557..5df71dc936 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -65,7 +65,6 @@ QWaylandIntegration::QWaylandIntegration(bool useOpenGL) , mDisplay(new QWaylandDisplay()) , mUseOpenGL(useOpenGL) , mNativeInterface(new QWaylandNativeInterface) - , mClipboard(0) { } @@ -137,7 +136,5 @@ bool QWaylandIntegration::hasOpenGL() const QPlatformClipboard *QWaylandIntegration::clipboard() const { - if (!mClipboard) - mClipboard = new QWaylandClipboard(mDisplay); - return mClipboard; + return QWaylandClipboard::instance(mDisplay); } diff --git a/src/plugins/platforms/wayland/qwaylandintegration.h b/src/plugins/platforms/wayland/qwaylandintegration.h index c7dc89d928..f617d9697b 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.h +++ b/src/plugins/platforms/wayland/qwaylandintegration.h @@ -74,7 +74,6 @@ private: QWaylandDisplay *mDisplay; bool mUseOpenGL; QPlatformNativeInterface *mNativeInterface; - mutable QPlatformClipboard *mClipboard; }; QT_END_NAMESPACE |