Archive for the ‘GSoC: extenders’ Category

Remote Widgets have landed!

September 2, 2009

Just a quick message to tell that I’ve just merged my remote widgets branch for GSoC into trunk. There are still rough edges…. actually, quite a lot of them, considering it just went through a massive refactoring as a result of the API we held here at tokamak, but it builds, and basically works with plasmoidviewer. Dario Freddi really was of great help getting the refactoring done and getting things merged, and tomorrow we’ll be working on integrating his work on KAuth to make rules stored securely. Then I will hopefully also be able to squash some bugs, and port plasma-desktop to the new API as well.
I will blog more about it later, including some instructions on how to actually use this stuff, because the GUI in that department is somewhat lacking (say: mostly nonexistent at the moment), but, YEAH! it works.
So far this is an insanely productive Tokamak, in an incredibly beautifull surrounding (the mountains are amazing). Mario Fux has done an incredible job so far on hosting this event. Thanks for that.

Well, now I’m going to sleep, its almost 5:00 in the morning already, and I’ve been hacking on remote widgets for most of the time since this morning so… I’m kind of tired. Stay tuned….


GSoC remote widgets: first milestone.

June 23, 2009

I finally reached a significant point in my GSoC project. Since yesterday I can actually control amarok through a published nowplaying Plasma::Service from another machine! Not only that, messages are digitally signed and verified so we can be sure who tries to connect to the service, and tested agains a set of rules that define which machines are allowed to access which services. With just a little bit of work I can even ask the user interactively “<….> tries to connect to the nowplaying service. [Always Allow <…>] [Allow] [Deny]”, just by implementing an AuthorizationInterface that fires up a notification. If you’re the type of guy that that is interested in fresh API and would like to make it perfect, please join the api review on the plasma mailing list 🙂

The next thing that I’ll need to do now (besides fixing a very annoying random crash) is building a dataengine service on top of this. This will just be a Plasma::Service implementation that allows access to dataengines. Then implement a dataengine that uses this to access remote dataengines. And extending Applet to have dataEngine return a remote dataengine pointed at the correct location if stated so in it’s configuration.

Still enough work to do, and nothing very spectacular to show but with all basics in place now and working, I’m making good progress. This is a really interesting project. I love working with new technologies (I’m now actually the first user of Kevin Ottens still WIP but already pretty sweet QtJolie library, and JOLIE itself is also pretty hot). And the security aspects are very interesting as well. I’ll try to blog more often now the basics are in place and the very visible part of development is really just beginning. Stay tuned…

Jobs and notifications in the plasma systray.

May 4, 2009

I’ve been doing some work since 4.2 to make sure jobs and notifications in the plasma systemtray have better usability then in it’s 4.2 incarnation. Being a new feature it unsurprisingly still had some rough edges. Thanks to a lot of feedback, and discussion on the issues, the current implementation solves a lot of annoyances. Here’s a probably quite complete overview of improvements:

  • There are 2 kinds of people: those that like it that the popup with jobs and notifications automatically hide after a short while when it’s automatically shown, and those that don’t like this behavior. Apparently, most of the plasma developers are in the first group, but looking at some of the comments I got through bugreports, blogposts and what not, the second group also has quite some followers.
    Two problem with auto hiding are:
    a) people tended to get confused, thinking the job was finished when it autohides
    b) some people usually wait for a job to finish when they start one, or have enough screen real estate (multiple monitors) that the popup isn’t really in the way of anything anyway.
    Issue a) will be much improved now that we animate the icon in the systemtray that indicates there are jobs/notifications while jobs are actually running, and the fact that, at least for compositing users, the popup smoothly slides into the panel when it get’s hidden, giving a clear hint to whats going on. For issue b) however, we decided to add a config option to the systray config dialog so you can disable autohiding if you don’t like it. Autohiding has also been improved by making it more consistent: always autohide on new automatically added items, and not only on jobs.
  • When a job completes, it now becomes an entirely different widget, and the popup get’s automatically shown so you can see when a job finishes, and, if it’s a file transfer, even open the file or destination directory (in case of multiple files), directly from that message. Furthermore, these items are nicely grouped with all completed jobs. I’ve currently got a patch pending on reviewboard with which they get automatically destroyed after some time (currently 5 minutes, might still change) so they don’t get in your way, but don’t get destroyed when you’re not using your computer. So you can safely go away from your computer for a couple of hours, and when you come back, will still be able to see which jobs are finished in your absence.
  • The job progress widgets have been improved: nicer layout, shows ETA, and can even show number of files/directories/bytes with a click on the ‘more’ link.
  • The job progress widgets are grouped in one single progress bar that shows eta, and total progress of all running jobs on your system. By default this group is collapsed, but if you like all the details, you can expand it with a single mouse click (persistent between plasma restarts btw) and will see all individual jobs.
  • The icon to show/hide the popup is now not only animated when jobs are running, it also shows how much items (jobs and notifications) are there, and how much of them have been completed if some are still running. It even has a tooltip… one glance and you instantly know how much jobs are still running, even if the popup is hidden.
  • The plasma notifications also show custom images, like kopete’s contact images.
  • Probably forgetting some stuff here, and some bugs got squashed.

