If all goes well, then we can nail down the API and ABI for KDE 4.4 and move it into libkdeui where it belongs. Until then, however, we're following the New KDE Library API guideliness (which were written alongside the development of libknotification, actually, with input gathered up on kde-core-devel), and shipping a separate library for it that doesn't carry the hard API/ABI requirements of kdelibs proper. It's a balance between "releasing late and getting next to no testing" and "releasing early so we get testing but without endangering the API quality in kdelibs".
As a recap, the main benefits of the new system are:
- Speed: icons appear "instantly" rather than taking user-noticeable amounts of time to display in the tray
- Beauty: they can be properly themed, resized and painted flawlessly on a canvas; none of this was possible with the old system.
- Alternative display: I expect this to be a nice win for accessibility in that we can now make non-22-pixel-icon system trays. They don't even have to be icons, in fact. They could be text only, audio or even just REALLY REALLY BIG.
- Multiple hosts: one entry can now be shown in multiple places; this not only means things like being able to have a tray on each screen in a multiscreen setup, but also things like being able to integrate entries with their taskbar icons without giving up the old tray or "welding" the system tray and tasks widgets together in Plasma. It also opens the way to divide up the system tray into different widgets specific to a given category of icon, e.g. an area of messaging (and without having to patch all the apps for that specific use case).
- Interaction: the interaction is now completely defined by the host visualization. So, for instance, instead of "middle click" we now have "secondary activation". This allows the application side to provide the functionality but the host environment to decide what triggers it. End result: greater consistency.
- Application information: applications can now say "this entry is about hardware" or "this entry needs attention!" Now that the host can know the type and state of a given entry (and, really, any other piece of information we might find useful) we can finally provide things other systems have had "forever" like intelligently showing/hiding icons based on their usefulness to the user at that point (and yes, this will remain configurable :).
- Backwards compat: it still works with the old xembed system :)
I sent a preliminary email a week or two back to the freedesktop.org xdg list on it where it received some feedback. I really hope to see some uptake on this from other projects as a result, especially as we publish more formal specifications based on the DBus interfaces.
As this plays rather nicely into Canonical's "rethink notifications" activity I'm hoping they might pick it up and work on an upstream-able implementation for the GNOME desktop. In fact, I think the introduction of the messaging indicator library is a misstep in terms of cross desktop usefulness (what happens when you run a messaging indicator enabled gwibber in KDE, XFCE, or whatever other desktop?) and application patching efforts. Everything they have done there is (quite intentionally) 100% possible with the new notification area spec we're introducing by simply marking the entries in the application as type "Messaging". Then there is no need on the application side to figure out when to switching between the "traditional" system tray / notification area approach or the messaging indicator approach, it will work with all older (or just different) systems, etc.

9 comments:
Nicely done, I for one welcome the new system tray overlibs! But I would recommend using a more 4.0 name i.e. one that doesn't have the k letter in its name. A keyword without a key =). For example: uhm uh I am not good for names :P
So FindLibKNotificationItem-1.cmake is installed when libknotification is installed ?
This is wrong, this file must be available in the software which wants to use libknotification, even if libknotification is not installed. IOW, it has to go into kdelibs (but maybe not installed, because of source compatibility issues).
libknotification could install a LibKNotification-1COnfig.cmake, to help cmake with setting up everything correctly.
Let's talk on kde-buildsystem.
Alex
Yeah! I prefer small panels and icons in systray that will be 16x16px look great. I was wondering why they won't go 16x16 when i resize my panel. Now I know. Will this work in 4.3?
Greets from Poland! :D
@Tomasz: it will for the applications that use the new system; we're only moving a handful of apps over for 4.3 in order to test the system, and will work on getting all kde apps ported in 4.4
What about non-KDE app icons?
@Macel: from the desktop shell side, we maintain compatibility with the xembed based fd.o spec in the system tray widget. a good portion of the work that went into the system tray in 4.2 was to allow for multiple backends like this. this covers kde3, qt, gtk, gnome, etc apps running inside of a kde4 desktop shell.
from the application side, it falls back automatically to the xembed based fd.o spec if there is no available d-bus host. this covers kde4 applications running in kde3, xfce, gnome, etc.
in future, other applications could implement the d-bus interface as well (it's completely toolkit neutral, being d-bus) and gain all the benefits of the new system as well.
we did think this through pretty thoroughly. ;)
Aaron congratulations. My English is not very good:). Today was launched version 3 of Ekaaty Linux in Brazil and we have the pleasure to inform you that only use KDE as our environment. We look forward to the KDE 4.3 final for launch in Ekaaty 4.
Where is the source?
I don't see the source code in ftp://ftp.kde.org/pub/kde/stable/4.3.3/src/extragear or when doing an svn checkout of svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs/experimental. I only see some binary RPM's listed in ftp://ftp.kde.org/pub/kde/ls-lR.bz2.
@adam_richter: starting with KDE 4.4 KStatusNotifierItem is part of libkdeui, so apps don't need to link against any other libs.
for 4.3, it's in kdelibs/experimental.
Post a Comment