Plasma/shellPackage

From KDE Community Wiki

Package filesystem

Package Type in desktop file: Plasma/Shell

contents/components/
contents/views/
contents/layout.js -> file
contents/defaults ->file

contents/components/

Shell UI components - named files AppletError.qml CompactApplet.qml Configuration.qml WidgetExplorer.qml

contents/views/

Each view (panel view or desktop view) will load a qml file that will "contain the containment", it will have the form <containment type>.qml Where <containment type> is allowed to be Desktop or Panel

contents/layout.js

The default layout JavaScript file supports a similar API to Plasma1 desktop scripting. The manipulation of Applet geometry will change a bit, see Applet geometry manipulation from scripts

contents/defaults

Default settings ContainmentActions Default containment for each type Default toolbox

Example defaults config file

[Desktop]
ContainmentPlugin=org.kde.desktop
ToolBox=org.kde.standardtoolbox
[Desktop][ContainmentActions]
Ctrl;LeftButton=org.kde.standardmenu
MiddleButton=org.kde.paste
 
[Panel]
ContainmentPlugin=org.kde.panel
ToolBox=org.kde.standardtoolbox
[Panel][ContainmentActions]
Ctrl;LeftButton=org.kde.standardmenu

[Theme]
Theme=air-mobile

Layout package details In metadata.desktop: X-Plasma-ContainmentCategories=<containment type>

Applet geometry setting Containment geometry strategies: * None * Indexed * Grid * Free * Grouped



Applet geometry manipulation from scripts

QML part

Item {
    property int appletPlacementStrategy: “indexed”
    Connections {
  	    target: parent

onIndexedPlacementRequest: {

               parameters: applet, index
           }

onGridPlacementRequest: {

               parameters: applet, x, y
           }

onFreePlacementRequest: {

               parameters: applet, point
           }
    }

}

C++ part in ScriptEngine

PlacementStrategy ContainmentInterface::placementStrategy() const

{
     // look up the appletPlacementStrategy property and return it
}
[...]
void ContainmentInterface::requestIndexedPlacement(Applet *applet, int index)
{

if (placementStrategy() == IndexedStrategy) { emit indexedPlacementRequest(applet, index); }

}