About bugs, notifications and Clean Blend.

December 12, 2008

Now that KDE 4.2 is in feature freeze, a whole lot of bugfixing and polishing is being done all over the place. Last week we crossed the 200 open bugs mark in place (atm of writing, there are 198 open plasma bugs) which means we’re doing pretty well. With beta 2 (to be released next week) a lot of new reports will no doubt enter bugzilla, but at the rate we’re closing those, I think 4.2 will be a quite stable release. Keep those reports coming!
It’s interesting to see how many bugs can only be reproduced on a select number of systems or under a very specific set of circumstances. Thanks to these bugs being reported I have still been able to close some of them, even though I couldn’t reproduce them myself. Which brings me to something I’ve noticed on for example the dot: people often don’t report bugs, because they think the bug is extremely obvious. Even if you think a bug you encounter is really obvious and think the devs are already aware of them, please still report them. There’s a good chance that this bug isn’t obvious to the devs at all. Or at least ask on IRC if the problem is known.

The job notifications in the systray have seen some love (they now also display transfer speed / processed amount / total amount for example) and I was able to fix a lot of extender related bugs that have been coming in since beta 1. However, the job widgets are still slightly less ‘advanced’ then the oldschool dialogs. You can’t tick a ‘keep open after finished’ dialog for example. Now they only stay 15 seconds to allow the user to at least see that they are finished.
If you miss this functionality there is a way to revert to the oldschool dialogs though. It’s not possible through the UI since that didn’t make it before the feature/string freezes, but you can disable them through ~/.kde4/share/config/plasma-appletrc. The only thing you’ll need to do is to add the following to this file:


. The same thing can be done for normal notifications (kopete messages for example) with the ShowNotifications option. So people who don’t like the systray’s notifications (yet? we already have some nice plans for 4.3, like being able to detach to full blown windows, or have a ‘keep open after finished’ option) can at least disable them for now if they want.
You might also notice some not very useful jobs popping up every now and then (things like examining, moving files into tmp directory or stuff like that). Applications can hide their kio jobs using the KIO:HideProgressInfo flag, but that isn’t yet done everywhere in KDE where appropriate. So this is something that should be fixed in the apps creating those notifications not in plasma. Please report these problems to the correct application.

On another topic: Half-Left has made a new plasma theme called Clean Blend. It’s available in 3 different color schemes (a light, middle and dark one), though obsidian coast is not yet finished at the moment. I absolutely love it and since I don’t believe somebody has blogged about it yet, I thought I’d post a screenshot of it.

Clean Blend Theme

Clean Blend Theme


Some people asked where the theme can be found. At the moment it is in SVN playground: base/plasma/desktoptheme. If you like to see a fullscreen version of this screenshot, check https://pindablog.files.wordpress.com/2008/12/cleanblendscreen.png. I’m not sure why wordpress doesn’t let me make the image a link to the full version (or why it doesn’t do that automatically). If someone knows how to be able to do this, please let me know! You might even win a prize if you do… well, if a “thank you” falls under your definition of prize that is 😉

It’s not yet decided if this theme will become part of the default set of themes that come with 4.2, but even if it doesn’t, it will be provided to you through GetHotNewStuff.

Half-Left himself has also made a somewhat nicer screenshot of this theme: cleanblend

or go to https://pindablog.files.wordpress.com/2008/12/cleanblend.jpg for a full version.

Just in time for the freeze: kuiserver integration in systemtray

November 18, 2008

With the feature freeze in about 20 minutes, I’m glad to be able to tell that I was able to merge the kuiserver applet into the systemtray just a couple of hours ago. It still has some smaller problems, and I haven’t had the time to test it very thourouly considering the time pressure to get it in. But we’ve got > 2 months of bugfixing and polishing ahead of us, so I’m not worried. A screen shot of how it looks now:

kuiserver integration in the systray

It’s amazing to see how much new improvements there are in KDE 4.2. Not only in plasma (the size of the changelog is insane), but in all of KDE. The massive overhaul of kmail… The lovely file hover preview tooltips which are back in dolphin… The revised gui of the file open/save dialog… Lot’s of new features, polish, and performance improvements overall. I really can’t imagine going back to 3.5

Extenders: now 400% more pretty.

October 28, 2008

I haven’t blogged in way too much time, sorry for that. This however doesn’t mean that I didn’t make any progression with extenders. You might have seen the screencast about extenders in the commit-digest of a couple of weeks ago. While not much features have been added since, I have applied quite some polish. Not only in the form of bugfixes, but also in the form of a fresh new look, designed by Pinheiro. Implementing the c++ part of this look wasn’t at all trivial, but since about a week it is available in trunk/. A little screenshot for those of you who don’t run trunk as their primary desktop.

now 400% more pretty.

Extenders: now 400% more pretty.

Shown is a couple of notifications by plasma’s new and improved systray, which got the extendified notification applet merged in. It is really great to see extenders being adopted by other developers and appearing in all kinds of applet. At the moment, extenders are used by libplasmaclock (which means all plasma clocks include a detachable calendar), system tray for notifications, kuiserver applet and battery applet. If everything goes according to plan, the kuiserver applet will also be merged into the system tray before 4.2. And all this is just the start, since 4.2 will be the first release to include extenders. These are exciting times! 🙂

