Issue 289

26th May 2013 by KDE Commit-Digest Team


Marta Rybczynska

This Week...

Amarok harmonizes playlist-related actions (double-clicking, pressing Enter, middle clicking...); optimization: removing tens of thousands of tracks from a playlist is now much faster. Nepomuk simplifies the storage code with big performance gain, user data needs to be migrated to the new format. Calligra updates author profile actions when configuration changes; Krita adds Clipboard brush, Isolated Mode for nodes, can convert a paint layer to any of masks and back using a menu. libkface introduces new face recognition API.


Commits 2111 by 160 developers
Open Bugs 21540
Open Wishes 15829
Bugs Opened 268 in the last 7 days
Bugs Closed 236 in the last 7 days

Commit Summary

Module Commits
Files Developer Commits
Laurent Montel
Jan Kundrát
Roman Paholík
Daniel Nicoletti
Christophe Giboudeaux
David Faure
Jan Grulich
Sergio Luis Martins
Yuri Chornoivan
David Edmundson

Internationalization (i18n) Status

Language Percentage Complete
Portuguese (pt)
Ukrainian (uk)
Swedish (sv)
Spanish (es)
Dutch (nl)
French (fr)
Estonian (et)
German (de)
Polish (pl)
Italian (it)

Bug Killers

Person Bugs Closed
Jekyll Wu
Jean-Baptiste Kempf
Frank Reininghaus
David Edmundson
Gilles Caulier
Johannes Zarl
Myriam Schweingruber
Tomasz Słodkowicz
Stephane Mankowski
Thomas Lübking

Commit Countries

Commit Demographics




  Bug Fixes Features Optimization Security Other



Development Tools

[] [] []   


[] []    []


[] []    []

KDE Base

[] [] []   []


[] [] [] [] []


[] []    




[] [] []   

Networking Tools

[] []   []  

User Interface



[] []    []




[]   []   

There are 74 selections this week

Bug Fixes

Development Tools

Sven Brauch committed changes in [kdevelop] /cpp:

Differentiate between different compound assignment operators (&=, +=...)

It was noticed that before this change, all operators in statements
such as
Foo a, b;
a ^= b;
a &= b;
etc. will be displayed as uses of Foo::operator+=(), which is obviously
wrong. The reason for this was some rather curious code, which just
treated every of these operators as "Token_assign" in the lexer,
and some other code which treated each "Token_assign" as "+=" in the
analyzer. To fix the issue, this had to be sorted out.
- Token_assign doesn't make sense anyways, since assignments are
represented as "=". So, remove the token completely.
- Instead of lexing every compound assignment operator as "Assign",
yield different token types for each.
- In the code which handles the operators, change the function from
using its own list of tokenkind -- tokenText mapping to use the
official one.
Also included is a unit test for the fix.


Diffs: 1, 2, 3, 4, 5, 6, 7, 8 Revision e0cf9c4...
Milian Wolff committed changes in [kdevelop] /cpp/codegen:

Transform ranges properly using the revision they actually belong to.

This is imo basically a hack to circumvent the bad RangeInRevision API
without rewriting everything...

The RangeInRevision is actually just blindly assuming that it belongs
to the revision the file was parsed in the last time. But if the file
is reparsed in between (due to changes) the ranges might be wrong. Due
to that we must store the ranges and their actual revision... Stupid!

Imo an API called RangeInRevision should _know_ which revision it
belongs to... Meh!

Kevin Funk committed changes in [kdevplatform/1.5] shell/projectsourcepage.cpp:

Fixup "Fetch Project" dialog

It's now possible to import projects from local file system again

Ralf Habacker committed changes in [umbrello] umbrello/widgets/messagewidget.cpp:

Fixed bug variant of: Resizing synchronous message moves its position.

This commit fixes a variant of the related bug when loading message
widgets from a file. The shadow copy of widgets y position (m_nY)
has not been set.

The question is if this shadow copy of widget position is really required
or if it could be replaced by QGraphicsObject provided widget position.

Kevin Funk committed changes in [kdevplatform/1.5] plugins/filetemplates/templatepreview.cpp:

Make "Create new class" preview aware of C++ specific variables.

The Preview only set the "functions" and "members" variables,
but not the respective "public/protected/private_functions" variables
which are used in all C++ class templates, resulting in a empty header preview.
This fixes it.

