The taskbar controls the animations by listening:
* appIcon 'notify::hover' and 'menu-state-changed' signals.
* scrollView 'motion-event' and 'leave-event' signals (ripple and plank animations).
The animations are processed in a new TaskbarItemContainer (that extends DashItemContainer).
Vertical animations are done with a Clutter clone because the appIcon actor cannot go outside the taskbar.
Horizontal animations (plank) are directly applied to the taskbarItemContainer.
AppIcon._onAnimateAppiconHoverChanged removes icon backgrounds when animations are enabled. It also increases the size of the icon texture in order to prevent it from being ugly when it is scaled.
Each animation type has its own duration, rotation, travel and zoom settings.
Each multi-icon animation has its own convexity and extent settings.
It is achieved by using "{ type: value, ... }" dictionaries.
Settings.ui:
- Move thickness, length, and anchor from Style tab to Position tab.
Group together with position in the same frame.
schema:
- Remove unpublished panel-length and panel-anchor settings, replacing
them with panel-lengths and panel-anchors JSON objects (like
panel-positions).
- Remove unpublished anchor enum, since panel-anchors is being managed
by the extension in JSON, not typed by the schema.
- Deprecate panel-size in favour of new panel-sizes JSON, storing
per-monitor panel sizes.
- Mention that panel-position is deprecated.
Introduce panelSettings.js:
- Functions to fetch or set panel settings that are stored as JSON.
Grown from now-removed getSettingsPositions() in panelPositions.js.
prefs.js:
- Group together the different UI widget label and value refreshing
into method _updateWidgetSettingsForMonitor().
- Change multi-panel behaviour of _setAnchorLabels(). Previously, all
panels shared the same anchor setting, and so setAnchorLabels
considered all monitors. Now, panels are configured either
independently, or sometimes all together; set labels according to
orientation(s) of panel(s) being configured.
- Omitting preventTop handling in refactored _setPanelPosition()
method. Previously, it was written to set the first monitor's panel to
Pos.BOTTOM if the user clicked the Top position radio button, if
stockgs-keep-top-panel was also set. But the user can't activate the
Top button anyway if stockgs is set (likely implemented later).
panelManager.js:
- Removing panelPositions, as it is not needed any more.
If you click a thumbnailed window within a workspace preview, the shell
behaves as expected; if you click a thumbnailed background, the overview
is closed.
Fix it by activating the workspace whose the picked actor is the
thumbnailed background.