diff options
author | Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> | 2015-11-25 19:41:14 +0100 |
---|---|---|
committer | Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> | 2015-11-28 16:48:49 +0000 |
commit | 68993c012b88df43b2cd75a8c8704092760f28c0 (patch) | |
tree | 3d5b97c0960472df2cd0e8aa8d224203ceb7679b | |
parent | 02fa8b9ef89b6874effea8d219bcbba0319a263c (diff) | |
download | qtwayland-68993c012b88df43b2cd75a8c8704092760f28c0.tar.gz |
Add clients with the correct version
Wayland clients might implement an older interface version, in that
case we don't want to send unsupported requests.
To ensure that we pick the lower version between the one asked by
the client and the one we actually implement on the server.
Change-Id: I4865780505db171295897fc7f6567c6f88e598fa
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
7 files changed, 12 insertions, 12 deletions
diff --git a/src/compositor/compositor_api/qwaylandinput.cpp b/src/compositor/compositor_api/qwaylandinput.cpp index 6cb476d8..be566c70 100644 --- a/src/compositor/compositor_api/qwaylandinput.cpp +++ b/src/compositor/compositor_api/qwaylandinput.cpp @@ -114,21 +114,21 @@ void QWaylandInputDevicePrivate::seat_bind_resource(wl_seat::Resource *resource) void QWaylandInputDevicePrivate::seat_get_pointer(wl_seat::Resource *resource, uint32_t id) { if (!pointer.isNull()) { - pointer->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id); + pointer->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id, resource->version()); } } void QWaylandInputDevicePrivate::seat_get_keyboard(wl_seat::Resource *resource, uint32_t id) { if (!keyboard.isNull()) { - keyboard->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id); + keyboard->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id, resource->version()); } } void QWaylandInputDevicePrivate::seat_get_touch(wl_seat::Resource *resource, uint32_t id) { if (!touch.isNull()) { - touch->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id); + touch->addClient(QWaylandClient::fromWlClient(compositor, resource->client()), id, resource->version()); } } diff --git a/src/compositor/compositor_api/qwaylandkeyboard.cpp b/src/compositor/compositor_api/qwaylandkeyboard.cpp index 76e9a39a..f39bb3e0 100644 --- a/src/compositor/compositor_api/qwaylandkeyboard.cpp +++ b/src/compositor/compositor_api/qwaylandkeyboard.cpp @@ -557,10 +557,10 @@ void QWaylandKeyboard::setKeymap(const QWaylandKeymap &keymap) /*! * \internal */ -void QWaylandKeyboard::addClient(QWaylandClient *client, uint32_t id) +void QWaylandKeyboard::addClient(QWaylandClient *client, uint32_t id, uint32_t version) { Q_D(QWaylandKeyboard); - d->add(client->client(), id, QtWaylandServer::wl_keyboard::interfaceVersion()); + d->add(client->client(), id, qMin<uint32_t>(QtWaylandServer::wl_keyboard::interfaceVersion(), version)); } QT_END_NAMESPACE diff --git a/src/compositor/compositor_api/qwaylandkeyboard.h b/src/compositor/compositor_api/qwaylandkeyboard.h index 9ec67a71..3b2282ae 100644 --- a/src/compositor/compositor_api/qwaylandkeyboard.h +++ b/src/compositor/compositor_api/qwaylandkeyboard.h @@ -97,7 +97,7 @@ public: QWaylandSurface *focus() const; QWaylandClient *focusClient() const; - virtual void addClient(QWaylandClient *client, uint32_t id); + virtual void addClient(QWaylandClient *client, uint32_t id, uint32_t version); Q_SIGNALS: void focusChanged(QWaylandSurface *surface); diff --git a/src/compositor/compositor_api/qwaylandpointer.cpp b/src/compositor/compositor_api/qwaylandpointer.cpp index f0e2ee8e..51b1f791 100644 --- a/src/compositor/compositor_api/qwaylandpointer.cpp +++ b/src/compositor/compositor_api/qwaylandpointer.cpp @@ -273,10 +273,10 @@ bool QWaylandPointer::isButtonPressed() const /*! * \internal */ -void QWaylandPointer::addClient(QWaylandClient *client, uint32_t id) +void QWaylandPointer::addClient(QWaylandClient *client, uint32_t id, uint32_t version) { Q_D(QWaylandPointer); - d->add(client->client(), id, QtWaylandServer::wl_pointer::interfaceVersion()); + d->add(client->client(), id, qMin<uint32_t>(QtWaylandServer::wl_pointer::interfaceVersion(), version)); } /*! diff --git a/src/compositor/compositor_api/qwaylandpointer.h b/src/compositor/compositor_api/qwaylandpointer.h index 3bffde8f..78e2b527 100644 --- a/src/compositor/compositor_api/qwaylandpointer.h +++ b/src/compositor/compositor_api/qwaylandpointer.h @@ -73,7 +73,7 @@ public: bool isButtonPressed() const; - virtual void addClient(QWaylandClient *client, uint32_t id); + virtual void addClient(QWaylandClient *client, uint32_t id, uint32_t version); struct wl_resource *focusResource() const; diff --git a/src/compositor/compositor_api/qwaylandtouch.cpp b/src/compositor/compositor_api/qwaylandtouch.cpp index b2a0c6ef..74373025 100644 --- a/src/compositor/compositor_api/qwaylandtouch.cpp +++ b/src/compositor/compositor_api/qwaylandtouch.cpp @@ -221,10 +221,10 @@ void QWaylandTouch::sendFullTouchEvent(QTouchEvent *event) /*! * \internal */ -void QWaylandTouch::addClient(QWaylandClient *client, uint32_t id) +void QWaylandTouch::addClient(QWaylandClient *client, uint32_t id, uint32_t version) { Q_D(QWaylandTouch); - d->add(client->client(), id, 3); + d->add(client->client(), id, qMin<uint32_t>(QtWaylandServer::wl_touch::interfaceVersion(), version)); } /*! diff --git a/src/compositor/compositor_api/qwaylandtouch.h b/src/compositor/compositor_api/qwaylandtouch.h index 0e1f9a53..aa9ee34c 100644 --- a/src/compositor/compositor_api/qwaylandtouch.h +++ b/src/compositor/compositor_api/qwaylandtouch.h @@ -66,7 +66,7 @@ public: virtual void sendFullTouchEvent(QTouchEvent *event); - virtual void addClient(QWaylandClient *client, uint32_t id); + virtual void addClient(QWaylandClient *client, uint32_t id, uint32_t version); struct wl_resource *focusResource() const; |