Prevent stacked bar tooltips

This commit is contained in:
David Heinemeier Hansson
2026-05-20 15:43:21 +02:00
parent 9e48d9658b
commit b22b0f8640
2 changed files with 38 additions and 6 deletions
+7
View File
@@ -34,6 +34,10 @@ Item {
root.pressed(button) root.pressed(button)
} }
function hideOwnTooltip() {
if (root.bar) root.bar.hideTooltip(root)
}
function syncClickRegistration() { function syncClickRegistration() {
if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root) if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root)
registeredBar = root.bar registeredBar = root.bar
@@ -41,6 +45,9 @@ Item {
} }
onBarChanged: syncClickRegistration() onBarChanged: syncClickRegistration()
onVisibleChanged: if (!visible) hideOwnTooltip()
onInteractiveChanged: if (!interactive) hideOwnTooltip()
onConcealedChanged: if (concealed) hideOwnTooltip()
Component.onCompleted: syncClickRegistration() Component.onCompleted: syncClickRegistration()
Component.onDestruction: if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root) Component.onDestruction: if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root)
+31 -6
View File
@@ -58,8 +58,11 @@ Item {
property bool updateAvailable: false property bool updateAvailable: false
property bool clockAlt: false property bool clockAlt: false
property var tooltipTarget: null property var tooltipTarget: null
property var pendingTooltipTarget: null
property string tooltipText: "" property string tooltipText: ""
property string pendingTooltipText: ""
property bool tooltipShown: false property bool tooltipShown: false
property int tooltipRequest: 0
property var activePopout: null property var activePopout: null
property var clickTargets: [] property var clickTargets: []
property bool indicatorAreaHovered: false property bool indicatorAreaHovered: false
@@ -385,18 +388,40 @@ Item {
} }
function showTooltip(target, text) { function showTooltip(target, text) {
if (!text) return tooltipTimer.stop()
tooltipTarget = null
tooltipTarget = target tooltipText = ""
tooltipText = text
tooltipShown = false tooltipShown = false
tooltipTimer.restart()
if (!target || !text) {
pendingTooltipTarget = null
pendingTooltipText = ""
tooltipRequest += 1
return
}
var request = tooltipRequest + 1
tooltipRequest = request
pendingTooltipTarget = target
pendingTooltipText = text
Qt.callLater(function() {
if (request !== tooltipRequest) return
tooltipTarget = pendingTooltipTarget
tooltipText = pendingTooltipText
pendingTooltipTarget = null
pendingTooltipText = ""
tooltipTimer.restart()
})
} }
function hideTooltip(target) { function hideTooltip(target) {
if (tooltipTarget !== target) return if (tooltipTarget !== target && pendingTooltipTarget !== target) return
tooltipTimer.stop() tooltipTimer.stop()
tooltipRequest += 1
pendingTooltipTarget = null
pendingTooltipText = ""
tooltipTarget = null tooltipTarget = null
tooltipText = "" tooltipText = ""
tooltipShown = false tooltipShown = false