Issue 126

This Week...

Interface work and new applets specialised for use on MID (small form factor) devices, beginnings of applets-in-the-systray, and work on a new calendar popup widget design in Plasma. A collection of new comic provider sources, and use of Solid to detect network availability in the "Comic" Plasmoid. The "Spellcheck" runner moves to kdeplasma-addons, a revival of the "Strigi" Plasmoid, and a new "XEyes" Plasma applet. Two new layout modes for the "present windows" effect in KWin-Composite. Even more bug fixes in Kicker for KDE 3.5. A basic "revision history" implementation, and the beginnings of code generation support, in kdevplatform (the basis of KDevelop 4). Support for loading 100e8 stars in KStars. Get Hot New Stuff for downloading new skins in KSirK. Support for exporting to JPEG in Darkroom. The ability to pick a colour from the desktop in KColorEdit. Support for video annotations (using Phonon) in Okular. Marble integration in Mailody displaying the network route an email has taken. Automatic language detection and a range of bug fixes in Sonnet. Dramatic speedups in AdBlock filtering in KHTML. A configuration dialog and KConfig support in kio_bookmarks. Initial implementation of KOSDWidget-based KNotify OSD plugin. Various work on PowerDevil, with a move into kdereview. Import of a KIO thumbnailer plugin for RAW camera files. An experimental library to abstract away media player interfaces. Initial version of an Open Collaboration Services client, "Attica", and an Akonadi resource for handling users. Version 1.0 of the Lancelot alternative menu is tagged for KDE 4.1. KDE 4.1.1 is tagged for release.

For the SUSE HackWeek, I decided to take on the challenge to do an implementation of some of the ideas Frank Karlitschek presented in his Akademy keynote. Dirk joined me, as well as Dirk Mueller and Sebastian Trueg for a couple of days, so we had a nice team of people working on it at the SUSE offices in Nuernberg.

We achieved two main results. First, we did a lot of work on the Open Collaboration Services API, which is a specification for a HTTP API for interfacing with community web sites. The specification is hosted on freedesktop.org, and opendesktop.org (which includes kde-apps.org and kde-look.org) has a first implementation of it.

Next, we implemented a desktop client for the API. Its working title is "Attica", after the Greek region where democracy was born. The client includes a library to access the API, an Akonadi resource for handling people data, a data engine for Plasma, and a GUI application mainly for testing the client library and the Akonadi resource. Attached screenshots show the application as it displays opendesktop.org people through Akonadi, and the Akonadi console with the debug view on the resource.

Obviously there still is a lot to do. The client library for accessing the Open Collaboration Services API has to be extended to cover more of the API, the Akonadi support has to be completed and then of course we need more and better user interfaces.

One thing I would like to provide is something like a person widget, which can be used to easily integrate people into applications. It would give access to the community by providing links to related people, or could be used for direct communication.

Another thing which I would love to see is an application to view and interact with groups of people, which is a bit more oriented at the people and not so concentrated on the data as current addressbooks are. This could provide a more natural and useful way to interact with all the data about people which is distributed over the desktop and make it easier to keep in touch with people and keep track of what's going on in the different groups you are involved with.

Finally it would be fantastic to solve the problem of multiple data sets of the same person. The more person data we are able to pull in, the more frequently you get multiple entries of the same person in your addressbook. We need a way to merge these, so that there is only one entry per person containing the aggregated information. A possible way would be to use NEPOMUK for this and there already is some code which could be used to achieve this goal.

It will be interesting to see where this goes. There are lots of opportunities and the potential to implement unique new features for the desktop which take benefit of the fact that we have a fantastic community around our software.

At Akademy 2008, several of the KDE-PIM developers gathered to discuss which goals we wanted to accomplish for the KDE 4.2 release.

While one of our most important long term goals is obviously the porting of our applications to an Akonadi-based PIM infrastructure, we determined that porting even just the core applications would not be possible within the limited time range until the feature freeze in early November.

However, we still wanted to move as much as possible towards this goal so we discussed options for softer and safer migration paths than full porting.

Since we are talking about calendar and contact data of a lot of users there is little room for failure, which is why we needed a concept which would allow an "emergency stop", i.e. falling back to data handling as shipped with KDE 4.1.

