D15410: Handle clients which change window metadata during early startup
Eike Hein
noreply at phabricator.kde.org
Mon Sep 10 17:18:24 BST 2018
hein created this revision.
hein added reviewers: davidedmundson, broulik.
Herald added a project: Plasma.
hein requested review of this revision.
REVISION SUMMARY
Some apps initially show their window with bogus/useless window
metadata and then update to useful metadata during early startup.
For example, LibreOffice sets WM_CLASS to soffice/Soffice and
then updates to libreoffice-writer/libreoffice. This leads to
a poor user experience on particular the Icons-only Task Manager,
but also the regular Task Manager depending on settings.
Depending on its configuration (and Icons-only Task Manager is
a particular set of configuration options, as far as the model
is concerned), TasksModel will try to launch a new window task
adjacent to its launcher task. The appearance of a new window
task also causes matching (in terms of identification) launcher
or startup tasks to be filtered out. To the user, this forms a
lifecycle of the launcher being replaced by the window in-place
(and a startup state inbetween, optionally but by default).
Prior to this patch, this sorting decision was only done once,
when a new window enters the source model stack. That meant the
LibreOffice window would initially be sorted into the "wrong"
spot (the bogus metadata doesn't allow us to relate it to its
launcher) and then, following the metadata change, stick to the
wrong position.
Simply changing the code to sort things again on any metadata
change would not have been good enough: Metadata changes can
occur at any time, and things shouldn't move around on the user
- this sort mode is called "Manual" for a reason. Also, the
visual result would still be poor: The window would initially
appear at the wrong position, then move into the right one a
short moment later.
This patch takes the following approach:
- It adds a new config key to taskmanagerrulesrc that allows listing ids used to completely hide tasks if they match, and of course the code needed to implement this.
- It adds LibreOffice' bogus initial metadata to this key, so the tasks is initially hidden.
- It skips over hidden tasks in the sort insert queue instead of moving them.
- It resorts when tasks are unhidden (i.e. once the metadata update has occured and the task no longer matches the above config key).
BUG:396871
REPOSITORY
R120 Plasma Workspace
BRANCH
master
REVISION DETAIL
https://phabricator.kde.org/D15410
AFFECTED FILES
libtaskmanager/taskmanagerrulesrc
libtaskmanager/tasksmodel.cpp
libtaskmanager/tasktools.cpp
libtaskmanager/tasktools.h
libtaskmanager/waylandtasksmodel.cpp
libtaskmanager/xwindowtasksmodel.cpp
To: hein, davidedmundson, broulik
Cc: plasma-devel, ragreen, Pitel, ZrenBot, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, mart
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20180910/d9926757/attachment-0001.html>
More information about the Plasma-devel
mailing list