REVIEW: 110410


Bernhard Beschow committed changes in [marble] src/lib/FileLoader.cpp:

check node type before casting KML feature to placemark

* also print a warning when unknown KML tag is encountered
* fixes crash introduced in commit 8ee588969b41890a6bd90f9b45eeb85658edf84f


Marcel Wiesweg committed changes in [libkface] /:

Fix memory leaks, access to a deleted structure, and uninitialized values

Diffs: 1, 2, 3, 4, 5, 6 Revision 48130f0...

KDE Base

Frank Reininghaus committed changes in [kde-baseapps/KDE/4.10] /src:

Do not reset the 'isExpanded' state when an expanded folder is refreshed

If an item is moved out of an expanded folder, the model receives the
dir lister's refreshItems signal for the folder. The method
retrieveData() then updates the folder's properties. This commit makes
sure that the 'isExpanded' state is not touched by retrieveData(). A
side-effect is that the 'isExpanded' role is not initialized to 'false',
but this does not matter because trying to read a non-existing role from
the QHash<QByteArray, QVariant> yields a default-constructed QVariant,
which evaluates to 'false'.

FIXED-IN: 4.10.4
REVIEW: 110401

Vishesh Handa committed changes in [nepomuk-core] server/servicecontroller.cpp:

NepomukServer: Do not stop a service if initialization fails

This is because the storage service now routinely sends the
initializiation failed signal when it wants the clients to stop
connecting to the storage service.

This is done when restoring a backup and during the migration.

Pino Toscano committed changes in [kate] addons/kate/gdbplugin/plugin_kategdb.cpp:

GDB plugin: fix icon size, name, theme

- rename the icon to "debug-kategdb"
named after the plugin, this avoid potential clashes
- change the size from 16px to 22px
that is the real size of that png
- install as hicolor and not oxygen
avoid clashes and future specialized oxygen versions, and make it visible
even when not using the oxygen icon theme

R +- -- addons/kate/gdbplugin/hi22-action-debug-kategdb.png [from: addons/kate/gdbplugin/ox16-action-debug.png - 100% similarity]


Dan Vratil committed changes in [kdepimlibs] /:

Fix crash when performing inter-resource move of multiple items

Inter-resource move notification is split into deletion notification for the
source resource and insertion notification for the destination resource.

We support batch moving, but not batch insertion, thefore the insertion
notification has to be split in the destination side.

Diffs: 1, 2, 3 Revision 6a9fa97...
Dan Vratil committed changes in [kdepimlibs] akonadi/monitor_p.cpp:

Fix Monitor's lazy-ignore filter

There was a flaw in logic that caused flags change notifications being
delivered to V1 some resources.

(Fixes 'Got a stale notification' error from archivemail and filtermail agents)

Jan Kundrát committed changes in [trojita] src/Gui/SettingsDialog.cpp:

Settings: don't default to launching QProcess by default, assume SSL

This is mainly just a usability change -- most users are likely to connect via
SSL (or TCP), not via IMAP-over-SSH or something fancy like that. Let's make the
configuration process tad easier.

Jan Kundrát committed changes in [trojita] /Imap/Model:

threading: delay tree pruning until after the event loop is reached again

This is not really a proper fix (servers who don't do VANISHED will still make
the client suffer), but it's a step in the right direction, and also something
much, much more effective than trying a special-case branch for removal of leaf

The idea here is to cut the total amount of times pruneTree()/layoutChanged() is
called in total. I'm worried about using non-zero delay due to the unit tests...

refs #642

Andre Heinecke committed changes in [kdepimlibs/KDE/4.10] /:

Fix upcoming minor GPGME C++ incompatibility

GPGME >= 1.4.2 will use gpgme_ssize_t instead of ssize_t to avoid
portability problems with different compilers. Use this type for
the callbacks.

Patch submitted on behalf of Werner Koch
Build system integration written by me.

Diffs: 1, 2, 3 Revision 647e28e...


Boudewijn Rempt committed changes in [calligra] /:

Don't crash when opening a filter mask properties dialog for group layers

Stephane Mankowski committed changes in [skrooge] /:

Bad date format detection when the second value is 9 (example: 3/9/04)

