Bar vs Dock: Dock are loaded only once the bar is fully loaded. This ensure the vertical bar use the full screen height if the dock is exclusive.

This commit is contained in:
ItsLemmy
2025-09-28 16:39:23 -04:00
parent 5da474007e
commit 072d80e2f3
3 changed files with 40 additions and 6 deletions
+6
View File
@@ -55,6 +55,12 @@ Variants {
right: Settings.data.bar.floating && Settings.data.bar.position !== "left" ? Settings.data.bar.marginHorizontal * Style.marginXL * scaling : 0
}
Component.onCompleted: {
if (modelData && modelData.name) {
BarService.registerBar(modelData.name)
}
}
Item {
anchors.fill: parent
clip: true
+13 -2
View File
@@ -14,8 +14,19 @@ Variants {
delegate: Item {
id: root
required property ShellScreen modelData
property real scaling: ScalingService.getScreenScale(modelData)
property bool barIsReady: BarService.isBarReady(modelData.name)
Connections {
target: BarService
function onBarReadyChanged(screenName) {
if (screenName === modelData.name) {
barIsReady = true
}
}
}
Connections {
target: ScalingService
@@ -187,7 +198,7 @@ Variants {
// PEEK WINDOW - Always visible when auto-hide is enabled
Loader {
active: Settings.isLoaded && modelData && Settings.data.dock.monitors.includes(modelData.name) && autoHide
active: Settings.isLoaded && barIsReady && modelData && Settings.data.dock.monitors.includes(modelData.name) && autoHide
sourceComponent: PanelWindow {
id: peekWindow
@@ -233,7 +244,7 @@ Variants {
// DOCK WINDOW
Loader {
active: Settings.isLoaded && modelData && Settings.data.dock.monitors.includes(modelData.name) && dockLoaded && ToplevelManager && (dockApps.length > 0)
active: Settings.isLoaded && barIsReady && modelData && Settings.data.dock.monitors.includes(modelData.name) && dockLoaded && ToplevelManager && (dockApps.length > 0)
sourceComponent: PanelWindow {
id: dockWindow
+21 -4
View File
@@ -9,6 +9,13 @@ Singleton {
property bool hasAudioVisualizer: false
property bool isVisible: true
property var readyBars: ({})
// Registry to store actual widget instances
// Key format: "screenName|section|widgetId|index"
property var widgetInstances: ({})
signal barReadyChanged(string screenName)
// Simple timer that run once when the widget structure has changed
// and determine if any MediaMini widget has the visualizer on
@@ -28,14 +35,24 @@ Singleton {
}
}
// Registry to store actual widget instances
// Key format: "screenName|section|widgetId|index"
property var widgetInstances: ({})
Component.onCompleted: {
Logger.log("BarService", "Service started")
}
// Function for the Bar to call when it's ready
function registerBar(screenName) {
if (!readyBars[screenName]) {
readyBars[screenName] = true
console.log("ShellStateService: Bar on screen '" + screenName + "' is ready.")
barReadyChanged(screenName)
}
}
// Function for the Dock to check if the bar is ready
function isBarReady(screenName) {
return readyBars[screenName] || false
}
// Register a widget instance
function registerWidget(screenName, section, widgetId, index, instance) {
const key = [screenName, section, widgetId, index].join("|")