Jump to content

Plasma/shellPackage: Difference between revisions

From KDE Community Wiki
Notmart (talk | contribs)
No edit summary
Notmart (talk | contribs)
Line 29: Line 29:
<containment type>.qml
<containment type>.qml
Where <containment type> is allowed to be '''Desktop''' or '''Panel'''
Where <containment type> is allowed to be '''Desktop''' or '''Panel'''
===Desktop.qml===
The file Desktop.qml will be instantiates by the desktop view, and will manage the containment for the given screen/activity: changing activity the containment will change, the Desktop.qml instance no, so it can do things like animate the activity switch.
There is a minimal API between the actual desktop view window and Dsktop.qml, available troughthe import
  import org.kde.plasma.shell 2.0 as Shell
* the view instance will be available as the variable '''desktop'''
* the desktop will provide two properties:
** dashboardShown: Read only, is true when the desktop is in "Dashboard" mode
** windowType: read/write, it's how the view will behave (default, Desktop)
The legal values for windowType are:
* Shell.Normal: The window is a normal resizable window with titlebar and appears in the taskbar
* Shell.FullScreen: The window is fullscreen and goes over all the other windows
* Shell.Desktop: The window is the desktop layer, under everything else, doesn't appear in the taskbar
* Shell.WindowedDesktop: full screen and borderless as Desktop, but can be brought in front and appears in the taskbar, for instance Plasma Active uses this behavior


==contents/layout.js==
==contents/layout.js==

Revision as of 15:22, 26 September 2014

There will be two shell packages (with the same PackageStructure) loaded on the shell: a "global" one that will provide fallback files, while another package will be loaded specific of the device form factor. Files will be searched for in the formfactor package, then if not found will be searched for in the "global" package.

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

TODO: this folder goes away, every named file gets its own directory Current files:

  • "appleterror", "components/AppletError.qml": Error message shown when an applet fails loading
  • "compactapplet", "components/CompactApplet.qml": QML component that shows an applet in a popup
  • "configurationui", "components/Configuration.qml": QML component for the configuratuion dialog
  • "defaultcompactrepresentation", "components/DefaultCompactRepresentation.qml": Compact representation of an applet when collapsed in a popup, for instance as an icon. applets can override this component.
  • "widgetexplorer", "explorer/WidgetExplorer.qml": Widgets explorer UI
  • "panelconfigurationui", "components/PanelConfiguration.qml": Panel configuration UI

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

Desktop.qml

The file Desktop.qml will be instantiates by the desktop view, and will manage the containment for the given screen/activity: changing activity the containment will change, the Desktop.qml instance no, so it can do things like animate the activity switch. There is a minimal API between the actual desktop view window and Dsktop.qml, available troughthe import

 import org.kde.plasma.shell 2.0 as Shell
  • the view instance will be available as the variable desktop
  • the desktop will provide two properties:
    • dashboardShown: Read only, is true when the desktop is in "Dashboard" mode
    • windowType: read/write, it's how the view will behave (default, Desktop)

The legal values for windowType are:

  • Shell.Normal: The window is a normal resizable window with titlebar and appears in the taskbar
  • Shell.FullScreen: The window is fullscreen and goes over all the other windows
  • Shell.Desktop: The window is the desktop layer, under everything else, doesn't appear in the taskbar
  • Shell.WindowedDesktop: full screen and borderless as Desktop, but can be brought in front and appears in the taskbar, for instance Plasma Active uses this behavior

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]
Containment=org.kde.desktop
ToolBox=org.kde.standardtoolbox
[Desktop][ContainmentActions]
Ctrl;LeftButton=org.kde.standardmenu
MiddleButton=org.kde.paste
 
[Panel]
Containment=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

TODO

  • defaults for kwin configuration
  • default plugins for loaded kwin effects

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);
       }
}