File indexing completed on 2024-04-28 16:49:27

0001 /*
0002 *  Copyright 2018  Michail Vourlakos <mvourlakos@gmail.com>
0003 *
0004 *  This file is part of Latte-Dock
0005 *
0006 *  Latte-Dock is free software; you can redistribute it and/or
0007 *  modify it under the terms of the GNU General Public License as
0008 *  published by the Free Software Foundation; either version 2 of
0009 *  the License, or (at your option) any later version.
0010 *
0011 *  Latte-Dock is distributed in the hope that it will be useful,
0012 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 *  GNU General Public License for more details.
0015 *
0016 *  You should have received a copy of the GNU General Public License
0017 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
0018 */
0019 
0020 #ifndef SECONDARYCONFIGVIEW_H
0021 #define SECONDARYCONFIGVIEW_H
0022 
0023 // local
0024 #include "../../wm/windowinfowrap.h"
0025 #include "../../../liblatte2/types.h"
0026 
0027 //Qt
0028 #include <QObject>
0029 #include <QQuickView>
0030 #include <QPointer>
0031 #include <QTimer>
0032 
0033 // Plasma
0034 #include <plasma/package.h>
0035 #include <Plasma/FrameSvg>
0036 
0037 namespace Plasma {
0038 class Applet;
0039 class Containment;
0040 class FrameSvg;
0041 class Types;
0042 }
0043 
0044 namespace KWayland {
0045 namespace Client {
0046 class PlasmaShellSurface;
0047 }
0048 }
0049 
0050 namespace Latte {
0051 class Corona;
0052 class View;
0053 }
0054 
0055 namespace Latte {
0056 namespace ViewPart {
0057 class PrimaryConfigView;
0058 }
0059 }
0060 
0061 namespace Latte {
0062 namespace ViewPart {
0063 
0064 class SecondaryConfigView : public QQuickView
0065 {
0066     Q_OBJECT
0067 
0068     Q_PROPERTY(Plasma::FrameSvg::EnabledBorders enabledBorders READ enabledBorders NOTIFY enabledBordersChanged)
0069 
0070 public:
0071     SecondaryConfigView(Latte::View *view, QWindow *parent);
0072     ~SecondaryConfigView() override;
0073 
0074     void init();
0075     void requestActivate();
0076     Qt::WindowFlags wFlags() const;
0077 
0078     QRect geometryWhenVisible() const;
0079 
0080     Plasma::FrameSvg::EnabledBorders enabledBorders() const;
0081 
0082 public slots:
0083     Q_INVOKABLE void hideConfigWindow();
0084     Q_INVOKABLE void syncGeometry();
0085     Q_INVOKABLE void updateEffects();
0086 
0087 signals:
0088     void enabledBordersChanged();
0089     void showSignal();
0090 
0091 protected:
0092     void showEvent(QShowEvent *ev) override;
0093     void focusOutEvent(QFocusEvent *ev) override;
0094     bool event(QEvent *e) override;
0095 
0096     void syncSlideEffect();
0097 
0098 private slots:
0099     void updateEnabledBorders();
0100 
0101 private:
0102     void setupWaylandIntegration();
0103 
0104     QRect m_geometryWhenVisible;
0105 
0106     QPointer<Latte::View> m_latteView;
0107     QPointer<PrimaryConfigView> m_parent;
0108     QTimer m_screenSyncTimer;
0109     QTimer m_thicknessSyncTimer;
0110     QList<QMetaObject::Connection> connections;
0111 
0112     Plasma::FrameSvg::EnabledBorders m_enabledBorders{Plasma::FrameSvg::AllBorders};
0113     //only for the mask on disabled compositing, not to actually paint
0114     Plasma::FrameSvg *m_background{nullptr};
0115 
0116     Latte::Corona *m_corona{nullptr};
0117     Latte::WindowSystem::WindowId m_waylandWindowId;
0118     KWayland::Client::PlasmaShellSurface *m_shellSurface{nullptr};
0119 };
0120 
0121 }
0122 }
0123 #endif //SECONDARYCONFIGVIEW_H
0124