* Copyright (C) 2013-2016 by Eike Hein <hein@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#ifndef BACKEND_H
#define BACKEND_H
#include <QObject>
#include <QRect>
#include <netwm.h>
#include <qwindowdefs.h>
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(QQuickItem* toolTipItem READ toolTipItem WRITE setToolTipItem NOTIFY toolTipItemChanged)
Q_PROPERTY(QQuickWindow* groupDialog READ groupDialog WRITE setGroupDialog NOTIFY groupDialogChanged)
Q_PROPERTY(bool highlightWindows READ highlightWindows WRITE setHighlightWindows NOTIFY highlightWindowsChanged)
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);
QQuickItem *toolTipItem() const;
void setToolTipItem(QQuickItem *item);
QQuickWindow *groupDialog() const;
void setGroupDialog(QQuickWindow *dialog);
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;
Q_INVOKABLE void ungrabMouse(QQuickItem *item) const;
Q_INVOKABLE bool canPresentWindows() const;
Q_INVOKABLE bool isApplication(const QUrl &url) const;
Q_INVOKABLE QList<QUrl> jsonArrayToUrlList(const QJsonArray &array) const;
Q_INVOKABLE void cancelHighlightWindows();
Q_INVOKABLE qint64 parentPid(qint64 pid) const;
static QUrl tryDecodeApplicationsUrl(const QUrl &launcherUrl);
public Q_SLOTS:
void presentWindows(const QVariant &winIds);
void windowsHovered(const QVariant &winIds, bool hovered);
Q_SIGNALS:
void taskManagerItemChanged() const;
void toolTipItemChanged() const;
void groupDialogChanged() const;
void highlightWindowsChanged() const;
void addLauncher(const QUrl &url) const;
void showAllPlaces();
private Q_SLOTS:
void toolTipWindowChanged(QQuickWindow *window);
void handleRecentDocumentAction() const;
private:
void updateWindowHighlight();
QQuickItem *m_taskManagerItem = nullptr;
QQuickItem *m_toolTipItem = nullptr;
QQuickWindow *m_groupDialog = nullptr;
WId m_panelWinId;
bool m_highlightWindows;
QList<WId> m_windowsToHighlight;
QActionGroup *m_actionGroup = nullptr;
KActivities::Consumer *m_activitiesConsumer = nullptr;
};
#endif