Of course there are supposed to be pretty pictures with an blogpost like this, so here you go (don’t get worried by the not so readable white text in front of the spinner icon, small problem with the Air colorscheme that will get adressed):

Because the tray uses extendergroups now to group running and completed jobs you can now even do insane stuff, like detaching the in-progress-jobs group to your desktop, in which case every new job will appear there on your desktop, but completed jobs will still appear in to tray’s popup (which is actually quite a nice configuration, as I found out when I tested it).

But keep those suggestions coming (well, only if they are good suggestions of course ;)), so the 4.4 systray can be even better 🙂

Extender grouping and notification images

March 25, 2009

Last week I’ve spent some time on adding grouping support to extenders, and laid the foundation for grouping jobs in the plasma systemtray.

The grouping support for extenders is accomplished through the new ExtenderGroup class. ExtenderGroup is a subclass of ExtenderItem that adds an expand/collapse button to show or hide all ExtenderItems that belong to this group. You can add ExtenderItems to a group by calling setGroup on the items.

The grouping support for jobs currently uses this feature to show the total progress of all jobs. By expanding the group you can view all individual jobs. See this screenshot to see what this currently looks like:

Extemder grouping

The green arrow (we’ll need a better icon for that) hides the 2 jobs, keeping only the “2 running jobs” part. The nice thing about this is that by default you’ll only see this total progress when copying stuff, which doesn’t take up as much space as the detailed individual jobs. You can also notice the just added support for showing custom images in plasma styled notifications, which is used here to show a contact image. The oldschool passive popup notifications supported this, but the plasma notifications didn’t until now.

The handling of jobs in the systemtray could still use some more work (the layout of the individual jobs could still use some improvement, and maybe the global job progress should show a little bit more information), but you can see the direction we’re taking here.

Also notice the plasma theme that’s used here: Air, which will be the default for 4.3. The progressbars need some work (yes, you can see how far the bar has progressed if you look very good, and no, this isn’t very clear atm to say the least), but then again it’s still a work in progress. It’s starting to look very slick though.

Tokamak II

February 13, 2009

If you’re reading this you’ve most likely already read about Tokamak on some other blog or this excellent article on the dot, but still I like to write something about this experience. It was the first time I went to a kde related meeting and I have to say: it’s great fun. It’s great to have finally met a lot of the plasma devs in person and be able to put a face to those nicknames on irc. I’m now able to confirm that plasma people are in fact nice people with good taste ;), and I felt right at home.

We also had a lot of interesting discussions, not only about important stuff like whether or not mozzarella should be called a cheese (if you’re talking to someone from Italy you really shouldn’t ;)), but also about stuff like improving the system tray, kinetic (new Qt animation framework) and what aspects of plasma are currently weak points.

For the systemtray, we’ve designed a new specification that will hopefully be used in 4.3 and would not only fix the problems with the old spec and it’s inherit inflexibility, it also makes amazing new stuff possible. For example, being able to decide exactly which icons are useful to be displayed at which time, by requiring applications to provide a category and status to the systemtray. We also discussed a better way to display jobs in the systemtray. I’ll be working on implementing grouping support for extenders, so that in the case of the systemtray, all currently running jobs will get summarized in a single progress widget which can be expanded at will to show the individual jobs. Meanwhile, the current icon that shows whether or not any jobs or notifications are displayed in the tray will be changed to actually show activity by being animated. The 4.3 systray will really, really rock.

Besides a lot of discussion, also a lot of code got written. It’s amazing how much more productive you can get when you can ask each other questions face to face as opposed through mail and IRC. I’ve spent quite some time refactoring the way drag&drop was handled with extenders. While the old way allowed for easy live updates of the widget you’re dragging, while you’re dragging it, the new way avoids a bug which is not easy to avoid otherwise, and the code is faster and cleaner. I’m pretty pleased with the result.

Some of the other developers worked on plasmate, a simple editor for creating scripted plasmoids. While a lot of the individual components work for the biggest part, everything still has to be tied together. It’s going to be a very nice way to quickly create your own plasmoid. It will include the kate editor part of course, combined with an embedded preview of the plasmoid you’re working on, an easy way to edit the plasmoid’s metadata, a way to explore and edit the package, browse the api documentation and a way to directly publish your work. All in one nice, minimalistic editor. I think once it’s in usable shape, it will really make it a lot easier for people to start developing plasmoids.

It was also great to see other people using the extender api I created for the summer of code last year. Davide worked on some additions to the calendar so you can show details of a certain date (atm only holidays, but akonadi integration will follow) in an extender, and sebas was using extender in lionmail, a new plasmoid he’s working on which shows your email using akonadi. It’s really nice to see your work being used by other developers. Especially since the more widgets use extenders, the more this feature will shine.

There’s just so much nice stuff in the pipeline for 4.3… I could go on for hours, but I won’t: there still have to be some surprises along the way. While 4.2 focused mainly on restoring functionality of 3.5, 4.3 will mostly see innovative new features, which will make plasma really shine. These are very exciting times.

All in all I really enjoyed Tokamak, and I’m looking forward to the next meeting. 🙂

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 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 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.