Add Desktop Shortcuts with App-to-App Actions and Folders#695
Add Desktop Shortcuts with App-to-App Actions and Folders#695timgerstel wants to merge 68 commits intov3.x/stagingfrom
Conversation
…p icons are highlightable, rearrangable, and removable from the desktop via the context menu Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…ches a plugin (current behavior) Action shortcut — invokes a Zowe dispatcher action with specific data (e.g., open TN3270 with specific session config, open editor with a specific file path) Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…actions Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…scored) Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
76f620b to
fcba038
Compare
… grid space from being occupied. Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…select, enter to launch). add context menu option to pin shortcuts from desktop to launchbar Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…enhancement/desktopIcons Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…user interaction (keyboard nav) Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
| return this.folder?.name || 'New Folder'; | ||
| } | ||
|
|
||
| get positionStyle(): { [key: string]: string } { |
There was a problem hiding this comment.
Computes absolute position for folder on desktop grid
| lastOpenedDate?: string; | ||
| } | ||
|
|
||
| export interface DesktopFolder { |
There was a problem hiding this comment.
Is there anything else we want to track for pseudo folders? These arent folders that represent directories so things like 'size' aren't applicable.
| onLogin(username:string, plugins:ZLUX.Plugin[]):boolean { | ||
| this.replaceWallpaper(DESKTOP_WALLPAPER_URI); | ||
| this.shortcutsService.loadShortcuts(); | ||
| this.loadPinnedPluginIds(); |
There was a problem hiding this comment.
Needed for the desktop icon context menu to know which plugins are already pinned to the taskbar.
The launchbar already owns pinnedPlugins.json so window-pane could listen to a shared observable or service rather than making its own HTTP call, but that would mean introducing a dependency between window-pane and the launchbar's data service, which are currently decoupled. This approach trades one extra GET for simpler component boundaries
…by the desktop shortcuts service and then santized Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…l title tooltip with full name Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
…enhancement/desktopIcons Signed-off-by: Timothy Gerstel <tim.gerstel@gmail.com>
|



Proposed changes
This PR introduces a full desktop shortcut and folder system to the Zowe Virtual Desktop, bringing a familiar desktop paradigm for organizing, launching, and managing applications.
This PR depends upon the following PRs:
Summary
Icons are highlightable, rearrangeable, renameable, and removable from the desktop via context menu. Shortcuts support app-to-app action requests — for example, a shortcut can open a dataset in the Rocket Software Utility Pack for Zowe File Manager.
29 files changed, ~5,100 lines added across 12 new components/services and 17 modified files.
Features
Desktop Shortcuts
Action Shortcuts
Create New File
Desktop Folders
Shortcut Properties Dialog
Keyboard Navigation
Multi-Select & Marquee Selection
Pin to Taskbar
Shipped Start Menu Folders
config/startMenuFolders/folders.jsonand copies them to instance storage, which is then picked up byStartMenuFoldersServicevia the config serviceShipped Start Menu Folders — Plugin Authors
To add folders with links or app shortcuts to the start menu, a plugin needs a
folders.jsoninside aconfig/startMenuFolders/directory at the plugin root:{ "folders": [ { "name": "My Folder Name", "items": [ { "type": "link", "dest": "https://example.com", "title": "Example Link" }, { "type": "app", "id": "org.zowe.some.plugin", "title": "Launch Some App" } ] } ] }type: "link"opens URLs in a new browser tabtype: "app"launches a Zowe app (accepts app2app data)Security
javascript:,vbscript:,data:../), HTML injection characters, hex-encoded control characters, null bytes, punycode domains, unknown URL schemesNew Files
desktop-shortcuts.service.tsstart-menu-folders.service.tsdesktop-icon.component.*desktop-folder.component.*shortcut-properties.component.*launchbar-folder-icon.component.*Modified Files
window-pane.component.tswindow-pane.component.html/csslaunchbar-menu.component.*launchbar.component.*context-utils.tswindow-manager.service.tswindow-manager.module.tspluginDefinition.jsonKnown Limitations / Future Work
default.mov
Type of change
PR Checklist
Testing
Manual testing required. Key scenarios to verify:
Further comments
This is a large feature addition (~5,100 lines) that introduces a desktop metaphor to the Zowe Virtual Desktop. The architecture centers on
DesktopShortcutsServiceas a single source of truth using BehaviorSubject-based reactive state, with optimistic UI updates and server persistence via the Zowe config service. The undo stack supports up to 10 levels of deletion recovery.The folder system reuses the same shortcut data model with a
folderIdforeign key, keeping the storage format flat and the migration path simple. Icon URL sanitization is defense-in-depth across write, load, render, and input layers.Companion PRs:
config/startMenuFolders/and copies folder definitions to instance storagedesktop-new-file-savedevents for the "Create New File" shortcut flow