summaryrefslogtreecommitdiffstats
path: root/src/compositor/wayland_wrapper/qwldatadevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/wayland_wrapper/qwldatadevice.cpp')
-rw-r--r--src/compositor/wayland_wrapper/qwldatadevice.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/compositor/wayland_wrapper/qwldatadevice.cpp b/src/compositor/wayland_wrapper/qwldatadevice.cpp
index dea72bdcd..0d196b82e 100644
--- a/src/compositor/wayland_wrapper/qwldatadevice.cpp
+++ b/src/compositor/wayland_wrapper/qwldatadevice.cpp
@@ -45,7 +45,7 @@
#include "qwaylandview.h"
#include <QtWaylandCompositor/QWaylandClient>
#include <QtWaylandCompositor/private/qwaylandcompositor_p.h>
-#include <QtWaylandCompositor/private/qwaylandinput_p.h>
+#include <QtWaylandCompositor/private/qwaylandseat_p.h>
#include <QtWaylandCompositor/private/qwaylandpointer_p.h>
#include <QtCore/QPointF>
@@ -55,16 +55,17 @@ QT_BEGIN_NAMESPACE
namespace QtWayland {
-DataDevice::DataDevice(QWaylandInputDevice *inputDevice)
+DataDevice::DataDevice(QWaylandSeat *seat)
: wl_data_device()
- , m_compositor(inputDevice->compositor())
- , m_inputDevice(inputDevice)
+ , m_compositor(seat->compositor())
+ , m_seat(seat)
, m_selectionSource(0)
, m_dragClient(0)
, m_dragDataSource(0)
, m_dragFocus(0)
, m_dragFocusResource(0)
, m_dragIcon(0)
+ , m_dragOrigin(nullptr)
{
}
@@ -123,6 +124,11 @@ QWaylandSurface *DataDevice::dragIcon() const
return m_dragIcon;
}
+QWaylandSurface *DataDevice::dragOrigin() const
+{
+ return m_dragOrigin;
+}
+
void DataDevice::sourceDestroyed(DataSource *source)
{
if (m_selectionSource == source)
@@ -148,6 +154,7 @@ void DataDevice::drop()
} else {
m_dragDataSource->cancel();
}
+ m_dragOrigin = nullptr;
setDragIcon(nullptr);
}
@@ -160,11 +167,13 @@ void DataDevice::data_device_start_drag(Resource *resource, struct ::wl_resource
{
m_dragClient = resource->client();
m_dragDataSource = source ? DataSource::fromResource(source) : 0;
+ m_dragOrigin = QWaylandSurface::fromResource(origin);
+ QWaylandDrag *drag = m_seat->drag();
setDragIcon(icon ? QWaylandSurface::fromResource(icon) : nullptr);
- Q_EMIT m_inputDevice->drag()->dragStarted();
+ Q_EMIT drag->dragStarted();
+ Q_EMIT m_dragOrigin->dragStarted(drag);
Q_UNUSED(serial);
- Q_UNUSED(origin);
//### need to verify that we have an implicit grab with this serial
}
@@ -182,7 +191,7 @@ void DataDevice::data_device_set_selection(Resource *, struct ::wl_resource *sou
if (m_selectionSource)
m_selectionSource->setDevice(this);
- QWaylandClient *focusClient = m_inputDevice->keyboard()->focusClient();
+ QWaylandClient *focusClient = m_seat->keyboard()->focusClient();
Resource *resource = focusClient ? resourceMap().value(focusClient->client()) : 0;
if (resource && m_selectionSource) {
@@ -198,7 +207,7 @@ void DataDevice::setDragIcon(QWaylandSurface *icon)
if (icon == m_dragIcon)
return;
m_dragIcon = icon;
- Q_EMIT m_inputDevice->drag()->iconChanged();
+ Q_EMIT m_seat->drag()->iconChanged();
}
}