Warning, /plasma/kdeplasma-addons/applets/grouping/package/contents/applet/CompactApplet.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org> 0003 * SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 import QtQuick 2.0 0008 import QtQuick.Layouts 1.1 0009 import QtQuick.Window 2.0 0010 0011 import org.kde.plasma.core as PlasmaCore 0012 import org.kde.kirigami 2.20 as Kirigami 0013 import org.kde.kquickcontrolsaddons 2.0 0014 import org.kde.plasma.plasmoid 0015 0016 PlasmaCore.ToolTipArea { 0017 id: root 0018 objectName: "org.kde.desktop-CompactApplet" 0019 anchors.fill: parent 0020 0021 icon: plasmoid.icon 0022 mainText: plasmoid.toolTipMainText 0023 subText: plasmoid.toolTipSubText 0024 location: plasmoid.location 0025 active: !plasmoidItem.expanded 0026 textFormat: plasmoid.toolTipTextFormat 0027 mainItem: plasmoid.toolTipItem ? plasmoid.toolTipItem : null 0028 property PlasmoidItem plasmoidItem 0029 0030 property Item fullRepresentation 0031 property Item compactRepresentation 0032 0033 onCompactRepresentationChanged: { 0034 if (compactRepresentation) { 0035 compactRepresentation.parent = root; 0036 compactRepresentation.anchors.fill = root; 0037 compactRepresentation.visible = true; 0038 } 0039 root.visible = true; 0040 } 0041 0042 onFullRepresentationChanged: { 0043 0044 if (!fullRepresentation) { 0045 return; 0046 } 0047 //if the fullRepresentation size was restored to a stored size, or if is dragged from the desktop, restore popup size 0048 if (fullRepresentation.width > 0) { 0049 popupWindow.mainItem.width = Qt.binding(function() { 0050 return fullRepresentation.width 0051 }) 0052 } else if (fullRepresentation.Layout && fullRepresentation.Layout.preferredWidth > 0) { 0053 popupWindow.mainItem.width = Qt.binding(function() { 0054 return fullRepresentation.Layout.preferredWidth 0055 }) 0056 } else if (fullRepresentation.implicitWidth > 0) { 0057 popupWindow.mainItem.width = Qt.binding(function() { 0058 return fullRepresentation.implicitWidth 0059 }) 0060 } else { 0061 popupWindow.mainItem.width = Qt.binding(function() { 0062 return Kirigami.Theme.gridUnit * 35 0063 }) 0064 } 0065 0066 if (fullRepresentation.height > 0) { 0067 popupWindow.mainItem.height = Qt.binding(function() { 0068 return fullRepresentation.height 0069 }) 0070 } else if (fullRepresentation.Layout && fullRepresentation.Layout.preferredHeight > 0) { 0071 popupWindow.mainItem.height = Qt.binding(function() { 0072 return fullRepresentation.Layout.preferredHeight 0073 }) 0074 } else if (fullRepresentation.implicitHeight > 0) { 0075 popupWindow.mainItem.height = Qt.binding(function() { 0076 return fullRepresentation.implicitHeight 0077 }) 0078 } else { 0079 popupWindow.mainItem.height = Qt.binding(function() { 0080 return Kirigami.Theme.gridUnit * 25 0081 }) 0082 } 0083 0084 fullRepresentation.parent = appletParent; 0085 fullRepresentation.anchors.fill = fullRepresentation.parent; 0086 } 0087 0088 Timer { 0089 id: expandedSync 0090 interval: 100 0091 onTriggered: plasmoidItem.expanded = popupWindow.visible; 0092 } 0093 0094 Connections { 0095 target: plasmoid.internalAction("configure") 0096 function onTriggered() { 0097 plasmoidItem.expanded = false 0098 } 0099 } 0100 0101 Connections { 0102 target: plasmoid 0103 function onContextualActionsAboutToShow() { 0104 root.hideToolTip() 0105 } 0106 } 0107 0108 PlasmaCore.Dialog { 0109 id: popupWindow 0110 objectName: "popupWindow" 0111 flags: Qt.WindowStaysOnTopHint 0112 visible: plasmoidItem.expanded && fullRepresentation 0113 visualParent: compactRepresentation ? compactRepresentation : null 0114 location: plasmoid.location 0115 hideOnWindowDeactivate: root.plasmoidItem.hideOnWindowDeactivate 0116 0117 property var oldStatus: PlasmaCore.Types.UnknownStatus 0118 0119 //It's a MouseEventListener to get all the events, so the eventfilter will be able to catch them 0120 mainItem: MouseEventListener { 0121 id: appletParent 0122 0123 focus: true 0124 0125 Keys.onEscapePressed: { 0126 plasmoidItem.expanded = false; 0127 } 0128 0129 LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft 0130 LayoutMirroring.childrenInherit: true 0131 0132 Layout.minimumWidth: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.minimumWidth : 0 0133 Layout.minimumHeight: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.minimumHeight: 0 0134 Layout.maximumWidth: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.maximumWidth : Infinity 0135 Layout.maximumHeight: (fullRepresentation && fullRepresentation.Layout) ? fullRepresentation.Layout.maximumHeight: Infinity 0136 0137 onActiveFocusChanged: { 0138 if (activeFocus && fullRepresentation) { 0139 fullRepresentation.forceActiveFocus() 0140 } 0141 } 0142 } 0143 0144 onVisibleChanged: { 0145 if (!visible) { 0146 expandedSync.restart(); 0147 plasmoid.status = oldStatus; 0148 } else { 0149 oldStatus = plasmoid.status; 0150 plasmoid.status = PlasmaCore.Types.RequiresAttentionStatus; 0151 // This call currently fails and complains at runtime: 0152 // QWindow::setWindowState: QWindow::setWindowState does not accept Qt::WindowActive 0153 popupWindow.requestActivate(); 0154 } 0155 } 0156 } 0157 }