Issue 70

This Week...

Work in Plasma, with extra sources for the Weather data engine, work on the applet browser, and the start of SystemTray and RSIBreak plasmoids and a "next generation" application launcher, named Lancelot. Cut-down versions of Korundum and Smoke libraries for writing scripted Plasma applets. More interface work for Amarok 2. More work on XESAM (a shared metadata specification) integration in Strigi. An Akonadi resource for Facebook information. Support for compressed documents, and more work on DjVu support in okular. Several new features in the KRDCSummer of Code project, including bookmark support, sound output, and toolbar options. Custom text shaping in KWord, and significant progress in the colour mixing capabilities of Krita in KOffice. Various optimisations in KBounce, KPixmapCache, KDevelop, Marble and KOffice. KOffice 2.0 Alpha 2 (1.9.92) is tagged for release. Beginnings of a D-Bus interface in KTorrent for KDE 4. KNotes and Kompare begin to be ported, Kenolaba completely ported to KDE 4. Reworkings in Phonon, with the Phonon-NMM backend moved to playground/multimedia, as it is not ready for KDE 4.0. The Kaboodle music player is removed from the kdemultimedia module, whilst kaudiocreator moves to extragear for KDE 4.0.

in the last few days we've added the ability to save and restore applet layouts, associating of applets with mimetypes (so you can drag content to the desktop and have it represented by an appropriate applet), layout improvements, the start of layer-based effects for things like shadows/blur, more progress on the scripting front (including the appearance of ruby bindings in addition to the qtscript ones and further integration of libplasma into superkaramba/python), taskbar strides and much more. a whole bunch of interesting if not overly splashy stuff that needs to happen to make it actually usable.

krunner started to get search engine integration using xesam (well, a reasonable facsimile of it given that it isn't a completed spec yet) with strigi as the current reference implementation and the new krunner interface is approaching completion.

the control box, panels, menu, systray are on the hit list of things to kill off the list.

KRDC has been part of KDE for a quite long time. It is an important tool for network administrators and other people who need to work on or administrate a remote desktop. Over the years, many bug reports and feature requests have accumulated on bugs.kde.org for KRDC. So, I decided to work on it as a Google Summer of Code project in order to remedy this.

I have started the project from scratch. The new user interface is tab-based. This is very useful for people who need to connect to more than one remote deskop at the same time.

The new bookmark system and the improved KWallet (KDE password saving) support should help, too.

The user interface is now more KDE-standards based. A new configuration dialog brings a lot of new (requested) options.

The fullscreen toolbar now has the ability to be transparent.

This not only looks nice, but is also very useful to see things that would otherwise be hidden (e.g. the window title) without moving the remote window.

Of course, I have not only done user-visible changes. The VNC backend has been completely rewritten, and is now libvncclient-based. The old VNC backend was approximately five years behind the upstream source. This update has solved a lot of long term KRDC issues and makes new features possible. The RDP backend is better integrated and supports new features for rdesktop (rdesktop is used for the RDP support).

Planned features include (for example) NX support.

The new KRDC is already part of KDE 4.0 Beta 1. Try it out and let me know any comments!

This past week, the first set of interviews with students working on KDE Summer of Code projects was published. The coming weeks will see the rest of the series released - with these interviews, we discover the motivations and similarities between the worldwide KDE developers of the future.

When hex code mode was disabled on filling the InstrView with assembly, we did not get any width of a hex column, because it was set manually to width zero.
Enabling the hex code mode afterwards did *not* show the column, because we still set the column width to zero.

Now, on refresh of InstrView data, we set the mode of the hex code column to automatic resizing, get the width, and reset to 0 if hex mode is off.

If we have the checkbox for "Automatically add extension ..", then why do we check for the existence of the extension in the file name ? When the checkbox is in the "off" state, I guess, it should allow to save the file with any extension.

Networking Tools

Kopete doesn't crash anymore while accessing an UVC Video Device (tested with a Logitech Quickcam Pro 5000 - 2006 model. WFM. YMMV). The image is gray with some blue, red and magenta lines. I know what's the cause (image controls not implemented in V4L2, WIP, needs a new class and a way to put arbitrary controls on a widget).

V4L2 is enabled again (for some reason outside of my knowledge it was disabled).Partial implementation of YUYV and UYVY formats.

Games

Exclude the need for random guessing on the game start.
I.e. ensure that the first clicked cell will always be an empty one.

I got convinced after I implemented this feature and tried it :-)
Having this feature just lets the player to, well, play, instead of starting a dozen of new games until she finds the one where he didn't explode after a few first clicks.

