Add a ScreenEdgeItem to reserve a screen edge from QML
Usage: ScreenEdgeItem { edge: ScreenEdgeItem.LeftEdge onActivated: doSomething() }
This commit is contained in:
parent
96bde02b38
commit
5007a19062
4 changed files with 202 additions and 0 deletions
|
@ -156,6 +156,7 @@ if(KWIN_BUILD_SCRIPTING)
|
||||||
scripting/timer.cpp
|
scripting/timer.cpp
|
||||||
scripting/scripting_model.cpp
|
scripting/scripting_model.cpp
|
||||||
scripting/dbuscall.cpp
|
scripting/dbuscall.cpp
|
||||||
|
scripting/screenedgeitem.cpp
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
91
scripting/screenedgeitem.cpp
Normal file
91
scripting/screenedgeitem.cpp
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
/********************************************************************
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
Copyright (C) 2013 Martin Gräßlin <mgraesslin@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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*********************************************************************/
|
||||||
|
#include "screenedgeitem.h"
|
||||||
|
#include <config-kwin.h>
|
||||||
|
#ifdef KWIN_BUILD_SCREENEDGES
|
||||||
|
#include "screenedge.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace KWin
|
||||||
|
{
|
||||||
|
|
||||||
|
ScreenEdgeItem::ScreenEdgeItem(QObject* parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, m_enabled(true)
|
||||||
|
, m_edge(NoEdge)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreenEdgeItem::~ScreenEdgeItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenEdgeItem::setEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
if (m_enabled == enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
disableEdge();
|
||||||
|
m_enabled = enabled;
|
||||||
|
enableEdge();
|
||||||
|
emit enabledChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenEdgeItem::setEdge(Edge edge)
|
||||||
|
{
|
||||||
|
if (m_edge == edge) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
disableEdge();
|
||||||
|
m_edge = edge;
|
||||||
|
enableEdge();
|
||||||
|
emit edgeChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenEdgeItem::enableEdge()
|
||||||
|
{
|
||||||
|
if (!m_enabled || m_edge == NoEdge) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#ifdef KWIN_BUILD_SCREENEDGES
|
||||||
|
ScreenEdges::self()->reserve(static_cast<ElectricBorder>(m_edge), this, "borderActivated");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenEdgeItem::disableEdge()
|
||||||
|
{
|
||||||
|
if (!m_enabled || m_edge == NoEdge) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#ifdef KWIN_BUILD_SCREENEDGES
|
||||||
|
ScreenEdges::self()->unreserve(static_cast<ElectricBorder>(m_edge), this);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ScreenEdgeItem::borderActivated(ElectricBorder edge)
|
||||||
|
{
|
||||||
|
if (edge != static_cast<ElectricBorder>(m_edge) || !m_enabled) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
emit activated();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
108
scripting/screenedgeitem.h
Normal file
108
scripting/screenedgeitem.h
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
/********************************************************************
|
||||||
|
KWin - the KDE window manager
|
||||||
|
This file is part of the KDE project.
|
||||||
|
|
||||||
|
Copyright (C) 2013 Martin Gräßlin <mgraesslin@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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*********************************************************************/
|
||||||
|
#ifndef KWIN_SCREENEDGEITEM_H
|
||||||
|
#define KWIN_SCREENEDGEITEM_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <kwinglobals.h>
|
||||||
|
|
||||||
|
namespace KWin
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Qml export for reserving a Screen Edge.
|
||||||
|
*
|
||||||
|
* The edge is controlled by the @c enabled property and the @c edge
|
||||||
|
* property. If the edge is enabled and gets triggered the @link activated()
|
||||||
|
* signal gets emitted.
|
||||||
|
*
|
||||||
|
* Example usage:
|
||||||
|
* @code
|
||||||
|
* ScreenEdgeItem {
|
||||||
|
* edge: ScreenEdgeItem.LeftEdge
|
||||||
|
* onActivated: doSomething()
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ScreenEdgeItem : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_ENUMS(Edge)
|
||||||
|
/**
|
||||||
|
* @brief Whether the edge is currently enabled, that is reserved. Default value is @c true.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
|
||||||
|
/**
|
||||||
|
* @brief Which of the screen edges is to be reserved. Default value is @c NoEdge.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Q_PROPERTY(Edge edge READ edge WRITE setEdge NOTIFY edgeChanged)
|
||||||
|
public:
|
||||||
|
enum Edge {
|
||||||
|
TopEdge,
|
||||||
|
TopRightEdge,
|
||||||
|
RightEdge,
|
||||||
|
BottomRightEdge,
|
||||||
|
BottomEdge,
|
||||||
|
BottomLeftEdge,
|
||||||
|
LeftEdge,
|
||||||
|
TopLeftEdge,
|
||||||
|
EDGE_COUNT,
|
||||||
|
NoEdge
|
||||||
|
};
|
||||||
|
explicit ScreenEdgeItem(QObject *parent = 0);
|
||||||
|
virtual ~ScreenEdgeItem();
|
||||||
|
bool isEnabled() const;
|
||||||
|
Edge edge() const;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void setEnabled(bool enabled);
|
||||||
|
void setEdge(Edge edge);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void enabledChanged();
|
||||||
|
void edgeChanged();
|
||||||
|
|
||||||
|
void activated();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
bool borderActivated(ElectricBorder edge);
|
||||||
|
private:
|
||||||
|
void enableEdge();
|
||||||
|
void disableEdge();
|
||||||
|
bool m_enabled;
|
||||||
|
Edge m_edge;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline bool ScreenEdgeItem::isEnabled() const
|
||||||
|
{
|
||||||
|
return m_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ScreenEdgeItem::Edge ScreenEdgeItem::edge() const
|
||||||
|
{
|
||||||
|
return m_edge;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace KWin
|
||||||
|
|
||||||
|
#endif // KWIN_SCREENEDGEITEM_H
|
|
@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "meta.h"
|
#include "meta.h"
|
||||||
#include "scriptingutils.h"
|
#include "scriptingutils.h"
|
||||||
#include "workspace_wrapper.h"
|
#include "workspace_wrapper.h"
|
||||||
|
#include "screenedgeitem.h"
|
||||||
#include "scripting_model.h"
|
#include "scripting_model.h"
|
||||||
#include "../client.h"
|
#include "../client.h"
|
||||||
#include "../thumbnailitem.h"
|
#include "../thumbnailitem.h"
|
||||||
|
@ -549,6 +550,7 @@ void KWin::DeclarativeScript::run()
|
||||||
qmlRegisterType<DesktopThumbnailItem>("org.kde.kwin", 2, 0, "DesktopThumbnailItem");
|
qmlRegisterType<DesktopThumbnailItem>("org.kde.kwin", 2, 0, "DesktopThumbnailItem");
|
||||||
qmlRegisterType<WindowThumbnailItem>("org.kde.kwin", 2, 0, "ThumbnailItem");
|
qmlRegisterType<WindowThumbnailItem>("org.kde.kwin", 2, 0, "ThumbnailItem");
|
||||||
qmlRegisterType<DBusCall>("org.kde.kwin", 2, 0, "DBusCall");
|
qmlRegisterType<DBusCall>("org.kde.kwin", 2, 0, "DBusCall");
|
||||||
|
qmlRegisterType<ScreenEdgeItem>("org.kde.kwin", 2, 0, "ScreenEdgeItem");
|
||||||
qmlRegisterType<KWin::ScriptingClientModel::ClientModel>();
|
qmlRegisterType<KWin::ScriptingClientModel::ClientModel>();
|
||||||
qmlRegisterType<KWin::ScriptingClientModel::SimpleClientModel>("org.kde.kwin", 2, 0, "ClientModel");
|
qmlRegisterType<KWin::ScriptingClientModel::SimpleClientModel>("org.kde.kwin", 2, 0, "ClientModel");
|
||||||
qmlRegisterType<KWin::ScriptingClientModel::ClientModelByScreen>("org.kde.kwin", 2, 0, "ClientModelByScreen");
|
qmlRegisterType<KWin::ScriptingClientModel::ClientModelByScreen>("org.kde.kwin", 2, 0, "ClientModelByScreen");
|
||||||
|
|
Loading…
Reference in a new issue