Warning, /plasma/plasma-desktop/design/systemtraywidget is written in an unsupported language. File is not indexed.

0001 The system tray widget is divided into three parts: core, ui and protocols.
0002 
0003 Core
0004 ----
0005 Core provides the three basic concepts that drive the widget:
0006     * Task: an icon in the tray
0007     * Notification: a visual notification from an application
0008     * Job: a long running job such as a file transfer
0009 
0010 Protocol implements a source for Tasks, Notifications and/or Jobs and has a set
0011 of signals used to announce the coming and going of its items. At its discretion,
0012 a Protocol can create (or destroy) Tasks, Notifications and Jobs at any time.
0013 
0014 A Manager class is provided in Core that looks after and tracks the three kinds of items
0015 along with all the Protocols. The Manager instantiates the Protocols and relays the
0016 critical signals, allowing the widget to simply pay attention to the Manager and
0017 treat all Tasks, Notifications and Jobs as if they came from the same place. The Manager
0018 is able to treat all Protocols generically using the Protocol API.
0019 
0020 All Task implementations provide a way to return a QGraphicsWidet for given host.
0021 The mapping between hosts and widgets is handled automatically by the Task class, and
0022 this, along with the central Manager, allows any Task to be shared simultaneously across
0023 multiple widgets.
0024 
0025 Notifications and Jobs don't have this problem as they simply provide access to
0026 data which the ui is responsible for showing in some way.
0027 
0028 Also provided in the core is a Task specifically for managing the Extenders of a host
0029 Plasma::Applet for Jobs and Notifications call, rather creatively, ExtenderTask.
0030 
0031 
0032 Protocols
0033 ---------
0034 The following protocols currently exist:
0035 
0036 DBusSystemTrayProtocol: support for the dbus driven NotificationItem; it provides Tasks;
0037                         for information on the design of this protocol, consult the
0038                         KStatusNotifierItem documentation
0039 
0040 FdoProtocol: support for the XEmbed based freedesktop.org system tray specification;
0041              it provides Tasks, though these tasks do not work properly in more than one
0042              widget at a time due to limitations in the XEmbed system
0043 
0044 JobsProtocol: access to the applicationjobs DataEngine; it provides Jobs
0045 
0046 NotificationsProtocol: access to the notificadtions DataEngine; it provides Notifications
0047 
0048 PlasmoidProtocol: features Plasmoids-wrapped-in-Tasks; is not currently fully functional
0049 
0050 
0051 The UI
0052 ------
0053 The user interface consists of a Plasma::Applet class, a layout class and a TasksArea which
0054 contains the Tasks published. The UI features the ability to order as well as hide items,
0055 register new Tasks, etc.