File indexing completed on 2024-06-09 05:30:57

0001 /*
0002     SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <Plasma/Theme>
0010 
0011 #include <QQuickItem>
0012 #include <QQuickWindow>
0013 
0014 namespace KWayland::Client
0015 {
0016 class PlasmaShell;
0017 }
0018 
0019 class DashboardWindow : public QQuickWindow
0020 {
0021     Q_OBJECT
0022 
0023     Q_PROPERTY(QQuickItem *mainItem READ mainItem WRITE setMainItem NOTIFY mainItemChanged)
0024     Q_PROPERTY(QQuickItem *visualParent READ visualParent WRITE setVisualParent NOTIFY visualParentChanged)
0025     Q_PROPERTY(QQuickItem *keyEventProxy READ keyEventProxy WRITE setKeyEventProxy NOTIFY keyEventProxyChanged)
0026     Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
0027 
0028     Q_CLASSINFO("DefaultProperty", "mainItem")
0029 
0030 public:
0031     explicit DashboardWindow(QQuickItem *parent = nullptr);
0032     ~DashboardWindow() override;
0033 
0034     QQuickItem *mainItem() const;
0035     void setMainItem(QQuickItem *item);
0036 
0037     QQuickItem *visualParent() const;
0038     void setVisualParent(QQuickItem *item);
0039 
0040     QQuickItem *keyEventProxy() const;
0041     void setKeyEventProxy(QQuickItem *item);
0042 
0043     QColor backgroundColor() const;
0044     void setBackgroundColor(const QColor &color);
0045 
0046     Q_INVOKABLE void toggle();
0047 
0048 Q_SIGNALS:
0049     void mainItemChanged() const;
0050     void visualParentChanged() const;
0051     void keyEventProxyChanged() const;
0052     void backgroundColorChanged() const;
0053     void keyEscapePressed() const;
0054 
0055 private Q_SLOTS:
0056     void updateTheme();
0057     void visualParentWindowChanged(QQuickWindow *window);
0058     void visualParentScreenChanged(QScreen *screen);
0059 
0060 protected:
0061     bool event(QEvent *event) override;
0062     void keyPressEvent(QKeyEvent *e) override;
0063 
0064 private:
0065     QQuickItem *m_mainItem;
0066     QPointer<QQuickItem> m_visualParentItem;
0067     QPointer<QQuickWindow> m_visualParentWindow;
0068     QPointer<QQuickItem> m_keyEventProxy;
0069     KWayland::Client::PlasmaShell *m_plasmashell = nullptr;
0070     Plasma::Theme m_theme;
0071 };