From 72b5d006baa3fd58a7e46b81fedb5c10a57a9988 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 20 Sep 2025 12:47:04 +0200 Subject: [PATCH] vertical bar: make tray tooltips not cut off --- .../quickshell/ii/modules/bar/SysTrayItem.qml | 3 +- .../modules/common/widgets/PopupToolTip.qml | 52 +++++++++++++++++++ .../common/widgets/StyledToolTipContent.qml | 14 +++-- 3 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 .config/quickshell/ii/modules/common/widgets/PopupToolTip.qml diff --git a/.config/quickshell/ii/modules/bar/SysTrayItem.qml b/.config/quickshell/ii/modules/bar/SysTrayItem.qml index 44323c3c5..1fe5df5f3 100644 --- a/.config/quickshell/ii/modules/bar/SysTrayItem.qml +++ b/.config/quickshell/ii/modules/bar/SysTrayItem.qml @@ -91,10 +91,11 @@ MouseArea { } } - StyledToolTip { + PopupToolTip { id: tooltip extraVisibleCondition: root.containsMouse alternativeVisibleCondition: extraVisibleCondition + anchorEdges: (!Config.options.bar.bottom && !Config.options.bar.vertical) ? Edges.Bottom : Edges.Top } } diff --git a/.config/quickshell/ii/modules/common/widgets/PopupToolTip.qml b/.config/quickshell/ii/modules/common/widgets/PopupToolTip.qml new file mode 100644 index 000000000..741b4556c --- /dev/null +++ b/.config/quickshell/ii/modules/common/widgets/PopupToolTip.qml @@ -0,0 +1,52 @@ +import qs.modules.common +import qs.modules.common.widgets +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Quickshell + +Item { + id: root + property string text: "" + property bool extraVisibleCondition: true + property bool alternativeVisibleCondition: false + property real horizontalPadding: 10 + property real verticalPadding: 5 + + property var anchorEdges: Edges.Top + property var anchorGravity: anchorEdges + + readonly property bool internalVisibleCondition: (extraVisibleCondition && (parent.hovered === undefined || parent?.hovered)) || alternativeVisibleCondition + + Loader { + id: tooltipLoader + anchors.fill: parent + active: internalVisibleCondition + sourceComponent: PopupWindow { + visible: true + anchor { + window: root.QsWindow.window + item: root.parent + edges: root.anchorEdges + gravity: root.anchorGravity + } + mask: Region { + item: null + } + + color: "transparent" + implicitWidth: contentItem.implicitWidth + root.horizontalPadding * 2 + implicitHeight: contentItem.implicitHeight + root.verticalPadding * 2 + + StyledToolTipContent { + id: contentItem + anchors.centerIn: parent + text: root.text + shown: false + Component.onCompleted: shown = true + horizontalPadding: root.horizontalPadding + verticalPadding: root.verticalPadding + } + } + } +} diff --git a/.config/quickshell/ii/modules/common/widgets/StyledToolTipContent.qml b/.config/quickshell/ii/modules/common/widgets/StyledToolTipContent.qml index 2d35cc6e6..9b08f9902 100644 --- a/.config/quickshell/ii/modules/common/widgets/StyledToolTipContent.qml +++ b/.config/quickshell/ii/modules/common/widgets/StyledToolTipContent.qml @@ -7,21 +7,25 @@ import QtQuick.Layouts Item { id: root required property string text - property bool shown: true + property bool shown: false property real horizontalPadding: 10 property real verticalPadding: 5 implicitWidth: tooltipTextObject.implicitWidth + 2 * root.horizontalPadding implicitHeight: tooltipTextObject.implicitHeight + 2 * root.verticalPadding + property bool isVisible: backgroundRectangle.implicitHeight > 0 + Rectangle { id: backgroundRectangle - anchors.bottom: root.bottom - anchors.horizontalCenter: root.horizontalCenter + anchors { + bottom: root.bottom + horizontalCenter: root.horizontalCenter + } color: Appearance?.colors.colTooltip ?? "#3C4043" radius: Appearance?.rounding.verysmall ?? 7 opacity: shown ? 1 : 0 - implicitWidth: shown ? (tooltipTextObject.implicitWidth + 2 * padding) : 0 - implicitHeight: shown ? (tooltipTextObject.implicitHeight + 2 * padding) : 0 + implicitWidth: shown ? (tooltipTextObject.implicitWidth + 2 * root.horizontalPadding) : 0 + implicitHeight: shown ? (tooltipTextObject.implicitHeight + 2 * root.verticalPadding) : 0 clip: true Behavior on implicitWidth {