- Reset the clock to 00:00 at the start of a new game and not only after the 1st click.
- Stop the game before the 1st click. (There was a bug here by starting a new game before having a "game over": Time was still running...).
- Don't bother with the confirmation dialog of KGameDifficulty when the game did not start yet.

Also do some cleanup and use the document API of kdevplatform instead of the partmanager. One bug: The directory sync doesn't work, because the documentcontroller returns a 0-pointer when asked for active document, even if a file is open.

James Bowlin committed changes in /branches/work/kdeedu_kstars_htm/kstars/kstars:

Added planets, comets, and Jupiter's moons to the list of classes using SkyLabeler to prevent label overlap. Cleaned up the SkyLabeler interface by adding drawLabel() and drawOffsetLabel() methods. In addition, added two static methods to SkyLabeler: setZoomFont() and zoomOffset() which allows us to share this code with StarObject and SkyObject so we can adjust the parameters for these routines in just one spot and always stay synced with the drawLabel() routines in those other classes.

Added an intermediate font size between the one used when zoomed out and zoomed in.

AFAIK, all classes in skycomponents that write labels (except LineListComponent) are using the SkyLabeler now.

The only thing left to do with the SkyLabeler is time shifting which will let us set the priority of the labels independently of when the objects themselves get drawn. I think this would be best implemented using addLabel( point, text, LABEL_CATEGORY ) where we have predefined categories for each type of label. This will also make it possible for us to let the users choose the label priorities.

James Bowlin committed changes in /branches/work/kdeedu_kstars_htm/kstars/kstars:

NOTE: this is the HTM branch, not the trunk.

Preparing for primetime.

The indexing needed three tweaks in order to be ready for the masses:

1) Reverse precession correction in the SkyMesh::aperture() call.
2) Fine tuning of the LineList JIT updating.
3) Re-indexing of stars every 150 years.

The first one is done. The second is almost done and I expect to have the third one done by the end of today.

The reason the 2nd task is unfinished is because I don't know if the constellation boundaries should precess along with the stars or if they should be fixed to the Earth's axis like the coordinate grid.

If anyone knows if the constellation boundaries should precess or not, please let me know and I will implement it that way. Currently the boundaries drawn on the screen precess but the polygons we use to determine which constellation a point is in don't precess. It is easy to do it either way but I can't do it both ways at the same time (unless someone provides me with an Options::function() to let the users choose :-).

Also, added prioritization to SkyLabeler so the most important labels get drawn first and have a better chance of showing up since we no longer draw labels that would overlap existing labels. The priority
is currently:

SkyLabeler prevents labels from overlapping. You can adjust the vertical density with "F" and "G". The "B" keys prints brief statistics. These key actions are probably for development only.
The speed and size of the SkyLabeler both scale linearly with the number of screenRows (part of the "B" key output).

James Bowlin committed changes in /branches/work/kdeedu_kstars_htm/kstars/kstars:

I implemented re-indexing of the stars every 150 years. I'm haven't run extensive tests yet to verify it is doing exactly what it is supposed to but it seems to be working and hasn't broken anything. The only big surprise was that it only takes 3 to 4 seconds to re-index all the stars on a single core of an amd64 3600+.

I'm working on precessing the constellation boundary polygons but this has turned out to be a little messy because the data is stored in QPointF's, not SkyPoints so I need to create a new SkyPoint for every point on the boundaries in order to do the precession.

