QML Task Manager merged
Eike Hein
hein at kde.org
Wed Jun 5 20:36:40 UTC 2013
Hi,
I've just merged the QML port of the default Task Manager widget
into kde-workspace master, along with a number of (non-API-break-
ing) modifications and bug fixes to libtaskmanager as required
by it.
tl;dr: It's mostly a drop-in replacement for the old one with a
whole bunch of bug fixes, however some work remains to be done,
in particular layouting for launcher items. The plan is to make
use of the time before Beta 1 to address those. But that's me
leading with the bad news, there's also a decent amount of good
news:
What It Is
----------
Most of the things the old applet did are in there, and for the
most part ought to work better than before. In particular, here
are some of the known improvements over the old widget:
* The interaction behavior is generally more consistent across
the widget. For example, the grouping popups didn't use to
support the mouse wheel or reordering by drag and drop (if
manual sorting is enabled). They do now.
* A great many layouting problems are gone. The old layout code
was not very robust, and could produce situations in which
items would overlap, layout would fluctuate, or the entire
thing could dead-lock and freeze the shell (e.g. during com-
plex DND across multi-row layouts). It also suffered from lack
of consistency between horizontal and vertical layout, in that
some of the subtler, better row overflow behavior implemented
for horizontal was not supported for vertical. All of this
should be resolved.
* Closely related, drag and drop reordering in multi-row layouts
had trouble finding the correct indices to insert at at times;
this is also taken care of.
* The state machine for task item frames was fairly buggy and
forgot to update things in some scenarios, giving rise to bugs
such as showing multiple tasks marked active at the same time,
the frame for group items incorrectly summing up the state for
the group's members, or a hover decoration remaining after the
context menu was used. This should also be fixed.
* Config handling was a little buggy and would not apply some
settings correctly at runtime in a straight-forward manner,
e.g. it could be necessary to change the desired number of rows
to provoke an update and have other changed settings materia-
lize. No longer necessary.
* The group popups now properly react to group membership changes
while they are open, e.g. adapting their geometry correctly.
* The widget would sometimes forget to re-publish the correct
minimization target coordinates for kwin's target-oriented
minimization animations. This should work better now, although
I may still need to fix one case.
* A smattering of visual fit-and-finish bugs are gone with this
replacement, e.g. not invalidating the cached pixmaps for task
text label shadows when changing the taskbar font (and so
showing the shadow in a different font than the text) or mis-
calculating group dialog sizes and inappropriately showing
scrollbars in them.
* Some things should also look better, e.g. icon alignment, and
the throbber animation for startup notification items has a
considerably higher framerate.
* Various little things probably not worth going into too deeply,
e.g. complex scenarios in which task spring-loading by DND
could fail to work, ...
What It Is Not
--------------
* Done :-(. Unfortunately I've gotten backlogged with a bunch
of other tasks recently, so I wasn't able to get this to where
I truly wanted it to be at merge time, and was forced to land
it prior to the freeze deadline with several big-ticket items
not done (which Aaron graciously signed off on).
These are, in order of importance:
* Good layouting for launcher items. This is a surprisingly
complex problem to solve deterministically, because it
throws the assumption that all items are of the same size
out of the window. As such, the old layout code fails at it
catastrophically in anything but simple single-row setups
(try launcher items + multi-row in the old Task Manager,
it's fun). However, I've made some good progress on a more
robust approach for this and hope to land it before Beta 1
is tagged.
As a bonus, the new launchers will also support reordering
by drag and drop and have some other fixes.
* Manual grouping. This mostly needs wiring up a little more
DND and a keyboard modifier, won't take very long once I
get to it.
* Inline group uncollapse. In addition to the group popup,
the old Task Manager supports uncollapsing groups into
individual task items on the main bar while maintaining
the group association. This is going to be a little more
work to finish up.
Of the above launchers are by far the most widely used, the
other two I consider to be fairly low-priority for the moment
because they are little-used features.
I apologize if the sucky launchers are going to cause you
workflow interruptions for the moment.
In addition to those big ticket items, a number of smaller
polish items and FIXMEs remain to be resolved, including a
rare crash in the model (there were various problems with the
underlying lib not following QAbstractItemModel transaction
semantics very well, this is likely an unsolved case of
that variety), some polish in the tooltip texts, and of
course any bugs that get turned up following this merge.
* Pure QML. The QML here is surrounded by a C++ applet stub
in part because it's the only way to hand over the model
provided by the library, and because C++ applets have no way
to get the magic 'plasmoid' object into the QML scene, config
handling remains on the C++ side for now. Further, the task
text label is implemented as a C++ component because QML1
doesn't support alpha masks. And finally, I've had to fork
the Plasma ToolTip QML component to gain access to the window
preview thumbnails API - a decision made together with Marco
and Sebas to avoid having to violate the API freeze for
Plasma1 QML components.
The good news: From various brainstorms it looks like we can
address all of these in Plasma 2 and make the widget pure QML
then :).
Coming Soon To a Branch Near You
--------------------------------
As mentioned above, my immediate focus is on getting good
layouting for launcher items finished, as that's is the big
one that's able to cause workflow interruptions. Plus
fixing any show-stoppers that turn up so we can tag a good
Beta 1.
Mid-term, I want to have the widget feature-complete and
regression-free by the time we release 4.11 - the bottom
line is to have something that's far less buggy and that's
portable to Plasma 2.
Long-term, I intend to maintain the new implementation
going forward and actually do that port. Figuring out how
we're going to make the backend work on Wayland, with kwin
as a data source, is also on the books.
Last but not least: Hugs and thanks to everyone who's given
valuable input along the way and made themselves available
to run the major decisions by, particularly Aaron, Sebas
and Marco.
Cheers,
Eike
More information about the Plasma-devel
mailing list