QWaylandDisplay::QWaylandDisplay(void)
: argb_visual(0), premultiplied_argb_visual(0), rgb_visual(0)
{
+ qRegisterMetaType<uint32_t>("uint32_t");
+
mDisplay = wl_display_connect(NULL);
if (mDisplay == NULL) {
qErrnoWarning(errno, "Failed to create display");
blockingReadEvents();
- qRegisterMetaType<uint32_t>("uint32_t");
-
#ifdef QT_WAYLAND_GL_SUPPORT
mEglIntegration->initialize();
#endif
mInputDevices.append(inputDevice);
} else if (interface == "wl_selection_offer") {
QPlatformIntegration *plat = QApplicationPrivate::platformIntegration();
- QWaylandClipboard *clipboard = static_cast<QWaylandClipboard *>(plat->clipboard());
- clipboard->createSelectionOffer(id);
+ mSelectionOfferId = id;
+ if (plat)
+ handleSelectionOffer(id);
+ else
+ QMetaObject::invokeMethod(this, "handleSelectionOffer",
+ Qt::QueuedConnection, Q_ARG(uint32_t, 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)
void blockingReadEvents();
void flushRequests();
+private slots:
+ void handleSelectionOffer(uint32_t id);
+
private:
void waitForScreens();
void displayHandleGlobal(uint32_t id,
bool mScreensInitialized;
uint32_t mSocketMask;
+ uint32_t mSelectionOfferId;
struct wl_visual *argb_visual, *premultiplied_argb_visual, *rgb_visual;