This plan is maintained at:

Application Indicators

The notification area is deprecated for a few different reasons. XEmbed isn't beautiful, and doesn't give enough information to embedders to provide a good and consistent user experiences. Instead we'd prefer to support a single set of menus that applications could define and they'd be placed into a menu bar allowing for a consistent user experience.

The plan

  1. Articulate a plan -- you're here Smile :)

  2. Pick a protocol -- We're looking to build upon the KDE Notification Item specification which provides a DBus-based protocol for placing applications in the panel (or other visualization). The addition that we'll need is the ability to define a menu. We're discussing this with KDE currently to merge the requirements.

  3. Build a library -- We want to build a library that would make it easy for application developers to put something in the application indicators area, but also gracefully degrade (Application Area, KDE Version of Spec and XEmbed Systray).

  4. Build instructions -- Application developers need guidelines and example code.

  5. Port hard applications -- Examples are good too.

The how

  • Ideas to change the KDE Spec
    • Add a 'menu' property that would communicate a menu to use for the application entry
    • Don't send the mouse events
    • Only use icon-naming-spec named icons instead of bitmaps (?)
    • Possible addition of an icon directory for per application icons
  • Menu representation
    • Use the existing libdbusmenu representation Launchpad Page

    • Write code to convert the local menus to make this unimportant for application developers
  • Application library
    • Make it simple for application developers
    • Handle fall back cases
    • Make for a porting guide

Application Pseudo-code

void myfunc (void) {
   GtkWidget * menu = gtk_menu_new();

   GtkWidget * item = gtk_menu_item_new_with_label("Menu Item 1");
   gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
   GtkWidget * item = gtk_menu_item_new_with_label("Menu Item 2");
   gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

   AppIndicator * ai = application_indicator_new("my-app-icon", menu);
   application_indicator_set_status(ai, ACTIVE);



  • Develop the application library
  • Document the library
  • Example Application: Tomboy (C#)
  • Example Application: Rhythmbox (C)
  • Example Application: System Config Printer (Python)
  • Extend indicator-applet to support application indicators
  • Develop a "registry" as per the KDE spec
  • Make a LP project, package, etc.
  • Support applications using their own icons, outside of any theme directory (in this case using the name will not work)
  • Add the ability in DBusmenu to support the application saying which events it's interested in
  • Add resources at:


  • Wine applications need the Windows systray support
    • Wine previously had a very small "Wine systray window" that was hard to find
    • Would not be an ideal solution
    • Probably not possible to "auto convert" applications as most usage is custom
  • Efficient dbus protocol / need for an event mask / optimize traffic

ApplicationIndicatorsLucidPlan (last edited 2009-11-18 17:50:18 by 63)