kwin/autotests/integration
Martin Gräßlin 0c5ca405cc Implement support for pointer constraints
Summary:
There are two types of constraints supported:
1. Pointer confinement
2. Pointer locking

In the case of confinement the pointer is confined to a given region of
the surface. This is comparable to general operation where the pointer
is confined to the screen region.

In the second case the pointer gets locked. That means it cannot move at
all. No further position updates are provided, only relative motion
events can go to the application. There is a hint about cursor position
update on unlock which is not yet implemented in KWayland::Server, thus
also not in this change.

The implementation in KWin grants the requests for pointer constraints
when the pointer enters the constrained region, either by pointer
movement or by e.g. stacking order changes. There is no confirmation
from user required to enter that mode. But we want to show an OSD when
the pointer gets constrained, this is not yet implemented, though.

Breaking an active constraint is relatively easy. E.g. changing the
stacking order will break the constraint if another surface is under the
cursor. Also (in case of confinement) moving the pointer to an
overlapping window breaks the confinement. But as soon as one moves the
pointer back to the window a constraint might get honoured again.

To properly break there is a dedicated event filter. It listens for a
long press of the Escape key. If hold for 3sec the pointer constraint is
broken and not activated again till the pointer got moved out of the
window. Afterward when moving in the pointer might activate again.

The escape filter ensures that the key press is forwarded to the
application if it's a short press or if another key gets pressed during
the three seconds. If the three seconds way fires, the later escape
release is not sent to the application.

This basic interaction is also ensured through an added auto test.

This change implements T4605.

Test Plan: Added auto test and nested KWin Wayland with D3488

Reviewers: #kwin, #plasma_on_wayland

Subscribers: plasma-devel, kwin

Tags: #plasma_on_wayland, #kwin

Differential Revision: https://phabricator.kde.org/D3506
2016-12-08 19:50:24 +01:00
..
data Add support for desktopFileName provided by NETWinInfo 2016-10-31 13:19:46 +01:00
effects [effects] Handle windowShown and windowHidden in fade effect 2016-11-22 07:18:27 +01:00
helper KillWindow support for Wayland windows 2016-11-17 14:06:42 +01:00
scripting Add method unregisterScreenEdge to scripting 2016-10-07 13:29:29 +01:00
activities_test.cpp [autotests] Wrap integration tests in dbus-session-run 2016-09-14 07:59:14 +02:00
CMakeLists.txt Implement support for pointer constraints 2016-12-08 19:50:24 +01:00
debug_console_test.cpp Internal windows cannot be minimized 2016-11-04 08:59:43 +01:00
decoration_input_test.cpp Add support for resize only borders on Wayland 2016-10-05 07:49:23 +02:00
desktop_window_x11_test.cpp Force windows of type desktop to be opaque 2016-08-10 15:10:22 +02:00
dont_crash_aurorae_destroy_deco.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
dont_crash_cancel_animation.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
dont_crash_empty_deco.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
dont_crash_glxgears.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
dont_crash_no_border.cpp Add support for xdg-shell version 5 interface 2016-07-13 13:20:00 +02:00
globalshortcuts_test.cpp Fix shortcut triggering with shift+letter 2016-10-17 08:13:20 +02:00
input_stacking_order.cpp Add support for xdg-shell version 5 interface 2016-07-13 13:20:00 +02:00
internal_window.cpp DebugConsole window does not take keyboard input 2016-09-12 13:24:33 +02:00
kwin_wayland_test.cpp Unpolish QStyle on QApp prior to destroying internal Wayland connection 2016-11-07 11:28:06 +01:00
kwin_wayland_test.h Implement support for pointer constraints 2016-12-08 19:50:24 +01:00
lockscreen.cpp [autotests] Wait longer in LockScreenTest 2016-11-25 07:56:24 +01:00
maximize_test.cpp Implement borderlessMaximizedWindows for Wayland windows 2016-11-29 12:36:31 +01:00
modifier_only_shortcut_test.cpp Only trigger mod-only-shortcuts if global shortcuts are enabled 2016-10-06 13:28:31 +02:00
move_resize_window_test.cpp [autotests] Remove expected fail from snap to auto-hide Wayland 2016-11-03 08:56:59 +01:00
no_xdg_runtime_dir_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
plasma_surface_test.cpp Support docks which take input 2016-10-18 08:18:46 +02:00
plasmawindow_test.cpp Expose window geometry to PlasmaWindow 2016-07-20 13:49:10 +02:00
platformcursor.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
pointer_constraints_test.cpp Implement support for pointer constraints 2016-12-08 19:50:24 +01:00
pointer_input.cpp Ignore non-relevant modifiers when evaluating mouse actions 2016-11-25 07:37:58 +01:00
quick_tiling_test.cpp Properly implement maximize of ShellClient 2016-11-29 12:35:59 +01:00
scene_opengl_test.cpp Support restarting the OpenGL compositor on Wayland 2016-07-20 14:08:23 +02:00
scene_qpainter_test.cpp Handle restart of Compositor Scene correctly for Wayland client 2016-07-21 08:11:32 +02:00
screen_changes_test.cpp Announce output changes to Wayland for platforms not handling outputs 2016-07-20 13:53:02 +02:00
screenedge_client_show_test.cpp Emit windowShown and windowHidden from Client::internalKeep and ::internalHide 2016-07-14 11:11:49 +02:00
shade_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
shell_client_test.cpp Merge branch 'Plasma/5.8' 2016-11-18 16:08:29 +01:00
start_test.cpp Add way to hide/show cursor in Platform 2016-10-31 11:46:50 +01:00
struts_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
tabbox_test.cpp [wayland] Fix release of TabBox on Wayland 2016-09-14 13:26:58 +02:00
test_helpers.cpp Implement support for pointer constraints 2016-12-08 19:50:24 +01:00
touch_input_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
transient_no_input_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
transient_placement.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
window_rules_test.cpp Match window role in Rules in a case insensitive manner 2016-09-13 08:37:26 +02:00
window_selection_test.cpp Add interactive position selection to screenshot screen under cursor 2016-11-25 07:38:37 +01:00
x11_client_test.cpp Simplify the window title passed in from the window system 2016-11-07 11:26:48 +01:00
xclipboardsync_test.cpp Handle situation of no XDG_RUNTIME_DIR gracefully 2016-07-13 10:00:46 +02:00
xwayland_input_test.cpp Warp the xcb pointer whenever pointer leaves an X11 surface 2016-08-24 13:12:06 +02:00