diff --git a/applets/taskmanager/package/contents/ui/ContextMenu.qml b/applets/taskmanager/package/contents/ui/ContextMenu.qml --- a/applets/taskmanager/package/contents/ui/ContextMenu.qml +++ b/applets/taskmanager/package/contents/ui/ContextMenu.qml @@ -44,7 +44,8 @@ onStatusChanged: { if (visualParent && visualParent.m.LauncherUrlWithoutIcon != null && status == PlasmaComponents.DialogStatus.Open) { - launcherToggleAction.checked = (tasksModel.launcherPosition(visualParent.m.LauncherUrlWithoutIcon) != -1); + activitiesDesktopsMenu.refresh(); + } else if (status == PlasmaComponents.DialogStatus.Closed) { menu.destroy(); } @@ -392,22 +393,85 @@ } PlasmaComponents.MenuItem { - id: launcherToggleAction + id: showLauncherInActivitiesItem - visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable + text: i18n("&Show A Launcher When Not Running") - enabled: visualParent && visualParent.m.LauncherUrlWithoutIcon != "" + Connections { + target: activityInfo - checkable: true + onNumberOfRunningActivitiesChanged: activitiesDesktopsMenu.refresh() + } - text: i18n("&Show A Launcher When Not Running") + PlasmaComponents.ContextMenu { + id: activitiesLaunchersMenu + visualParent: showLauncherInActivitiesItem.action + + function refresh() { + clearMenuItems(); + + var createNewItem = function(id, title, url, activities) { + var result = menu.newMenuItem(activitiesLaunchersMenu); + result.text = title; + + result.visible = true; + result.checkable = true; + + result.checked = false; + + for (var j = 0; j < activities.length; ++j) { + if (id == activities[j]) { + result.checked = true; + break; + } + } + + result.clicked.connect( + function() { + if (result.checked) { + tasksModel.requestAddLauncherToActivity(url, id); + } else { + tasksModel.requestRemoveLauncherFromActivity(url, id); + } + } + ); - onClicked: { - if (tasksModel.launcherPosition(visualParent.m.LauncherUrlWithoutIcon) != -1) { - tasksModel.requestRemoveLauncher(visualParent.m.LauncherUrlWithoutIcon); - } else { - tasksModel.requestAddLauncher(visualParent.m.LauncherUrl); + return result; + } + + menu.onVisualParentChanged.connect(function() { + + if (menu.visualParent === null) return; + + var NULL_UUID = "00000000-0000-0000-0000-000000000000"; + + var url = menu.visualParent.m.LauncherUrlWithoutIcon; + + var activities = tasksModel.launcherActivities(url); + + createNewItem(NULL_UUID, i18n("On All Activities"), url, activities); + + if (activityInfo.numberOfRunningActivities <= 1) { + return; + } + + createNewItem(activityInfo.currentActivity, i18n("On The Current Activity"), url, activities); + + menu.newSeparator(activitiesLaunchersMenu); + + var runningActivities = activityInfo.runningActivities(); + + for (var i = 0; i < runningActivities.length; ++i) { + var id = runningActivities[i]; + var name = activityInfo.activityName(id); + + var item = createNewItem(id, name, url, activities); + } + + }); } + + Component.onCompleted: refresh() } }