[Windows][P1] Geen enkel-exemplaarbewaking: een tweede start deelt herstelmap en instellingen met de eerste #2627
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2627
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Op Windows (en Linux) start elke dubbelklik op een
.ocideck/.md, en elke tweede klik op de snelkoppeling, een nieuw OciDeck-proces — ook als OciDeck al draait, of nog bezig is met opstarten of afsluiten. Gebruikers die denken dat de app "niet opstart" en nog eens klikken, krijgen meerdere processen die dezelfde bestanden delen.Oorzaak
windows/runner/main.cppmaakt altijd een nieuw venster; er is geen mutex en geen doorgifte aan een draaiend exemplaar. De bestandsassociatie geeft het pad als argument (lib/main.dart:42-48,pendingLaunchFiles). macOS heeft dit probleem niet (LaunchServices activeert het bestaande proces en levert het bestand via hetocideck/open_file-kanaal).Gevolgen van twee exemplaren:
_maybeRestore,lib/widgets/app_shell.dart:341→RecoveryService.loadAll,lib/services/recovery_service.dart:301). Kiest de gebruiker daar "Herstelkopie weggooien", dan verdwijnt de crashbescherming van het werk in het éérste venster; kiest hij "Openen", dan staat hetzelfde werk dubbel open.shared_preferences.json(#2628).Voorgestelde oplossing
wWinMaineen benoemde mutex (Local\OciDeck-…). Bestaat die al: zoek het hoofdvenster (eigen vensterklasse), stuur de argumenten viaWM_COPYDATA, roepAllowSetForegroundWindow/SetForegroundWindowaan en sluit af. Het draaiende exemplaar zet ze door naar het bestaande open-bestandkanaal (OpenFileChannel), dat macOS al gebruikt.$XDG_RUNTIME_DIR(of D-Bus); mag een vervolgissue zijn.loadAllslaat momentopnames over waarvan de eigenaar nog leeft. Dat beschermt ook tegen een tweede exemplaar dat er tóch komt (bv. een andere gebruiker of een portable kopie).Wat overeind moet blijven
Bewust meerdere vensters binnen één proces (presentator + beamer via
desktop_multi_window) blijven werken; het beamervenster start metmulti_windowals eerste argument en moet door de mutex heen.Toets
Op de Windows-spiegel: start
ocideck.exe a.mdterwijl een exemplaar draait → er blijft één proces, ena.mdstaat als tabblad open in het eerste.Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).