Plasma/shellswitching
Appearance
< Plasma
definitions
- shell: the binary that loads full screen and displays desktop, panels, etc. currently those would be: plasma-desktop, plasma-netbook, plasma-device, etc.
- workspace: a full arrangement of shell (+ default layout), window manager, GUI utilities (e.g. krunner) and infrastructure processes (kactivitymanagerd, e.g.)
Workspace definitions
Workspaces should be defined by self-contained Plasma Packages, one per workspace setup, containing:
- processes other than the shell and window manager that are required (e.g. krunner, software keyboard)
- QML layout to use (perhaps also included in package?)
- kwin configuration
- other application configuration (krunner, e.g.?)
Track workspace setting in a kded module
What is the current workspace will be tracked by a kded module. Features:
- auto-switching based on triggers.
- screen change
- docking
- custom user signal?
- manual switching via dbus (perhaps tied to window manager; see secdtion on kwin)
- dbus signal emitted when workspace changes
- shell may load a different QML layout
- kwin may change settings
- start/stop processes according to workspace definition.
- e.g. "desktop" will want to start krunner; switching to "netbook" which does not include krunner in its definition would result in krunner being stopped
- re-use session management for this? some custom configuration system? modified startactive? systemd? or ...?
plasma-device becomes the only shell
All the shells will be replaced by an upgraded plasma-device.
- control UI (add widgets, e.g.) will move into the shell QML, just as it is with plasma-device now in Plasma Active.
- for desktop that includes: activity switcher, add widgets, panel settings
- will listen to the workspace change signal from the kded module and possibly load a different workspace QML structure
- the following features from plasma-desktop must be ported:
- multiple panels
- multi-screen awareness
- integrate Desktop Scripting (perhaps even becoming the way layouts are set up)
- a single DBus API will need to be settled on (alternative is allowing each shell layout to define a custom one; technically more difficult and the benefit is undefined)
Package structure
still largely TBD ...
- metadata.desktop
- contents/
will need to contain:
- which processes need to be running (e.g.: krunner)
- default plasma-device layout
- kwin configuration
- other app config?
- default lock screen + settings
- default splash screen + settings
- default logout dialog + settings
Test shell in the plasma-frameworks repo
- Creates a QQuickView subclass (View, in the shell and not in libplasma anymore) for each screen (using qdesktopwidget)
- Loads a qml file coming from a package for each view (same role as contour-himescreen in plasma-device)
- When a containment gains a screen, a pointer to the root object of the containment qml package needs to be accessible: it will become child of the view qml file (this will also make possible to perform transition animations)
- Same thing will be needed for panels
- Pieces of plasma-devices and plsma-desktop shell will be transplanted there (or whatever final repository will be) until the features are complete. Note: some features, such full support for activities are blocked by the full port of other components (kactivities, nepomuk-core)
kwin
- kwin will need to be able to source different sets of configuration files and change it's configuration in response to the signal
- an elegant desktop effect to make the workspace UI reshuffle smooth
- a simple fade to black with a busy spinner , followed by a fade back in would be enough
- requires that kwin is the first process that starts switching
- requires that kwin controls when the change signal is emitted to other processes
- requires that applications provide feedback as to when they are finished transforming to trigger the fade in
- unload/load window decoration, currently either a decoration is required (desktop) or hard disabled in code (active)
application integration
would be fantastic if applications can also adjust; e.g. okular switch from desktop to touch UI on workspace change.