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)
}
function hideOwnTooltip() {
if (root.bar) root.bar.hideTooltip(root)
}
function syncClickRegistration() {
if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root)
registeredBar = root.bar
@@ -41,6 +45,9 @@ Item {
}
onBarChanged: syncClickRegistration()
onVisibleChanged: if (!visible) hideOwnTooltip()
onInteractiveChanged: if (!interactive) hideOwnTooltip()
onConcealedChanged: if (concealed) hideOwnTooltip()
Component.onCompleted: syncClickRegistration()
Component.onDestruction: if (registeredBar && registeredBar.unregisterClickTarget) registeredBar.unregisterClickTarget(root)
+31 -6
View File
@@ -58,8 +58,11 @@ Item {
property bool updateAvailable: false
property bool clockAlt: false
property var tooltipTarget: null
property var pendingTooltipTarget: null
property string tooltipText: ""
property string pendingTooltipText: ""
property bool tooltipShown: false
property int tooltipRequest: 0
property var activePopout: null
property var clickTargets: []
property bool indicatorAreaHovered: false
@@ -385,18 +388,40 @@ Item {
}
function showTooltip(target, text) {
if (!text) return
tooltipTarget = target
tooltipText = text
tooltipTimer.stop()
tooltipTarget = null
tooltipText = ""
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) {
if (tooltipTarget !== target) return
if (tooltipTarget !== target && pendingTooltipTarget !== target) return
tooltipTimer.stop()
tooltipRequest += 1
pendingTooltipTarget = null
pendingTooltipText = ""
tooltipTarget = null
tooltipText = ""
tooltipShown = false