OSK touch events "fall through" and hit surface behind them
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
High
|
Alan Griffiths | ||
mir (Ubuntu) |
Fix Released
|
High
|
Unassigned |
Bug Description
So when I upgrade my phone to mir/devel, I have the problem that keyboard presses on the OSK *also* hit the surface behind it. And the keyboard won't be dismissed.
Looking into it, it appears to be because the following code is never run with mir/devel (from OSKController.qml in unity-mir):
Connections {
target: __oskSurface
if (__oskSurface.state === MirSurface.
}
}
}
That is, the surface never notifies unity-mir that the surface is maximized. And as a result, the input area that steals events is never enabled.
I'm assuming this is an unintentional change in Mir. Or maybe it is an intentional change and unity-mir should look for a different event?
Related branches
- PS Jenkins bot (community): Approve (continuous-integration)
- Daniel van Vugt: Needs Information
- Kevin DuBois (community): Approve
- Alexandros Frantzis (community): Approve
-
Diff: 2070 lines (+284/-715)46 files modifiedinclude/server/mir/default_server_configuration.h (+3/-4)
include/server/mir/scene/surface_configurator.h (+4/-4)
include/server/mir/shell/surface.h (+0/-2)
include/server/mir/shell/surface_factory.h (+3/-1)
include/test/mir_test_doubles/mock_surface.h (+15/-15)
include/test/mir_test_doubles/mock_surface_configurator.h (+4/-4)
include/test/mir_test_doubles/mock_surface_factory.h (+2/-0)
include/test/mir_test_doubles/mock_surface_ranker.h (+1/-1)
include/test/mir_test_doubles/null_surface_configurator.h (+4/-4)
include/test/mir_test_doubles/stub_surface_builder.h (+0/-75)
include/test/mir_test_doubles/stub_surface_ranker.h (+1/-1)
src/server/default_server_configuration.cpp (+6/-6)
src/server/scene/CMakeLists.txt (+0/-1)
src/server/scene/application_session.cpp (+6/-1)
src/server/scene/basic_surface.cpp (+2/-7)
src/server/scene/basic_surface.h (+3/-4)
src/server/scene/basic_surface_factory.h (+2/-4)
src/server/scene/default_configuration.cpp (+2/-8)
src/server/scene/surface_allocator.cpp (+3/-2)
src/server/scene/surface_allocator.h (+4/-2)
src/server/scene/surface_builder.h (+3/-4)
src/server/scene/surface_controller.cpp (+3/-4)
src/server/scene/surface_controller.h (+3/-4)
src/server/scene/surface_impl.cpp (+0/-158)
src/server/scene/surface_impl.h (+0/-100)
src/server/scene/surface_source.cpp (+21/-13)
src/server/scene/surface_source.h (+5/-6)
src/server/scene/surface_stack_model.h (+0/-1)
src/server/shell/default_focus_mechanism.cpp (+3/-1)
src/server/shell/organising_surface_factory.cpp (+4/-0)
src/server/shell/organising_surface_factory.h (+2/-0)
tests/acceptance-tests/test_client_input.cpp (+5/-0)
tests/acceptance-tests/test_shell_control_of_surface_configuration.cpp (+6/-6)
tests/integration-tests/graphics/android/test_internal_client.cpp (+2/-2)
tests/unit-tests/frontend/test_session_mediator.cpp (+0/-2)
tests/unit-tests/graphics/mesa/test_internal_native_display.cpp (+0/-4)
tests/unit-tests/graphics/mesa/test_internal_native_surface.cpp (+0/-3)
tests/unit-tests/input/android/test_android_input_window_handle.cpp (+0/-2)
tests/unit-tests/scene/test_application_session.cpp (+1/-2)
tests/unit-tests/scene/test_basic_surface.cpp (+4/-4)
tests/unit-tests/scene/test_default_focus_mechanism.cpp (+3/-24)
tests/unit-tests/scene/test_session_manager.cpp (+16/-9)
tests/unit-tests/scene/test_surface.cpp (+4/-4)
tests/unit-tests/scene/test_surface_controller.cpp (+4/-5)
tests/unit-tests/scene/test_surface_impl.cpp (+126/-207)
tests/unit-tests/scene/test_surface_stack.cpp (+4/-4)
summary: |
- Keyboard presses "fall through" and hit surface behind them + OSK touch events "fall through" and hit surface behind them |
Changed in mir: | |
status: | Fix Committed → Fix Released |
Confirmed in silo 004 /launchpad. net/~ci- train-ppa- service/ +archive/ landing- 004/+packages
https:/
Surface change attribute makes it from mir to unitymir: :SessionManager ::surfaceAttrib uteChanged. unitymir is unable to find the osk surface in m_Surfaces, though I can see sessionCreatedS urface being called for it.
Digging deeper.