QML Task Manager merged

Eike Hein hein at kde.org
Wed Jun 5 20:36:40 UTC 2013


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

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.


More information about the Plasma-devel mailing list