diff --git a/shell/panelconfigview.h b/shell/panelconfigview.h --- a/shell/panelconfigview.h +++ b/shell/panelconfigview.h @@ -50,6 +50,7 @@ { Q_OBJECT Q_PROPERTY(PanelView::VisibilityMode visibilityMode READ visibilityMode WRITE setVisibilityMode NOTIFY visibilityModeChanged) + Q_PROPERTY(PanelView::OpacityMode opacityMode READ opacityMode WRITE setOpacityMode NOTIFY opacityModeChanged) Q_PROPERTY(Plasma::FrameSvg::EnabledBorders enabledBorders READ enabledBorders NOTIFY enabledBordersChanged) public: @@ -61,6 +62,9 @@ PanelView::VisibilityMode visibilityMode() const; void setVisibilityMode(PanelView::VisibilityMode mode); + PanelView::OpacityMode opacityMode() const; + void setOpacityMode(PanelView::OpacityMode mode); + Plasma::FrameSvg::EnabledBorders enabledBorders() const; protected: @@ -83,6 +87,7 @@ Q_SIGNALS: void visibilityModeChanged(); + void opacityModeChanged(); void enabledBordersChanged(); private: diff --git a/shell/panelconfigview.cpp b/shell/panelconfigview.cpp --- a/shell/panelconfigview.cpp +++ b/shell/panelconfigview.cpp @@ -290,6 +290,17 @@ return m_panelView->visibilityMode(); } +void PanelConfigView::setOpacityMode(PanelView::OpacityMode mode) +{ + m_panelView->setOpacityMode(mode); + emit opacityModeChanged(); +} + +PanelView::OpacityMode PanelConfigView::opacityMode() const +{ + return m_panelView->opacityMode(); +} + Plasma::FrameSvg::EnabledBorders PanelConfigView::enabledBorders() const { return m_enabledBorders; diff --git a/shell/panelview.h b/shell/panelview.h --- a/shell/panelview.h +++ b/shell/panelview.h @@ -100,6 +100,13 @@ */ Q_PROPERTY(VisibilityMode visibilityMode READ visibilityMode WRITE setVisibilityMode NOTIFY visibilityModeChanged) + /** + * Property that determines how a panel's opacity behaves. + * + * @see OpacityMode + */ + Q_PROPERTY(OpacityMode opacityMode READ opacityMode WRITE setOpacityMode NOTIFY opacityModeChanged) + public: enum VisibilityMode { @@ -110,6 +117,14 @@ }; Q_ENUM(VisibilityMode) + /** Enumeration of possible opacity modes. */ + enum OpacityMode { + Adaptive = 0, /** The panel will change opacity depending on the presence of a maximized window */ + Opaque, /** The panel will always be opaque */ + Translucent /** The panel will always be translucent */ + }; + Q_ENUM(OpacityMode) + explicit PanelView(ShellCorona *corona, QScreen *targetScreen = nullptr, QWindow *parent = nullptr); ~PanelView() override; @@ -148,6 +163,9 @@ VisibilityMode visibilityMode() const; void setVisibilityMode(PanelView::VisibilityMode mode); + PanelView::OpacityMode opacityMode() const; + void setOpacityMode(PanelView::OpacityMode mode); + /** * @returns the geometry of the panel given a distance */ @@ -186,6 +204,7 @@ //QWindow does not have a property for screen. Adding this property requires re-implementing the signal void screenToFollowChanged(QScreen *screen); void visibilityModeChanged(); + void opacityModeChanged(); protected Q_SLOTS: /** @@ -231,6 +250,7 @@ ShellCorona *m_corona; QTimer m_strutsTimer; VisibilityMode m_visibilityMode; + OpacityMode m_opacityMode; Plasma::Theme m_theme; QTimer m_positionPaneltimer; QTimer m_unhideTimer; diff --git a/shell/panelview.cpp b/shell/panelview.cpp --- a/shell/panelview.cpp +++ b/shell/panelview.cpp @@ -66,6 +66,7 @@ m_alignment(Qt::AlignLeft), m_corona(corona), m_visibilityMode(NormalPanel), + m_opacityMode(Adaptive), m_backgroundHints(Plasma::Types::StandardBackground), m_shellSurface(nullptr) { @@ -411,6 +412,23 @@ return m_visibilityMode; } +PanelView::OpacityMode PanelView::opacityMode() const +{ + return m_opacityMode; +} + +void PanelView::setOpacityMode(PanelView::OpacityMode mode) +{ + if (m_opacityMode != mode) { + m_opacityMode = mode; + if (config().isValid() && config().parent().isValid()) { + config().parent().writeEntry("panelOpacity", (int)mode); + m_corona->requestApplicationConfigSync(); + } + emit opacityModeChanged(); + } +} + void PanelView::positionPanel() { if (!containment()) { @@ -601,6 +619,7 @@ //the place for this config key is changed in Plasma 5.9 //Do NOT use readConfigValueWithFallBack setVisibilityMode((VisibilityMode)config().parent().readEntry("panelVisibility", config().readEntry("panelVisibility", (int)NormalPanel))); + setOpacityMode((OpacityMode)config().parent().readEntry("panelOpacity", config().readEntry("panelOpacity", (int)Adaptive))); m_initCompleted = true; resizePanel(); positionPanel();