plasma5-workspace/0001-Fix-another-regression-with-rearranging-launchers-in.patch
2017-02-24 15:35:27 +00:00

60 lines
2.3 KiB
Diff

From 6cfca1bdf34232d1722c88be22804e65d1c445da Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Fri, 24 Feb 2017 16:34:20 +0100
Subject: [PATCH] Fix another regression with rearranging launchers in an
activities world.
Summary:
The new activity-aware implementation of
LauncherTasksModel::setLauncherList() would only accept the passed list
when it changed any activities associations, not when the order changed.
This would effectively turn TasksModel::move involving launcher tasks
into a no-op.
Rearranging launchers works like this:
1. A client calls TasksModel::move one or many times. TasksModel::move
updates TasksModel's internal sort mapping and implements it, causing
a visible order change in any views.
2. When it is done calling move(), the client calls
TasksModel::syncLaunchers. TasksModel::syncLaunchers calls
LauncherTasksModel::setLauncherList with a new list derived from
its sort mapping, and updates its sort mapping in expectation of
row indices changing in the launcher tasks source model.
Due to the above bug, the sort mapping would be adjusted in expectation
of changes the launcher tasks model would not actually do, appearing to
undo the moves the next time a view is updated from source data.
CCMAIL:ivan.cukic@kde.org
Reviewers: #plasma, davidedmundson, mart
Reviewed By: mart
Subscribers: broulik, fvogt, plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4749
---
libtaskmanager/launchertasksmodel.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libtaskmanager/launchertasksmodel.cpp b/libtaskmanager/launchertasksmodel.cpp
index b3cba5ed..a0b3745b 100644
--- a/libtaskmanager/launchertasksmodel.cpp
+++ b/libtaskmanager/launchertasksmodel.cpp
@@ -449,7 +449,8 @@ void LauncherTasksModel::setLauncherList(const QStringList &serializedLaunchers)
}
}
- if (newActivitiesForLauncher != d->activitiesForLauncher) {
+ if (newLaunchersOrder != d->launchersOrder
+ || newActivitiesForLauncher != d->activitiesForLauncher) {
// Common case optimization: If the list changed but its size
// did not (e.g. due to reordering by a user of this model),
// just clear the caches and announce new data instead of
--
2.11.0