I also need to re-index the constellation lines every 150 years just like I do for the stars because stars form the vertices of the constellation lines. To do this the right way I will have to change the data members that hold the index in LineListIndex into pointers (instead of simply values). I'll probably do this tomorrow.

I fixed a minor bug I had created in KStarsData where I was updating m_updateNum more frequently than necessary.

Finally, I found a bug in the constellation lines that I don't understand. You can see it by zooming in on Markab, Homan, and Baham in PEGASUS and setting the time step to one minute. The stars will jump away from the constellation line just a bit. I'm a little baffled by this because the vertices of the lines are supposed to be the actual stars so I don't understand how they could ever not line up. Also, you can jump back in time 1000 years and the stars are all attached to the lines again but if you march time forward at one minute steps, the little jumps appear again. I don't think this is an Earth shattering problem, it is probably due to my lack of understanding of the subtleties of updating StarObjects and SkyPoints.

Added basic support of kml folders. MarbleModel iterates over list of kml folders and displays placemarks from each folder. This list of folders will be displayed in MarbleControlBox, so user will be able to enable/disable desired folder.

Thumbnails with an alpha channel:
Do we want real transparency for thumbnails? I vote "no".

- remove the code that I added to speed up drawing by setting the composition mode to source.
This broke the rating pixmap, and thumbnails with an alpha channel
- In thumbnail creator: images without an alpha channel are not converted to have one.
Images with an alpha channel are composed over white to remove the alpha channel.

* Added favorite icon that you can click to change the favorite status.
* Added emblem icons - icons that represent special status of applets (KDE Team Choice, Used in the past).
* Painting has no hard-coded colors any more

The applets now can associate with (one or more) certain mimetypes, and be called when that mime is dragged onto the desktop. Very rudimental for the moment, we should pass the name of the file to the applet.

Add methods to parse the Observation XML data. These need to be further refined. Create separate job lists for search and forecast. We have a big problem now with the user typing in locations that conflict. Ie, London. BBC returns a listing. aseigo, we'll have to discuss :/

* remove the lock/move stuff as it ignores kiosk and is already covered nicely by isImmutable and setImmutable
* on the base implementation of contentSize, check to see if we have a layout and if so use that to determine the size we ought to be

KDE-PIM

- more dbus touchups
- note--we have to call KAboutData::setOrganizationDomain("kpilot.kde.org") so that our dbus connections show up as org.kde.kpilot.*. If we don't do that, then the reverse name is driven by the URL in the about page, which is <a href="http://www.kpilot.org/">http://www.kpilot.org/.</a&gt; All of our dbus connections were showing up in qdbusviewer as org.kpilot.*, so none of the dbus communications were working.
- pulling out the KAboutData stuff from kpilot.cc, pilotDaemon.cc, and main-test.cc and putting it in kpilotConfig.h as a #define
- pilotDaemon->kpilot configure is now working properly, woot!
- have to make kpilot's configure a slot

ktimetracker has now an open file option and a multi document interface. New files can be created which will be saved to a new location when the user explicitly wants to save the file or requests closing the file. There are some improvements on my todo list, so this is not the final but just the beginning...

Initial skeleton of the bluez bluetooth security backend and a few more changes. NOTE: Right now if I try to load the SolidBluetoothSecurity backend I get an instance of Solid::Control::Ifaces::BluetoothManager instead of the expected Solid::Control::Ifaces::BluetoothSecurity. Input welcome...

A working version of the mixer. Hopefully, this will work fine for you too.
It mixes correctly almost all colors. Do not be surprised that yellow and blue give gray instead of green: just "correct" them so that they're less "pure".
That's an obvious point, since in real paints, yellow and blue give green just because they're not pure. The same with other mixtures. I'll change the basic palette with a more realistic one soon.

This commit disable the whole illuminant-reflectance implementation, because it's not finished and it doesn't work as good as I want to. So the mixer uses a more basic "RGB/KS" color space, that uses RGB values as reflectances and then convert it to Kubelka Munk without any extra calculation. It's a pretty good approach until I finish the "real thing" (tm).

