mir_demo_server(_minimal): Window movement/resizing stops responding when the cursor leaves the surface, and can lead to windows 1px wide and unrecoverable.

Bug #1447886 reported by Daniel van Vugt
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
Medium
Alan Griffiths
MirAL
Fix Released
Medium
Alan Griffiths
mir (Ubuntu)
Fix Released
Medium
Unassigned

Bug Description

mir_demo_server(_minimal) version 0.13 and later: Window movement/resizing stops responding when the cursor leaves the surface.

If you move or resize a surface with Alt+(button1/button3) then it's very easy to get the shell into a state where the window stops responding to movement/resizing and even becomes unrecoverable (window 1px wide).

Essentially the problem is the shell is only looking at the current cursor position and doesn't do anything if it's outside of the surface. This is frustrating as waiving the mouse around a bit it's very easy to reach this situation.

It should be looking at the gesture as a whole and only doing position checking at the start of the move/resize gesture (ie. mouse button down). Thereafter the gesture should be continuous until the button is released, regardless of whether the cursor is still inside the surface/titlebar. You will find this is how all real desktops work, and mir_proving_server tries to too. Surfaces should always "own" input regardless of cursor position, just so long as the gesture (mouse down) began on that surface.

The "unrecoverable" bit: This happens if you resize a surface too small/thin and it becomes impossible to resize it bigger again.

Tags: wm

Related branches

Changed in mir:
importance: Undecided → Medium
status: New → Triaged
Changed in mir (Ubuntu):
status: New → Invalid
description: updated
description: updated
tags: added: wm
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Workaround:
Use mir_proving_server which does not have this bug. Because it doesn't require that resizing occur while the cursor is inside the app window. This is related to the "aura" feature detailed in Trello.

Changed in mir (Ubuntu):
status: Invalid → Triaged
importance: Undecided → Medium
description: updated
summary: mir_demo_server(_minimal): Window movement/resizing stops responding
- when the cursor leaves the surface
+ when the cursor leaves the surface, and can lead to windows 1px wide and
+ unrecoverable.
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

I've not yet investigated to determine when this was fixed, but I can't reproduce an "unrecoverable" state using 0.21 (or the current trunk).

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

The unrecoverable state appears to be now replaced with "resizing turns into window moving against my will". But even if you ignore all that, the main problem with a gesture ending prematurely if the cursor leaves the window while you're still holding the mouse button remains.

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

Was also fixed in 0.18.

Changed in mir (Ubuntu):
status: Triaged → Fix Released
Changed in mir:
status: Triaged → Fix Released
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

It's not fixed. I reproduced it with lp:mir today. And your branch too.

Changed in mir:
status: Fix Released → Triaged
Changed in mir (Ubuntu):
status: Fix Released → Triaged
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Confirmed again with lp:mir and mir_demo_server. It's still too easy to resize a window with Alt+middlebutton and then suddenly have the gesture disconnected from the window, even though you're still holding the mouse button. At this stage, the window is left 1px wide or high, and difficult to recover.

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

Another thing (related) we're failing to do is keep the grab location (where the click occurred in relative window coordinates) constant for the duration of the gesture. The window should not flip as it now does, if you drag the right side past the left side. Resizing the right side of the window should never change the coordinate of the left side.

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

OK, I get what you're saying now.

OTOH I do think there's been a significant improvement at some point in the past: in that there's no "unrecoverable state".

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

Yeah the behaviour has definitely changed over the past year. However if you're in the habit of not moving your mouse slowly, then you might not figure out how to recover from the 1px wide window. As the mouse motion events are spread out, they skip over the window area and never grab hold of the thin window again unless you move the mouse very slowly.

Changed in miral:
status: New → Confirmed
importance: Undecided → Medium
assignee: nobody → Alan Griffiths (alan-griffiths)
Changed in mir:
milestone: none → 0.23.0
assignee: nobody → Alan Griffiths (alan-griffiths)
status: Triaged → In Progress
Changed in miral:
status: Confirmed → In Progress
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

Fix committed into lp:mir at revision None, scheduled for release in mir, milestone 0.23.0

Changed in mir:
status: In Progress → Fix Committed
Changed in mir:
status: Fix Committed → Fix Released
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package mir - 0.23.0+16.10.20160602.1-0ubuntu1

---------------
mir (0.23.0+16.10.20160602.1-0ubuntu1) yakkety; urgency=medium

  [ Kevin DuBois ]
  * New upstream release 0.23.0 (https://launchpad.net/mir/+milestone/0.23.0)
    - ABI summary:
      . mirclient ABI unchanged at 9
      . mirserver ABI bumped to 40
      . mircommon ABI bumped at 6
      . mirplatform ABI unchanged at 11
      . mirprotobuf ABI unchanged at 3
      . mirplatformgraphics ABI unchanged at 9
      . mirclientplatform ABI unchanged at 5
      . mirinputplatform ABI unchanged at 5
    - Enhancements:
      . Enable internal usage of more flexible graphics buffer submission,
        precursing client API additions.
    - Bug fixes:
      . Potential NBS performance loss after resize (LP: #1579076)
      . Performance loss with NBS and overlays on (LP: #1578159)
      . Mir crashes with useless backtrace when mg::Platform methods throw
        (LP: #1553549)
      . Virtual output is not removed when screencast client disappears
        (LP: #1573572)
      . Can't VT switch from mir_demo_server (any more) (LP: #1576260)
      . mir_demo_server(_minimal): Window movement/resizing stops responding
        when the cursor leaves the surface, and can lead to windows 1px wide
        and unrecoverable. (LP: #1447886)
      . Virtual display output configuration is set to LVDS (LP: #1573782)
      . Mir-on-X11 doesn't pass Alt+primary button drag to Mir (LP: #1575765)
      . Mir-on-X11 breaks mir_proving_server resize logic (LP: #1575192)
      . Resizing can crash mir_demo_server (LP: #1575211)
      . [regression] Cursor stops at phantom edge on M10 and N7 (LP: #1580774)
      . [regression] MIR_CLIENT_PERF_REPORT is showing bogus render times and
        buffer lag (LP: #1581368)
      . Test failures in ClientLogging.reports_performance due to the above
        fix. (LP: #1583970, LP: #1584603, LP: #1584605)
      . Do not throw when creating some objects under HWC 1.5 (LP: #1583086)
      . Correct black frame issue under Xmir (LP: #1584784)

  [ Tarmac, Kevin DuBois <email address hidden>, Daniel van Vugt <email address hidden>, Andreas Pokorny <email address hidden>, Alberto Aguirre ]
  * 0.23.0 Mir release

 -- Kevin DuBois <email address hidden> Thu, 02 Jun 2016 13:18:03 +0000

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

Duplicates of this bug

Other bug subscribers

Remote bug watches

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