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 _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel