I am really excited to see [Ted’s post](https://gould.cx/ted/blog/Having_a_tidy_systray) regarding some of the improvements coming to the desktop notification area. This part of our desktop has become something of a wild west – icons look ugly, are spaced too close together, have left/right click inconstancy, often provide obscure and inaccessible widgets and cannot be easily controlled across notification icons with a single keyboard shortcut. This approach will fix many of these issues.
This approach has two distinctive components – the user interface improvements and the technology to implement. The user interface changes I think are really interesting and bring some distinctive benefits:
* Application indicators are more consistent – no more left and right-click inconsistency. Always left click to see the items.
* Scrubbing – you can click once on an app indicator and scrub left and right through other indicators with your mouse.
* More accessible – importantly, scrubbing also applies to the keyboard: this means you could bind a key to the indicator applet, hit that key and then use the arrow keys to navigate through all the indicators.
* Themable panel icons – you can set a specific icon to be a panel icon for an indicator: this should make it easier for creating single colour panel icons for light and dark themes.
* KDE/GNOME compatability – one thing that really excites me is that by using this spec, KDE applications running in GNOME will have their application notification menus rendered with GTK widgets and vice-versa.
I am really excited about the opportunities this brings to the desktop, and I am also really excited about us working with our friends in KDE on this spec.
I wanted to give this a roll in my more native Python tongue so I [added the Karmic PPA](https://edge.launchpad.net/~indicator-applet-developers/+archive/indicator-core-ppa) and started playing with the module. I contributed my code as an example [on the wiki](https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators). Here it is to show how it works:
import gobject
import gtk
import appindicator
if __name__ == “__main__”:
ind = appindicator.Indicator (“example-simple-client”, “indicator-messages”, appindicator.CATEGORY_APPLICATION_STATUS)
ind.set_status (appindicator.STATUS_ACTIVE)
ind.set_attention_icon (“indicator-messages-new”)
# create a menu
menu = gtk.Menu()
# create some labels
for i in range(3):
buf = “Test-undermenu – %d” % i
menu_items = gtk.MenuItem(buf)
menu.append(menu_items)
# this is where you would connect your menu item up with a function:
# menu_items.connect(“activate”, self.menuitem_response, buf)
# show the items
menu_items.show()
ind.set_menu(menu)
gtk.main()
I basically created an indicator object and threw a GTK menu into it and as if by magic my app appeared in the notification panel, properly spaced out and enjoying the benefits I mentioned above. Pretty simple. 🙂