Diffs: 1, 2, 3 Revision c50f013...
Friedrich W. H. Kossebau committed changes in [calligra] plugins/formulashape/elements/MultiscriptElement.cpp:

Fix compilation on ARM: result of dividing by 2.0 is double, so not qreal==float on ARM (and qMax needs same types)

Dividing qreal by 2 (integer) also results in qreal.
But preferred to be more explicit here, as some might think that result
is integer.

REVIEW: 110579

thanks ingwa and boemann for review

Stephane Mankowski committed changes in [skrooge] /:

Dashboard "Income & expenditure": no values, strange colors

Stephane Mankowski committed changes in [skrooge] /:

Transaction confirmation pop-up doesn't use defined unit value for transaction date for suggested value

Stephane Mankowski committed changes in [skrooge] /:

Skrooge not working when .skg file is located on Samba share

I am not able to test the correction because I don't have to hardware (windows computer) to do it.
Could you test it and confirm the correction?

Boudewijn Rempt committed changes in [calligra] /ui:

Don't crash krita if the exiv parser throws an exception

Turns out we don't do anything with the return value of KisExifIO::loadFrom,
but let's return false anyway when parsing fails.


Matěj Laitl committed changes in [amarok] /:

ScrobblerAdapter: call submit() explicitly

* Prevent scrobbles not being submitted until restart due to
change in liblastfm 1.0.7.

Thanks to David Walser for debugging this with liblastfm author Michael

Work-around for Amarok <= 2.7.1 is to use liblastfm <= 1.0.6.

CCMAIL: Michael Coffey

Mark Kretschmann committed changes in [amarok] /:

When resuming playback on startup, correctly restore paused state.

Before, we didn't store the state at all, but started to play always.


Networking Tools

Pali Rohár committed changes in /trunk/KDE/kdenetwork/kopete/protocols/jabber/ui/jabbereditaccountwidget.cpp:

Fix crashing kopete compiled with google talk support when creating new jabber account

* account()->myself() is NULL when creating new account, so use mID->text ()

Jan Grulich committed changes in [libnm-qt] /:

VPN has more secrets in one property, must be handled differently

Diffs: 1, 2, 3 Revision ffe7f0f...
David Narváez committed changes in [rekonq] src/application.cpp:

Don't Save Sessions When Closing Tabs from Logout

Check if we're saving session (on KDE logout) before requesting the
session to save. This will allow Rekonq to restore sessions on next

REVIEW: 110530

Dan Vratil committed changes in [ktp-text-ui] lib/chat-widget.cpp:

Only listen to loadFinished() when initializing theme

Otherwise when a nested <iframe> from youtube plugin finishes
loading, we end up in an infinite loop of reloading content

Fixes regression introduced by 62bb42b610fc4d9228ed77a61dbef143658d8340

FIXED-IN: 0.7.0
Reviewed-By: David Edmundson


Daniel Nicoletti committed changes in [print-manager/KDE/4.10] /:

If CUPS takes a while to respond a request, and in the meanwhile the
user closes the application, our worker thread will still be running
and when the CUPS request finishes the waitForFinish() event loop exits
continuing to do a change on the GUI which was closed but not deleted.

The application then crashes inside Qt because we tried to set something
on a widget that was not visible or so.

Since waitForFinish() is not very cool and must be avoided in this case
so we connect all the affected requests to a slot that checks if the
request fails, and then requests the an UI update to use the values
from the model.


Giorgos Tsiapaliwkas committed changes in [bodega-server] /lib:

fix the email confirmation.
The server is now able again to send emails.

This bug was introduced with the commit e9e5744d02fda29cf8885af97fdec78690d8116e

REVIEW: 110627


Development Tools

Milian Wolff committed changes in [kdevelop] languages/cpp/codegen/signatureassistant.cpp:

Do not offer signature assistant for changes in Qt signals.

Based on the work of Rolf Eike Beer minus the regression of
not showing the assistant for non-Qt function declarations.

Sorry for taking so long for this :-/

REVIEW: 109197


Andreas Cord-Landwehr committed changes in [artikulate] /:

Add test sound.

Andreas Cord-Landwehr committed changes in [artikulate] /:

Select input device.


Marcel Wiesweg committed changes in [libkface] /:

