Warning, /plasma/plasma-workspace/applets/systemtray/package/contents/ui/PlasmoidPopupsContainer.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
0003
0004 SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick 2.15
0008 import QtQuick.Layouts 1.15
0009 import QtQuick.Controls 2.15
0010 import org.kde.plasma.components 3.0 as PlasmaComponents3
0011 import org.kde.kirigami 2.20 as Kirigami
0012 import org.kde.plasma.extras 2.0 as PlasmaExtras
0013 import org.kde.plasma.plasmoid 2.0
0014
0015 StackView {
0016 id: mainStack
0017 focus: true
0018
0019 Layout.minimumWidth: Kirigami.Units.gridUnit * 12
0020 Layout.minimumHeight: Kirigami.Units.gridUnit * 12
0021
0022 readonly property Item activeApplet: systemTrayState.activeApplet
0023
0024 /* Heading */
0025 property bool appletHasHeading: false
0026 property bool mergeHeadings: appletHasHeading && activeApplet.fullRepresentationItem.header.visible
0027 property int headingHeight: mergeHeadings ? activeApplet.fullRepresentationItem.header.height : 0
0028 /* Footer */
0029 property bool appletHasFooter: false
0030 property bool mergeFooters: appletHasFooter && activeApplet.fullRepresentationItem.footer.visible
0031 property int footerHeight: mergeFooters ? activeApplet.fullRepresentationItem.footer.height : 0
0032
0033 onActiveAppletChanged: {
0034 mainStack.appletHasHeading = false
0035 mainStack.appletHasFooter = false
0036
0037 if (activeApplet != null && activeApplet.fullRepresentationItem && !activeApplet.preferredRepresentation) {
0038 //reset any potential anchor
0039 activeApplet.fullRepresentationItem.anchors.left = undefined;
0040 activeApplet.fullRepresentationItem.anchors.top = undefined;
0041 activeApplet.fullRepresentationItem.anchors.right = undefined;
0042 activeApplet.fullRepresentationItem.anchors.bottom = undefined;
0043 activeApplet.fullRepresentationItem.anchors.centerIn = undefined;
0044 activeApplet.fullRepresentationItem.anchors.fill = undefined;
0045
0046 if (activeApplet.fullRepresentationItem instanceof PlasmaComponents3.Page ||
0047 activeApplet.fullRepresentationItem instanceof PlasmaExtras.Representation) {
0048 if (activeApplet.fullRepresentationItem.header && activeApplet.fullRepresentationItem.header instanceof PlasmaExtras.PlasmoidHeading) {
0049 mainStack.appletHasHeading = true
0050 activeApplet.fullRepresentationItem.header.background.visible = false
0051 }
0052 if (activeApplet.fullRepresentationItem.footer && activeApplet.fullRepresentationItem.footer instanceof PlasmaExtras.PlasmoidHeading) {
0053 mainStack.appletHasFooter = true
0054 activeApplet.fullRepresentationItem.footer.background.visible = false
0055 }
0056 }
0057
0058 let unFlipped = systemTrayState.oldVisualIndex < systemTrayState.newVisualIndex;
0059 if (Qt.application.layoutDirection !== Qt.LeftToRight) {
0060 unFlipped = !unFlipped;
0061 }
0062
0063 const isTransitionEnabled = systemTrayState.expanded;
0064 (mainStack.empty ? mainStack.push : mainStack.replace)(activeApplet.fullRepresentationItem, {
0065 "width": Qt.binding(() => mainStack.width),
0066 "height": Qt.binding(() => mainStack.height),
0067 "x": 0,
0068 "focus": Qt.binding(() => !mainStack.busy), // QTBUG-44043: retrigger binding after StackView is ready to restore focus
0069 "opacity": 1,
0070 "KeyNavigation.up": mainStack.KeyNavigation.up,
0071 "KeyNavigation.backtab": mainStack.KeyNavigation.backtab,
0072 }, isTransitionEnabled ? (unFlipped ? StackView.PushTransition : StackView.PopTransition) : StackView.Immediate);
0073 } else {
0074 mainStack.clear();
0075 }
0076 }
0077
0078 onCurrentItemChanged: {
0079 if (currentItem !== null && root.expanded) {
0080 currentItem.forceActiveFocus();
0081 }
0082 }
0083
0084 Connections {
0085 target: Plasmoid
0086 function onAppletRemoved(applet) {
0087 if (applet === systemTrayState.activeApplet) {
0088 mainStack.clear();
0089 }
0090 }
0091 }
0092 }