Mir does not reset key states when paused or resumed (modifiers get stuck after VT switching)
Bug #1536279 reported by
Andreas Pokorny
This bug affects 8 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Canonical System Image |
Confirmed
|
Medium
|
Stephen M. Webb | ||
Mir |
Fix Released
|
High
|
Andreas Pokorny | ||
mir (Ubuntu) |
Fix Released
|
Medium
|
Unassigned | ||
qtmir (Ubuntu) |
Fix Released
|
Undecided
|
Andreas Pokorny |
Bug Description
Mir switches away from the current VT when ALT+FXX is pressed. During that key sequence the alt modifier is pressed. While away and mir does not receive the alt release. When you switch back to mir there is a chance that mir is not receiving the alt release either.
So switching away and back to mir makes the alt key stick...
Proposed solution:
- track regular keys in mir::input::Seat or in SurfaceDispatcher
- inform client(s) about pause / resume with a focus lost / focus gain event
- attach key state to focus event or send separate key state event
- adapt gdk/qt backends
- fix alt key tracking in unity8 to rely on the provided modifier state
Related branches
lp://staging/~andreas-pokorny/qtmir/store-and-recover-cookie-and-input-device-id
- Daniel d'Andrada (community): Approve
- Unity8 CI Bot (community): Approve (continuous-integration)
-
Diff: 402 lines (+175/-34)4 files modifiedsrc/platforms/mirserver/eventbuilder.cpp (+69/-15)
src/platforms/mirserver/eventbuilder.h (+11/-6)
src/platforms/mirserver/qteventfeeder.cpp (+10/-9)
tests/mirserver/EventBuilder/eventbuilder_test.cpp (+85/-4)
lp://staging/~andreas-pokorny/mir/fix-1536279
- Alan Griffiths: Abstain
- Cemil Azizoglu (community): Approve
- Kevin DuBois (community): Approve
- Mir CI Bot: Approve (continuous-integration)
- Andreas Pokorny (community): Abstain
-
Diff: 716 lines (+254/-38)15 files modifiedsrc/client/buffer_vault.cpp (+1/-1)
src/client/connection_surface_map.cpp (+7/-0)
src/client/connection_surface_map.h (+2/-1)
src/client/default_connection_configuration.cpp (+2/-2)
src/client/input/input_devices.cpp (+39/-1)
src/client/mir_surface.cpp (+5/-0)
src/client/mir_surface.h (+1/-0)
src/client/rpc/mir_protobuf_rpc_channel.cpp (+1/-1)
src/include/client/mir/client/surface_map.h (+2/-1)
src/include/client/mir/input/input_devices.h (+3/-1)
tests/acceptance-tests/test_nested_input.cpp (+163/-17)
tests/include/mir/test/test_protobuf_client.h (+6/-1)
tests/mir_test_doubles/test_protobuf_client.cpp (+3/-2)
tests/unit-tests/client/test_protobuf_rpc_channel.cpp (+15/-8)
tests/unit-tests/frontend/stress_protobuf_communicator.cpp (+4/-2)
description: | updated |
Changed in canonical-devices-system-image: | |
assignee: | nobody → Stephen M. Webb (bregma) |
Changed in canonical-devices-system-image: | |
status: | New → Confirmed |
importance: | Undecided → Medium |
Changed in mir: | |
milestone: | none → 0.22.0 |
assignee: | nobody → Andreas Pokorny (andreas-pokorny) |
Changed in mir: | |
status: | New → In Progress |
description: | updated |
description: | updated |
Changed in mir: | |
milestone: | 0.22.0 → 0.23.0 |
Changed in mir: | |
milestone: | 0.23.0 → 0.24.0 |
Changed in mir: | |
milestone: | 0.24.0 → 0.25.0 |
Changed in mir: | |
importance: | Undecided → Medium |
Changed in mir (Ubuntu): | |
importance: | Undecided → Medium |
Changed in mir: | |
milestone: | 0.25.0 → 0.26.0 |
Changed in mir: | |
milestone: | 0.26.0 → 1.0.0 |
summary: |
- Mir does not reset key states when paused or resumed + Mir does not reset key states when paused or resumed (modifiers get + stuck after VT switching) |
Changed in mir: | |
importance: | Medium → High |
Changed in qtmir: | |
assignee: | nobody → Andreas Pokorny (andreas-pokorny) |
status: | New → Confirmed |
Changed in qtmir: | |
status: | Confirmed → In Progress |
affects: | qtmir → qtmir (Ubuntu) |
Changed in mir: | |
status: | Fix Committed → Fix Released |
To post a comment you must log in.
Technically correct, but understandably annoying.