New face recognition API.
Add the notion of an Identity which is stored in the libkface database and linked by applications via attributes.
Recognition is done by one simple call.
Training is done via a callback class which allows implementation of various schemes which may
be required by future backends (get all images of a person etc.)

Diffs: 1, 2, 3 Revision 1ba39ae...

KDE Base

Martin Gräßlin committed changes in [kde-workspace] /:

Map cursors from X11 to Wayland

Tracking cursor changes in X11. Whenever the cursor image changes, the
image is read and a wl_buffer is created with the content of the X11
cursor. This buffer is attached to a surface used as a cursor image.

As a memory pool for the cursor buffers a temporary file is created and

All created cursors are cached but not yet removed from the cache. Some
cleanup code would be useful also to ensure that our shared memory pool
doesn't overflow.

Martin Gräßlin committed changes in [kde-workspace] /effects/cube:

GLSL 1.40 shaders for cube effect

Shaders are moved into dedicated directories 1.10 and 1.40. 1.10 contains
the already existing versions, 1.40 copies of them adjusted to GLSL 1.40.

REVIEW: 110571

Diffs: 1, 2, 3, 4 Revision e0e46d7...
Martin Gräßlin committed changes in [kde-workspace] /:

Improve multi-head detection for OpenGLIsUnsafe

This was currently basically broken:
* Screen number got always attached
* openGLIsBroken did not check for screen number
-> KCM reported "everything is fine" while it wasn't

Now changed to:
* only attach screen number if it is a multi-head setup
* use same logic in both Composite and CompositingPrefs

Still problematic:
* kcm is not multi-head aware so it will report everything is fine in
case of a broken multi-head setup

REVIEW: 110631

Vishesh Handa committed changes in [nepomuk-core] autotests/lib/testbase.cpp:

Merge branch 'feature/mergeGraphs'

This simplifies the Nepomuk Storage code base and results in the fewer
graphs to be used when inserting data. This results in a much faster
Nepomuk and a more maintainable code base. (Over 300% performance games)

Unfortunately, this also means that the old data will need to be
migrated. The migration should get automatically done for everyone by
backing up their tags and ratings and restoring them. It should ideally
just take a couple of minutes.

Unfortunately, this means that everyone will have to reindex all of
their data. This is okay for files, but it's going to be a little slow
for Emails. Good Luck.

For the 4.11 release we plan to enhance the Email Indexing scheduling
code so that it isn't so CPU intensive. So, the user should not mind
that much.

Emmanuel Pescosta committed changes in [kde-baseapps] /src:

Added the "Open in new Tabs" action to the Dolphin Context menu.

REVIEW: 110371
FIXED-IN: 4.11.0

Marco Martin committed changes in [kdelibs/frameworks] /:

This implemets a step in the kdeui crumble epic.

moves the classes kstatusnotifieritem and knotificationsrestrictions in
the knotifiactions library.

The patch works, but there are still several issues:
* porting from kdebug to qdebug loses the area number
* adds some link libraries: the classes add ki18n, kwidgets and
* KWidgetsAddons
* the test adds ki18n kde4support kdecore
* the KActionCollection becomes a qhash of actions: how should be
* kactioncollections ported?

I guess it should use the qt translation system, and redo the quit
dialog to not usekstandardgui at all?

Diffs: 1, 2, 3, 4 Revision 16f7b3b...
Kai Uwe Broulik committed changes in [kde-workspace] plasma/generic/dataengines/powermanagement/powermanagementengine.cpp:

Consider All The Batteries[tm]
When a new device was added, it wasn't added to the dataengine right away

Martin Gräßlin committed changes in [kde-workspace] kwin/egl_wayland_backend.cpp:

Map the Wayland compositing surface as fullscreen

Now it's just like X11, isn't it ;-)


Jan Kundrát committed changes in [trojita/addressbook] /Gui:

GUI: integrate the addressbook with Trojita

Jan Kundrát committed changes in [trojita] src/AbookAddressbook/be.contacts.cpp:

Addressbook: improve handling of prettyName when creating new contact