I removed (definitively) gmm matrices and std::vectors. The first because I do not need the features of gmm, the second because they're too slow (once I removed them, my mixer started to be smoothly fast again).
The mixer (temporarly) doesn't depend on glpk (GNU Linear Programming Kit), until I reimplement the illuminant-reflectance color spaces.

Implemented writing off pattern fill style. This requiered special handling because the actual pattern images had to be written too.

So the KoShapeSavingContext now has functions to add the pixmaps and write them later to the odf store. I added a helper class KoShapeStyleWriter for handling the shape style adding and writing of the office:styles styles for convienience. Added a new StyleFillImage style type to KoGenStyle for fill-image styles.

add code for testing krita file loadingadd the "official" png test suit (that krita miserably fails, not surprisingly as it was allready known that png files needed to be at least of 64x64 to be correctly opened ;) ) and some other files that krita can open but that were causing problem in the past (and for which I know that I can make them public)

Improve document saving by removing the useless draw:frame and draw:text-box tags.
That way the document really looks like an OpenDocument Text, and not a generic OpenDocument file with a lot of text boxes...

Got playlist animations to work, but it uses some a lot of CPU time.
You can see for yourself by double clicking on some text in the playlist to start the cursor. Going to try a slight variation on this that probably won't work either and then think of something new hopefully.

big thanks got to Lee Olson for the spiffy current track svg! now added current track data engine, as well as current track engine. i'm having problems putting the text inthe right place, that is a problem for tomorrow. also, plenty of various other fixes etc.

added workaround code for matrixForElement. you will currently need to patch plasma for this to work, i have patches to plasma pending on the panel-devel list that need to be approved.

added configuration box for the current track widget, although it looks really f*cked up right now, not sure why. also, now displays the album art! it even resizes if you make the applet bigger... but only on next track as it needs to tell the engine what size to return the pixmap. that is all.

So far adding items and clearing the playlist works. Still don't have width sorted out though.
As discussed in my blog, this is to allow simple animations for now (text editing) and perhaps more advanced animations in the future easily using all the GGV tools.

some reworking of the column layout. no crashes, but it doesn't work, even though columns report the correct positions, they still appear stacked instead of side-by-side. committing now as i want to change direction but want to save what i have so far.

* Better RDP (rdesktop) integration:
* Option for sound output (local, remote, disabled).
* Line Edit for additional rdesktop arguments. This way experienced users can use all rdesktop options inside KRDC, but the UI does not become bloaded. Probably I will more important and often used options to the UI later (if there are more...).

Promised patch that makes Kopete use chatwindow style names instead of style paths.
Few things are still todo: like figuring out whether global directories follow local ones as returned by KStandardDirs or vice-versa, and adapting the code to prefer local styles over global ones with the same name.

If you currently have some style set, I think you'll want to remove
[Appearance]
StylePath=/path/to/style

* Implement field generation on the first click - now you won't blow up from start :-)
I don't think that it should generate the field in a way so the first click is on an empty cell - this would be too easy IMO.
Currently it just ensures, that first click is not on mine.
Objections?

* Drop old "digits-assigning" algorithm, use new - much faster one which doesn't iterate over whole field

Bovo now manages the current difficulty level (AI skill) with KGameDifficulty of libkdegames. It looks now (fast like before) but exaclty like other KDE games using this class (and some code lines could be removed).

Several obvious optimizations that make file scanning (for translation memory) faster: done ru/messages/kdebase and few others (18mb) in 50 seconds (kaider scans in background so you may translate files while it works).

Shortcuts for suggestions.

Database is stored in kaider data dir (~/.kde/...), its name is based on id of the project (hence new option in project config).

KDE Base

This allows us to do binary search to find an entry with given key which is much faster than linear search.

The linear search had overhead of about 1us per entry (on my quite fast machine), so if there are thousands of entries in the cache it accumulated to several milliseconds per find(). And if you need to find several entries(some apps need hundreds) then the overhead got quite big.

KDE Base

* call prepareGeometryChange when the darw default background setting changes
* add in a completely untested-but-should-work ;) implementation of config ui loading; requires a package with config/ui/main.ui and config/xml/main.xml in it. should shave 7LOC off of the clock's Script.js, which is ~10% of the code line count!

