diff --git a/shell/modules/BacklightModule.qml b/shell/modules/BacklightModule.qml index 67ab22f..d3e0b5b 100644 --- a/shell/modules/BacklightModule.qml +++ b/shell/modules/BacklightModule.qml @@ -4,17 +4,15 @@ import "." as M import "../services" as S import "../applets" as C -M.BarSection { +M.OsdSection { id: root spacing: S.Theme.moduleSpacing opacity: S.Modules.backlight.enable && S.BacklightService.available ? 1 : 0 visible: opacity > 0 - tooltip: "" + _panelHovered: hoverPanel.panelHovered property int percent: S.BacklightService.percent - property bool _osdActive: false property bool _percentInit: false - readonly property bool _showPanel: root._hovered || hoverPanel.panelHovered || _osdActive onPercentChanged: { if (!_percentInit) { @@ -22,18 +20,7 @@ M.BarSection { return; } if (percent > 0) - _flashPanel(); - } - - function _flashPanel() { - _osdActive = true; - _osdTimer.restart(); - } - - Timer { - id: _osdTimer - interval: 1500 - onTriggered: root._osdActive = false + flashPanel(); } WheelHandler { diff --git a/shell/modules/OsdSection.qml b/shell/modules/OsdSection.qml new file mode 100644 index 0000000..bfddde8 --- /dev/null +++ b/shell/modules/OsdSection.qml @@ -0,0 +1,25 @@ +import QtQuick + +// Base component for bar modules with OSD flash behavior (Volume, Backlight). +// Panel shows on hover or when flashPanel() is called, auto-dismisses after 1.5s. +// Modules bind _panelHovered to their HoverPanel's panelHovered property. +BarSection { + id: root + tooltip: "" + + property bool _panelHovered: false + property bool _osdActive: false + readonly property bool _anyHover: root._hovered || _panelHovered + readonly property bool _showPanel: _anyHover || _osdActive + + function flashPanel() { + _osdActive = true; + _osdTimer.restart(); + } + + Timer { + id: _osdTimer + interval: 1500 + onTriggered: root._osdActive = false + } +} diff --git a/shell/modules/VolumeModule.qml b/shell/modules/VolumeModule.qml index 8ce6ac8..ed193bc 100644 --- a/shell/modules/VolumeModule.qml +++ b/shell/modules/VolumeModule.qml @@ -5,10 +5,10 @@ import "." as M import "../services" as S import "../applets" as C -M.BarSection { +M.OsdSection { id: root spacing: S.Theme.moduleSpacing - tooltip: "" + _panelHovered: hoverPanel.panelHovered PwObjectTracker { objects: [Pipewire.defaultAudioSink, ...root._streamList] @@ -40,36 +40,22 @@ M.BarSection { return streams; } - property bool _osdActive: false property bool _volumeInit: false property bool _mutedInit: false - readonly property bool _anyHover: root._hovered || hoverPanel.panelHovered - readonly property bool _showPanel: _anyHover || _osdActive onVolumeChanged: { if (!_volumeInit) { _volumeInit = true; return; } - _flashPanel(); + flashPanel(); } onMutedChanged: { if (!_mutedInit) { _mutedInit = true; return; } - _flashPanel(); - } - - function _flashPanel() { - _osdActive = true; - _osdTimer.restart(); - } - - Timer { - id: _osdTimer - interval: 1500 - onTriggered: root._osdActive = false + flashPanel(); } M.BarIcon { diff --git a/shell/modules/qmldir b/shell/modules/qmldir index 8d09375..a7934b5 100644 --- a/shell/modules/qmldir +++ b/shell/modules/qmldir @@ -22,6 +22,7 @@ NetworkModule 1.0 NetworkModule.qml NotifCard 1.0 NotifCard.qml NotifPopup 1.0 NotifPopup.qml NotificationsModule 1.0 NotificationsModule.qml +OsdSection 1.0 OsdSection.qml OverviewBackdrop 1.0 OverviewBackdrop.qml PinnableSection 1.0 PinnableSection.qml PopupBackground 1.0 PopupBackground.qml