If prettyName is empty, use the default value for the name field (so
don't show an empty name field, users will think they cannot click

If prettyName is not empty, set the text of the QStandardItem to
prettyName. Before, the text of the QStandardItem would be
"[New Contact]" until we selected another contact.

Sergio Luis Martins committed changes in [kdepim] /:

Make detection of read-only work without restaring korg.

Lock icon will now appear/disappear automatically if you change
a collection's access rights.

Move the code into calendarviews\, so it works independently of

Diffs: 1, 2, 3, 4 Revision 31c7849...
Sergio Luis Martins committed changes in [kdepim] /:

Show a message when the new incidence is filtered out.

We have this for KCalCore filters, but not for when the collection
was unchecked in the calendar manager.


Dmitry Kazakov committed changes in [calligra] /:

FEATURE: Isolated Mode for Krita nodes

Implemented a mode, which allow a user to limit visible layers by
a subtree of a graph. It means you can look at a layer or mask or
a group in isolated environment, without other nodes seen.

To switch on the mode, you can select a context menu item in the
Layers Docker. To switch off, just select another layer or just use
the same context menu.

Diffs: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (+ 2 more) Revision e1e85de...
Dmitry Kazakov committed changes in [calligra] /:

Implemented a node-conversion GUI

Now one can convert a paint layer to any of masks and back using a menu
in the layer box or in menu bar

TODO: Add a unittest for masks placement

Diffs: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (+ 20 more) Revision 0037e4f...
Elvis Stansvik committed changes in [calligra] /:

Update author profile actions when configuration changes.

REVIEW: 110609

Diffs: 1, 2, 3, 4, 5, 6 Revision 0a332af...
Somsubhra Bairi committed changes in [calligra] /:

Added a new Clipboard brush for Krita
FEATURE: [319908]
REVIEW: [110612]

Diffs: 1, 2, 3, 4, 5, 6, 7, 8 Revision ab44e2f...


Matěj Laitl committed changes in [amarok] /:

Make playlist-related actions consistent throughout Amarok code (behaviour change)

This commits boasts a couple of changes, starting with the
uncontroversial ones:

1. The Playlist::AddOptions enum is extended with extended with
"convenience consistency" aliases:

...and all callers of PlaylistController::insertOptioned() are modified
to use one of these values instead of the "low-level" flags like
DirectPlay that are actually tested for in the insertOptioned()
implementation. This serves that we remain consistent across Amarok
from now on.

2. The actual "low-level" enum values have been changed and
insertOptioned() was updated accordingly:
a) PrependToQueue, which implies Queue, was added.
b) StartPlay (start playing unless something is already playing)
was removed. No caller uses it anymore (see below) and this was
convoluted anyway, IMO.
c) DirectPlay now implies PrependToQueue. This may seem strange,
but the rationale is following: when you directplay just one
track (which is the case 90% of the time), it is played
immediately, and this should apply even when you add more
tracks. PrependToQueue makes this possible without hacks and is
invisible in case of just one track, because it is immediately
popped from the queue. Plus it has a positive side-effect of
inserting the track at a meaningful place (affects what track is
played next).
d) LoadAndPlay and LoadAndPlayImmediatelly were removed, because
they were replaces with consistency aliases.

3. Thanks to 2b), 2c) and implementation changes, the actual action
performed upon a certain trigger no longer depends on any state.
The state of playlist search no longer affects whether a track will
be played in case of DirectPlay.

4. insertOptioned() was cleaned up and changed, for example it tries
to choose the best place to insert tracks according to
PrependToQueue or Queue.

5. The convenience aliases were assigned as follows:

OnDoubleClickOnSelectedItems = OnReturnPressedOnSelectedItems =
= OnPlayMediaAction = DirectPlay.
OnMiddleClickOnSelectedItems = OnAppendToPlaylistAction = Append (0).
OnReplacePlaylistAction = Replace (no-brainer).
OnQueueToPlaylistAction = Queue (no-brainer).

These aren't of course set in stone, they were however chosen to be
as much consistent with other KDE apps as possible.

Especially the "DirectPlay implies PrependToQueue" change is a bit
controversial, my opinion in that matter is anything but strong and I'm
open to any discussion. But perhaps try to use it for a couple of days
to get over the barrier of change.

* Playlist-related actions were harmonized: double-clicking, pressing
enter or using any "play media" action will prepend tracks to queue
and immediately start playing; middle-clicking appends to playlist;
append or replace actions will no longer start playback.

