[PATCH weston 00/11] Per ouput workspaces

Jonas Ådahl jadahl at gmail.com
Sat Jan 26 06:33:30 PST 2013


This series adds per-output workspaces to the desktop shell of weston.
The major change is how toplevel surfaces are managed by the shell
plugin. Before, surfaces were always kept in layers and workspaces was
implemented by attaching/detaching layers associated with workspaces.

After changing so that a workspace only spans over one output but its
surfaces may be visible on multiple outputs it becomes necessary to be
able to keep track of stacking order across workspaces. To solve this,
"shell: Manage toplevel surfaces on all workspaces in one list"
introduces a different structure of storing surfaces, which is managing
all surfaces that can placed in a workspace in a per-shell surface-list.
Visible surfaces are then automatically added to a toplevel layer
attached to the layer chain in the compositor before an output repaint.
Changing visibility of, or (re)stacking a surface triggers regeneration
of the toplevel layer.

Surfaces that should be able to be placed in the toplevel layer but are
not regular shell surface needs special handling when using this
approach. Currently this only applies to the black surface behind
fullscreen surfaces. For that case, the black surface is simply stacked
beneath the fullscreen surface when generating the toplevel layer surface


Jonas Ådahl (11):
  shell: Add helper functions for stacking top level surfaces
  shell: Move workspace set related fields into its own container
  shell: Always bind F1-F6 to workspace changing
  shell: Specify workspace when ensuring that a focus state exists
  Move hash table to shared/
  shell: Organize workspace containers by output
  shell: Initialize workspace state for new outputs
  shell: Restack surface when dragged to another output
  shell: Manage toplevel surfaces on all workspaces in one list
  shell: Update the workspace protocol to support multiple outputs
  shell: Allow changing workspace when output has no fullscreen surface

 clients/Makefile.am           |    1 +
 clients/window.c              |   86 +++-
 protocol/workspaces.xml       |   20 +-
 shared/Makefile.am            |    4 +-
 shared/hash.c                 |  307 ++++++++++++
 shared/hash.h                 |   49 ++
 src/compositor.c              |   11 +
 src/compositor.h              |    4 +
 src/shell.c                   | 1097 +++++++++++++++++++++++++++++------------
 src/xwayland/Makefile.am      |    4 +-
 src/xwayland/hash.c           |  307 ------------
 src/xwayland/hash.h           |   49 --
 src/xwayland/window-manager.c |    2 +-
 13 files changed, 1232 insertions(+), 709 deletions(-)
 create mode 100644 shared/hash.c
 create mode 100644 shared/hash.h
 delete mode 100644 src/xwayland/hash.c
 delete mode 100644 src/xwayland/hash.h


More information about the wayland-devel mailing list