File indexing completed on 2024-05-19 05:32:23

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 "effect/globals.h"
0012 #include <QObject>
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  * ScreenEdgeHandler {
0029  *     edge: ScreenEdgeHandler.LeftEdge
0030  *     onActivated: doSomething()
0031  * }
0032  * @endcode
0033  */
0034 class ScreenEdgeHandler : 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 ScreenEdgeHandler(QObject *parent = nullptr);
0072     ~ScreenEdgeHandler() 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 ScreenEdgeHandler::isEnabled() const
0105 {
0106     return m_enabled;
0107 }
0108 
0109 inline ScreenEdgeHandler::Edge ScreenEdgeHandler::edge() const
0110 {
0111     return m_edge;
0112 }
0113 
0114 } // namespace KWin