GUI: Behavioural change in some places, to increase consistency. Please
check that the docs don't mention the old behaviour, see CHANGES.
DIGEST: Amarok harmonizes playlist-related actions (double-clicking,
pressing Enter, middle clicking...)

Mark Kretschmann committed changes in [amarok] /:

The active playlist item is animated with a soft glow effect.

Rockin' the Amarok 1.4 style :)

Diffs: 1, 2, 3, 4, 5, 6 Revision 35c6b12...
Mark Kretschmann committed changes in [amarok] src/context/ContextView.cpp:

Add analyzer applet to the user's existing config.

This trickery is needed to give the new analyzer applet some
visibility when upgrading to Amarok 2.8. We rewrite the
config carefully so that the applet gets inserted in a sane position.
We also take care not to re-add this applet, in case the user
has explicitly removed it earlier.

Testing welcome to ensure that no special cases are ignored that
could screw up the config somehow.

Networking Tools

Pali Rohár committed changes in /trunk/KDE/kdenetwork/kopete/protocols/jabber:

Add support for signed messages in jabber protocol via XEP-0027 jabber:x:signed (now supported by libiris patch)

* Before signed messages was sent via jabber:x:encrypted and received jabber:x:signed messages was dropped
* For sending signed messages via jabber:x:signed is needed updated cryptography plugin from revision r1356122

Diffs: 1, 2, 3, 4, 5, 6 Revision 1356123


Daniel Nicoletti committed changes in [print-manager] /package/contents/ui:

Feature: Show information when no printer is added or when printer filter don't match any printer


Development Tools

Milian Wolff committed changes in [kdevelop] projectmanagers/cmake/parser/cmakeparserutils.cpp:

Optimize: Cache CMakeParserUtils::initialVariables result.

This is only dependent on the globally accessible cmake binary found
via KStandardDirs::findExe and thus returns the same whenever you
call it.

Reason why we want to cache it is that it takes about 1s on my machine
and is queried at least once for every project. Considering that I
usually run a session with 5-10 projects opened this accounts for
5-10s of time wasted querying the same data from cmake over and over
again. Not anymore with this patch - yay!

REVIEW: 110580

KDE Base

Frank Reininghaus committed changes in [kde-baseapps/KDE/4.10] dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp:

KFileItemModelRolesUpdater: only update the size for changed folders

