We move and scale the `space.clip`s to the active monitor. If we select a
workspace which came from another monitor we move it fully to the active monitor
with `space.setMonitor`.
We only move windows with a visible WindowActor to avoid moving windows into
spaces that's positioned to the left or right.
Also replace all window actors with clones when monitors change to prevent
windows changing workspace when monitors are added or removed.
We create an actor spanning the whole screen, `Spaces.spaceContainer` which
holds all spaces. A `Space` is now first contained in a `Space.clip` container
which clips away anything that protrudes from the monitor.
The main advantage over having a per monitor clipping actor is getting
flexibility in moving a space around the screen without changing it's monitor.
We also hook up the `monitors-changed` signal, putting the active workpace on
the primary display, and populating the other monitors with the rest of the
workspace mru.
This also prevents a bug where we could end up moving a BackgroundActor.
Adds a `Space.monitor` property, hard coded to the primary monitor for the
moment. `move` needs to know about which space it's moving windows on.
It seems that we really don't have to worry about scaling, as it mutter should
take care of it automatically.
fixes#47
This means that we won't kill keybindings on disable (which could be worked
around) or crashes (which would be much harder to work around).
NB: it's necessary to go into dconf and restore
`switch-applications[-backward]`, `switch-group[-backward]` to get the
keybindings working again.
If we're starting workspace navigation with `ctrl` lift the focused window into
the the scratch layer. When navigation is done, drop the lifted window into the
new workspace.
Introduces `Navigator.workspaceMru` which indicates if we're previewing
workspaces.
If so we simply treat fullscreen windows as other windows.
Lastly we force ensure on workspace preview finish so that a selected fullscreen
window will be moved back to it's correct position.
There's also some cleanup of the init code.
Only show the window actor when a fullscreen window has focus.
Since it's impossible to actually change the position of fullscreen windows, the
window actors have a tendency to jump back to their actual position. A reliable
case is evince.
This looks better (especially when we can get the topbar to always be
transparent). It also means we only need to deal with any selected fullscreen
windows when showing the workspace mru.