From 6341bf99c981aa3cfbb01589e499aa4b3f6dca21 Mon Sep 17 00:00:00 2001 From: Pier Luigi Fiorini Date: Tue, 12 May 2015 08:29:41 +0200 Subject: Send keyboard repeat information Complete the API for keyboard rate and delay that was previously implemented sending the information to clients. Back then this wasn't possible for lack of Wayland >= 1.6 on the CI system. Change-Id: I95bab22bf4eea6549d2f8a762341c6485a24665c Reviewed-by: Johan Helsing Reviewed-by: Giulio Camuffo --- src/client/qwaylandinputdevice.cpp | 4 ++-- src/compositor/compositor_api/qwaylandinput.cpp | 2 +- src/compositor/compositor_api/qwaylandkeyboard.cpp | 26 ++++++++++++---------- src/compositor/compositor_api/qwaylandkeyboard_p.h | 2 ++ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp index 8f0e32f6d..e6d142396 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -173,10 +173,10 @@ QWaylandInputDevice::Touch::~Touch() QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, uint32_t id) : QObject() - , QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 3)) + , QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 4)) , mQDisplay(display) , mDisplay(display->wl_display()) - , mVersion(qMin(version, 3)) + , mVersion(qMin(version, 4)) , mCaps(0) , mDataDevice(0) , mKeyboard(0) diff --git a/src/compositor/compositor_api/qwaylandinput.cpp b/src/compositor/compositor_api/qwaylandinput.cpp index 01b69c2a9..becbf10ae 100644 --- a/src/compositor/compositor_api/qwaylandinput.cpp +++ b/src/compositor/compositor_api/qwaylandinput.cpp @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE QWaylandInputDevicePrivate::QWaylandInputDevicePrivate(QWaylandInputDevice *inputdevice, QWaylandCompositor *compositor) : QObjectPrivate() - , QtWaylandServer::wl_seat(compositor->display(), 3) + , QtWaylandServer::wl_seat(compositor->display(), 4) , compositor(compositor) , mouseFocus(Q_NULLPTR) , capabilities() diff --git a/src/compositor/compositor_api/qwaylandkeyboard.cpp b/src/compositor/compositor_api/qwaylandkeyboard.cpp index 65d31fb33..a707d6470 100644 --- a/src/compositor/compositor_api/qwaylandkeyboard.cpp +++ b/src/compositor/compositor_api/qwaylandkeyboard.cpp @@ -146,6 +146,10 @@ void QWaylandKeyboardPrivate::focused(QWaylandSurface *surface) void QWaylandKeyboardPrivate::keyboard_bind_resource(wl_keyboard::Resource *resource) { + // Send repeat information + if (resource->version() >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) + send_repeat_info(resource->handle, repeatRate, repeatDelay); + #ifndef QT_NO_WAYLAND_XKB if (xkb_context) { send_keymap(resource->handle, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, @@ -368,6 +372,14 @@ void QWaylandKeyboardPrivate::createXKBKeymap() } #endif +void QWaylandKeyboardPrivate::sendRepeatInfo() +{ + Q_FOREACH (Resource *resource, resourceMap()) { + if (resource->version() >= WL_KEYBOARD_REPEAT_INFO_SINCE_VERSION) + send_repeat_info(resource->handle, repeatRate, repeatDelay); + } +} + /*! * \class QWaylandKeyboard * \inmodule QtWaylandCompositor @@ -477,12 +489,7 @@ void QWaylandKeyboard::setRepeatRate(quint32 rate) if (d->repeatRate == rate) return; - // TODO: As of today 2015-11-25, we don't support Wayland 1.6 - // because of CI limitations. Once the protocol is updated - // we can send keyboard repeat information to the client as - // per wl_seat version 4 - - qWarning("Setting QWaylandKeyboard::repeatRate has no effect until QtWaylandCompositor support wl_seat 4"); + d->sendRepeatInfo(); d->repeatRate = rate; Q_EMIT repeatRateChanged(rate); @@ -507,12 +514,7 @@ void QWaylandKeyboard::setRepeatDelay(quint32 delay) if (d->repeatDelay == delay) return; - // TODO: As of today 2015-11-25, we don't support Wayland 1.6 - // because of CI limitations. Once the protocol is updated - // we can send keyboard repeat information to the client as - // per wl_seat version 4 - - qWarning("Setting QWaylandKeyboard::repeatDelay has no effect until QtWaylandCompositor support wl_seat 4"); + d->sendRepeatInfo(); d->repeatDelay = delay; Q_EMIT repeatDelayChanged(delay); diff --git a/src/compositor/compositor_api/qwaylandkeyboard_p.h b/src/compositor/compositor_api/qwaylandkeyboard_p.h index fe0b30dd7..49891d2ce 100644 --- a/src/compositor/compositor_api/qwaylandkeyboard_p.h +++ b/src/compositor/compositor_api/qwaylandkeyboard_p.h @@ -109,6 +109,8 @@ private: #endif static uint toWaylandXkbV1Key(const uint nativeScanCode); + void sendRepeatInfo(); + QWaylandInputDevice *seat; QWaylandSurface *focus; -- cgit v1.2.3