When using inotify, we also receive signals for modified files, even if
we only ask KDirWatch to watch the directory containing them. In that
case, we must not set the size to -1 (which means "unknown number of
items" for folders) temporarily, or we end up with an apparent file size
of 2^64 - 1 bytes.

FIXED-IN: 4.10.4
REVIEW: 110428

Frank Reininghaus committed changes in [kdelibs] kdecore/util/krandomsequence.h:

Use the Fisher-Yates algorithm to randomize lists

This ensures that the time required for the shuffling depends linearly
on the length of the list, rather than quadratically. Moreover, it
prevents memory allocations during the shuffling and thus saves time
even for very short lists.

REVIEW: 110262

Fredrik Höglund committed changes in [kde-workspace] /libkwineffects:

kwin: Resolve functions for GL_ARB_robustness

Only the subset of functions available in core contexts is resolved,
except for glGetnTexImageARB() and glGetnUniformivARB(), which are
not used by kwin.

Instead of setting the function pointers to NULL when the extension isn't
supported, kwin provides its own implementations that call the non-robust
versions of the functions. This is so callers don't have to check if the
extension is supported before calling the functions.

Eike Hein committed changes in [kde-baseapps/KDE/4.10] /applets/folderview:

Preserve relative positions when changing icon size in containment case.

Icon positions are preserved by scaling the top-left coordinate pair
by the difference between the old and new grid sizes, or by recreating
the same logical column/row coordinate pair in the newly-calculated
grid if the align-to-grid option is enabled.

Icons that run out of bounds (or exceed the maximum column or row)
accumulate at the relevant screen edges. There is a precedent for
this behavior in the general align-to-grid code.

The left-to-right or right-to-left flow is taken into account when

Smarter behaviors can be imagined as an optimization (e.g. identi-
fying groups of icons along screen edges and preserving their edge
alignment regardless of overall layout flow), but this simple scaling
implementation certainly beats throwing positions away altogether.

However, positions do still get thrown away in the non-containment
case - as the regular widget is capable of handling overflow via a
scrollbar, relayouting to exploit that felt better in practice.

Vishesh Handa committed changes in [soprano/2.9] backends/virtuoso/odbcqueryresult.cpp:

Virtuoso Backend: Optimize ODBC getCharData

Only use 1 SQLFetchData command in most of the cases.

Callgrind stats show that 67.5% of the time in this function is spent in
the first SQLFetchData, and an additional 27% in the second SQLGetData.
We can avoid some of this extra cost, by only calling the function

Also, doing a simple fetch of 50000 quads -
Before Patch - 5.75 seconds
After Patch - 4.70 seconds

REVIEW: 106467

Frank Reininghaus committed changes in [kde-baseapps] dolphin/src/kitemviews/kfileitemmodel.cpp:

KFileItemModel::insertItems(): guarantee O(N) run time complexity

This commit prevents repeated insertions of single items into the list
m_itemData, which shift all following items by one position and result
in O(N^2) worst case complexity for the entire function.

Moreover, the hash m_items is updated only for the items starting from
the first inserted/removed item to save some superfluous calculations
of hash values.

REVIEW: 110355


Jan Kundrát committed changes in [trojita] src/Imap/Model/MsgListModel.cpp:

Rework the drag & drop in the message list view to only skip UID=0 messages

The whole stack assumed that a message can only be drag-and-droped after it has
been loaded. That's clearly nonsense, the only real requirement is that the
knowing the UID is enough.

This was rather annoying when selecting messages via Ctrl+A on a testing
instance with plenty of messages and no persistent cache (and hence 45k+
messages not loaded which could not be moved via Ctrl+A).

The new code has a nice side effect of always rendering the "loading-UID-not-known"
messages as disabled, greyed-out entities, which is also kind of cool.

Thanks to Stefan de Konink (skinkie on IRC) and Brian Jackson
(iggy on IRC) for their reports about slow drag-and-drop
(which is not fixed yet).

Vishesh Handa committed changes in [kdepim-runtime/vhanda/feeder] /nepomukfeeder:

NepomukFeeder: Remove the concept of Batch Indexing and checking

The feeder has this concept of checking every hour if it had not indexed
any emails. This resulted in huge CPU loads every hour because the
process to calculate which emails need to be indexed is very cpu
intensive on both the akonadi and virtuoso side.

Additionally, it had this concept of batches. If more than 10 emails
were receieved in a span of 10 seconds it would not queue them up and
run this heavy email check in 30 minutes.

Using random intervals such as 30 and 60 minutes is bad since the user
has no idea what is going on. Specially if they try to search for some
email during that time. Additionally, they can understand if Nepomuk is
taking some time indexing stuff when you get new emails, but not why it
is suddenly taking a LOT of their CPU after 30 minutes. They loose


Matěj Laitl committed changes in [amarok] /:

Optimize and simplify Playlist::Model::removeTracksCommand()

We don't need to keep track of multiple command lists when removing,
just sort rows to remove first and then keep track of how many rows
have been already removed and subtract it at appropriate places.

The optimization is finding consecutive runs of rows to remove and then
grouping begin/endRemoveRows() for them, which was the main CPU hog as
it updates above models and view.

Removing 24.658 tracks from 24.660-track-long playlist now takes about
half a second, which is hopefully acceptable.

Also note that even greater optimization was done by Ralf Engels
earlier after 2.7, commit 861143c02dc1a1, where he cleverly used
references where appropriate, and much more.

@Patrick, please retest with Amarok git master, it should be much

CCMAIL: Ralf Engels
DIGEST: Optimization: removing tens of thousands of tracks from Amarok
playlist is now much faster.


Aaron J. Seigo committed changes in [bodega-server/store-creation] /:

cache the toplevel channel for each channel.

this simplifies checking if a channel belongs to a given store and the
creation and maintenance of sub-channels by allowing stores to only define
which top level channels they include. Then all subchannels from there on
down will reflect the topLevel and can be checked for store inclusion.

this implies that a top-level channel is an all-or-nothing thing: a store
that includes a given top level item includes ALL of its subchannels too.
however, i could not think of a rational use case where this would be necessary
or even desired.

(in fact: i ran into the problem of subchannels not associated with a store
because only parent channels had been while writing unit tests ...)

Diffs: 1, 2, 3, 4, 5 Revision a2d5028...



Jan Kundrát committed changes in [trojita] /Gui:

GUI: validate each address separately and also when filled in programatically

Previously, the validation was performed based on the contents of all items.
This meant that after a single field contained invalid data, any subsequent
modification to any other field would render the newly modified field in red.
That's wrong, the validation shall be based exclusively on data from the
modified field.

This patch also triggers the validator when setting the data programatically.

Networking Tools

Jan Grulich committed changes in [plasma-nm] /editor:

Add some validation for IPv4 widget



Andreas Cord-Landwehr committed changes in [artikulate] /:

Setting audio output device is rare case.

And hence it is enough if this can be done by system settings.

Diffs: 1, 2, 3 Revision 0367314...


Gilles Caulier committed changes in [libkdcraw] /:

Update internal libraw to last stable 0.15.0.
New camera/format support (75 new cameras!):

* Adobe DNG: fast Load DNG (LightRoom 4.x), support for lossy-compressed DNG (LR 4.x, requires libjpeg 6+)
* Canon: G1 X, SX220 HS, EOS 5D Mark III, EOS 650D, EOS 1D-X, 100D (Rebel SL1), 700D (Rebel T5i), 6D, EOS M, G15, S110, SX50
* Casio: X-S1, HS30EXR, X1-Pro, EX-ZR100,EX-Z8
* Fujifilm: X-E1, X20, X100S, SL1000, HS50EXR, F800EXR, XF1
* Leica: D-LUX6 and V-LUX4
* Nikon: D4, D3200, D800, D800E, 1 J2, 1 V2, D600, 1 J3, 1 S1, Coolpix A, Coolpix P330, Coolpix P7700, D7100
* Olympus: E-M5, XZ-2, XZ-10, E-PL5, E-PM2
* Panasonic: G5, G6, DMC-GF5, FZ200, GH3, LX7
* Pentax: MX-1, K-5 II, K-5 IIs, K-30, Q10
* Samsung: EX2F, NX20, NX210, support for the new firmware for NX100
* Sigma: SD15, SD1, SD1 Merill, DP1, DP1S, DP1X, DP2, DP2S, DP2X
* Sony: SLT-A58, RX-1, SLT-A99, NEX-5R, NEX-6, NEX-F3, SLT-A37, SLT-A57
* Multishot files: Imacon Ixpress 39Mpix

RawSpeed code not yet updated to last compatible revision 543 due to patching problems.

Diffs: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (+ 23 more) Revision e418b0e...

KDE Base

Kurt Hindenburg committed changes in [konsole] /:

Transform ColorSchemeEditor class from QWidget to KDialog

Move some code from EditProfileDialog::showColorSchemeEditor
* a part went in the slot EditProfileDialog::saveColorScheme
* a part becomes obsolete since ColorSchemeEditor is the whole KDialog
* a small part went into ColorSchemeEditor constructor

Make ColorSchemeEditor a non-modal dialog : The terminal is not frozen
when the dialog is open
- The Kdialog has an Apply button
- Some safeguard to check that there is only one ColorSchemeEditor open
- Use reference rather than pointer in ColorSchemeEditor interface

Thanks to Renan for improving on Konsole's ColorScheme.

Patch by renan fargetton

REVIEW: 110560

Diffs: 1, 2, 3, 4 Revision 2b8d43e...


Jan Kundrát committed changes in [trojita/addressbook] /AbookAddressbook:

Prepare the contact widget to be usable multiple times

IOW, don't use global state when not needed.

Vishesh Handa committed changes in [kdepim-runtime/vhanda/feeder] /nepomukfeeder:

NepomukFeeder: Do not notify the user after each collection has been indexed

That is only valid for the initial indexing, and even in the initial
indexing, the user shouldn't be notified. The indexing should just work!

Removed other functions such as currentCollection() and
listOfCollections() as they were also only valid for the initial

Diffs: 1, 2, 3, 4, 5 Revision e39bc36...


Aleix Pol Gonzalez committed changes in [muon/reviewsOnOverview] /qml:

Redesign of the ApplicationPage

Adopt a mockup by Aurélien that drops the top tab bar and re-arranges the
overview page to fit all information in it.