Summary: As this happens the screen filtering higher up in the proxy chain culimating in TasksModel needs to be re-executed, as it compares ScreenGeometry against a property value set on the model. Without this update, tasks may disappear from views using TasksModel. Mapping the trigger conditions to affected rows is deliberately maximally coarse; see implementation comment in code. BUG:373075 Reviewers: #plasma, davidedmundson Subscribers: plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D3628wilder-5.14
parent
29523d38b8
commit
0b0d14639a
7 changed files with 121 additions and 6 deletions
@ -0,0 +1,60 @@ |
|||||||
|
/********************************************************************
|
||||||
|
Copyright 2016 Eike Hein <hein@kde.org> |
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or |
||||||
|
modify it under the terms of the GNU Lesser General Public |
||||||
|
License as published by the Free Software Foundation; either |
||||||
|
version 2.1 of the License, or (at your option) version 3, or any |
||||||
|
later version accepted by the membership of KDE e.V. (or its |
||||||
|
successor approved by the membership of KDE e.V.), which shall |
||||||
|
act as a proxy defined in Section 6 of version 3 of the license. |
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||||
|
Lesser General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public |
||||||
|
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*********************************************************************/ |
||||||
|
|
||||||
|
#include "abstractwindowtasksmodel.h" |
||||||
|
|
||||||
|
#include <QGuiApplication> |
||||||
|
#include <QScreen> |
||||||
|
|
||||||
|
namespace TaskManager |
||||||
|
{ |
||||||
|
|
||||||
|
AbstractWindowTasksModel::AbstractWindowTasksModel(QObject *parent) |
||||||
|
: AbstractTasksModel(parent) |
||||||
|
{ |
||||||
|
// TODO: The following will refresh the ScreenGeometry data role for
|
||||||
|
// all rows whenever any screen is added or changes its geometry. No
|
||||||
|
// attempt is made to be intelligent and exempt rows that are tech-
|
||||||
|
// nically unaffected by the change. Doing so would require tracking
|
||||||
|
// far more state (i.e. what screen a window is on) and be so
|
||||||
|
// complicated as to invite bugs. As the trigger conditions are
|
||||||
|
// expected to be rare, this would be premature optimization at this
|
||||||
|
// time. That assessment may change in the future.
|
||||||
|
|
||||||
|
auto screenAdded = [this](const QScreen *screen) { |
||||||
|
connect(screen, &QScreen::geometryChanged, this, |
||||||
|
[this]() { |
||||||
|
dataChanged(index(0, 0), index(rowCount(), 0), QVector<int>{ScreenGeometry}); |
||||||
|
} |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
connect(qGuiApp, &QGuiApplication::screenAdded, this, screenAdded); |
||||||
|
|
||||||
|
foreach(const QScreen *screen, QGuiApplication::screens()) { |
||||||
|
screenAdded(screen); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
AbstractWindowTasksModel::~AbstractWindowTasksModel() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
/********************************************************************
|
||||||
|
Copyright 2016 Eike Hein <hein.org> |
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or |
||||||
|
modify it under the terms of the GNU Lesser General Public |
||||||
|
License as published by the Free Software Foundation; either |
||||||
|
version 2.1 of the License, or (at your option) version 3, or any |
||||||
|
later version accepted by the membership of KDE e.V. (or its |
||||||
|
successor approved by the membership of KDE e.V.), which shall |
||||||
|
act as a proxy defined in Section 6 of version 3 of the license. |
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||||
|
Lesser General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public |
||||||
|
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*********************************************************************/ |
||||||
|
|
||||||
|
#ifndef ABSTRACTWINDOWTASKSMODEL_H |
||||||
|
#define ABSTRACTWINDOWTASKSMODEL_H |
||||||
|
|
||||||
|
#include "abstracttasksmodel.h" |
||||||
|
|
||||||
|
#include "taskmanager_export.h" |
||||||
|
|
||||||
|
namespace TaskManager |
||||||
|
{ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @short An abstract base class for window tasks models. |
||||||
|
* |
||||||
|
* This class serves as abstract base class for window tasks model implementations. |
||||||
|
* |
||||||
|
* It takes care of refreshing the ScreenGeometry data role when screens are added |
||||||
|
* or a screen changes its geometry. |
||||||
|
* |
||||||
|
* @author Eike Hein <hein@kde.org> |
||||||
|
**/ |
||||||
|
|
||||||
|
class TASKMANAGER_EXPORT AbstractWindowTasksModel : public AbstractTasksModel |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit AbstractWindowTasksModel(QObject *parent = nullptr); |
||||||
|
virtual ~AbstractWindowTasksModel(); |
||||||
|
}; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#endif |
||||||
Loading…
Reference in new issue