mirror of https://github.com/qt/qtbase.git
wayland: Implement server-side key repeat
This implements wl_keyboard key repeat events. [ChangeLog][Third-Party Code] Update wayland.xml to 1.24.0. Change-Id: I21fc247bd95485e3c7189c47cb0cc999c431587f Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
parent
c0e526f70f
commit
b70bf61868
|
@ -8,8 +8,8 @@
|
||||||
|
|
||||||
"Description": "Wayland is a protocol for a compositor to talk to its clients.",
|
"Description": "Wayland is a protocol for a compositor to talk to its clients.",
|
||||||
"Homepage": "https://wayland.freedesktop.org",
|
"Homepage": "https://wayland.freedesktop.org",
|
||||||
"Version": "1.23.0",
|
"Version": "1.24.0",
|
||||||
"DownloadLocation": "https://gitlab.freedesktop.org/wayland/wayland/raw/1.23.0/protocol/wayland.xml",
|
"DownloadLocation": "https://gitlab.freedesktop.org/wayland/wayland/raw/1.24.0/protocol/wayland.xml",
|
||||||
"LicenseId": "MIT",
|
"LicenseId": "MIT",
|
||||||
"License": "MIT License",
|
"License": "MIT License",
|
||||||
"LicenseFile": "../MIT_LICENSE.txt",
|
"LicenseFile": "../MIT_LICENSE.txt",
|
||||||
|
|
|
@ -501,8 +501,10 @@
|
||||||
<event name="release">
|
<event name="release">
|
||||||
<description summary="compositor releases buffer">
|
<description summary="compositor releases buffer">
|
||||||
Sent when this wl_buffer is no longer used by the compositor.
|
Sent when this wl_buffer is no longer used by the compositor.
|
||||||
The client is now free to reuse or destroy this buffer and its
|
|
||||||
backing storage.
|
For more information on when release events may or may not be sent,
|
||||||
|
and what consequences it has, please see the description of
|
||||||
|
wl_surface.attach.
|
||||||
|
|
||||||
If a client receives a release event before the frame callback
|
If a client receives a release event before the frame callback
|
||||||
requested in the same wl_surface.commit that attaches this
|
requested in the same wl_surface.commit that attaches this
|
||||||
|
@ -1504,7 +1506,8 @@
|
||||||
the delivery of wl_buffer.release events becomes undefined. A well
|
the delivery of wl_buffer.release events becomes undefined. A well
|
||||||
behaved client should not rely on wl_buffer.release events in this
|
behaved client should not rely on wl_buffer.release events in this
|
||||||
case. Alternatively, a client could create multiple wl_buffer objects
|
case. Alternatively, a client could create multiple wl_buffer objects
|
||||||
from the same backing storage or use wp_linux_buffer_release.
|
from the same backing storage or use a protocol extension providing
|
||||||
|
per-commit release notifications.
|
||||||
|
|
||||||
Destroying the wl_buffer after wl_buffer.release does not change
|
Destroying the wl_buffer after wl_buffer.release does not change
|
||||||
the surface contents. Destroying the wl_buffer before wl_buffer.release
|
the surface contents. Destroying the wl_buffer before wl_buffer.release
|
||||||
|
@ -1832,6 +1835,9 @@
|
||||||
x and y, combined with the new surface size define in which
|
x and y, combined with the new surface size define in which
|
||||||
directions the surface's size changes.
|
directions the surface's size changes.
|
||||||
|
|
||||||
|
The exact semantics of wl_surface.offset are role-specific. Refer to
|
||||||
|
the documentation of specific roles for more information.
|
||||||
|
|
||||||
Surface location offset is double-buffered state, see
|
Surface location offset is double-buffered state, see
|
||||||
wl_surface.commit.
|
wl_surface.commit.
|
||||||
|
|
||||||
|
@ -1880,7 +1886,7 @@
|
||||||
</event>
|
</event>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="wl_seat" version="9">
|
<interface name="wl_seat" version="10">
|
||||||
<description summary="group of input devices">
|
<description summary="group of input devices">
|
||||||
A seat is a group of keyboards, pointer and touch devices. This
|
A seat is a group of keyboards, pointer and touch devices. This
|
||||||
object is published as a global during start up, or when such a
|
object is published as a global during start up, or when such a
|
||||||
|
@ -1908,9 +1914,10 @@
|
||||||
|
|
||||||
<event name="capabilities">
|
<event name="capabilities">
|
||||||
<description summary="seat capabilities changed">
|
<description summary="seat capabilities changed">
|
||||||
This is emitted whenever a seat gains or loses the pointer,
|
This is sent on binding to the seat global or whenever a seat gains
|
||||||
keyboard or touch capabilities. The argument is a capability
|
or loses the pointer, keyboard or touch capabilities.
|
||||||
enum containing the complete set of capabilities this seat has.
|
The argument is a capability enum containing the complete set of
|
||||||
|
capabilities this seat has.
|
||||||
|
|
||||||
When the pointer capability is added, a client may create a
|
When the pointer capability is added, a client may create a
|
||||||
wl_pointer object using the wl_seat.get_pointer request. This object
|
wl_pointer object using the wl_seat.get_pointer request. This object
|
||||||
|
@ -1992,9 +1999,9 @@
|
||||||
The same seat names are used for all clients. Thus, the name can be
|
The same seat names are used for all clients. Thus, the name can be
|
||||||
shared across processes to refer to a specific wl_seat global.
|
shared across processes to refer to a specific wl_seat global.
|
||||||
|
|
||||||
The name event is sent after binding to the seat global. This event is
|
The name event is sent after binding to the seat global, and should be sent
|
||||||
only sent once per seat object, and the name does not change over the
|
before announcing capabilities. This event only sent once per seat object,
|
||||||
lifetime of the wl_seat global.
|
and the name does not change over the lifetime of the wl_seat global.
|
||||||
|
|
||||||
Compositors may re-use the same seat name if the wl_seat global is
|
Compositors may re-use the same seat name if the wl_seat global is
|
||||||
destroyed and re-created later.
|
destroyed and re-created later.
|
||||||
|
@ -2013,7 +2020,7 @@
|
||||||
|
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="wl_pointer" version="9">
|
<interface name="wl_pointer" version="10">
|
||||||
<description summary="pointer input device">
|
<description summary="pointer input device">
|
||||||
The wl_pointer interface represents one or more input devices,
|
The wl_pointer interface represents one or more input devices,
|
||||||
such as mice, which control the pointer location and pointer_focus
|
such as mice, which control the pointer location and pointer_focus
|
||||||
|
@ -2426,7 +2433,7 @@
|
||||||
</event>
|
</event>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="wl_keyboard" version="9">
|
<interface name="wl_keyboard" version="10">
|
||||||
<description summary="keyboard input device">
|
<description summary="keyboard input device">
|
||||||
The wl_keyboard interface represents one or more keyboards
|
The wl_keyboard interface represents one or more keyboards
|
||||||
associated with a seat.
|
associated with a seat.
|
||||||
|
@ -2479,6 +2486,9 @@
|
||||||
the surface argument and the keys currently logically down to the keys
|
the surface argument and the keys currently logically down to the keys
|
||||||
in the keys argument. The compositor must not send this event if the
|
in the keys argument. The compositor must not send this event if the
|
||||||
wl_keyboard already had an active surface immediately before this event.
|
wl_keyboard already had an active surface immediately before this event.
|
||||||
|
|
||||||
|
Clients should not use the list of pressed keys to emulate key-press
|
||||||
|
events. The order of keys in the list is unspecified.
|
||||||
</description>
|
</description>
|
||||||
<arg name="serial" type="uint" summary="serial number of the enter event"/>
|
<arg name="serial" type="uint" summary="serial number of the enter event"/>
|
||||||
<arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/>
|
<arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/>
|
||||||
|
@ -2505,9 +2515,18 @@
|
||||||
<enum name="key_state">
|
<enum name="key_state">
|
||||||
<description summary="physical key state">
|
<description summary="physical key state">
|
||||||
Describes the physical state of a key that produced the key event.
|
Describes the physical state of a key that produced the key event.
|
||||||
|
|
||||||
|
Since version 10, the key can be in a "repeated" pseudo-state which
|
||||||
|
means the same as "pressed", but is used to signal repetition in the
|
||||||
|
key event.
|
||||||
|
|
||||||
|
The key may only enter the repeated state after entering the pressed
|
||||||
|
state and before entering the released state. This event may be
|
||||||
|
generated multiple times while the key is down.
|
||||||
</description>
|
</description>
|
||||||
<entry name="released" value="0" summary="key is not pressed"/>
|
<entry name="released" value="0" summary="key is not pressed"/>
|
||||||
<entry name="pressed" value="1" summary="key is pressed"/>
|
<entry name="pressed" value="1" summary="key is pressed"/>
|
||||||
|
<entry name="repeated" value="2" summary="key was repeated" since="10"/>
|
||||||
</enum>
|
</enum>
|
||||||
|
|
||||||
<event name="key">
|
<event name="key">
|
||||||
|
@ -2530,6 +2549,11 @@
|
||||||
compositor must not send this event if state is pressed (resp. released)
|
compositor must not send this event if state is pressed (resp. released)
|
||||||
and the key was already logically down (resp. was not logically down)
|
and the key was already logically down (resp. was not logically down)
|
||||||
immediately before this event.
|
immediately before this event.
|
||||||
|
|
||||||
|
Since version 10, compositors may send key events with the "repeated"
|
||||||
|
key state when a wl_keyboard.repeat_info event with a rate argument of
|
||||||
|
0 has been received. This allows the compositor to take over the
|
||||||
|
responsibility of key repetition.
|
||||||
</description>
|
</description>
|
||||||
<arg name="serial" type="uint" summary="serial number of the key event"/>
|
<arg name="serial" type="uint" summary="serial number of the key event"/>
|
||||||
<arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
|
<arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
|
||||||
|
@ -2590,7 +2614,7 @@
|
||||||
</event>
|
</event>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
<interface name="wl_touch" version="9">
|
<interface name="wl_touch" version="10">
|
||||||
<description summary="touchscreen input device">
|
<description summary="touchscreen input device">
|
||||||
The wl_touch interface represents a touchscreen
|
The wl_touch interface represents a touchscreen
|
||||||
associated with a seat.
|
associated with a seat.
|
||||||
|
@ -3245,4 +3269,31 @@
|
||||||
</request>
|
</request>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
||||||
|
<interface name="wl_fixes" version="1">
|
||||||
|
<description summary="wayland protocol fixes">
|
||||||
|
This global fixes problems with other core-protocol interfaces that
|
||||||
|
cannot be fixed in these interfaces themselves.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
<description summary="destroys this object"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<request name="destroy_registry">
|
||||||
|
<description summary="destroy a wl_registry">
|
||||||
|
This request destroys a wl_registry object.
|
||||||
|
|
||||||
|
The client should no longer use the wl_registry after making this
|
||||||
|
request.
|
||||||
|
|
||||||
|
The compositor will emit a wl_display.delete_id event with the object ID
|
||||||
|
of the registry and will no longer emit any events on the registry. The
|
||||||
|
client should re-use the object ID once it receives the
|
||||||
|
wl_display.delete_id event.
|
||||||
|
</description>
|
||||||
|
<arg name="registry" type="object" interface="wl_registry"
|
||||||
|
summary="the registry to destroy"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
</protocol>
|
</protocol>
|
||||||
|
|
|
@ -345,7 +345,7 @@ QWaylandInputDevice::Touch::~Touch()
|
||||||
}
|
}
|
||||||
|
|
||||||
QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, uint32_t id)
|
QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, int version, uint32_t id)
|
||||||
: QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 9))
|
: QtWayland::wl_seat(display->wl_registry(), id, qMin(version, 10))
|
||||||
, mQDisplay(display)
|
, mQDisplay(display)
|
||||||
, mDisplay(display->wl_display())
|
, mDisplay(display->wl_display())
|
||||||
, mId(id)
|
, mId(id)
|
||||||
|
@ -1377,7 +1377,19 @@ void QWaylandInputDevice::Keyboard::keyboard_key(uint32_t serial, uint32_t time,
|
||||||
QString text = QXkbCommon::lookupString(mXkbState.get(), code);
|
QString text = QXkbCommon::lookupString(mXkbState.get(), code);
|
||||||
|
|
||||||
QEvent::Type type = isDown ? QEvent::KeyPress : QEvent::KeyRelease;
|
QEvent::Type type = isDown ? QEvent::KeyPress : QEvent::KeyRelease;
|
||||||
handleKey(time, type, qtkey, modifiers, code, sym, mNativeModifiers, text);
|
bool isAutoRepeat = state == WL_KEYBOARD_KEY_STATE_REPEATED;
|
||||||
|
if (isAutoRepeat && mRepeatRate > 0) {
|
||||||
|
qCWarning(lcQpaWayland, "received key repeat event while repeat rate is non-zero");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isAutoRepeat && !xkb_keymap_key_repeats(mXkbKeymap.get(), code)) {
|
||||||
|
qCWarning(lcQpaWayland, "received key repeat event for a key that should not be repeated");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isAutoRepeat)
|
||||||
|
handleKey(time, QEvent::KeyRelease, qtkey, modifiers, code, sym, mNativeModifiers, text, isAutoRepeat);
|
||||||
|
|
||||||
|
handleKey(time, type, qtkey, modifiers, code, sym, mNativeModifiers, text, isAutoRepeat);
|
||||||
|
|
||||||
if (state == WL_KEYBOARD_KEY_STATE_PRESSED && xkb_keymap_key_repeats(mXkbKeymap.get(), code) && mRepeatRate > 0) {
|
if (state == WL_KEYBOARD_KEY_STATE_PRESSED && xkb_keymap_key_repeats(mXkbKeymap.get(), code) && mRepeatRate > 0) {
|
||||||
mRepeatKey.key = qtkey;
|
mRepeatKey.key = qtkey;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
// Copyright (C) 2019 The Qt Company Ltd.
|
// Copyright (C) 2019 The Qt Company Ltd.
|
||||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||||
|
|
||||||
#include "qwaylandvulkaninstance_p.h"
|
|
||||||
#include "qwaylandwindow_p.h"
|
#include "qwaylandwindow_p.h"
|
||||||
|
#include "qwaylandvulkaninstance_p.h"
|
||||||
#include "qwaylandscreen_p.h"
|
#include "qwaylandscreen_p.h"
|
||||||
#include "qwaylanddisplay_p.h"
|
#include "qwaylanddisplay_p.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue