Warning, /plasma/latte-dock/declarativeimports/abilities/host/ThinTooltip.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
0003 SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005
0006 import QtQuick 2.7
0007 import QtQuick.Layouts 1.1
0008 import QtQuick.Window 2.2
0009
0010 import org.kde.plasma.plasmoid 2.0
0011 import org.kde.plasma.components 2.0 as PlasmaComponents
0012 import org.kde.plasma.core 2.0 as PlasmaCore
0013
0014 import org.kde.latte.core 0.2 as LatteCore
0015 import org.kde.latte.abilities.definition 0.1 as AbilityDefinition
0016
0017 AbilityDefinition.ThinTooltip {
0018 id: _thinTooltip
0019 property Item debug: null
0020
0021 readonly property int maxCharacters: 80
0022
0023 property Item lastHidingVisualParent: null
0024
0025 //! Public API
0026 readonly property Item publicApi: Item {
0027 readonly property alias isEnabled: _thinTooltip.isEnabled
0028 readonly property alias currentText: _thinTooltip.currentText
0029 readonly property alias currentVisualParent: _thinTooltip.currentVisualParent
0030
0031 function show(visualParent, text) {
0032 _thinTooltip.show(visualParent, text);
0033 }
0034
0035 function hide(visualParent) {
0036 _thinTooltip.hide(visualParent);
0037 }
0038 }
0039
0040 //! Private Implementation
0041
0042 onShowIsBlockedChanged: {
0043 if (isEnabled && !showIsBlocked && !_tooltipDialog.visible && _thinTooltip.currentVisualParent) {
0044 _hideTimer.stop();
0045 _tooltipDialog.visible = true;
0046 } else if (showIsBlocked && _tooltipDialog.visible) {
0047 _tooltipDialog.visible = false;
0048 }
0049 }
0050
0051 function show(visualParent, text) {
0052 if (!isEnabled || showIsBlocked) {
0053 _hideTimer.stop();
0054 _showTimer.stop();
0055 _tooltipDialog.visible = false;
0056 //disabling because we need to updated currentvisualparent even when tooltip is blocked
0057 //for example when triggering a different applet popup
0058 //return;
0059 }
0060
0061 _hideTimer.stop();
0062 _thinTooltip.currentVisualParent = visualParent;
0063 _tooltipDialog.visualParent = visualParent;
0064
0065 var fixedDisplayText = text.length>maxCharacters ? text.substring(0,maxCharacters-1) + "..." : text;
0066 _thinTooltip.currentText = fixedDisplayText;
0067
0068 if (!_tooltipDialog.visible && !showIsBlocked) {
0069 _showTimer.start();
0070 }
0071 }
0072
0073 function hide(visualParent) {
0074 if (_thinTooltip.currentVisualParent === visualParent) {
0075 _thinTooltip.lastHidingVisualParent = visualParent;
0076 _showTimer.stop();
0077 _hideTimer.start();
0078 }
0079 }
0080
0081 //! Show Delayer Timer
0082 Timer {
0083 id: _showTimer
0084 interval: 100
0085 onTriggered: {
0086 if (_thinTooltip.currentVisualParent) {
0087 _tooltipDialog.visible = true;
0088 }
0089
0090 if (debug && debug.timersEnabled) {
0091 console.log("ThinTooltip host timer: show() called...");
0092 }
0093 }
0094 }
0095
0096 //! Hide Delayer Timer
0097 Timer {
0098 id: _hideTimer
0099 interval: 100
0100 onTriggered: {
0101 if (_thinTooltip.lastHidingVisualParent === _thinTooltip.currentVisualParent) {
0102 _tooltipDialog.visible = false;
0103 _thinTooltip.lastHidingVisualParent = null;
0104 _thinTooltip.currentVisualParent = null;
0105 _thinTooltip.currentText = "";
0106 }
0107
0108 if (debug && debug.timersEnabled) {
0109 console.log("ThinTooltip host timer: hide() called...");
0110 }
0111 }
0112 }
0113
0114 LatteCore.Dialog{
0115 id: _tooltipDialog
0116 type: PlasmaCore.Dialog.Tooltip
0117 flags: Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus | Qt.ToolTip
0118
0119 location: plasmoid.location
0120 edge: plasmoid.location
0121 mainItem: RowLayout{
0122 Layout.fillWidth: true
0123 Layout.fillHeight: true
0124 PlasmaComponents.Label{
0125 Layout.leftMargin: 4
0126 Layout.rightMargin: 4
0127 Layout.topMargin: 2
0128 Layout.bottomMargin: 2
0129 text: _thinTooltip.currentText
0130 }
0131 }
0132
0133 visible: false
0134 }
0135 }