We decided that the only viable way to guarantee this exit strategy was to keep the applications as compatible with the traditional data handling as possible. So what we are going to do is focus on getting the users' PIM data safely "into Akonadi", meaning that access to it will be managed by the Akonadi server.

On the application side we are going to provide access to this centrally managed data through two plugins (calendar and contacts) compatible with the traditional KDE-PIM framework (called "KResources"). In commit logs you will often see them being referred to as "bridges", as in helping two different parties to reach out to one another.

Actually we are also working on bridges the other way around, i.e. to make sure any kind of currently available technology for accessing PIM data is also available for getting it "into Akonadi".

Additionally we are working on a tool to automate this whole migration as much as possible, ideally not requiring any effort on part of the end user in any way.

To stay with the bridge metaphor, the one for contacts is ready for intrepid test drivers in both directions, i.e. accessing contact data managed by Akonadi from traditional applications like KAddressBook, as well as using existing KResource plugins to get data "into Akonadi".

Bug Fixes

KDE Base

Now, in detail:
- We need two restoreState method calls when applying the main window settings.
One before we set the toolbars again, and another after that.
The first call will setup them, the second will do the right math with them (since toolbar text position, icon size... was set).

- Actually compress potential sync's with a proper timer
- When dirtying the settings, save directly (of course, for almost all actions, not for moving or resizing, which are compressed).

This prevents us from saving incorrect settings if toolbars have been removed/changed on the meanwhile, and thus, making QMainWindow::saveState() storing incorrect values.

Ok. Now, this is the ultimate toolbar fix!
The root of all evil was: we iterate over all toolbars when restoring the application (on loading): that means, when you are going to restore the first toolbar, a save was being triggered, saving all toolbars, so all toolbars except the first weren't set up, and being saved their default settings => no good.

Now we use a flag for not saving when we are loading (makes sense, doesn't it ?) ;)

Rewrites the panner class that is the base of panels and taskbars, so that it does not inherit QScrollView, but implements just the needed features.
This way, things are faster and there is less flicker.
The scrolling of panels and taskbars is now smooth.

The taskbar correctly refreshes its big kicker tip when the window icon has changed.
The big kicker tip is now automatically hidden when the client has nothing to show anymore.
All timers are stop in any case when the big kicker tip is hidden.
The big kicker tip round look is better now.

KDE-PIM

Well, if we save/restore from the same group and config file, the main toolbar is saved with a certain width (it had some elements on the first plugin) and when switching to another plugin its size can change, but it is restored from the same file, what makes it have an incorrect size.

We always want to make different groups for each plugin, so the window/toolbars are adapted correctly.

Networking Tools

Fix concurrency issues.
In particular this should fix crashes when a connection is closed either from krdc or from the server side.

Bug reporters, please check if you can still reproduce the crashes with this patch (this is for trunk, backporting to 4.1 in a few minutes).

Details:
1- Disconnect signals from the client thread to the vncview when the latter is deleted.
This fixes a 100% repeatable crash that occurs when I close a vnc tab that is connected to an ubuntu machine running the vino vnc server (aka gnome desktop sharing)

2- Remove the buf global variable.
I wasn't able to get a reproducible crash due only to this variable because of the above item, but getting rid of that variable is the sanest thing to do I think.

Features

Development Tools

Evgeniy Ivanov committed changes in /trunk/KDE/kdevplatform:

* Basic Revision history implementation, including DVCScommit class and interface implementation for Git. It works correctly with simple revision history (actually it works fine with all things could be done with DVCS in KDevelop). Simple history with merges is ok too.

* Some API documentation (essential).
* Branching tests for GitExecutor (but can be used in all executors).
* Few Easter Eggs for translators :)
* Fixes for Git to allow CommitManager to work correctly with "no commits" repos.
* Some minor fixes/changes.

Educational

Akarsh Simha committed changes in /trunk/KDE/kdeedu/kstars/kstars:

Including support for loading 100e8 stars.

This patch includes:
+ Removal of some deprecated code
+ Splitting of StarComponent into StarComponent and DeepStarComponent
+ Separation of named and unnamed stars
+ Support for both 16-byte per star and 32-byte per star data files

The changes are still experimental and might break some features or introduce some bugs.

Load video widgets for the video annotations of the document in the main page view.
Add them as part of the page items, so they can be resized, moved and shown/hidden automatically according to the related pages.