I’m curious to see how other themes look with extenders, once the theme maintainers add the required svg’s for extenders: extender-dragger and extender-background. If you maintain a plasma theme and need some more info on the svg’s to include, don’t hesistate to ask me.

Gone for the next two weeks

August 3, 2008

A quick post to let everybody know that I’ll be leaving for hungary tomorrow, and will be there for two weeks. (yes, unfortunately I’ll miss akademy) I’ve fixed some bugs to extenders and did some refactoring of kuiserver applet today, and except for not working yet with popupapplet, the extender api should, should be ready for use. You can take a look at the kuiserver applet in playground as a good example of how to use extenders. I won’t be around to answer questions the following two weeks, but I might check my email in an internet cafe at some point, so you can always try mailing me with your extender related questions. After the 18th, I’ll be available again, and will work on writing a techbase article about extenders and how to use them in your applets.

Oh, and the kuiserver engine now provides a Plasma::Service for controlling jobs. 🙂

Extenders have landed

August 2, 2008

Just a small post to let you know that extenders are now present in trunk/. Past week we’ve had quite an api review on the plasma-devel mailing list, and the extender api has improved a lot. A big thanks to everybody participating in that review!
Making changes to the new api was quite a task, but most of the stuff seems to work quite decent now. There are of course some rough edges and some known bugs, but they basically work. I’m looking forward to seeing what others do with this api. 🙂

I’ve also committed the first extender using applet in playground: the kuiserver applet (and of course dataengine). It’s unfortunately not usable anymore in a panel, but I’m working on that. The idea is to use the quite new popupapplet class which is a basic applet that switches between an icon which opens a popup showing a widget when in a panel, and just showing the widget when on the desktop. If you wish to try the kuiserver applet, you’ll currently have to patch kdelibs to register kio jobs to kuiserver instead of using the dialog based job tracker. This 1 line patch can be found in the kuiserver engine directory in playground. Eventually we’ll be working on a way to automagically fall back to the old dialogs when kuiserver isn’t present.

More on kuiserver and extenders

July 24, 2008

I would like to explain some of the work I’ve done some more, so I can address some questions people have asked, and hopefully give people a better idea what this is all about.

First to make clear: the kuiserver itself is just a visualization of kjobs. A kjob can be anything that takes some time: file transfers, checking of email, rendering of fractals, stuff like that. Most applications currently use a simple progressbar or a dialog as visualization of kjobs. With kuiserver, they can also register a kjob with the kuiserver so it can display the job.
An application explicitly needs to register a job with kuiserver to avoid a lot of entries in the kuiserver where the user is probably not interested in. For example: A mail client can, if you have multiple mail accounts, only register the parent job for all those mail accounts to kuiserver, and have only that job shown in kuiserver, while still showing the progress of the different accounts in the application itself. A way to visualize subjobs in kuiserver might also be neat, but I’m not yet sure about this part.
In my branch I’ve changed one line in kdelibs (I love abstraction layers!) to make every kio job (kio jobs also inherit kjob of course) register to kuiserver instead of using the standard dialog based job tracker. Other applications will need to make similar changes to be able to be shown in kuiserver.

Yesterday I’ve actually made the pause/cancel/resume work, (in the screenshot in my previous blogentries the buttons are there but didn’t actually do anything) so the kuiserver is now already pretty much good enough for my daily needs. What it could still use is letting old, not detached entries, expire after some time (the list could grow quite large otherwise). Also it could be a bit more pretty and polished, and maybe display some more information (speed, amount transfered etc.), but that isn’t my main priority now. But the kuiserver dataengine I’ve made makes all that information available and adding it is mainly figuring out a way to display this information without resorting to make it an ugly load of text. But I’m sure the great oxygen people can figure out a nice final design before 4.2.
There’s more interesting stuff that could be added to kuiserver (showing progress in drag handle, let applications register custom actions), but first I’m going to focus some more on the extender side of things. After all, that is where my summer of code project is about, and kuiserver is just a convenient test case.

Ooh, little screen of the kuiserver with actual working pause/resume/cancel buttons (and a little bit of other polish):

More kuiserver and extender goodness

More kuiserver and extender goodness

The reason why the middle finished transfer still shows a stop button is because that’s the way to remove the item from the kuiserver. But once I’ve changed kuiserver to let finished jobs ‘expire’, that won’t be needed anymore. The middle transfer is also ‘collapsed’ so it takes up less space. By clicking the icon, you can expand/collapse items.

Now I’m going to focus on reviewing the extender api. I’m looking for feedback on the api as it exists currently, so it can be improved. If you’re interested, the current api is on the plasma-devel mailing list (subject: Extender api review). After this review I will merge the extender branch into svn so it will become easy for anybody running trunk/ to test the extender api and kuiserver applet.

Quick screenshot

July 23, 2008

I’ll blog some more about the extender progress tomorrow, but in the meantime, here’s a screenshot showing some of the progress. For your viewing pleasure:

