OSK touch events "fall through" and hit surface behind them

Bug #1297878 reported by Michael Terry
6
This bug affects 1 person
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
        onStateChanged: {
            if (__oskSurface.state === MirSurface.Maximized) {
                __oskSurface.visible = true;
                oskInputArea.enabled = true;
            }
        }
    }

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

Revision history for this message
Robert Carr (robertcarr) wrote :

Confirmed in silo 004
https://launchpad.net/~ci-train-ppa-service/+archive/landing-004/+packages

Surface change attribute makes it from mir to unitymir::SessionManager::surfaceAttributeChanged. unitymir is unable to find the osk surface in m_Surfaces, though I can see sessionCreatedSurface being called for it.

Digging deeper.

Changed in mir (Ubuntu):
assignee: nobody → Robert Carr (robertcarr)
status: New → Confirmed
summary: - Keyboard presses "fall through" and hit surface behind them
+ OSK touch events "fall through" and hit surface behind them
Revision history for this message
Robert Carr (robertcarr) wrote :

Revno 1514 in devel fixes this...the cause is hard to understand.

Its true that this onStateChanged was never being fired. This was because sessionCreatedSurface and surfaceCreatedFor were being called for different addresses to the same surface, presumably this had to do with the BasicSurface/SurfaceImpl hierarchy and the inheritance there...but its not clear how it could happen as there is no casting in the code paths and unity-mir always sees msh::Surface pointer...

anyway...revno 1514!

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Thanks Robert. Linked the branch you say provided the fix.

Changed in mir:
assignee: nobody → Alan Griffiths (alan-griffiths)
importance: Undecided → High
status: New → Fix Committed
milestone: none → 0.1.8
Changed in mir (Ubuntu):
importance: Undecided → High
assignee: Robert Carr (robertcarr) → nobody
status: Confirmed → Triaged
Changed in mir:
status: Fix Committed → Fix Released
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (3.6 KiB)

This bug was fixed in the package mir - 0.1.8+14.04.20140411-0ubuntu1

---------------
mir (0.1.8+14.04.20140411-0ubuntu1) trusty; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.1.8 (https://launchpad.net/mir/+milestone/0.1.8)
    - mirclient ABI unchanged, still at 7. Clients do not need rebuilding.
    - mirserver ABI bumped to 18. Shells need rebuilding.
    - Server API changes affecting shells:
      . GLRenderer::tessellate() changed syntax.
      . graphics::Platform::create_display() has a new parameter allowing you
        to customize the compositor's (E)GL configutation.
      . Renderable::buffer(unsigned long frameno) is now:
        Renderable::buffer(void const* user_id). See below.
      . Renderable::should_be_rendered_in() is replaced by a more natural:
        Renderable::visble()
      . input::Surface::name() returns by value instead of reference now,
        to ensure future thread safety.
    - Switched EventHub device enumeration and hotplug to Udev. NOTE! This
      means mir_test_* can't run natively on touch devices any more without
      some setup first:
        sudo mount -o remount,rw /
        sudo apt-get update
        sudo apt-get install -y umockdev
        umockdev-run -- bin/mir_unit_tests
    - Added logging for HWC events.
    - Continued consolidation of Surface classes toward a simpler architecture.
    - Introduced "RenderableList" as the way to sample the Scene contents,
      and started using that in the default compositor.
    - Introduced physical length units and conversion (geometry::Length) in
      preparation for arbitrary DPI rendering.
    - Added some decorations to demo-shell; shadows and basic title bars, all
      anti-aliased and high-DPI scalable.
    - Multi-monitor frame sync has been redesigned to eliminate the need for
      frame number tracking.
    - Bugs (and enhancements) resolved:
      . [enhancement] Please move input detection to libudev (LP: #1237784)
      . [enhancement] Add a clamping resize mode to GLRenderer (LP: #1259887)
      . [regression] Intermittent loss of multimonitor frame sync
        (LP: #1290306)
      . [enhancement] Make GL config options configurable (LP: #1290780)
      . memcheck-test doesn't test anything when DISABLED_GTEST_DISCOVERY is
        enabled (LP: #1291876)
      . "Error opening DRM device" is always followed by "Unknown error -(some
        negative number)" (LP: #1292384)
      . Rendering/composition gets stopped early (LP: #1293896)
      . Ubuntu Touch Settings and terminal apps are not rendering correctly on
        rotate. (LP: #1294048)
      . [regression] Apps are much slower to open (LP: #1294051)
      . Settings app opens to a blank screen unless given enough time to render
        or the app is touched (LP: #1294053)
      . TestClientInput/DemoPrivateProtobuf memory leak is causing regular CI
        test failures (LP: #1295231)
      . OSK touch events "fall through" and hit surface behind them
        (LP: #1297878)
      . [enhancement] add a test for composite of last client post
        (LP: #1298596)
      . [regression] Surfaces vanish as soon as their edges touch the edge of
        screen (L...

Read more...

Changed in mir (Ubuntu):
status: Triaged → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.