Changeset View
Standalone View
applets/taskmanager/package/contents/ui/ContextMenu.qml
Show All 19 Lines | |||||
20 | 20 | | |||
21 | import QtQuick 2.0 | 21 | import QtQuick 2.0 | ||
22 | 22 | | |||
23 | import org.kde.plasma.plasmoid 2.0 | 23 | import org.kde.plasma.plasmoid 2.0 | ||
24 | 24 | | |||
25 | import org.kde.plasma.core 2.0 as PlasmaCore | 25 | import org.kde.plasma.core 2.0 as PlasmaCore | ||
26 | import org.kde.plasma.components 2.0 as PlasmaComponents | 26 | import org.kde.plasma.components 2.0 as PlasmaComponents | ||
27 | 27 | | |||
28 | import org.kde.taskmanager 0.1 as TaskManager | ||||
29 | | ||||
28 | PlasmaComponents.ContextMenu { | 30 | PlasmaComponents.ContextMenu { | ||
29 | id: menu | 31 | id: menu | ||
30 | 32 | | |||
31 | property QtObject mpris2Source | 33 | property QtObject mpris2Source | ||
34 | property var modelIndex | ||||
35 | readonly property var atm: TaskManager.AbstractTasksModel | ||||
32 | 36 | | |||
33 | placement: { | 37 | placement: { | ||
34 | if (plasmoid.location == PlasmaCore.Types.LeftEdge) { | 38 | if (plasmoid.location == PlasmaCore.Types.LeftEdge) { | ||
35 | return PlasmaCore.Types.RightPosedTopAlignedPopup; | 39 | return PlasmaCore.Types.RightPosedTopAlignedPopup; | ||
36 | } else if (plasmoid.location == PlasmaCore.Types.TopEdge) { | 40 | } else if (plasmoid.location == PlasmaCore.Types.TopEdge) { | ||
37 | return PlasmaCore.Types.BottomPosedLeftAlignedPopup; | 41 | return PlasmaCore.Types.BottomPosedLeftAlignedPopup; | ||
38 | } else { | 42 | } else { | ||
39 | return PlasmaCore.Types.TopPosedLeftAlignedPopup; | 43 | return PlasmaCore.Types.TopPosedLeftAlignedPopup; | ||
40 | } | 44 | } | ||
41 | } | 45 | } | ||
42 | 46 | | |||
43 | minimumWidth: visualParent.width | 47 | minimumWidth: visualParent.width | ||
44 | 48 | | |||
45 | onStatusChanged: { | 49 | onStatusChanged: { | ||
46 | if (visualParent && visualParent.m.LauncherUrlWithoutIcon != null && status == PlasmaComponents.DialogStatus.Open) { | 50 | if (visualParent && get(atm.LauncherUrlWithoutIcon) != null && status == PlasmaComponents.DialogStatus.Open) { | ||
47 | launcherToggleAction.checked = (tasksModel.launcherPosition(visualParent.m.LauncherUrlWithoutIcon) != -1); | 51 | launcherToggleAction.checked = (tasksModel.launcherPosition(get(atm.LauncherUrlWithoutIcon)) != -1); | ||
48 | activitiesDesktopsMenu.refresh(); | 52 | activitiesDesktopsMenu.refresh(); | ||
49 | 53 | | |||
50 | } else if (status == PlasmaComponents.DialogStatus.Closed) { | 54 | } else if (status == PlasmaComponents.DialogStatus.Closed) { | ||
51 | menu.destroy(); | 55 | menu.destroy(); | ||
52 | } | 56 | } | ||
53 | } | 57 | } | ||
54 | 58 | | |||
59 | function get(modelProp) { | ||||
hein: Maybe s/get/data to be more conventional, but could you argue for kicks why this churn is… | |||||
The context menu can be called now also for a grouped task. The visualParent is the grouped task parent though. So we need to get the modelProps of property var modelIndex (which is in case of a grouped task different from visualParent.index, i.e. visualParent.m) romangg: The context menu can be called now also for a grouped task. The visualParent is the grouped… | |||||
That's kinda what I was wondering. If the context menu is opened for an element in the tooltip, why is the visualParent the task item? hein: That's kinda what I was wondering. If the context menu is opened for an element in the tooltip… | |||||
It's basically the second best solution. ;) When I tried to set the tooltip as visual parent, it opened the context menu at the border of the tooltip how it is expected, but it also closed the tooltip, because the context menu requested focus. So the context menu is suddenly standing in the middle of the screen without being next to the grouped task. If you know a way how the context menu can be opened at the border of the grouped task while not hiding the tooltip automatically, I would gladly implement this solution instead. romangg: It's basically the second best solution. ;)
When I tried to set the tooltip as visual parent… | |||||
60 | return tasksModel.data(modelIndex, modelProp) | ||||
61 | } | ||||
62 | | ||||
55 | function show() { | 63 | function show() { | ||
56 | loadDynamicLaunchActions(visualParent.m.LauncherUrlWithoutIcon); | 64 | loadDynamicLaunchActions(get(atm.LauncherUrlWithoutIcon)); | ||
57 | backend.ungrabMouse(visualParent); | 65 | backend.ungrabMouse(visualParent); | ||
58 | openRelative(); | 66 | openRelative(); | ||
59 | } | 67 | } | ||
60 | 68 | | |||
61 | function newMenuItem(parent) { | 69 | function newMenuItem(parent) { | ||
62 | return Qt.createQmlObject( | 70 | return Qt.createQmlObject( | ||
63 | "import org.kde.plasma.components 2.0 as PlasmaComponents;" + | 71 | "import org.kde.plasma.components 2.0 as PlasmaComponents;" + | ||
64 | "PlasmaComponents.MenuItem {}", | 72 | "PlasmaComponents.MenuItem {}", | ||
Show All 27 Lines | 98 | for (var i = 0; i < actionList.length; ++i) { | |||
92 | item.action = actionList[i]; | 100 | item.action = actionList[i]; | ||
93 | menu.addMenuItem(item, virtualDesktopsMenuItem); | 101 | menu.addMenuItem(item, virtualDesktopsMenuItem); | ||
94 | } | 102 | } | ||
95 | 103 | | |||
96 | if (actionList.length > 0) { | 104 | if (actionList.length > 0) { | ||
97 | menu.addMenuItem(newSeparator(menu), virtualDesktopsMenuItem); | 105 | menu.addMenuItem(newSeparator(menu), virtualDesktopsMenuItem); | ||
98 | } | 106 | } | ||
99 | 107 | | |||
100 | // Add Media Player control actions | 108 | // Add Media Player control actions (but not if grouped) TODO: doch, wenn auf tooltip rechts geklickt!! | ||
101 | var sourceName = mpris2Source.sourceNameForLauncherUrl(launcherUrl); | 109 | var sourceName = mpris2Source.sourceNameForLauncherUrl(launcherUrl, get(atm.AppPid)); | ||
102 | 110 | | |||
103 | if (sourceName) { | 111 | if (sourceName && !(get(atm.LegacyWinIdList) != undefined && get(atm.LegacyWinIdList).length > 1)) { | ||
104 | var playerData = mpris2Source.data[sourceName] | 112 | var playerData = mpris2Source.data[sourceName] | ||
105 | 113 | | |||
106 | if (playerData.CanControl) { | 114 | if (playerData.CanControl) { | ||
107 | var menuItem = menu.newMenuItem(menu); | 115 | var menuItem = menu.newMenuItem(menu); | ||
108 | menuItem.text = i18nc("Play previous track", "Previous Track"); | 116 | menuItem.text = i18nc("Play previous track", "Previous Track"); | ||
109 | menuItem.icon = "media-skip-backward"; | 117 | menuItem.icon = "media-skip-backward"; | ||
110 | menuItem.enabled = Qt.binding(function() { | 118 | menuItem.enabled = Qt.binding(function() { | ||
111 | return playerData.CanGoPrevious; | 119 | return playerData.CanGoPrevious; | ||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Line(s) | |||||
181 | } | 189 | } | ||
182 | } | 190 | } | ||
183 | } | 191 | } | ||
184 | 192 | | |||
185 | PlasmaComponents.MenuItem { | 193 | PlasmaComponents.MenuItem { | ||
186 | id: virtualDesktopsMenuItem | 194 | id: virtualDesktopsMenuItem | ||
187 | 195 | | |||
188 | visible: virtualDesktopInfo.numberOfDesktops > 1 | 196 | visible: virtualDesktopInfo.numberOfDesktops > 1 | ||
189 | && (visualParent && visualParent.m.IsLauncher !== true | 197 | && (visualParent && get(atm.IsLauncher) !== true | ||
190 | && visualParent.m.IsStartup !== true | 198 | && get(atm.IsStartup) !== true | ||
191 | && visualParent.m.IsVirtualDesktopChangeable === true) | 199 | && get(atm.IsVirtualDesktopChangeable) === true) | ||
192 | 200 | | |||
193 | enabled: visible | 201 | enabled: visible | ||
194 | 202 | | |||
195 | text: i18n("Move To &Desktop") | 203 | text: i18n("Move To &Desktop") | ||
196 | 204 | | |||
197 | Connections { | 205 | Connections { | ||
198 | target: virtualDesktopInfo | 206 | target: virtualDesktopInfo | ||
199 | 207 | | |||
Show All 11 Lines | 217 | function refresh() { | |||
211 | 219 | | |||
212 | if (virtualDesktopInfo.numberOfDesktops <= 1) { | 220 | if (virtualDesktopInfo.numberOfDesktops <= 1) { | ||
213 | return; | 221 | return; | ||
214 | } | 222 | } | ||
215 | 223 | | |||
216 | var menuItem = menu.newMenuItem(virtualDesktopsMenu); | 224 | var menuItem = menu.newMenuItem(virtualDesktopsMenu); | ||
217 | menuItem.text = i18n("Move &To Current Desktop"); | 225 | menuItem.text = i18n("Move &To Current Desktop"); | ||
218 | menuItem.enabled = Qt.binding(function() { | 226 | menuItem.enabled = Qt.binding(function() { | ||
219 | return menu.visualParent && menu.visualParent.m.VirtualDesktop != virtualDesktopInfo.currentDesktop; | 227 | return menu.visualParent && menu.get(atm.VirtualDesktop) != virtualDesktopInfo.currentDesktop; | ||
220 | }); | 228 | }); | ||
221 | menuItem.clicked.connect(function() { | 229 | menuItem.clicked.connect(function() { | ||
222 | tasksModel.requestVirtualDesktop(menu.visualParent.modelIndex(), virtualDesktopInfo.currentDesktop); | 230 | tasksModel.requestVirtualDesktop(menu.modelIndex, virtualDesktopInfo.currentDesktop); | ||
223 | }); | 231 | }); | ||
224 | 232 | | |||
225 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | 233 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | ||
226 | menuItem.text = i18n("&All Desktops"); | 234 | menuItem.text = i18n("&All Desktops"); | ||
227 | menuItem.checkable = true; | 235 | menuItem.checkable = true; | ||
228 | menuItem.checked = Qt.binding(function() { | 236 | menuItem.checked = Qt.binding(function() { | ||
229 | return menu.visualParent && menu.visualParent.m.IsOnAllVirtualDesktops === true; | 237 | return menu.visualParent && menu.get(atm.IsOnAllVirtualDesktops) === true; | ||
230 | }); | 238 | }); | ||
231 | menuItem.clicked.connect(function() { | 239 | menuItem.clicked.connect(function() { | ||
232 | tasksModel.requestVirtualDesktop(menu.visualParent.modelIndex(), 0); | 240 | tasksModel.requestVirtualDesktop(menu.modelIndex, 0); | ||
233 | }); | 241 | }); | ||
234 | backend.setActionGroup(menuItem.action); | 242 | backend.setActionGroup(menuItem.action); | ||
235 | 243 | | |||
236 | menu.newSeparator(virtualDesktopsMenu); | 244 | menu.newSeparator(virtualDesktopsMenu); | ||
237 | 245 | | |||
238 | for (var i = 0; i < virtualDesktopInfo.desktopNames.length; ++i) { | 246 | for (var i = 0; i < virtualDesktopInfo.desktopNames.length; ++i) { | ||
239 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | 247 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | ||
240 | menuItem.text = i18nc("1 = number of desktop, 2 = desktop name", "&%1 Desktop %2", i + 1, virtualDesktopInfo.desktopNames[i]); | 248 | menuItem.text = i18nc("1 = number of desktop, 2 = desktop name", "&%1 Desktop %2", i + 1, virtualDesktopInfo.desktopNames[i]); | ||
241 | menuItem.checkable = true; | 249 | menuItem.checkable = true; | ||
242 | menuItem.checked = Qt.binding((function(i) { | 250 | menuItem.checked = Qt.binding((function(i) { | ||
243 | return function() { return menu.visualParent && menu.visualParent.m.VirtualDesktop == (i + 1) }; | 251 | return function() { return menu.visualParent && menu.get(atm.VirtualDesktop) == (i + 1) }; | ||
244 | })(i)); | 252 | })(i)); | ||
245 | menuItem.clicked.connect((function(i) { | 253 | menuItem.clicked.connect((function(i) { | ||
246 | return function() { return tasksModel.requestVirtualDesktop(menu.visualParent.modelIndex(), i + 1); }; | 254 | return function() { return tasksModel.requestVirtualDesktop(menu.modelIndex, i + 1); }; | ||
247 | })(i)); | 255 | })(i)); | ||
248 | backend.setActionGroup(menuItem.action); | 256 | backend.setActionGroup(menuItem.action); | ||
249 | } | 257 | } | ||
250 | 258 | | |||
251 | menu.newSeparator(virtualDesktopsMenu); | 259 | menu.newSeparator(virtualDesktopsMenu); | ||
252 | 260 | | |||
253 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | 261 | menuItem = menu.newMenuItem(virtualDesktopsMenu); | ||
254 | menuItem.text = i18n("&New Desktop"); | 262 | menuItem.text = i18n("&New Desktop"); | ||
255 | menuItem.clicked.connect(function() { | 263 | menuItem.clicked.connect(function() { | ||
256 | tasksModel.requestVirtualDesktop(menu.visualParent.modelIndex(), virtualDesktopInfo.numberOfDesktops + 1) | 264 | tasksModel.requestVirtualDesktop(menu.modelIndex, virtualDesktopInfo.numberOfDesktops + 1) | ||
257 | }); | 265 | }); | ||
258 | } | 266 | } | ||
259 | 267 | | |||
260 | Component.onCompleted: refresh() | 268 | Component.onCompleted: refresh() | ||
261 | } | 269 | } | ||
262 | } | 270 | } | ||
263 | 271 | | |||
264 | PlasmaComponents.MenuItem { | 272 | PlasmaComponents.MenuItem { | ||
265 | id: activitiesDesktopsMenuItem | 273 | id: activitiesDesktopsMenuItem | ||
266 | 274 | | |||
267 | visible: activityInfo.numberOfRunningActivities > 1 | 275 | visible: activityInfo.numberOfRunningActivities > 1 | ||
268 | && (visualParent && !visualParent.m.IsLauncher | 276 | && (visualParent && !get(atm.IsLauncher) | ||
269 | && !visualParent.m.IsStartup) | 277 | && !get(atm.IsStartup)) | ||
270 | 278 | | |||
271 | enabled: visible | 279 | enabled: visible | ||
272 | 280 | | |||
273 | text: i18n("Move To &Activity") | 281 | text: i18n("Move To &Activity") | ||
274 | 282 | | |||
275 | Connections { | 283 | Connections { | ||
276 | target: activityInfo | 284 | target: activityInfo | ||
277 | 285 | | |||
Show All 10 Lines | 294 | function refresh() { | |||
288 | 296 | | |||
289 | if (activityInfo.numberOfRunningActivities <= 1) { | 297 | if (activityInfo.numberOfRunningActivities <= 1) { | ||
290 | return; | 298 | return; | ||
291 | } | 299 | } | ||
292 | 300 | | |||
293 | var menuItem = menu.newMenuItem(activitiesDesktopsMenu); | 301 | var menuItem = menu.newMenuItem(activitiesDesktopsMenu); | ||
294 | menuItem.text = i18n("Add To Current Activity"); | 302 | menuItem.text = i18n("Add To Current Activity"); | ||
295 | menuItem.enabled = Qt.binding(function() { | 303 | menuItem.enabled = Qt.binding(function() { | ||
296 | return menu.visualParent && menu.visualParent.m.Activities.length > 0 && | 304 | return menu.visualParent && menu.get(atm.Activities).length > 0 && | ||
297 | menu.visualParent.m.Activities.indexOf(activityInfo.currentActivity) < 0; | 305 | menu.get(atm.Activities).indexOf(activityInfo.currentActivity) < 0; | ||
298 | }); | 306 | }); | ||
299 | menuItem.clicked.connect(function() { | 307 | menuItem.clicked.connect(function() { | ||
300 | tasksModel.requestActivities(menu.visualParent.modelIndex(), menu.visualParent.m.Activities.concat(activityInfo.currentActivity)); | 308 | tasksModel.requestActivities(menu.modelIndex, menu.get(atm.Activities).concat(activityInfo.currentActivity)); | ||
301 | }); | 309 | }); | ||
302 | 310 | | |||
303 | menuItem = menu.newMenuItem(activitiesDesktopsMenu); | 311 | menuItem = menu.newMenuItem(activitiesDesktopsMenu); | ||
304 | menuItem.text = i18n("All Activities"); | 312 | menuItem.text = i18n("All Activities"); | ||
305 | menuItem.checkable = true; | 313 | menuItem.checkable = true; | ||
306 | menuItem.checked = Qt.binding(function() { | 314 | menuItem.checked = Qt.binding(function() { | ||
307 | return menu.visualParent && menu.visualParent.m.Activities.length === 0; | 315 | return menu.visualParent && menu.get(atm.Activities).length === 0; | ||
308 | }); | 316 | }); | ||
309 | menuItem.clicked.connect(function() { | 317 | menuItem.clicked.connect(function() { | ||
310 | var checked = menuItem.checked; | 318 | var checked = menuItem.checked; | ||
311 | var newActivities = undefined; // will cast to an empty QStringList i.e all activities | 319 | var newActivities = undefined; // will cast to an empty QStringList i.e all activities | ||
312 | if (!checked) { | 320 | if (!checked) { | ||
313 | newActivities = new Array(activityInfo.currentActivity); | 321 | newActivities = new Array(activityInfo.currentActivity); | ||
314 | } | 322 | } | ||
315 | tasksModel.requestActivities(menu.visualParent.modelIndex(), newActivities); | 323 | tasksModel.requestActivities(menu.modelIndex, newActivities); | ||
316 | }); | 324 | }); | ||
317 | 325 | | |||
318 | menu.newSeparator(activitiesDesktopsMenu); | 326 | menu.newSeparator(activitiesDesktopsMenu); | ||
319 | 327 | | |||
320 | var runningActivities = activityInfo.runningActivities(); | 328 | var runningActivities = activityInfo.runningActivities(); | ||
321 | for (var i = 0; i < runningActivities.length; ++i) { | 329 | for (var i = 0; i < runningActivities.length; ++i) { | ||
322 | var activityId = runningActivities[i]; | 330 | var activityId = runningActivities[i]; | ||
323 | 331 | | |||
324 | menuItem = menu.newMenuItem(activitiesDesktopsMenu); | 332 | menuItem = menu.newMenuItem(activitiesDesktopsMenu); | ||
325 | menuItem.text = activityInfo.activityName(runningActivities[i]); | 333 | menuItem.text = activityInfo.activityName(runningActivities[i]); | ||
326 | menuItem.checkable = true; | 334 | menuItem.checkable = true; | ||
327 | menuItem.checked = Qt.binding( (function(activityId) { | 335 | menuItem.checked = Qt.binding( (function(activityId) { | ||
328 | return function() { | 336 | return function() { | ||
329 | return menu.visualParent && menu.visualParent.m.Activities.indexOf(activityId) >= 0; | 337 | return menu.visualParent && menu.get(atm.Activities).indexOf(activityId) >= 0; | ||
330 | }; | 338 | }; | ||
331 | })(activityId)); | 339 | })(activityId)); | ||
332 | menuItem.clicked.connect((function(activityId) { | 340 | menuItem.clicked.connect((function(activityId) { | ||
333 | return function () { | 341 | return function () { | ||
334 | var checked = menuItem.checked; | 342 | var checked = menuItem.checked; | ||
335 | var newActivities = menu.visualParent.m.Activities; | 343 | var newActivities = menu.get(atm.Activities); | ||
336 | if (checked) { | 344 | if (checked) { | ||
337 | newActivities = newActivities.concat(activityId); | 345 | newActivities = newActivities.concat(activityId); | ||
338 | } else { | 346 | } else { | ||
339 | var index = newActivities.indexOf(activityId) | 347 | var index = newActivities.indexOf(activityId) | ||
340 | if (index < 0) { | 348 | if (index < 0) { | ||
341 | return; | 349 | return; | ||
342 | } | 350 | } | ||
343 | newActivities = newActivities.splice(index, 1); | 351 | newActivities = newActivities.splice(index, 1); | ||
344 | } | 352 | } | ||
345 | return tasksModel.requestActivities(menu.visualParent.modelIndex(), newActivities); | 353 | return tasksModel.requestActivities(menu.modelIndex, newActivities); | ||
346 | }; | 354 | }; | ||
347 | })(activityId)); | 355 | })(activityId)); | ||
348 | } | 356 | } | ||
349 | 357 | | |||
350 | menu.newSeparator(activitiesDesktopsMenu); | 358 | menu.newSeparator(activitiesDesktopsMenu); | ||
351 | } | 359 | } | ||
352 | 360 | | |||
353 | Component.onCompleted: refresh() | 361 | Component.onCompleted: refresh() | ||
354 | } | 362 | } | ||
355 | } | 363 | } | ||
356 | 364 | | |||
357 | 365 | | |||
358 | PlasmaComponents.MenuItem { | 366 | PlasmaComponents.MenuItem { | ||
359 | visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) | 367 | visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) | ||
360 | 368 | | |||
361 | enabled: visualParent && visualParent.m.IsMinimizable === true | 369 | enabled: visualParent && get(atm.IsMinimizable) === true | ||
362 | 370 | | |||
363 | checkable: true | 371 | checkable: true | ||
364 | checked: visualParent && visualParent.m.IsMinimized === true | 372 | checked: visualParent && get(atm.IsMinimized) === true | ||
365 | 373 | | |||
366 | text: i18n("Mi&nimize") | 374 | text: i18n("Mi&nimize") | ||
367 | 375 | | |||
368 | onClicked: tasksModel.requestToggleMinimized(visualParent.modelIndex()) | 376 | onClicked: tasksModel.requestToggleMinimized(modelIndex) | ||
369 | } | 377 | } | ||
370 | 378 | | |||
371 | PlasmaComponents.MenuItem { | 379 | PlasmaComponents.MenuItem { | ||
372 | visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) | 380 | visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) | ||
373 | 381 | | |||
374 | enabled: visualParent && visualParent.m.IsMaximizable === true | 382 | enabled: visualParent && get(atm.IsMaximizable) === true | ||
375 | 383 | | |||
376 | checkable: true | 384 | checkable: true | ||
377 | checked: visualParent && visualParent.m.IsMaximized === true | 385 | checked: visualParent && get(atm.IsMaximized) === true | ||
378 | 386 | | |||
379 | text: i18n("Ma&ximize") | 387 | text: i18n("Ma&ximize") | ||
380 | 388 | | |||
381 | onClicked: tasksModel.requestToggleMaximized(visualParent.modelIndex()) | 389 | onClicked: tasksModel.requestToggleMaximized(modelIndex) | ||
382 | } | 390 | } | ||
383 | 391 | | |||
384 | PlasmaComponents.MenuItem { | 392 | PlasmaComponents.MenuItem { | ||
385 | id: startNewInstanceItem | 393 | id: startNewInstanceItem | ||
386 | visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) | 394 | visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) | ||
387 | 395 | | |||
388 | enabled: visualParent && visualParent.m.LauncherUrlWithoutIcon != null | 396 | enabled: visualParent && get(atm.LauncherUrlWithoutIcon) != null | ||
389 | 397 | | |||
390 | text: i18n("Start New Instance") | 398 | text: i18n("Start New Instance") | ||
391 | icon: "system-run" | 399 | icon: "system-run" | ||
392 | 400 | | |||
393 | onClicked: tasksModel.requestNewInstance(visualParent.modelIndex()) | 401 | onClicked: tasksModel.requestNewInstance(modelIndex) | ||
394 | } | 402 | } | ||
395 | 403 | | |||
396 | PlasmaComponents.MenuItem { | 404 | PlasmaComponents.MenuItem { | ||
397 | id: launcherToggleAction | 405 | id: launcherToggleAction | ||
398 | 406 | | |||
399 | visible: visualParent | 407 | visible: visualParent | ||
400 | && visualParent.m.IsLauncher !== true | 408 | && get(atm.IsLauncher) !== true | ||
401 | && visualParent.m.IsStartup !== true | 409 | && get(atm.IsStartup) !== true | ||
402 | && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | 410 | && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | ||
403 | && (activityInfo.numberOfRunningActivities < 2) | 411 | && (activityInfo.numberOfRunningActivities < 2) | ||
404 | 412 | | |||
405 | enabled: visualParent && visualParent.m.LauncherUrlWithoutIcon != "" | 413 | enabled: visualParent && get(atm.LauncherUrlWithoutIcon) != "" | ||
406 | 414 | | |||
407 | checkable: true | 415 | checkable: true | ||
408 | 416 | | |||
409 | text: i18nc("Toggle action for showing a launcher button while the application is not running", "&Pin") | 417 | text: i18nc("Toggle action for showing a launcher button while the application is not running", "&Pin") | ||
410 | 418 | | |||
411 | onClicked: { | 419 | onClicked: { | ||
412 | if (tasksModel.launcherPosition(visualParent.m.LauncherUrlWithoutIcon) != -1) { | 420 | if (tasksModel.launcherPosition(get(atm.LauncherUrlWithoutIcon)) != -1) { | ||
413 | tasksModel.requestRemoveLauncher(visualParent.m.LauncherUrlWithoutIcon); | 421 | tasksModel.requestRemoveLauncher(get(atm.LauncherUrlWithoutIcon)); | ||
414 | } else { | 422 | } else { | ||
415 | tasksModel.requestAddLauncher(visualParent.m.LauncherUrl); | 423 | tasksModel.requestAddLauncher(get(atm.LauncherUrl)); | ||
416 | } | 424 | } | ||
417 | } | 425 | } | ||
418 | } | 426 | } | ||
419 | 427 | | |||
420 | PlasmaComponents.MenuItem { | 428 | PlasmaComponents.MenuItem { | ||
421 | id: showLauncherInActivitiesItem | 429 | id: showLauncherInActivitiesItem | ||
422 | 430 | | |||
423 | text: i18n("&Pin") | 431 | text: i18n("&Pin") | ||
424 | 432 | | |||
425 | visible: visualParent | 433 | visible: visualParent | ||
426 | && visualParent.m.IsLauncher !== true | 434 | && get(atm.IsLauncher) !== true | ||
427 | && visualParent.m.IsStartup !== true | 435 | && get(atm.IsStartup) !== true | ||
428 | && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | 436 | && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | ||
429 | && (activityInfo.numberOfRunningActivities >= 2) | 437 | && (activityInfo.numberOfRunningActivities >= 2) | ||
430 | 438 | | |||
431 | Connections { | 439 | Connections { | ||
432 | target: activityInfo | 440 | target: activityInfo | ||
433 | onNumberOfRunningActivitiesChanged: activitiesDesktopsMenu.refresh() | 441 | onNumberOfRunningActivitiesChanged: activitiesDesktopsMenu.refresh() | ||
434 | } | 442 | } | ||
435 | 443 | | |||
Show All 25 Lines | 462 | result.clicked.connect( | |||
461 | } | 469 | } | ||
462 | ); | 470 | ); | ||
463 | 471 | | |||
464 | return result; | 472 | return result; | ||
465 | } | 473 | } | ||
466 | 474 | | |||
467 | if (menu.visualParent === null) return; | 475 | if (menu.visualParent === null) return; | ||
468 | 476 | | |||
469 | var url = menu.visualParent.m.LauncherUrlWithoutIcon; | 477 | var url = menu.get(atm.LauncherUrlWithoutIcon); | ||
470 | 478 | | |||
471 | var activities = tasksModel.launcherActivities(url); | 479 | var activities = tasksModel.launcherActivities(url); | ||
472 | 480 | | |||
473 | var NULL_UUID = "00000000-0000-0000-0000-000000000000"; | 481 | var NULL_UUID = "00000000-0000-0000-0000-000000000000"; | ||
474 | 482 | | |||
475 | createNewItem(NULL_UUID, i18n("On All Activities"), url, activities); | 483 | createNewItem(NULL_UUID, i18n("On All Activities"), url, activities); | ||
476 | 484 | | |||
477 | if (activityInfo.numberOfRunningActivities <= 1) { | 485 | if (activityInfo.numberOfRunningActivities <= 1) { | ||
Show All 14 Lines | |||||
492 | Component.onCompleted: { | 500 | Component.onCompleted: { | ||
493 | menu.onVisualParentChanged.connect(refresh); | 501 | menu.onVisualParentChanged.connect(refresh); | ||
494 | refresh(); | 502 | refresh(); | ||
495 | } | 503 | } | ||
496 | } | 504 | } | ||
497 | } | 505 | } | ||
498 | 506 | | |||
499 | PlasmaComponents.MenuItem { | 507 | PlasmaComponents.MenuItem { | ||
500 | visible: (visualParent && visualParent.m.IsLauncher === true) && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | 508 | visible: (visualParent && get(atm.IsLauncher) === true) && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable | ||
501 | 509 | | |||
502 | text: i18nc("Remove launcher button for application shown while it is not running", "Unpin") | 510 | text: i18nc("Remove launcher button for application shown while it is not running", "Unpin") | ||
503 | 511 | | |||
504 | onClicked: tasksModel.requestRemoveLauncher(visualParent.m.LauncherUrlWithoutIcon); | 512 | onClicked: tasksModel.requestRemoveLauncher(get(atm.LauncherUrlWithoutIcon)); | ||
505 | } | 513 | } | ||
506 | 514 | | |||
507 | 515 | | |||
508 | PlasmaComponents.MenuItem { | 516 | PlasmaComponents.MenuItem { | ||
509 | id: moreActionsMenuItem | 517 | id: moreActionsMenuItem | ||
510 | 518 | | |||
511 | visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) | 519 | visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) | ||
512 | 520 | | |||
513 | enabled: visible | 521 | enabled: visible | ||
514 | 522 | | |||
515 | text: i18n("More Actions") | 523 | text: i18n("More Actions") | ||
516 | 524 | | |||
517 | PlasmaComponents.ContextMenu { | 525 | PlasmaComponents.ContextMenu { | ||
518 | visualParent: moreActionsMenuItem.action | 526 | visualParent: moreActionsMenuItem.action | ||
519 | 527 | | |||
520 | PlasmaComponents.MenuItem { | 528 | PlasmaComponents.MenuItem { | ||
521 | enabled: menu.visualParent && menu.visualParent.m.IsMovable === true | 529 | enabled: menu.visualParent && menu.get(atm.IsMovable) === true | ||
522 | 530 | | |||
523 | text: i18n("&Move") | 531 | text: i18n("&Move") | ||
524 | icon: "transform-move" | 532 | icon: "transform-move" | ||
525 | 533 | | |||
526 | onClicked: tasksModel.requestMove(menu.visualParent.modelIndex()) | 534 | onClicked: tasksModel.requestMove(menu.modelIndex) | ||
527 | } | 535 | } | ||
528 | 536 | | |||
529 | PlasmaComponents.MenuItem { | 537 | PlasmaComponents.MenuItem { | ||
530 | enabled: menu.visualParent && menu.visualParent.m.IsResizable === true | 538 | enabled: menu.visualParent && menu.get(atm.IsResizable) === true | ||
531 | 539 | | |||
532 | text: i18n("Re&size") | 540 | text: i18n("Re&size") | ||
533 | 541 | | |||
534 | onClicked: tasksModel.requestResize(menu.visualParent.modelIndex()) | 542 | onClicked: tasksModel.requestResize(menu.modelIndex) | ||
535 | } | 543 | } | ||
536 | 544 | | |||
537 | PlasmaComponents.MenuItem { | 545 | PlasmaComponents.MenuItem { | ||
538 | checkable: true | 546 | checkable: true | ||
539 | checked: menu.visualParent && menu.visualParent.m.IsKeepAbove === true | 547 | checked: menu.visualParent && menu.get(atm.IsKeepAbove) === true | ||
540 | 548 | | |||
541 | text: i18n("Keep &Above Others") | 549 | text: i18n("Keep &Above Others") | ||
542 | icon: "go-up" | 550 | icon: "go-up" | ||
543 | 551 | | |||
544 | onClicked: tasksModel.requestToggleKeepAbove(menu.visualParent.modelIndex()) | 552 | onClicked: tasksModel.requestToggleKeepAbove(menu.modelIndex) | ||
545 | } | 553 | } | ||
546 | 554 | | |||
547 | PlasmaComponents.MenuItem { | 555 | PlasmaComponents.MenuItem { | ||
548 | checkable: true | 556 | checkable: true | ||
549 | checked: menu.visualParent && menu.visualParent.m.IsKeepBelow === true | 557 | checked: menu.visualParent && menu.get(atm.IsKeepBelow) === true | ||
550 | 558 | | |||
551 | text: i18n("Keep &Below Others") | 559 | text: i18n("Keep &Below Others") | ||
552 | icon: "go-down" | 560 | icon: "go-down" | ||
553 | 561 | | |||
554 | onClicked: tasksModel.requestToggleKeepBelow(menu.visualParent.modelIndex()) | 562 | onClicked: tasksModel.requestToggleKeepBelow(menu.modelIndex) | ||
555 | } | 563 | } | ||
556 | 564 | | |||
557 | PlasmaComponents.MenuItem { | 565 | PlasmaComponents.MenuItem { | ||
558 | enabled: menu.visualParent && menu.visualParent.m.IsFullScreenable === true | 566 | enabled: menu.visualParent && menu.get(atm.IsFullScreenable) === true | ||
559 | 567 | | |||
560 | checkable: true | 568 | checkable: true | ||
561 | checked: menu.visualParent && menu.visualParent.m.IsFullScreen === true | 569 | checked: menu.visualParent && menu.get(atm.IsFullScreen) === true | ||
562 | 570 | | |||
563 | text: i18n("&Fullscreen") | 571 | text: i18n("&Fullscreen") | ||
564 | icon: "view-fullscreen" | 572 | icon: "view-fullscreen" | ||
565 | 573 | | |||
566 | onClicked: tasksModel.requestToggleFullScreen(menu.visualParent.modelIndex()) | 574 | onClicked: tasksModel.requestToggleFullScreen(menu.modelIndex) | ||
567 | } | 575 | } | ||
568 | 576 | | |||
569 | PlasmaComponents.MenuItem { | 577 | PlasmaComponents.MenuItem { | ||
570 | enabled: menu.visualParent && menu.visualParent.m.IsShadeable === true | 578 | enabled: menu.visualParent && menu.get(atm.IsShadeable) === true | ||
571 | 579 | | |||
572 | checkable: true | 580 | checkable: true | ||
573 | checked: menu.visualParent && menu.visualParent.m.IsShaded === true | 581 | checked: menu.visualParent && menu.get(atm.IsShaded) === true | ||
574 | 582 | | |||
575 | text: i18n("&Shade") | 583 | text: i18n("&Shade") | ||
576 | 584 | | |||
577 | onClicked: tasksModel.requestToggleShaded(menu.visualParent.modelIndex()) | 585 | onClicked: tasksModel.requestToggleShaded(menu.modelIndex) | ||
578 | } | 586 | } | ||
579 | 587 | | |||
580 | PlasmaComponents.MenuItem { | 588 | PlasmaComponents.MenuItem { | ||
581 | separator: true | 589 | separator: true | ||
582 | } | 590 | } | ||
583 | 591 | | |||
584 | PlasmaComponents.MenuItem { | 592 | PlasmaComponents.MenuItem { | ||
585 | visible: (plasmoid.configuration.groupingStrategy != 0) && menu.visualParent.m.IsWindow === true | 593 | visible: (plasmoid.configuration.groupingStrategy != 0) && menu.get(atm.IsWindow) === true | ||
586 | 594 | | |||
587 | checkable: true | 595 | checkable: true | ||
588 | checked: menu.visualParent && menu.visualParent.m.IsGroupable === true | 596 | checked: menu.visualParent && menu.get(atm.IsGroupable) === true | ||
589 | 597 | | |||
590 | text: i18n("Allow this program to be grouped") | 598 | text: i18n("Allow this program to be grouped") | ||
591 | 599 | | |||
592 | onClicked: tasksModel.requestToggleGrouping(menu.visualParent.modelIndex()) | 600 | onClicked: tasksModel.requestToggleGrouping(menu.modelIndex) | ||
593 | } | 601 | } | ||
594 | } | 602 | } | ||
595 | } | 603 | } | ||
596 | 604 | | |||
597 | PlasmaComponents.MenuItem { | 605 | PlasmaComponents.MenuItem { | ||
598 | property QtObject configureAction: null | 606 | property QtObject configureAction: null | ||
599 | 607 | | |||
600 | enabled: configureAction && configureAction.enabled | 608 | enabled: configureAction && configureAction.enabled | ||
601 | 609 | | |||
602 | text: configureAction ? configureAction.text : "" | 610 | text: configureAction ? configureAction.text : "" | ||
603 | icon: configureAction ? configureAction.icon : "" | 611 | icon: configureAction ? configureAction.icon : "" | ||
604 | 612 | | |||
605 | onClicked: configureAction.trigger() | 613 | onClicked: configureAction.trigger() | ||
606 | 614 | | |||
607 | Component.onCompleted: configureAction = plasmoid.action("configure") | 615 | Component.onCompleted: configureAction = plasmoid.action("configure") | ||
608 | } | 616 | } | ||
609 | 617 | | |||
610 | PlasmaComponents.MenuItem { | 618 | PlasmaComponents.MenuItem { | ||
611 | separator: true | 619 | separator: true | ||
612 | } | 620 | } | ||
613 | 621 | | |||
614 | PlasmaComponents.MenuItem { | 622 | PlasmaComponents.MenuItem { | ||
615 | id: closeWindowItem | 623 | id: closeWindowItem | ||
616 | visible: (visualParent && visualParent.m.IsLauncher !== true && visualParent.m.IsStartup !== true) | 624 | visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) | ||
617 | 625 | | |||
618 | enabled: visualParent && visualParent.m.IsClosable === true | 626 | enabled: visualParent && get(atm.IsClosable) === true | ||
619 | 627 | | |||
620 | text: i18n("&Close") | 628 | text: i18n("&Close") | ||
621 | icon: "window-close" | 629 | icon: "window-close" | ||
622 | 630 | | |||
623 | onClicked: tasksModel.requestClose(visualParent.modelIndex()) | 631 | onClicked: tasksModel.requestClose(modelIndex) | ||
624 | } | 632 | } | ||
625 | } | 633 | } |
Maybe s/get/data to be more conventional, but could you argue for kicks why this churn is needed vs. just making sure the visualParent has the m prop?