Warning, /plasma/plasma-desktop/applets/kickoff/package/contents/ui/ActionMenu.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org> 0003 SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org> 0004 SPDX-FileCopyrightText: 2021 Mikel Johnson <mikel5764@gmail.com> 0005 SPDX-FileCopyrightText: 2021 Noah Davis <noahadvs@gmail.com> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 pragma Singleton // NOTE: Singletons are shared between all instances of a plasmoid 0011 0012 import QtQuick 2.15 0013 import org.kde.plasma.core as PlasmaCore 0014 import org.kde.plasma.plasmoid 2.0 0015 import org.kde.plasma.extras 2.0 as PlasmaExtras 0016 import "code/tools.js" as Tools 0017 0018 Item { 0019 id: root 0020 0021 property var actionList: null 0022 0023 // Only one action menu can be open at a time, so this should be safe to use. 0024 property PlasmoidItem plasmoid: null 0025 0026 // Not a QQC1 Menu. It's actually a custom QObject that uses a QMenu. 0027 readonly property PlasmaExtras.Menu menu: PlasmaExtras.Menu { 0028 id: menu 0029 0030 visualParent: null 0031 placement: PlasmaExtras.Menu.BottomPosedLeftAlignedPopup 0032 } 0033 0034 visible: false 0035 0036 Instantiator { 0037 active: root.actionList !== null 0038 model: root.actionList 0039 delegate: menuItemComponent 0040 onObjectAdded: (index, object) => menu.addMenuItem(object) 0041 onObjectRemoved: (index, object) => menu.removeMenuItem(object) 0042 } 0043 0044 Component { 0045 id: menuComponent 0046 0047 PlasmaExtras.Menu {} 0048 } 0049 0050 Component { 0051 id: menuItemComponent 0052 0053 PlasmaExtras.MenuItem { 0054 id: menuItem 0055 0056 required property var modelData 0057 property PlasmaExtras.Menu subMenu: modelData.subActions 0058 ? menuComponent.createObject(menuItem, { visualParent: menuItem.action }) 0059 : null 0060 0061 text: modelData.text ? modelData.text : "" 0062 enabled: modelData.type !== "title" && ("enabled" in modelData ? modelData.enabled : true) 0063 separator: modelData.type === "separator" 0064 section: modelData.type === "title" 0065 icon: modelData.icon ? modelData.icon : null 0066 checkable: modelData.hasOwnProperty("checkable") ? modelData.checkable : false 0067 checked: modelData.hasOwnProperty("checked") ? modelData.checked : false 0068 0069 property Instantiator _instantiator: Instantiator { 0070 active: menuItem.subMenu !== null 0071 model: modelData.subActions 0072 delegate: menuItemComponent 0073 onObjectAdded: (index, object) => subMenu.addMenuItem(object) 0074 onObjectRemoved: (index, object) => subMenu.removeMenuItem(object) 0075 } 0076 0077 onClicked: { 0078 const modelActionTriggered = Tools.triggerAction( 0079 menu.visualParent.view.model, 0080 menu.visualParent.index, 0081 modelData.actionId, 0082 modelData.actionArgument 0083 ) 0084 if (modelActionTriggered) { 0085 kickoff.expanded = false 0086 } 0087 } 0088 } 0089 } 0090 }