/* SPDX-FileCopyrightText: 2013-2016 Eike Hein SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include #include #include #include class QAction; class QActionGroup; class QQuickItem; class QQuickWindow; class QJsonArray; namespace KActivities { class Consumer; } class Backend : public QObject { Q_OBJECT Q_PROPERTY(QQuickItem *taskManagerItem READ taskManagerItem WRITE setTaskManagerItem NOTIFY taskManagerItemChanged) Q_PROPERTY(bool highlightWindows READ highlightWindows WRITE setHighlightWindows NOTIFY highlightWindowsChanged) Q_PROPERTY(bool windowViewAvailable READ windowViewAvailable NOTIFY windowViewAvailableChanged) public: enum MiddleClickAction { None = 0, Close, NewInstance, ToggleMinimized, ToggleGrouping, BringToCurrentDesktop, }; Q_ENUM(MiddleClickAction) explicit Backend(QObject *parent = nullptr); ~Backend() override; QQuickItem *taskManagerItem() const; void setTaskManagerItem(QQuickItem *item); bool highlightWindows() const; void setHighlightWindows(bool highlight); Q_INVOKABLE QVariantList jumpListActions(const QUrl &launcherUrl, QObject *parent); Q_INVOKABLE QVariantList placesActions(const QUrl &launcherUrl, bool showAllPlaces, QObject *parent); Q_INVOKABLE QVariantList recentDocumentActions(const QUrl &launcherUrl, QObject *parent); Q_INVOKABLE void setActionGroup(QAction *action) const; Q_INVOKABLE QRect globalRect(QQuickItem *item) const; bool windowViewAvailable() const; Q_INVOKABLE bool isApplication(const QUrl &url) const; Q_INVOKABLE QList jsonArrayToUrlList(const QJsonArray &array) const; Q_INVOKABLE void cancelHighlightWindows(); Q_INVOKABLE qint64 parentPid(qint64 pid) const; static QUrl tryDecodeApplicationsUrl(const QUrl &launcherUrl); Q_INVOKABLE static QStringList applicationCategories(const QUrl &launcherUrl); /** * @return A mimedata map that contains required information to perform a task drag */ Q_INVOKABLE static QVariantMap generateMimeData(const QString &mimeType, const QVariant &mimeData, const QUrl &url); public Q_SLOTS: void activateWindowView(const QVariant &winIds); void windowsHovered(const QVariant &winIds, bool hovered); Q_SIGNALS: void taskManagerItemChanged() const; void highlightWindowsChanged() const; void addLauncher(const QUrl &url) const; void windowViewAvailableChanged(); void showAllPlaces(); private Q_SLOTS: void handleRecentDocumentAction() const; private: void updateWindowHighlight(); QVariantList systemSettingsActions(QObject *parent) const; QQuickItem *m_taskManagerItem = nullptr; bool m_highlightWindows; QStringList m_windowsToHighlight; QActionGroup *m_actionGroup = nullptr; KActivities::Consumer *m_activitiesConsumer = nullptr; bool m_windowViewAvailable = false; };