Mir and unity-mir surface management

Registered by kevin gunn on 2014-04-22

This blueprint is meant to capture the work towards creating a surface management policy within Mir to provide a consistent user experience across a variety of shell clients. This blueprint may also include intermediate steps required to achieve this.

previous work in Trusty/14.04 can be found here https://blueprints.launchpad.net/ubuntu/+spec/client-1404-mir-surfacemanagement

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
Mir development team
Direction:
Needs approval
Assignee:
None
Definition:
Approved
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

====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:
[vanvugt] wire up states to shellinator (e.g. mir_surface_state_fullscreen --> resize): TODO
[vanvugt] Add a create-window-relative-to Mir API: INPROGRESS
[vanvugt] Add a popup window state: TODO

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.