They range from the trivial-but-was-in-KDE3 pattern based wallpaper plugin to Jonathan's weather wallpaper which automatically changes the wallpaper to reflect the weather. It of course uses the weather DataEngine, allowing Jonathan to concentrate on the business of making a neat wallpaper concept come to life.
To support his efforts, I added DataEngine support to the Wallpaper class so that using DataEngines is as easy from a Wallpaper as it is from a Plasmoid. Feeling I was on a Wallpaper role, I made a few other additions to the Wallpaper support:
- Wallpapers can now get their configuration sync'd to disk just like Plasmoids and Containments can, so even if the application crashes or some other disaster befalls the system you don't lose your new wallpaper settings.
- Wallpapers can mark themselves as needing to be configured, much how Plasmoids can.
- Plasma::Wallpaper now includes multi-threaded wallpaper rendering built in; this used to be part of the Image wallpaper plugin and people writing plugins were starting to copy this code wholesale. So into libplasma it goes.
- There is on-disk caching of rendered Wallpapers if the plugin indicates it would be a good idea to do so (it makes no sense, however, if the wallpaper is going to change a lot). This means the next start-up is a lot faster: it just loads a perfectly rendered paper instead of loading an image from disk and then scaling it or whatever first.
- The slide show wallpaper now pops up a progress dialog while scanning the contents of a directory so that things don't just "freeze up"; this caused an annoying bug that Thiago hit upon, but he sleuthed it down and I fixed it with a one-liner. Rejoicing was to be had.
- I added a small tool, plasmawallpaperviewer, that lets you load and configure wallpaper plugins. This is much more convenient for development than restarting plasma-desktop every time you want to see how your plugin is coming along. plasmawallpaperviewer joins plasmaengineexplorer and plasmoidviewer as part the handy group of developer tools that come with the Plasma workspace.
Which reminds me of a topic I've been meaning to blog about for a while: if you are writing an application that has plugin support and those plugins are non-trivial, work with the rest of the application (making regressions in the framework hard to pin down without further examination) and/or you want people to write lots and lots of them, be absolutely sure that you include a small driver application that exists only to load and interact with those plugins.
Not only is it much faster to start a small application like that than a full feature killer application, it also serves to isolate the plugin at runtime. You know that anything that's going wrong is either a problem in the testing app (though given how small these apps tend to be, bugs tend to be found and killed quickly and easily), in the framework code or in the plugin itself. Plugin writers will be able to trust that any problems they see are likely behaviours of their plugin and not some odd interaction in the context of a larger sea of plugins.
Speed and ease are what help people make good plugins and lots of them. In Plasma we have a tool for people writing Plasmoids, another for DataEngines and now one for Wallpapers. KRunner is already a good tool for testing AbstractRunner plugins, so we don't need a separate tool for that species.
Adding the ability to write plugins in dynamic languages is also a pretty good plan, and with Plasmate we will be stepping it up with an ultra-simple Plasmoid and DataEngine creator. Plasmate won't be released with 4.3, but it should make it into 4.4, especially if some of the SoC proposals for it get accepted.
Anyways ... wallpapers. The other four wallpapers that might be seen in 4.3 are an interactive mandelbrot generator, a world map (and yes, it uses Marble! :), "virus" which simulates your wallpaper being eaten up by small colonies of breeding pixel munchers and finally a plugin that loads and displays E17 Edje content (so you don't have to be jealous of their pretty wallpapers anymore ;).
While wallpapers aren't exactly critical features, they can be a lot of fun. Sure, it's not "big picture" stuff, but that's ok ... sometimes fun and cool is enough. We have lots of seriousness elsewhere to make up for it. ;)
I'm sure someone will ask about per-desktop wallpapers and drop-an-image-and-it-gives-you-the-option-to-make-that-wallpaper in the comments; I doubt it'll be in 4.3. Both are features that get asked about here and there, but it's not up there in importance enough for anyone to have stepped up and written a patch for either one. Hint, hint. :)