few improvements to the video widget (yay for airport hacking):
- add a seek slider to the control bar, that "becomes" a button that popups it when there is too few space for it
- more robust even filter on the phonon video widget
- "eat" the tooltip events, so we don't have tooltips coming from eg the page view

New control applet for MID hardware.
Click on the icon, and you can set brightness and volume.

We'll need some nicely styled widgets here.
I've been playing with Plasma::Widget::Label and a 'normal' QWidget popup. Both won't pop up on plasma-mid, though.
And it doesn't actually do anything, more a ui concept as addition to the systembar.

Beginnings of applets-in-the-systray.
This commit adds a new protocol (Systemtray::MID::Protocol) and a corresponding subclass to Systemtray::Task (which would be Systemtray::MID::Task).
The Systemtray::Manager now also loads MID::Protocol. MID::Task loads an applet and pass this as QGraphicsWidget up to the Systemtray::Manager.

Pretty much everything seems to be in place, but after loading the applet, the taskCreated(task) signal is not received by the manager, (it's sent from the protocol after loading the applet).

Can someone help me out and have a look why the signal is never received (and keep me from banging my head against a wall)?

Add a global configuration option for animation speed.
See description of Effect::animationTime() for how-to-use.

TODO: Effects need to reload config after doing the change in the kcm.
NOTE: Default TimeLine constructor now creates invalid object, it is necessary to explicitly call setDuration() in order to ensure all animations respect this setting.

Networking Tools

Add a network settings lookup fallback to retrieving the key of a channel.
Previously, this relied solely on the channel's mode map.
Closes the brief gap between a channel join and the server's reply to MODE where possible, so that e.g. reconnecting directly after auto-joining a channel with a key doesn't result in a failed rejoin due to not having the key by way of the MODE reply yet.

Add incoming file transfer request into chat window and remove the old dialog.
Add globally unique id into Kopete::Message.
Add defualt incoming file transfer request style to make it work with all styles.

Utilities

Dario Freddi committed changes in /trunk/playground/utils/powerdevil:

Commit worth some days of work, while I was away. Here goes the most important changes:

* Added a KRunner that allows to change the current profile ("set-profile")
* Added a basic Applet. This is meant to be a placeholder, since I'm not good at all with Plasma Applets.
* Improved the Plasma engine, now it has all the needed informations.
* Added more methods/signals to DBus interface, mainly for the Plasma stuff.
* Improved profile support
* Some changes to the GUI in the config dialog
* All powerdevil modules are now ready for l10n. Added also Messages.sh. All the modules are translated from "Powerdevil" catalog.
* Added a "capability" page to the KCModule, where you can see what your system is capable of
* Added support for powersaving schemes
* Added support for turning off CPUs (where possible)
* Added more notifications
* Various fixes, and some more stuff I could have forgot writing about

Rewrite KGpg first start wizard to use KAssistantDialog instead of Q3Wizard

This also improves the assistant in several ways:
-allows to search for gpg binary if it is not in path
-improve searching for GnuPG config file
-ask GnuPG for config file before guessing it's location
-checks for the newer version first if both are present
-add quirk for Windows location of config file
-adds summary page at end of assistant
-allows user to choose if key generation dialog should be started or not
-when the default key is set in assistant save full fingerprint instead of only last 8 byte

By the way: the GUI stuff was more or less copied from the UIC generated file.
If anyone has improvements feel free to commit it or mail me a patch.

Games

Commit the framework for the next-generation Palapeli interface.
This will consist of widgets appearing on the puzzle table.
They should be usable with both mouse and keyboard (unlike the current solution esp. of load and save actions, these have problems with keyboard shortcuts).

These files are going into a new subdirectory of game/ as I would like to tidy up the mess of classes there a bit.

By now, there is no interface which actually uses the new framework.
That is my main job for the next days.

some work on adblock filtering:
- 7.6x performance speedup: from 15.2 sec to filter 20000 random urls with kubuntu standard set of filters down to only 2 sec now
- better compatibility with adblock plus (now handles whitelisting too)

Multimedia

Michael Pyne committed changes in /trunk/KDE/kdemultimedia/juk:

JuK optimizapalooza!

* Add whatever X-DBUS-foo line KUniqueApplication says we need.
* Restructure the startup sequence to postpone all the hard work until after the GUI is setup as much as possible to allow passing our reply over DBUS ASAP.
* Don't call hasCover from PlaylistItem like, ever. I made CoverInfo::hasCover() take longer when I added support for APIC frames but didn't catch all unnecessary instances of their use last time. Luckily this is the big win and is backportable.
* Also, don't force CoverInfo::coverId() to call hasCover() for no reason.

Hopefully this should remove the egregrious Plasma freeze-ups while starting but even after returning from KUniqueApplication::newInstance() quickly it seems to take a while for the reply to go over the D-BUS...

Other

Development Tools

Change up the default module branches to automatically apply saner default branches for some modules with respect to the global branch setting.

For example if you set "branch 4.1" globally and have no branch preference for kdesupport you'll get trunk for now (later to be changed to the mythical stable-kdesupport-stuff tag).
For phonon you'd get 4.2, etc.

Alright, I think this is a neat change.
kdesvn-build has supported an automatically generated symlink in the log directory called latest for awhile now, which puts you in the log directory for the last build run.

Now, instead of symlinking latest to the last build run, latest holds a directory of symlinks.
Each symlink is named after the module concerned and links back to the last build run for that module.
That way you always have easy access to the logs for the last build run of a module without having to run find or anything crazy.

You should find that using it is effectively the same unless you have tools of your own that depend on $logdir/latest being a symlink.

Update kuiserver applet to use PopupApplet, which, since my previous commit, allows a lot of otherwise duplicate code to be removed, so rejoyce :).
Still some issue with detaching extenderitems from a plasma::dialog.

