diff --git a/CLAUDE.md b/CLAUDE.md index 2a02db6..5fe952e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -187,6 +187,11 @@ Détails : (elle finit par se poser sur le champ qu'elle remplit, il faut pouvoir la pousser). `WM_ERASEBKGND` peint le fond — la classe `TPUtilWindow` d'`AllocateHWnd` n'a **pas** de brosse de fond. +- **L'état allumé/éteint est retenu** en pref DPAPI (`lazyOn`) et repris au + démarrage par `RestoreLazyBar`, appelé depuis `FormCreate` **après** + `ApplyTitleBarTheme` et après le câblage de `OnTrayRestore` : la barrette se + peint elle-même (il lui faut le thème) et son bouton *Open* passe par cet + événement. - Position : coin bas-droit de la *work area* au premier lancement, puis **retenue** en pref DPAPI (`lazyPos`, `'x,y'`), écrite sur `WM_EXITSIZEMOVE` (une écriture par déplacement, pas une par pixel parcouru). Elle n'est reprise diff --git a/delphi-backend/Source/PM.Bridge.pas b/delphi-backend/Source/PM.Bridge.pas index 7b2bad0..aac2add 100644 --- a/delphi-backend/Source/PM.Bridge.pas +++ b/delphi-backend/Source/PM.Bridge.pas @@ -252,8 +252,12 @@ type ARestoreAfter: Boolean = False; AClearFirst: Boolean = True): Boolean; property SecureClipboard: TSecureClipboard read FSecureClipboard; property TrayAdded: Boolean read FTrayAdded; - // Show or hide the lazy strip. Idempotent. + // Show or hide the lazy strip. Idempotent, and remembered across launches. procedure SetLazyBar(AOn: Boolean); + // Re-allume la barrette si elle l'etait au dernier arret. A appeler une + // fois l'hote pret : le bouton Open a besoin de OnTrayRestore, et la + // peinture a besoin du theme. + procedure RestoreLazyBar; function LazyBarVisible: Boolean; property AutofillRegistered: Boolean read FAutofillRegistered; // Per-slot outcome of the last SetAutofillHotkeys — lets the host name @@ -418,6 +422,10 @@ const // Coin haut-gauche retenu, 'x,y'. Meme raison que l'opacite d'etre une pref // DPAPI : la barrette s'allume parfois coffre ferme. LAZY_POS_KEY = 'lazyPos'; + // Barrette allumee ou non au dernier arret. Pref DPAPI comme les deux autres : + // elle doit revenir AVANT toute ouverture de coffre, et localStorage est vide + // a chaque lancement (le port ephemere change d'origine). + LAZY_ON_KEY = 'lazyOn'; LAZY_W = 298; LAZY_H = 40; @@ -1296,6 +1304,11 @@ begin AMsg.Result := DefWindowProc(FLazyWnd, AMsg.Msg, AMsg.WParam, AMsg.LParam); end; +procedure TPMBridge.RestoreLazyBar; +begin + if GetPref(LAZY_ON_KEY) = '1' then SetLazyBar(True); +end; + procedure TPMBridge.SetLazyBar(AOn: Boolean); // BS_OWNERDRAW : le systeme garde le suivi de la souris et l'etat enfonce, @@ -1322,6 +1335,7 @@ var LX, LY, LPosX, LPosY: Integer; begin if AOn = LazyBarVisible then Exit; + if AOn then SetPref(LAZY_ON_KEY, '1') else SetPref(LAZY_ON_KEY, '0'); if not AOn then begin diff --git a/delphi-backend/UMainForm.pas b/delphi-backend/UMainForm.pas index a2b7141..232208b 100644 --- a/delphi-backend/UMainForm.pas +++ b/delphi-backend/UMainForm.pas @@ -312,6 +312,9 @@ begin FBridge.OnQuickSearchHotkey := BridgeQuickSearchHotkey; FBridge.RegisterAutofillHotkey; // Ctrl+Shift+L active from startup FBridge.ApplyTitleBarTheme(True); // dark by default, JS may toggle later + // Apres le theme et apres OnTrayRestore : la barrette se peint elle-meme, et + // son bouton Open passe par cet evenement. + FBridge.RestoreLazyBar; FAutofillTargetHWND := 0; // Delayed-Navigate timer: TTMSFNCWebBrowser (WebView2 backend) ignores // Navigate() calls until Edge Chromium finishes its async init (~1-2s).