Aaron J. Seigo
Aaron J. Seigo <aseigo at kde dot org>
... sponsors my KDE work
aseigo> su -
linux:~/KDE/SystrayRethink # _

What's Currently Wrong With the System Tray

right now the system tray is a place for applications to embed little widgets. generally these are icons, but there is no guarantee of that. some applications shove multiple icons and even labels in there. consistency is not possible.

moreover, because these widgets exist out-of-process to the systray, when the application they originate with goes modal (e.g. a dialog box pops up) then the systray appears to also go dead. this generates bug reports and really looks unprofessional.

being out-of-process also makes painting more difficult (since the tray has limited control over the icons themselves; transparent kicker and background images are made more painful because of this) as well as makes it impossible to enforce settings like "don't show tooltips on the panel". these things also cause bug reports and create an look unpolished feel.

it also leads to different applications reacting differently to actions taken in the system tray, such as mouse clicks.

additionally, it's hard to do advanced features like system tray icon hiding properly as there is little to no communication between the origin application and the tray.

and because there is no separation between presentation and model, it's impossible to get truly creative and offer alternative / multiple viewing options for the tray.

How This Could Be Made Better

if instead of embedding widgets directly into the system tray, an application published a set of information to a well known service via an IPC mechanism, many of these problems would be solvable.

by keeping the presentation with the system tray, issues of painting, blocking and consistency would dissappear. advanced features like icon hiding could be done properly by adding to the spec messages an application could send to signify status.

in particular, i'd like to see the following information published by an app wishing to have representation in the system tray:

  • application name
  • optional icon name (for loading from the current icon theme)
  • optional bitmap (overrides icon name)
  • status (idle, normal, important message, etc..)
  • descriptive text (hopefully related to status =)

in return, the system tray would send across the following events for system tray applications to react to:

  • hide UI
  • show UI
  • quit
  • show context menu at point P on the screen
  • request status update

probably some others i'm forgetting at the moment =) if you need more info than this, please let me know