mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-01-31 07:12:18 +00:00
898 lines
32 KiB
C++
898 lines
32 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
|
|
|
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <QQmlParserStatus>
|
|
#include <QSortFilterProxyModel>
|
|
|
|
#include "abstracttasksmodeliface.h"
|
|
|
|
#include "taskmanager_export.h"
|
|
|
|
namespace TaskManager
|
|
{
|
|
/**
|
|
* @short A unified tasks model.
|
|
*
|
|
* This model presents tasks sourced from supplied launcher URLs, startup
|
|
* notification data and window data retrieved from the windowing server
|
|
* the host process is connected to. The underlying windowing system is
|
|
* abstracted away.
|
|
*
|
|
* The source data is abstracted into a unified lifecycle for tasks
|
|
* suitable for presentation in a user interface.
|
|
*
|
|
* Matching startup and window tasks replace launcher tasks. Startup
|
|
* tasks are omitted when matching window tasks exist. Tasks that desire
|
|
* not to be shown in a user interface are omitted.
|
|
*
|
|
* Tasks may be filtered, sorted or grouped by setting properties on the
|
|
* model.
|
|
*
|
|
* Tasks may be interacted with by calling methods on the model.
|
|
*
|
|
* @author Eike Hein <hein@kde.org>
|
|
**/
|
|
|
|
class TASKMANAGER_EXPORT TasksModel : public QSortFilterProxyModel, public AbstractTasksModelIface, public QQmlParserStatus
|
|
{
|
|
Q_OBJECT
|
|
Q_INTERFACES(QQmlParserStatus)
|
|
|
|
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
|
|
Q_PROPERTY(int launcherCount READ launcherCount NOTIFY launcherCountChanged)
|
|
|
|
Q_PROPERTY(QStringList launcherList READ launcherList WRITE setLauncherList NOTIFY launcherListChanged)
|
|
|
|
Q_PROPERTY(bool anyTaskDemandsAttention READ anyTaskDemandsAttention NOTIFY anyTaskDemandsAttentionChanged)
|
|
|
|
Q_PROPERTY(QVariant virtualDesktop READ virtualDesktop WRITE setVirtualDesktop NOTIFY virtualDesktopChanged)
|
|
Q_PROPERTY(QRect screenGeometry READ screenGeometry WRITE setScreenGeometry NOTIFY screenGeometryChanged)
|
|
Q_PROPERTY(QString activity READ activity WRITE setActivity NOTIFY activityChanged)
|
|
|
|
Q_PROPERTY(bool filterByVirtualDesktop READ filterByVirtualDesktop WRITE setFilterByVirtualDesktop NOTIFY filterByVirtualDesktopChanged)
|
|
Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE setFilterByScreen NOTIFY filterByScreenChanged)
|
|
Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged)
|
|
Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged)
|
|
Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximizedChanged)
|
|
Q_PROPERTY(bool filterHidden READ filterHidden WRITE setFilterHidden NOTIFY filterHiddenChanged)
|
|
|
|
Q_PROPERTY(SortMode sortMode READ sortMode WRITE setSortMode NOTIFY sortModeChanged)
|
|
Q_PROPERTY(bool separateLaunchers READ separateLaunchers WRITE setSeparateLaunchers NOTIFY separateLaunchersChanged)
|
|
Q_PROPERTY(bool launchInPlace READ launchInPlace WRITE setLaunchInPlace NOTIFY launchInPlaceChanged)
|
|
|
|
Q_PROPERTY(GroupMode groupMode READ groupMode WRITE setGroupMode NOTIFY groupModeChanged)
|
|
Q_PROPERTY(bool groupInline READ groupInline WRITE setGroupInline NOTIFY groupInlineChanged)
|
|
Q_PROPERTY(
|
|
int groupingWindowTasksThreshold READ groupingWindowTasksThreshold WRITE setGroupingWindowTasksThreshold NOTIFY groupingWindowTasksThresholdChanged)
|
|
Q_PROPERTY(QStringList groupingAppIdBlacklist READ groupingAppIdBlacklist WRITE setGroupingAppIdBlacklist NOTIFY groupingAppIdBlacklistChanged)
|
|
Q_PROPERTY(QStringList groupingLauncherUrlBlacklist READ groupingLauncherUrlBlacklist WRITE setGroupingLauncherUrlBlacklist NOTIFY
|
|
groupingLauncherUrlBlacklistChanged)
|
|
Q_PROPERTY(QModelIndex activeTask READ activeTask NOTIFY activeTaskChanged)
|
|
|
|
public:
|
|
enum SortMode {
|
|
SortDisabled = 0, /**< No sorting is done. */
|
|
SortManual, /**< Tasks can be moved with move() and syncLaunchers(). */
|
|
SortAlpha, /**< Tasks are sorted alphabetically, by AbstractTasksModel::AppName and Qt::DisplayRole. */
|
|
SortVirtualDesktop, /**< Tasks are sorted by the virtual desktop they are on. */
|
|
SortActivity, /**< Tasks are sorted by the number of tasks on the activities they're on. */
|
|
};
|
|
Q_ENUM(SortMode)
|
|
|
|
enum GroupMode {
|
|
GroupDisabled = 0, /**< No grouping is done. */
|
|
GroupApplications, /**< Tasks are grouped by the application backing them. */
|
|
};
|
|
Q_ENUM(GroupMode)
|
|
|
|
explicit TasksModel(QObject *parent = nullptr);
|
|
~TasksModel() override;
|
|
|
|
QHash<int, QByteArray> roleNames() const override;
|
|
|
|
Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override; // Invokable.
|
|
|
|
QVariant data(const QModelIndex &proxyIndex, int role) const override;
|
|
|
|
/**
|
|
* The number of launcher tasks in the tast list.
|
|
*
|
|
* @returns the number of launcher tasks in the task list.
|
|
**/
|
|
int launcherCount() const;
|
|
|
|
/**
|
|
* The list of launcher URLs serialized to strings along with
|
|
* the activities they belong to.
|
|
*
|
|
* @see setLauncherList
|
|
* @returns the list of launcher URLs serialized to strings.
|
|
**/
|
|
QStringList launcherList() const;
|
|
|
|
/**
|
|
* Replace the list of launcher URL strings.
|
|
*
|
|
* Invalid or empty URLs will be rejected. Duplicate URLs will be
|
|
* collapsed.
|
|
*
|
|
* @see launcherList
|
|
* @param launchers A list of launcher URL strings.
|
|
**/
|
|
void setLauncherList(const QStringList &launchers);
|
|
|
|
/**
|
|
* Returns whether any task in the model currently demands attention
|
|
* (AbstractTasksModel::IsDemandingAttention).
|
|
*
|
|
* @returns whether any task in the model currently demands attention.
|
|
**/
|
|
bool anyTaskDemandsAttention() const;
|
|
|
|
/**
|
|
* The id of the virtual desktop used in filtering by virtual
|
|
* desktop. Usually set to the id of the current virtual desktop.
|
|
* Defaults to empty.
|
|
*
|
|
* @see setVirtualDesktop
|
|
* @returns the number of the virtual desktop used in filtering.
|
|
**/
|
|
QVariant virtualDesktop() const;
|
|
|
|
/**
|
|
* Set the id of the virtual desktop to use in filtering by virtual
|
|
* desktop.
|
|
*
|
|
* If set to an empty id, filtering by virtual desktop is disabled.
|
|
*
|
|
* @see virtualDesktop
|
|
* @param desktop A virtual desktop id (QString on Wayland; uint >0 on X11).
|
|
**/
|
|
void setVirtualDesktop(const QVariant &desktop = QVariant());
|
|
|
|
/**
|
|
* The geometry of the screen used in filtering by screen. Defaults
|
|
* to a null QRect.
|
|
*
|
|
* @see setGeometryScreen
|
|
* @returns the geometry of the screen used in filtering.
|
|
**/
|
|
QRect screenGeometry() const;
|
|
|
|
/**
|
|
* Set the geometry of the screen to use in filtering by screen.
|
|
*
|
|
* If set to an invalid QRect, filtering by screen is disabled.
|
|
*
|
|
* @see screenGeometry
|
|
* @param geometry A screen geometry.
|
|
**/
|
|
void setScreenGeometry(const QRect &geometry);
|
|
|
|
/**
|
|
* The id of the activity used in filtering by activity. Usually
|
|
* set to the id of the current activity. Defaults to an empty id.
|
|
*
|
|
* @see setActivity
|
|
* @returns the id of the activity used in filtering.
|
|
**/
|
|
QString activity() const;
|
|
|
|
/**
|
|
* Set the id of the activity to use in filtering by activity.
|
|
*
|
|
* @see activity
|
|
* @param activity An activity id.
|
|
**/
|
|
void setActivity(const QString &activity);
|
|
|
|
/**
|
|
* Whether tasks should be filtered by virtual desktop. Defaults to
|
|
* @c false.
|
|
*
|
|
* Filtering by virtual desktop only happens if a virtual desktop
|
|
* number is set, even if this returns @c true.
|
|
*
|
|
* @see setFilterByVirtualDesktop
|
|
* @see setVirtualDesktop
|
|
* @returns @c true if tasks should be filtered by virtual desktop.
|
|
**/
|
|
bool filterByVirtualDesktop() const;
|
|
|
|
/**
|
|
* Set whether tasks should be filtered by virtual desktop.
|
|
*
|
|
* Filtering by virtual desktop only happens if a virtual desktop
|
|
* number is set, even if this is set to @c true.
|
|
*
|
|
* @see filterByVirtualDesktop
|
|
* @see setVirtualDesktop
|
|
* @param filter Whether tasks should be filtered by virtual desktop.
|
|
**/
|
|
void setFilterByVirtualDesktop(bool filter);
|
|
|
|
/**
|
|
* Whether tasks should be filtered by screen. Defaults to @c false.
|
|
*
|
|
* Filtering by screen only happens if a screen number is set, even
|
|
* if this returns @c true.
|
|
*
|
|
* @see setFilterByScreen
|
|
* @see setScreen
|
|
* @returns @c true if tasks should be filtered by screen.
|
|
**/
|
|
bool filterByScreen() const;
|
|
|
|
/**
|
|
* Set whether tasks should be filtered by screen.
|
|
*
|
|
* Filtering by screen only happens if a screen number is set, even
|
|
* if this is set to @c true.
|
|
*
|
|
* @see filterByScreen
|
|
* @see setScreen
|
|
* @param filter Whether tasks should be filtered by screen.
|
|
**/
|
|
void setFilterByScreen(bool filter);
|
|
|
|
/**
|
|
* Whether tasks should be filtered by activity. Defaults to @c false.
|
|
*
|
|
* Filtering by activity only happens if an activity id is set, even
|
|
* if this returns @c true.
|
|
*
|
|
* @see setFilterByActivity
|
|
* @see setActivity
|
|
* @returns @ctrue if tasks should be filtered by activity.
|
|
**/
|
|
bool filterByActivity() const;
|
|
|
|
/**
|
|
* Set whether tasks should be filtered by activity. Defaults to
|
|
* @c false.
|
|
*
|
|
* Filtering by virtual desktop only happens if an activity id is set,
|
|
* even if this is set to @c true.
|
|
*
|
|
* @see filterByActivity
|
|
* @see setActivity
|
|
* @param filter Whether tasks should be filtered by activity.
|
|
**/
|
|
void setFilterByActivity(bool filter);
|
|
|
|
/**
|
|
* Whether non-minimized tasks should be filtered. Defaults to
|
|
* @c false.
|
|
*
|
|
* @see setFilterNotMinimized
|
|
* @returns @c true if non-minimized tasks should be filtered.
|
|
**/
|
|
bool filterNotMinimized() const;
|
|
|
|
/**
|
|
* Set whether non-minimized tasks should be filtered.
|
|
*
|
|
* @see filterNotMinimized
|
|
* @param filter Whether non-minimized tasks should be filtered.
|
|
**/
|
|
void setFilterNotMinimized(bool filter);
|
|
|
|
/**
|
|
* Whether non-maximized tasks should be filtered. Defaults to
|
|
* @c false.
|
|
*
|
|
* @see setFilterNotMaximized
|
|
* @returns @c true if non-maximized tasks should be filtered.
|
|
**/
|
|
bool filterNotMaximized() const;
|
|
|
|
/**
|
|
* Set whether non-maximized tasks should be filtered.
|
|
*
|
|
* @see filterNotMaximized
|
|
* @param filter Whether non-maximized tasks should be filtered.
|
|
**/
|
|
void setFilterNotMaximized(bool filter);
|
|
|
|
/**
|
|
* Whether hidden tasks should be filtered. Defaults to
|
|
* @c false.
|
|
*
|
|
* @see setFilterHidden
|
|
* @returns @c true if hidden tasks should be filtered.
|
|
**/
|
|
bool filterHidden() const;
|
|
|
|
/**
|
|
* Set whether hidden tasks should be filtered.
|
|
*
|
|
* @see filterHidden
|
|
* @param filter Whether hidden tasks should be filtered.
|
|
**/
|
|
void setFilterHidden(bool filter);
|
|
|
|
/**
|
|
* The sort mode used in sorting tasks. Defaults to SortAlpha.
|
|
*
|
|
* @see setSortMode
|
|
* @returns the current sort mode.
|
|
**/
|
|
SortMode sortMode() const;
|
|
|
|
/**
|
|
* Sets the sort mode used in sorting tasks.
|
|
*
|
|
* @see sortMode
|
|
* @param mode A sort mode.
|
|
**/
|
|
void setSortMode(SortMode mode);
|
|
|
|
/**
|
|
* Whether launchers are kept separate from other kinds of tasks.
|
|
* Defaults to @c true.
|
|
*
|
|
* When enabled, launcher tasks are sorted first in the tasks model
|
|
* and move() disallows moving them below the last launcher task,
|
|
* or moving a different kind of task above the first launcher. New
|
|
* launcher tasks are inserted after the last launcher task. When
|
|
* disabled, move() allows mixing, and new launcher tasks are
|
|
* appended to the model.
|
|
*
|
|
* Further, when disabled, the model always behaves as if
|
|
* launchInPlace is enabled: A window task takes the place of the
|
|
* first matching launcher task.
|
|
*
|
|
* @see LauncherTasksModel
|
|
* @see move
|
|
* @see launchInPlace
|
|
* @see setSeparateLaunchers
|
|
* @return whether launcher tasks are kept separate.
|
|
*/
|
|
bool separateLaunchers() const;
|
|
|
|
/**
|
|
* Sets whether launchers are kept separate from other kinds of tasks.
|
|
*
|
|
* When enabled, launcher tasks are sorted first in the tasks model
|
|
* and move() disallows moving them below the last launcher task,
|
|
* or moving a different kind of task above the first launcher. New
|
|
* launcher tasks are inserted after the last launcher task. When
|
|
* disabled, move() allows mixing, and new launcher tasks are
|
|
* appended to the model.
|
|
*
|
|
* Further, when disabled, the model always behaves as if
|
|
* launchInPlace is enabled: A window task takes the place of the
|
|
* first matching launcher task.
|
|
*
|
|
* @see LauncherTasksModel
|
|
* @see move
|
|
* @see launchInPlace
|
|
* @see separateLaunchers
|
|
* @param separate Whether to keep launcher tasks separate.
|
|
*/
|
|
void setSeparateLaunchers(bool separate);
|
|
|
|
/**
|
|
* Whether window tasks should be sorted as their associated launcher
|
|
* tasks or separately. Defaults to @c false.
|
|
*
|
|
* @see setLaunchInPlace
|
|
* @returns whether window tasks should be sorted as their associated
|
|
* launcher tasks.
|
|
**/
|
|
bool launchInPlace() const;
|
|
|
|
/**
|
|
* Sets whether window tasks should be sorted as their associated launcher
|
|
* tasks or separately.
|
|
*
|
|
* @see launchInPlace
|
|
* @param launchInPlace Whether window tasks should be sorted as their
|
|
* associated launcher tasks.
|
|
**/
|
|
void setLaunchInPlace(bool launchInPlace);
|
|
|
|
/**
|
|
* Returns the current group mode, i.e. the criteria by which tasks should
|
|
* be grouped.
|
|
*
|
|
* Defaults to TasksModel::GroupApplication, which groups tasks backed by
|
|
* the same application.
|
|
*
|
|
* If the group mode is TasksModel::GroupDisabled, no grouping is done.
|
|
*
|
|
* @see setGroupMode
|
|
* @returns the current group mode.
|
|
**/
|
|
TasksModel::GroupMode groupMode() const;
|
|
|
|
/**
|
|
* Sets the group mode, i.e. the criteria by which tasks should be grouped.
|
|
*
|
|
* The group mode can be set to TasksModel::GroupDisabled to disable grouping
|
|
* entirely, breaking apart any existing groups.
|
|
*
|
|
* @see groupMode
|
|
* @param mode A group mode.
|
|
**/
|
|
void setGroupMode(TasksModel::GroupMode mode);
|
|
|
|
/**
|
|
* Returns whether grouping is done "inline" or not, i.e. whether groups
|
|
* are maintained inside the flat, top-level list, or by forming a tree.
|
|
* In inline grouping mode, move() on a group member will move all siblings
|
|
* as well, and sorting is first done among groups, then group members.
|
|
*
|
|
* Further, in inline grouping mode, the groupingWindowTasksThreshold
|
|
* setting is ignored: Grouping is always done.
|
|
*
|
|
* @see setGroupInline
|
|
* @see move
|
|
* @see groupingWindowTasksThreshold
|
|
* @returns whether grouping is done inline or not.
|
|
**/
|
|
bool groupInline() const;
|
|
|
|
/**
|
|
* Sets whether grouping is done "inline" or not, i.e. whether groups
|
|
* are maintained inside the flat, top-level list, or by forming a tree.
|
|
* In inline grouping mode, move() on a group member will move all siblings
|
|
* as well, and sorting is first done among groups, then group members.
|
|
*
|
|
* @see groupInline
|
|
* @see move
|
|
* @see groupingWindowTasksThreshold
|
|
* @param inline Whether to do grouping inline or not.
|
|
**/
|
|
void setGroupInline(bool groupInline);
|
|
|
|
/**
|
|
* As window tasks (AbstractTasksModel::IsWindow) come and go, groups will
|
|
* be formed when this threshold value is exceeded, and broken apart when
|
|
* it matches or falls below.
|
|
*
|
|
* Defaults to @c -1, which means grouping is done regardless of the number
|
|
* of window tasks.
|
|
*
|
|
* When the groupInline property is set to @c true, the threshold is ignored:
|
|
* Grouping is always done.
|
|
*
|
|
* @see setGroupingWindowTasksThreshold
|
|
* @see groupInline
|
|
* @return the threshold number of window tasks used in grouping decisions.
|
|
**/
|
|
int groupingWindowTasksThreshold() const;
|
|
|
|
/**
|
|
* Sets the number of window tasks (AbstractTasksModel::IsWindow) above which
|
|
* groups will be formed, and at or below which groups will be broken apart.
|
|
*
|
|
* If set to -1, grouping will be done regardless of the number of window tasks
|
|
* in the source model.
|
|
*
|
|
* When the groupInline property is set to @c true, the threshold is ignored:
|
|
* Grouping is always done.
|
|
*
|
|
* @see groupingWindowTasksThreshold
|
|
* @see groupInline
|
|
* @param threshold A threshold number of window tasks used in grouping
|
|
* decisions.
|
|
**/
|
|
void setGroupingWindowTasksThreshold(int threshold);
|
|
|
|
/**
|
|
* A blacklist of app ids (AbstractTasksModel::AppId) that is consulted before
|
|
* grouping a task. If a task's app id is found on the blacklist, it is not
|
|
* grouped.
|
|
*
|
|
* The default app id blacklist is empty.
|
|
*
|
|
* @see setGroupingAppIdBlacklist
|
|
* @returns the blacklist of app ids consulted before grouping a task.
|
|
**/
|
|
QStringList groupingAppIdBlacklist() const;
|
|
|
|
/**
|
|
* Sets the blacklist of app ids (AbstractTasksModel::AppId) that is consulted
|
|
* before grouping a task. If a task's app id is found on the blacklist, it is
|
|
* not grouped.
|
|
*
|
|
* When set, groups will be formed and broken apart as necessary.
|
|
*
|
|
* @see groupingAppIdBlacklist
|
|
* @param list a blacklist of app ids to be consulted before grouping a task.
|
|
**/
|
|
void setGroupingAppIdBlacklist(const QStringList &list);
|
|
|
|
/**
|
|
* A blacklist of launcher URLs (AbstractTasksModel::LauncherUrl) that is
|
|
* consulted before grouping a task. If a task's launcher URL is found on the
|
|
* blacklist, it is not grouped.
|
|
*
|
|
* The default launcher URL blacklist is empty.
|
|
*
|
|
* @see setGroupingLauncherUrlBlacklist
|
|
* @returns the blacklist of launcher URLs consulted before grouping a task.
|
|
**/
|
|
QStringList groupingLauncherUrlBlacklist() const;
|
|
|
|
/**
|
|
* Sets the blacklist of launcher URLs (AbstractTasksModel::LauncherUrl) that
|
|
* is consulted before grouping a task. If a task's launcher URL is found on
|
|
* the blacklist, it is not grouped.
|
|
*
|
|
* When set, groups will be formed and broken apart as necessary.
|
|
*
|
|
* @see groupingLauncherUrlBlacklist
|
|
* @param list a blacklist of launcher URLs to be consulted before grouping a task.
|
|
**/
|
|
void setGroupingLauncherUrlBlacklist(const QStringList &list);
|
|
|
|
/**
|
|
* Finds the first active (AbstractTasksModel::IsActive) task in the model
|
|
* and returns its QModelIndex, or a null QModelIndex if no active task is
|
|
* found.
|
|
*
|
|
* @returns the model index for the first active task, if any.
|
|
*/
|
|
QModelIndex activeTask() const;
|
|
|
|
/**
|
|
* Request adding a launcher with the given URL.
|
|
*
|
|
* If this URL is already in the list, the request will fail. URLs are
|
|
* compared for equality after removing the query string used to hold
|
|
* metadata.
|
|
*
|
|
* @see launcherUrlsMatch
|
|
* @param url A launcher URL.
|
|
* @returns @c true if a launcher was added.
|
|
*/
|
|
Q_INVOKABLE bool requestAddLauncher(const QUrl &url);
|
|
|
|
/**
|
|
* Request removing the launcher with the given URL.
|
|
*
|
|
* If this URL is already in the list, the request will fail. URLs are
|
|
* compared for equality after removing the query string used to hold
|
|
* metadata.
|
|
*
|
|
* @see launcherUrlsMatch
|
|
* @param url A launcher URL.
|
|
* @returns @c true if the launcher was removed.
|
|
*/
|
|
Q_INVOKABLE bool requestRemoveLauncher(const QUrl &url);
|
|
|
|
/**
|
|
* Request adding a launcher with the given URL to current activity.
|
|
*
|
|
* If this URL is already in the list, the request will fail. URLs are
|
|
* compared for equality after removing the query string used to hold
|
|
* metadata.
|
|
*
|
|
* @see launcherUrlsMatch
|
|
* @param url A launcher URL.
|
|
* @returns @c true if a launcher was added.
|
|
*/
|
|
Q_INVOKABLE bool requestAddLauncherToActivity(const QUrl &url, const QString &activity);
|
|
|
|
/**
|
|
* Request removing the launcher with the given URL from the current activity.
|
|
*
|
|
* If this URL is already in the list, the request will fail. URLs are
|
|
* compared for equality after removing the query string used to hold
|
|
* metadata.
|
|
*
|
|
* @see launcherUrlsMatch
|
|
* @param url A launcher URL.
|
|
* @returns @c true if the launcher was removed.
|
|
*/
|
|
Q_INVOKABLE bool requestRemoveLauncherFromActivity(const QUrl &url, const QString &activity);
|
|
|
|
/**
|
|
* Return the list of activities the launcher belongs to.
|
|
* If there is no launcher with that url, the list will be empty,
|
|
* while if the launcher is on all activities, it will contain a
|
|
* null uuid.
|
|
*
|
|
* URLs are compared for equality after removing the query string used
|
|
* to hold metadata.
|
|
*/
|
|
Q_INVOKABLE QStringList launcherActivities(const QUrl &url);
|
|
|
|
/**
|
|
* Return the position of the launcher with the given URL.
|
|
*
|
|
* URLs are compared for equality after removing the query string used
|
|
* to hold metadata.
|
|
*
|
|
* @see launcherUrlsMatch
|
|
* @param url A launcher URL.
|
|
* @returns @c -1 if no launcher exists for the given URL.
|
|
*/
|
|
Q_INVOKABLE int launcherPosition(const QUrl &url) const;
|
|
|
|
/**
|
|
* Request activation of the task at the given index. Derived classes are
|
|
* free to interpret the meaning of "activate" themselves depending on
|
|
* the nature and state of the task, e.g. launch or raise a window task.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestActivate(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request an additional instance of the application backing the task
|
|
* at the given index.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestNewInstance(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Requests to open the given URLs with the application backing the task
|
|
* at the given index.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
* @param urls The URLs to be passed to the application.
|
|
**/
|
|
Q_INVOKABLE void requestOpenUrls(const QModelIndex &index, const QList<QUrl> &urls) override;
|
|
|
|
/**
|
|
* Request the task at the given index be closed.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestClose(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request starting an interactive move for the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestMove(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request starting an interactive resize for the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be a
|
|
* no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestResize(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the minimized state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleMinimized(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the maximized state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleMaximized(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the keep-above state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleKeepAbove(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the keep-below state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleKeepBelow(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the fullscreen state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleFullScreen(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request toggling the shaded state of the task at the given index.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleShaded(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request entering the window at the given index on the specified virtual desktops.
|
|
*
|
|
* On Wayland, virtual desktop ids are QStrings. On X11, they are uint >0.
|
|
*
|
|
* An empty list has a special meaning: The window is entered on all virtual desktops
|
|
* in the session.
|
|
*
|
|
* On X11, a window can only be on one or all virtual desktops. Therefore, only the
|
|
* first list entry is actually used.
|
|
*
|
|
* On X11, the id 0 has a special meaning: The window is entered on all virtual
|
|
* desktops in the session.
|
|
*
|
|
* @param index An index in this window tasks model.
|
|
* @param desktops A list of virtual desktop ids.
|
|
**/
|
|
Q_INVOKABLE void requestVirtualDesktops(const QModelIndex &index, const QVariantList &desktops) override;
|
|
|
|
/**
|
|
* Request entering the window at the given index on a new virtual desktop,
|
|
* which is created in response to this request.
|
|
*
|
|
* @param index An index in this window tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestNewVirtualDesktop(const QModelIndex &index) override;
|
|
|
|
/**
|
|
* Request moving the task at the given index to the specified activities.
|
|
*
|
|
* This is meant for tasks that have an associated window, and may be
|
|
* a no-op when there is no window.
|
|
*
|
|
* This base implementation does nothing.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
* @param activities The new list of activities.
|
|
**/
|
|
Q_INVOKABLE void requestActivities(const QModelIndex &index, const QStringList &activities) override;
|
|
|
|
/**
|
|
* Request informing the window manager of new geometry for a visual
|
|
* delegate for the task at the given index. The geometry should be in
|
|
* screen coordinates.
|
|
*
|
|
* If the task at the given index is a group parent, the geometry is
|
|
* set for all of its children. If the task at the given index is a
|
|
* group member, the geometry is set for all of its siblings.
|
|
*
|
|
* @param index An index in this tasks model.
|
|
* @param geometry Visual delegate geometry in screen coordinates.
|
|
* @param delegate The delegate. Implementations are on their own with
|
|
* regard to extracting information from this, and should take care to
|
|
* reject invalid objects.
|
|
**/
|
|
Q_INVOKABLE void requestPublishDelegateGeometry(const QModelIndex &index, const QRect &geometry, QObject *delegate = nullptr) override;
|
|
|
|
/**
|
|
* Request toggling whether the task at the given index, along with any
|
|
* tasks matching its kind, should be grouped or not. Task groups will be
|
|
* formed or broken apart as needed, along with affecting future grouping
|
|
* decisions as new tasks appear.
|
|
*
|
|
* As grouping is toggled for a task, updates are made to the
|
|
* grouping*Blacklist properties of the model instance.
|
|
*
|
|
* @see groupingAppIdBlacklist
|
|
* @see groupingLauncherUrlBlacklist
|
|
*
|
|
* @param index An index in this tasks model.
|
|
**/
|
|
Q_INVOKABLE void requestToggleGrouping(const QModelIndex &index);
|
|
|
|
/**
|
|
* Moves a task to a new position in the list. The insert position is
|
|
* is bounded to the list start and end.
|
|
*
|
|
* syncLaunchers() should be called after a set of move operations to
|
|
* update the launcherList property to reflect the new order.
|
|
*
|
|
* When the groupInline property is set to @c true, a move request
|
|
* for a group member will bring all siblings along.
|
|
*
|
|
* @see syncLaunchers
|
|
* @see launcherList
|
|
* @see setGroupInline
|
|
* @param index An index in this tasks model.
|
|
* @param newPos The new list position to move the task to.
|
|
*/
|
|
Q_INVOKABLE bool move(int row, int newPos, const QModelIndex &parent = QModelIndex());
|
|
|
|
/**
|
|
* Updates the launcher list to reflect the new order after calls to
|
|
* move(), if needed.
|
|
*
|
|
* @see move
|
|
* @see launcherList
|
|
*/
|
|
Q_INVOKABLE void syncLaunchers();
|
|
|
|
/**
|
|
* Given a row in the model, returns a QModelIndex for it. To get an index
|
|
* for a child in a task group, an optional child row may be passed as well.
|
|
*
|
|
* This easier to use from Qt Quick views than QAbstractItemModel::index is.
|
|
*
|
|
* @param row A row index in the model.
|
|
* @param childRow A row index for a child of the task group at the given row.
|
|
* @returns a model index for the task at the given row, or for one of its
|
|
* child tasks.
|
|
*/
|
|
Q_INVOKABLE QModelIndex makeModelIndex(int row, int childRow = -1) const;
|
|
|
|
/**
|
|
* Given a row in the model, returns a QPersistentModelIndex for it. To get an index
|
|
* for a child in a task group, an optional child row may be passed as well.
|
|
*
|
|
* @param row A row index in the model.
|
|
* @param childRow A row index for a child of the task group at the given row.
|
|
* @returns a model index for the task at the given row, or for one of its
|
|
* child tasks.
|
|
*/
|
|
Q_INVOKABLE QPersistentModelIndex makePersistentModelIndex(int row, int childRow = -1) const;
|
|
|
|
void classBegin() override;
|
|
void componentComplete() override;
|
|
|
|
Q_SIGNALS:
|
|
void countChanged() const;
|
|
void launcherCountChanged() const;
|
|
void launcherListChanged() const;
|
|
void anyTaskDemandsAttentionChanged() const;
|
|
void virtualDesktopChanged() const;
|
|
void screenGeometryChanged() const;
|
|
void activityChanged() const;
|
|
void filterByVirtualDesktopChanged() const;
|
|
void filterByScreenChanged() const;
|
|
void filterByActivityChanged() const;
|
|
void filterNotMinimizedChanged() const;
|
|
void filterNotMaximizedChanged() const;
|
|
void filterHiddenChanged() const;
|
|
void sortModeChanged() const;
|
|
void separateLaunchersChanged() const;
|
|
void launchInPlaceChanged() const;
|
|
void groupModeChanged() const;
|
|
void groupInlineChanged() const;
|
|
void groupingWindowTasksThresholdChanged() const;
|
|
void groupingAppIdBlacklistChanged() const;
|
|
void groupingLauncherUrlBlacklistChanged() const;
|
|
void activeTaskChanged() const;
|
|
|
|
protected:
|
|
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
|
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
|
|
|
private:
|
|
Q_INVOKABLE void updateLauncherCount();
|
|
|
|
class Private;
|
|
class TasksModelLessThan;
|
|
friend class TasksModelLessThan;
|
|
QScopedPointer<Private> d;
|
|
};
|
|
|
|
}
|