Kuiserver screenshot

Kuiserver screenshot

Credit to pinheiro for his great extender dragger design. 🙂

Extender update.

July 7, 2008

As you might know, I’m implementing ‘extenders’ in plasma for the Google Summer of Code. I haven’t blogged about my progress yet, and I’ve made some good progress, so time for a new blogpost. For an explanation about what extenders are and why they’re useful you should read my previous blogpost.

So what’s working right now?
Detachable widgets can be freely dragged around, dropped in other applets, dropped in a containment, ordered, and you’ll see spacers inserted in layouts on the place where the detachable will land when dropped there, so we even got some nice visual feedback.
When an applet that uses detachables is put into vertically constrained space, it automagically ‘collapses’: the detachables are moved to an extender and only an icon is shown where clicking the icon shows/hides the extender. Showing an icon is the default behavior, but you can reimplement a function to customize this behavior.
Detachables can have configuration data associated with them, so they can be reinstantiated when plasma gets restarted. This only requires the developer to implement a factory function.
The api provides a way to quickly search through all detachables that have been created by a certain applet so detachables will not be duplicated after a plasma restart.
When an applet contains no detachables it can automagically display a label telling so, so you won’t have a completely empty applet when it has nothing to display.

I’ve also started developing a kuiserver data engine and applet. The applet displays all running file transfers, and is the first actually useful applet that uses extenders (the other applet being a test applet that’s really just that and does nothing remotely useful). It’s quite limited at the moment still, (not to speak about the sheer ugliness of the thing), but it shows how easy it is to use extenders in a real world applet: the applet, minus whitespace and comments, is only 25 lines of code. Plasma rocks! 🙂

Now for the obligatory screenshot:

A screenshot showing the very first useful applet that uses an extender

A screenshot showing the very first useful applet that uses an extender

What do you see, except for some quite ugly graphics? You see the kuiserver applet (the icon in the panel, it’s extender showing two completed transfers), and one of the transfers it shows is being dragged to another applet (the useless test applet). In case you’re wondering, the blue things are drag handles.

So what’s next? Pinheiro has agreed to make some mockups of extenders, so soon I’ll be able to make them actually look good. I will also add a ‘collect detachables’ function: a way to quickly return detached widgets to the applet they came from. And the kuiserver applet could use some love: the ability to cancel/pause transfers would be a nice addition for example. Stay tuned: I’ll probably create a little screencast showing extender usage in action soon.

GSoC extenders project

April 23, 2008

This week the accepted Google Summer of Code proposals were announced and my proposal got picked! 🙂 I’ll be implementing extenders in plasma, and will be mentored by aseigo. I’ve never really had the urge to blog before, but seeing how I always enjoy reading other kde developers blogs I decided to start one myself. Here I will post any interesting developments on my SoC project.

So who am I? I’m a computer sciences student living in Enschede, The Netherlands. I’ve been very interested in free software for quite some time and recently got involved in the kde project, where I contributed a bit to plasma. Besides some other smaller stuff, I’ve been writing the RSSNOW applet. It’s located on svn in playground if you’re interested. It’s a bit broken at the moment with all the WoC porting and api review going on in plasma, but I might have some time left before SoC coding starts to beat it into shape. If you want to help out, please ping me in #plasma.

… anyway, extenders… what are they? You may have heard of them before, it’s one of the ideas from very early in the design of plasma actually. An extender is a brand new interface element which can make the desktop far more intuitive.
From my proposal:

Extenders are a place for applets where they can put widgets on. If applets live in a panel, extenders will be hidden until the user clicks on the applet or the applet wants attention. When that happens, the extender seems to ‘grow’ out of the panel, extending the space where the applet can display information. Items on an extender can then be detached by dragging them somewhere on the desktop or in a panel, where they live on independently from their source applet. If a lot of applets use extenders, this could revolutionize the work flow of the user.

So why is this great? Well, to start with, it allows for easier customization of the workspace. Think for example of a system monitor applet which shows all kinds of items, like cpu usage, network traffic and cpu temperature. When you have this applet on your desktop it could show you all this info at the same time. When constrained in a panel it could for example only show you cpu usage. The applet could put the other items in an extender. When a user clicks (or hovers?) the applet, the extender would appear to grow out of the panel to show all items. Now the user can drag for example the network traffic to his desktop or panel, where it can exist independent of the source applet.

Other possibilities include a kuiserver applet that shows running file transfers, a system notifier applet that uses exenders so you could for example detach a received email by dragging it and dropping it somewhere else. (hi dimsuz :)) A TODO list applet, that ‘collects’ extender items from other applets by dropping them on it, so you can organize your information in a convenient way. And, since plasma is all about clocks, a clock capable of showing multiple timezones in an extender (something like the gnome world clock, only much cooler ;)). There are lots of possibilities… I’m interested in hearing more suggestions.

Now is the ‘community bonding period’, so I’ll mostly be reading api docs, getting to learn the plasma codebase a bit better, hanging around on irc, stuff like that :). Once I’ve got something interesting to show, I’ll blog again.