This now uses QDebug for output, as opposed to the previous, own class. This also means that it automatically adds spaces, the final newline. And you can use all QTextStream manipulators. No more QVariant-based stuff either.

Implement AccessibilityPrevious, AccessibilityNext, and AccessibilityAccept(the enumerators to access widgets embedded in the completion-list by keyboard). The general rule now is: When you press shift while navigating in the completion-widget, you navigate within the embedded widgets. shift+return triggers AccesibilityAccept, shift+up/shift+left triggers AccessibilityPrevious, and shift+right/shift+down triggers AccessibilityNext

I couldn't get anyone to complain about this, so here it is... the Big Massive Update to KDE4PORTING.html

This does the following things:
- s/<li>/<p>/ for 'deprecated', 'renamed', 'removed' etc.
- Use consistent wording for the above (instead of e.g. 'deleted', 'removed' and even 'gone').
- Reshuffle classes into correct modules (and to a limited extent, try to alphabetize better).
- Changelists now appear under the NEW class name/module.
- Try to list such classes in the module overview from which they were removed.
- Renamed classes have the 'renamed' line and link to the new name (when there are other changes).

Most keys are in form "<foo><bar>" where <foo> is either constant or one of very few choices.

This sucks when searching for a key because we need to compare several superfluous bits and the tree goes out of balance because many entries are alike.

So now we prepend key's checksum (in hex) to it. It makes the tree much more balanced (it's now only about two times as deep as optimal one would be) until I implement real balanced trees and it savessome character compares.

Assure that the view properties of a column view are always stored in the folder represented by the first column. It is assured now, that all columns use the same view properties. Although one reason is because of technical 'restrictions' (KDirLister properties like 'show dot files' are applied to all sub directories too), I personally think it also makes sense from a usability point of view.

Remove fourcc from the api. Use our own colorspace formats.
Their list will likely change over the next two days.
Don't let the VideoDataOutput set the format (we want the conversions to happen on the layer above, in here we want just decoded frames)
Adjust fake backend to those changes.

The filename is no more loaded from config file. instead you can start ktimetracker with no argument to load the stadard file in apps - directory or give a custom filename to store data in it.

This step is b/c of switching ktimetracker to a multi file application, where you can open and manage several files. This progress is already in work but not comittable b/c of too many crashes at moment.

I commented out this screenshot for the time being. It is unknown what plugins will be available for KDE 4 and Kontact so there is a good chance this section will get rewritten.
Since I am working on KDEPIM docs, I have this as a TODO so I will automatically be highlighted when working on it.

Office

Thomas Zander committed changes in /trunk/koffice/kword/part:

I know many people have been waiting for this one;
* Don't bother the user with a dialog when inserting a non-text shape

This means you can drag and drop a shape onto a KWord document and get it inserted without a dialog being shown. The default settings should be good enough, and the user can change those afterwards easilly.

Move the switching of knot-type from right-mouse-button to left + shift.
This way we can allow context menus again and we are a little more compatible with inkscape. The only difference there is that we switched ctrl and shift for consistency (ctrl-click is alter selection everywhere).

Utilities

work done on porting kompare to KDE4 by me at akademy. I won't go into details of exactly what because there's too much.

A lot is just s/kdDebug/kDebug/ and s/URL/Url/.

Other things included are porting the config code to the new APIs, removing some redundant stuff in kompareshell, and removing my ghastly hack to override splitter handles in Qt3 because trolltech allowed the overriding of them in Qt4.

More porting work. Some code for graying out as we did in the 3 series. It seems the kde logout screen does not use it any more, so we have to come up with something else. The implementation in this commit is pretty slow, so we need something cooler.

As SuperKaramba uses Kross for running themes, Python is now optional.
- Move the check for Python to the CMakeLists.txt of SuperKaramba
- Add config-header for ifdef-ing the remaining legacy Python binding code
- Compile the Python binding code only when the lib and includes are found