File indexing completed on 2025-11-02 12:22:34
0001 /* 0002 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <kwinquickeffect.h> 0010 0011 namespace KWin 0012 { 0013 0014 class DesktopGridEffect : public QuickSceneEffect 0015 { 0016 Q_OBJECT 0017 Q_PROPERTY(int gridRows READ gridRows NOTIFY gridRowsChanged) 0018 Q_PROPERTY(int gridColumns READ gridColumns NOTIFY gridColumnsChanged) 0019 Q_PROPERTY(int animationDuration READ animationDuration NOTIFY animationDurationChanged) 0020 Q_PROPERTY(int layout READ layout NOTIFY layoutChanged) 0021 Q_PROPERTY(qreal partialActivationFactor READ partialActivationFactor NOTIFY partialActivationFactorChanged) 0022 Q_PROPERTY(bool gestureInProgress READ gestureInProgress NOTIFY gestureInProgressChanged) 0023 Q_PROPERTY(bool showAddRemove READ showAddRemove NOTIFY showAddRemoveChanged) 0024 Q_PROPERTY(Qt::AlignmentFlag desktopNameAlignment READ desktopNameAlignment NOTIFY desktopNameAlignmentChanged) 0025 Q_PROPERTY(DesktopLayoutMode desktopLayoutMode READ desktopLayoutMode NOTIFY desktopLayoutModeChanged) 0026 Q_PROPERTY(int customLayoutRows READ customLayoutRows NOTIFY customLayoutRowsChanged) 0027 0028 public: 0029 enum class DesktopLayoutMode { 0030 LayoutPager, 0031 LayoutAutomatic, 0032 LayoutCustom 0033 }; 0034 Q_ENUM(DesktopLayoutMode) 0035 0036 enum class Status { 0037 Inactive, 0038 Activating, 0039 Deactivating, 0040 Active 0041 }; 0042 0043 DesktopGridEffect(); 0044 ~DesktopGridEffect() override; 0045 0046 int layout() const; 0047 void setLayout(int layout); 0048 0049 int animationDuration() const; 0050 void setAnimationDuration(int duration); 0051 0052 bool showAddRemove() const; 0053 0054 qreal partialActivationFactor() const; 0055 void setPartialActivationFactor(qreal factor); 0056 0057 bool gestureInProgress() const; 0058 void setGestureInProgress(bool gesture); 0059 0060 int gridRows() const; 0061 int gridColumns() const; 0062 0063 int requestedEffectChainPosition() const override; 0064 bool borderActivated(ElectricBorder border) override; 0065 void reconfigure(ReconfigureFlags flags) override; 0066 void grabbedKeyboardEvent(QKeyEvent *keyEvent) override; 0067 0068 Qt::AlignmentFlag desktopNameAlignment() const; 0069 DesktopLayoutMode desktopLayoutMode() const; 0070 int customLayoutRows() const; 0071 0072 Q_INVOKABLE void addDesktop() const; 0073 Q_INVOKABLE void removeDesktop() const; 0074 Q_INVOKABLE void swapDesktops(int from, int to); 0075 0076 public Q_SLOTS: 0077 void activate(); 0078 void partialActivate(qreal factor); 0079 void cancelPartialActivate(); 0080 void partialDeactivate(qreal factor); 0081 void cancelPartialDeactivate(); 0082 void deactivate(int timeout); 0083 void toggle(); 0084 0085 protected: 0086 QVariantMap initialProperties(EffectScreen *screen) override; 0087 0088 Q_SIGNALS: 0089 void gridRowsChanged(); 0090 void gridColumnsChanged(); 0091 void animationDurationChanged(); 0092 void layoutChanged(); 0093 void partialActivationFactorChanged(); 0094 void gestureInProgressChanged(); 0095 void showAddRemoveChanged(); 0096 void desktopNameAlignmentChanged(); 0097 void desktopLayoutModeChanged(); 0098 void customLayoutRowsChanged(); 0099 0100 private: 0101 void realDeactivate(); 0102 0103 QTimer *m_shutdownTimer; 0104 qreal m_partialActivationFactor = 0; 0105 QAction *m_toggleAction = nullptr; 0106 QAction *m_realtimeToggleAction = nullptr; 0107 QList<QKeySequence> m_toggleShortcut; 0108 QList<ElectricBorder> m_borderActivate; 0109 QList<ElectricBorder> m_touchBorderActivate; 0110 Status m_status = Status::Inactive; 0111 int m_animationDuration = 400; 0112 int m_layout = 1; 0113 bool m_gestureInProgress = false; 0114 }; 0115 0116 } // namespace KWin