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/scripting_model.cpp
|
||||
scripting/dbuscall.cpp
|
||||
scripting/screenedgeitem.cpp
|
||||
)
|
||||
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 "scriptingutils.h"
|
||||
#include "workspace_wrapper.h"
|
||||
#include "screenedgeitem.h"
|
||||
#include "scripting_model.h"
|
||||
#include "../client.h"
|
||||
#include "../thumbnailitem.h"
|
||||
|
@ -549,6 +550,7 @@ void KWin::DeclarativeScript::run()
|
|||
qmlRegisterType<DesktopThumbnailItem>("org.kde.kwin", 2, 0, "DesktopThumbnailItem");
|
||||
qmlRegisterType<WindowThumbnailItem>("org.kde.kwin", 2, 0, "ThumbnailItem");
|
||||
qmlRegisterType<DBusCall>("org.kde.kwin", 2, 0, "DBusCall");
|
||||
qmlRegisterType<ScreenEdgeItem>("org.kde.kwin", 2, 0, "ScreenEdgeItem");
|
||||
qmlRegisterType<KWin::ScriptingClientModel::ClientModel>();
|
||||
qmlRegisterType<KWin::ScriptingClientModel::SimpleClientModel>("org.kde.kwin", 2, 0, "ClientModel");
|
||||
qmlRegisterType<KWin::ScriptingClientModel::ClientModelByScreen>("org.kde.kwin", 2, 0, "ClientModelByScreen");
|
||||
|
|
Loading…
Reference in a new issue