Launcher (Windows)
Overlays taskbar, jump lists, badges et boutons de thumbnail toolbar sur Windows.
La taskbar Windows est la seconde surface de le app. Une overlay rouge dit "il y a un souci". Une jump list dit "voici ce qu'on fait le plus souvent". Un thumbnail toolbar offre des contrôles transport sans focuser la fenêtre. launcher-windows expose les quatre morceaux du shell Windows qui pilotent tout ça.
TL;DR
- Quatre API dans un module — utiliser ce dont on a besoin :
WindowsOverlayIcon— petite icône 16x16 sur le bouton de la taskbar (tous formats de packaging).WindowsJumpListManager— catégories et tâches dans le menu clic-droit de la taskbar (tous formats).WindowsThumbnailToolbar— jusqu'à 7 boutons dans la preview du thumbnail (tous formats).WindowsBadgeManager— compte numérique / badge glyphe sur le bouton et la Start tile (APPX / MSIX uniquement).
- Tout passe par COM Windows (
ITaskbarList3) ou WinRT en dessous ; les clics reviennent sur l'EDT AWT. - Les clics jump list lancent un nouveau process — combine avec
SingleInstanceManager+DeepLinkHandlerpour les renvoyer vers la primaire.
Installation
dependencies {
implementation("dev.nucleusframework:nucleus.launcher-windows:<version>")
}Quickstart
Overlay
import dev.nucleusframework.launcher.windows.*
WindowsOverlayIcon.set(
window,
TaskbarIconSource.FromStock(StockIcon.WARNING),
description = "1 message non lu",
)
WindowsOverlayIcon.clear(window)Jump list
WindowsJumpListManager.setCategories(
categories = listOf(
JumpListCategory("Récents", items = listOf(
JumpListItem("Projet A", arguments = "myapp://open?project=a"),
JumpListItem("Projet B", arguments = "myapp://open?project=b"),
)),
),
tasks = listOf(
JumpListItem("Nouvelle fenêtre", arguments = "myapp://new"),
JumpListItem.SEPARATOR,
JumpListItem("Préférences", arguments = "myapp://settings"),
),
)Thumbnail toolbar
WindowsThumbnailToolbar.setButtons(
window,
buttons = listOf(
ThumbnailToolbarButton(id = 0, tooltip = "Précédent", icon = TaskbarIconSource.FromStock(StockIcon.MEDIA_REWIND)),
ThumbnailToolbarButton(id = 1, tooltip = "Lecture", icon = TaskbarIconSource.FromStock(StockIcon.MEDIA_PLAY)),
ThumbnailToolbarButton(id = 2, tooltip = "Suivant", icon = TaskbarIconSource.FromStock(StockIcon.MEDIA_FORWARD)),
),
onClick = { id -> handleTransport(id) },
)Badge (APPX / MSIX seulement)
WindowsBadgeManager.setBadge(window, BadgeGlyph.NEW_MESSAGE)
WindowsBadgeManager.setBadge(window, count = 5)Comment ça marche
Le module embarque des bridges natifs qui parlent directement au shell Windows :
- Overlay et thumbnail toolbar passent par l'interface COM
ITaskbarList3, keyée par le HWND de lajava.awt.Window. COM est initialisé paresseusement. - Jump lists passent par
ICustomDestinationList— Windows possède le menu, donc les clics ne passent pas par le process. L'OS lance un nouvel.exeavec lesargumentsde l'item ajoutés en ligne de commande. Combine avecSingleInstanceManager+DeepLinkHandlerpour les rediriger vers la primaire. - Badges demandent un AUMID (Application User Model ID) que Windows n'accorde qu'aux apps packagées. D'où la limitation APPX/MSIX. L'AUMID est dérivé de
NucleusApp.aumid/appId.
Les trois autres API marchent aussi pour les apps non packagées — on peut livrer un .exe Win32 et avoir quand même jump list, overlay et thumbnail toolbar.
Référence
Stock icons
Toute API qui accepte une icône prend un TaskbarIconSource :
TaskbarIconSource.FromStock(stockIcon)— 94 icônes du shell Windows (StockIcon.WARNING,.ERROR,.SHIELD,.MEDIA_PLAY, ...). Pas de fichier à fournir.TaskbarIconSource.FromFile(path)— fichier.icosur disque.TaskbarIconSource.FromResource(dllPath, index)— index d'icône dans une DLL de resources.
Éléments jump list
| Type | Usage |
|---|---|
JumpListCategory(name, items) | Groupe nommé custom. |
JumpListItem(title, arguments, icon?, description?) | Une entrée cliquable. |
JumpListItem.SEPARATOR | Séparateur (tasks uniquement). |
KnownCategory.Recent / Frequent | Laisse Windows peupler depuis les file associations. |
Boutons thumbnail
ThumbnailToolbarButton(id, tooltip, icon?, enabled, hidden, noBackground, dismissOnClick, nonInteractive) — les boutons persistent pour la durée de vie de la fenêtre ; unregister(window) les cache, setButtons les ré-affiche.
Badges
WindowsBadgeManager.setBadge(window, glyph) / setBadge(window, count = 5) / clear(window). Glyphes : NEW_MESSAGE, ALERT, BUSY, AWAY, AVAILABLE, ERROR, etc.
Notes
- Les jump list items demandent un vrai exécutable. Ils ne se déclenchent pas en
./gradlew run— teste depuisrunDistributableou un build packagé. - Pour des progress bars cross-platform dans le bouton de taskbar (pas l'overlay), utilise
taskbar-progress. - Le module embarque la metadata reachability GraalVM — pas de config manuelle pour native-image.