feat(shell): All Apps in the activity bar, web apps, and popup tray menus - #10
Merged
Merged
Conversation
…enus Seven changes to the desktop shell, most of them moving something to where it belongs rather than adding a feature. **All Apps leaves the status bar.** A start menu is not a tray item, so the $(menu) button in the bottom-left corner is gone and the launcher is a view in the activity bar. It now lists three things instead of one: the shell's own apps, the web apps installed through the Marketplace, and every program on the machine that ships a .desktop file, with its real icon resolved from the icon theme. Right-clicking a web app changes where it opens or removes it. **Uninstall covers web apps only.** They are the only thing this shell installed. Removing a package would mean a password-free `pacman -Rns` for arbitrary names, which is a new path to root for the sake of a context menu item; native entries are listed and labelled instead. No new helper, no polkit change. **Music plays music.** The Music "app" was two buttons that opened Spotify Web and YouTube Music in a browser window - bookmarks, and useless on a machine with no network. It is now a real player for ~/Music: a searchable library, a queue, shuffle, repeat and a scrubber. The tray's music item keeps its MPRIS transport, so a browser or mpv playing in the background is still controllable from there. **Web apps can be installed.** sys/webapps.ts fetches a site, reads its `<link rel="manifest">` - falling back to the page's title and favicon, because most of the web publishes no manifest - keeps a copy of the icon and writes a .desktop entry, so the app exists to the rest of the machine and not only to this shell. Those entries are marked X-VSCodeOS-WebApp, which is how the .desktop scan knows not to list every web app twice. Where an app opens is chosen at install time: a Chromium --app= window, which exports MPRIS and can play DRM audio, or an editor tab. **A Marketplace to find them.** A curated catalogue compiled into the extension, so it is browsable on a machine that has never been online, plus an address box for anything else. The Browser grows an Install app button on any page that declares a manifest - it is the one place in the shell that can answer that question without fetching the page twice. **The System container is the Task Manager.** The Recycle Bin view and the tray card are out of it; the bin is a place in the Files app, which is where a bin belongs and where it browses with the same columns as any folder. **The tray menus are popups.** VS Code still has no API to anchor a popup to a status bar item - but a quick pick *is* a popup, and the thing it cannot be is anchored, which is a far smaller loss than taking the side bar away every time somebody wants to see the clock. Items carry a keepOpen flag so a toggle acts and the list redraws in place. The webview cards are still there behind vscodeos.flyout.location for the sliders and the month grid; they cannot go in the secondary side bar, because that contribution point is behind a proposed API a built-in extension cannot use. 30 new tests cover the parsing this rests on - .desktop groups and Exec field codes, manifest links and icon selection - because an Exec line split the wrong way launches the wrong program, and a % left unescaped makes an entry vanish from every menu on the machine without saying why. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019CL3BaiEocfm9nsia4D2PV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Seven changes to the desktop shell, most of them moving something to where
it belongs rather than adding a feature.
All Apps leaves the status bar. A start menu is not a tray item, so the
$(menu) button in the bottom-left corner is gone and the launcher is a view
in the activity bar. It now lists three things instead of one: the shell's
own apps, the web apps installed through the Marketplace, and every program
on the machine that ships a .desktop file, with its real icon resolved from
the icon theme. Right-clicking a web app changes where it opens or removes
it.
Uninstall covers web apps only. They are the only thing this shell
installed. Removing a package would mean a password-free
pacman -Rnsforarbitrary names, which is a new path to root for the sake of a context menu
item; native entries are listed and labelled instead. No new helper, no
polkit change.
Music plays music. The Music "app" was two buttons that opened Spotify
Web and YouTube Music in a browser window - bookmarks, and useless on a
machine with no network. It is now a real player for ~/Music: a searchable
library, a queue, shuffle, repeat and a scrubber. The tray's music item
keeps its MPRIS transport, so a browser or mpv playing in the background is
still controllable from there.
Web apps can be installed. sys/webapps.ts fetches a site, reads its
<link rel="manifest">- falling back to the page's title and favicon,because most of the web publishes no manifest - keeps a copy of the icon and
writes a .desktop entry, so the app exists to the rest of the machine and
not only to this shell. Those entries are marked X-VSCodeOS-WebApp, which is
how the .desktop scan knows not to list every web app twice. Where an app
opens is chosen at install time: a Chromium --app= window, which exports
MPRIS and can play DRM audio, or an editor tab.
A Marketplace to find them. A curated catalogue compiled into the
extension, so it is browsable on a machine that has never been online, plus
an address box for anything else. The Browser grows an Install app button on
any page that declares a manifest - it is the one place in the shell that
can answer that question without fetching the page twice.
The System container is the Task Manager. The Recycle Bin view and the
tray card are out of it; the bin is a place in the Files app, which is where
a bin belongs and where it browses with the same columns as any folder.
The tray menus are popups. VS Code still has no API to anchor a popup to
a status bar item - but a quick pick is a popup, and the thing it cannot
be is anchored, which is a far smaller loss than taking the side bar away
every time somebody wants to see the clock. Items carry a keepOpen flag so a
toggle acts and the list redraws in place. The webview cards are still there
behind vscodeos.flyout.location for the sliders and the month grid; they
cannot go in the secondary side bar, because that contribution point is
behind a proposed API a built-in extension cannot use.
30 new tests cover the parsing this rests on - .desktop groups and Exec
field codes, manifest links and icon selection - because an Exec line split
the wrong way launches the wrong program, and a % left unescaped makes an
entry vanish from every menu on the machine without saying why.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_019CL3BaiEocfm9nsia4D2PV