summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylandinputdevice.cpp')
-rw-r--r--src/plugins/platforms/wayland/qwaylandinputdevice.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
index ccaabee1d..0e32b24b8 100644
--- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
+++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
@@ -44,6 +44,7 @@
#include "qwaylandintegration.h"
#include "qwaylandwindow.h"
#include "qwaylandbuffer.h"
+#include "qwaylanddatadevicemanager.h"
#include <QtGui/private/qpixmap_raster_p.h>
#include <QtGui/QPlatformWindow>
@@ -52,6 +53,8 @@
#include <unistd.h>
#include <fcntl.h>
+#include <QtGui/QGuiApplication>
+
#ifndef QT_NO_WAYLAND_XKB
#include <X11/extensions/XKBcommon.h>
#include <X11/keysym.h>
@@ -61,6 +64,7 @@ QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display,
uint32_t id)
: mQDisplay(display)
, mDisplay(display->wl_display())
+ , mTransferDevice(0)
, mPointerFocus(NULL)
, mKeyboardFocus(NULL)
, mButtons(0)
@@ -83,6 +87,10 @@ QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display,
mXkb = xkb_compile_keymap_from_rules(&names);
#endif
+
+ if (mQDisplay->dndSelectionHandler()) {
+ mTransferDevice = mQDisplay->dndSelectionHandler()->getDataDevice(this);
+ }
}
void QWaylandInputDevice::handleWindowDestroyed(QWaylandWindow *window)
@@ -93,6 +101,17 @@ void QWaylandInputDevice::handleWindowDestroyed(QWaylandWindow *window)
mKeyboardFocus = 0;
}
+void QWaylandInputDevice::setTransferDevice(struct wl_data_device *device)
+{
+ mTransferDevice = device;
+}
+
+struct wl_data_device *QWaylandInputDevice::transferDevice() const
+{
+ Q_ASSERT(mTransferDevice);
+ return mTransferDevice;
+}
+
void QWaylandInputDevice::inputHandleMotion(void *data,
struct wl_input_device *input_device,
uint32_t time,
@@ -345,9 +364,11 @@ void QWaylandInputDevice::inputHandleKeyboardFocus(void *data,
if (surface) {
window = (QWaylandWindow *) wl_surface_get_user_data(surface);
inputDevice->mKeyboardFocus = window;
+ inputDevice->mQDisplay->setLastKeyboardFocusInputDevice(inputDevice);
QWindowSystemInterface::handleWindowActivated(window->window());
} else {
inputDevice->mKeyboardFocus = NULL;
+ inputDevice->mQDisplay->setLastKeyboardFocusInputDevice(0);
QWindowSystemInterface::handleWindowActivated(0);
}
}