Funny how awesome ideas are often so awfully simple.
Test whether compositing really works by simply trying to do it and test the result - create a small testing window with known content, do the same with it like with normal windows, grab the screen contents, compare with the original, doesn't match? -> fail.

Unify the konqueror.rc forks again. After the past work on moving filemanagement-specific actions to dolphinpart, there was no real difference left between konq-webbrowsing.rc and konq-filemanagement.rc.

Just the hiding of reload and stop in filemanagement, but those are very useful for remote directories anyway, so let's have them back.

On the other hand konqueror.rc kept rotting away but was still used as default in many places...
So we had bugs like "RMB on a link, the new window has text under icons because it uses konqueror.rc instead of konq-webbrowsing.rc" -- which shows that the konqueror.rc/konq-webbrowsing.rc distinction made no sense either.

this patch removes the centering and makes the tabbar to take up all the width when it's not like a tabwidget and there is some sizepolicy/preferred sizes setting fixes that makes it behave better in a panel (especially vertical ones)

Get rid of the tabs.
Moveed the Akonadi resource KCM to a separate dialog which can be accessed through a button since managing Akonadi resources is not a very common task and shouldn't make the config widget unnecesarily large

Office

Benoît Jacob committed changes in /trunk/koffice/CMakeLists.txt:

Remove the cmake code disabling eigen asserts.

Explanation: eigen2 asserts are far less costly than in eigen1 because they are bypassed in eigen's internal computations; also especially in Krita code the conditions tend to evaluate at compile-time hence the asserts are removed anyway by the compiler.

Currently, we have no place to store meta data of the text shape's QTextDocument.
We have the style manager residing in the layout which is not an ideal place.
A place to store automatic list styles is also needed.

My initial thoughts were to have a KoTextDocument that subclasses QTextDocument that stores all this information.

Thomas pointed out that it would be nice to stick in all information in a QTextDocument somehow.
So, the approach chosen, is to store all the meta data as resources using QTextDocument::addResource().

To have a nice mechanism to access them, KoTextDocument is just a wrapper on top of QTextDocument.

Currently, the patch only stores the style manager but more will follow.

An important thing to know is that we should now use QTextDocument::clear() with care since it will clear away the resources too.

If you want to only clear the contents, one must use a QTextCursorto select all + clear selection.

This patch allows a user to alternatively build libmp3tunes against libgcrypt instead of OpenSSL.
Linkage with OpenSSL is a possible GPL license violation which might cause problems for distributions to ship Amarok 2 with mp3tunes enabled.

However, Libgcrypt is LGPL and surely safe.
Hence the patch prefers Libgcrypt to OpenSSL if both are installed.
Thanks to the patch submitter Modestas Vainius.

Instead, listen to Phonon state changes.
This means that the signal is triggered every time the track changes as well, but I can't see a way around that short of keeping track of the current state and comparing it (and doing the same for "stopped").