Mir surface management

Registered by kevin gunn on 2013-10-16

This blueprint includes activities to support surface management features, not exclusively but primarily for unity-mir.

Trusty now released, please see https://blueprints.launchpad.net/ubuntu/+spec/client-1410-mir-surfacemanagement for follow on work

Blueprint information

Status:
Complete
Approver:
None
Priority:
Undefined
Drafter:
kevin gunn
Direction:
Needs approval
Assignee:
Mir development team
Definition:
New
Series goal:
None
Implementation:
Implemented
Milestone target:
None
Started by
Daniel van Vugt on 2014-01-06
Completed by
kevin gunn on 2014-04-22

Related branches

Sprints

Whiteboard

PLEASE SEE https://blueprints.launchpad.net/ubuntu/+spec/client-1410-mir-surfacemanagement

====Mir Surface Management====
Working with design on surface placement & behavioral policies, this is a proposed plan of attack for implementing/iterating using the surface type definitions as a guide for proof of concept/improvement to definition.

Qt demo application (and later chromium) will be used for validating the concepts.

This list assumes that works off the knowledge that we have some shell (full screen, windowed/non-fullscreen, focus toggling/zorder change for "regular" surfaces, resize, rotation)
* arbitrary resize of non-fullscreen regular surface (screen avail to minimum)
* maximize, minimize of a non-fullscreen, veritcal/horizontal snap/maximizing
* alt+tab (or right edge gesture) for regular surfaces
* snap-to-edge & unsnap of regular surfaces (sidestage/splitstage)
* rotate regular surface reflow & input
* alt+tab (or right edge gesture) for snapped surfaces & unrelated surfaces
* show surface z order behavior render order/input for all surface types (single app, multi app), maybe add in presence rules (e.g. can't have a child without a parent) note: it would be nice to have dynamic toggles for the presence of particular surface types & perspective view (similar to spread)
* child surface spawning, movement (w/ and w/o parent), dismissal, exit (w/ and w/o parent)
* child surface w/ regular surface parent maximize/minimize
* child & parent rotation including input
* non-full screen regular surface with app & system chrome support
* maximized/minimized/non-fullscreen with app & system chrome support (+menus)
* rotation including chrome
* full screen of regular surface with app & system chrome support (where chrome hides)
* content sharing/drag-drop with hinting (e.g. surface highlighting for those that can take the content type)
* spread for multi surfaces incl multi surfaces for 1 app (e.g. 2 regular surfaces, or child+parent)
* workspace concept (collection of surfaces, behavior of surface type in workspace, e.g. no orphans)
* multimonitor for multiple surfaces (including differing resolutions) & moving surfaces from one to the other
* multimonitor for multiple workspaces & changing workspaces

(?)

Work Items

Work items for ubuntu-13.11:
[vanvugt] Window resizing: DONE

Work items for ubuntu-13.12:
[alan-griffiths] add support for shell to broadcast rotation events and for apps to express limits at runtime (e.g. "i only support portrait right now" & "i'm an app that would like to rotate mr shell") marking as DONE as this was covered by opaque msg channel: DONE

Work items for ubuntu-14.03:
[andreas-pokorny] Input surface transformation (rotation, https://code.launchpad.net/~andreas-pokorny/mir/cursor-position-on-rotated-output): DONE

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.