File indexing completed on 2025-03-16 11:21:22
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #pragma once 0010 0011 #include <QObject> 0012 #include <kwinglobals.h> 0013 0014 class QAction; 0015 0016 namespace KWin 0017 { 0018 0019 /** 0020 * @brief Qml export for reserving a Screen Edge. 0021 * 0022 * The edge is controlled by the @c enabled property and the @c edge 0023 * property. If the edge is enabled and gets triggered the @ref activated() 0024 * signal gets emitted. 0025 * 0026 * Example usage: 0027 * @code 0028 * ScreenEdgeItem { 0029 * edge: ScreenEdgeItem.LeftEdge 0030 * onActivated: doSomething() 0031 * } 0032 * @endcode 0033 */ 0034 class ScreenEdgeItem : public QObject 0035 { 0036 Q_OBJECT 0037 /** 0038 * @brief Whether the edge is currently enabled, that is reserved. Default value is @c true. 0039 */ 0040 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) 0041 /** 0042 * @brief Which of the screen edges is to be reserved. Default value is @c NoEdge. 0043 */ 0044 Q_PROPERTY(Edge edge READ edge WRITE setEdge NOTIFY edgeChanged) 0045 /** 0046 * @brief The operation mode for this edge. Default value is @c Mode::Pointer 0047 */ 0048 Q_PROPERTY(Mode mode READ mode WRITE setMode NOTIFY modeChanged) 0049 public: 0050 enum Edge { 0051 TopEdge, 0052 TopRightEdge, 0053 RightEdge, 0054 BottomRightEdge, 0055 BottomEdge, 0056 BottomLeftEdge, 0057 LeftEdge, 0058 TopLeftEdge, 0059 EDGE_COUNT, 0060 NoEdge 0061 }; 0062 Q_ENUM(Edge) 0063 /** 0064 * Enum describing the operation modes of the edge. 0065 */ 0066 enum class Mode { 0067 Pointer, 0068 Touch 0069 }; 0070 Q_ENUM(Mode) 0071 explicit ScreenEdgeItem(QObject *parent = nullptr); 0072 ~ScreenEdgeItem() override; 0073 bool isEnabled() const; 0074 Edge edge() const; 0075 Mode mode() const 0076 { 0077 return m_mode; 0078 } 0079 0080 public Q_SLOTS: 0081 void setEnabled(bool enabled); 0082 void setEdge(Edge edge); 0083 void setMode(Mode mode); 0084 0085 Q_SIGNALS: 0086 void enabledChanged(); 0087 void edgeChanged(); 0088 void modeChanged(); 0089 0090 void activated(); 0091 0092 private Q_SLOTS: 0093 bool borderActivated(ElectricBorder edge); 0094 0095 private: 0096 void enableEdge(); 0097 void disableEdge(); 0098 bool m_enabled; 0099 Edge m_edge; 0100 Mode m_mode = Mode::Pointer; 0101 QAction *m_action; 0102 }; 0103 0104 inline bool ScreenEdgeItem::isEnabled() const 0105 { 0106 return m_enabled; 0107 } 0108 0109 inline ScreenEdgeItem::Edge ScreenEdgeItem::edge() const 0110 { 0111 return m_edge; 0112 } 0113 0114 } // namespace KWin