Improve the code of the actions in the plasmoid heading
This patch fixes an issue where actions remain disabled after changing its visibility off/on by filtering actions and creating menu items for visible actions only. It also slightly improves the code.
This commit is contained in:
parent
7901e48523
commit
ead37fb5db
@ -46,31 +46,8 @@ PlasmoidHeading {
|
||||
id: actionsButton
|
||||
visible: visibleActions > 0 && !(plasmoid.containmentDisplayHints & PlasmaCore.Types.ContainmentDrawsPlasmoidHeading)
|
||||
checked: configMenu.status !== PC2.DialogStatus.Closed
|
||||
property int visibleActions: 0
|
||||
property QtObject singleAction
|
||||
|
||||
Component.onCompleted: updateVisibleActions()
|
||||
function updateVisibleActions() {
|
||||
let newSingleAction = null;
|
||||
let newVisibleActions = 0;
|
||||
for (let i in plasmoid.contextualActions) {
|
||||
let action = plasmoid.contextualActions[i];
|
||||
if (action.visible && action !== plasmoid.action("configure")) {
|
||||
newVisibleActions++;
|
||||
newSingleAction = action;
|
||||
action.changed.connect(() => {updateVisibleActions()});
|
||||
}
|
||||
}
|
||||
if (newVisibleActions > 1) {
|
||||
newSingleAction = null;
|
||||
}
|
||||
visibleActions = newVisibleActions;
|
||||
singleAction = newSingleAction;
|
||||
}
|
||||
Connections {
|
||||
target: plasmoid
|
||||
function onContextualActionsChanged() {updateVisibleActions();}
|
||||
}
|
||||
property int visibleActions: menuItemFactory.count
|
||||
property QtObject singleAction: visibleActions === 1 ? menuItemFactory.object.action : null
|
||||
icon.name: "application-menu"
|
||||
checkable: visibleActions > 1
|
||||
contentItem.opacity: visibleActions > 1
|
||||
@ -106,18 +83,27 @@ PlasmoidHeading {
|
||||
}
|
||||
|
||||
Instantiator {
|
||||
model: plasmoid.contextualActions
|
||||
id: menuItemFactory
|
||||
model: {
|
||||
configMenu.clearMenuItems();
|
||||
let actions = [];
|
||||
for (let i in plasmoid.contextualActions) {
|
||||
const action = plasmoid.contextualActions[i];
|
||||
if (action.visible && action !== plasmoid.action("configure")) {
|
||||
actions.push(action);
|
||||
}
|
||||
}
|
||||
return actions;
|
||||
}
|
||||
delegate: PC2.MenuItem {
|
||||
id: menuItem
|
||||
action: modelData
|
||||
}
|
||||
onObjectAdded: {
|
||||
if (object.action !== plasmoid.action("configure")) {
|
||||
configMenu.addMenuItem(object);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
PlasmaComponents.ToolButton {
|
||||
icon.name: "configure"
|
||||
visible: plasmoid && plasmoid.action("configure") && !(plasmoid.containmentDisplayHints & PlasmaCore.Types.ContainmentDrawsPlasmoidHeading)
|
||||
|
Loading…
Reference in New Issue
Block a user