Phase 6-07a: Fensterlokale Control-Menüs und Windows-Testkorrekturen

Control-Menüs öffnen für alle Fensterarten am [≡]-Symbol des aktiven
Fensters: eigener Auswahlzustand statt Kopplung an die Menüleiste,
bevorzugt unter der Titelzeile, bei Platzmangel nach oben aufgeklappt,
am rechten Rand nur so weit nach links wie nötig. Regressionstest über
TestBackend für Code-, Projekt-, Output-, Immediate-, Debug- und
Hilfefenster, maximiert, minimiert, Rand und Maus.

Nebenbefunde der Windows-Testausführung: Temporärdatei vor sync_all
schreibend öffnen (Zugriff verweigert), relative Projektverweise immer
mit / schreiben, zeilenendenneutrale Vergleiche in Referenzmatrix-,
Kompatibilitäts- und MAK-Beispieltests, DriveListBox-Zeichenbild
plattformneutral. Korpus-Sollausgaben per .gitattributes auf LF.

Specs ide-oberflaeche und ide-projekte synchronisiert, Change archiviert.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 11:02:40 +02:00
parent 6e742d96b1
commit 5a1a284505
22 changed files with 572 additions and 107 deletions

View File

@@ -0,0 +1,28 @@
## Why
Die Validierung in Phase 6 (Change 07) zeigt am 08.09.2026 eine UI-Regression beim Öffnen von Fenstermenüs (Control-Menüs) aller Fenster, exemplarisch am Run-Fenster: Das Menü erscheint links oben unter der Menüleiste statt am Control-Menü-Symbol `[≡]` des Fensters, und gleichzeitig wird der Hauptmenüeintrag „File“ als aktiv hervorgehoben. Ursache ist, dass das Control-Menü den Zustand der Menüleiste (Index 0 = File) wiederverwendet und der Renderer den Aufklappbereich fest in Zeile 1 platziert. Die bestehende Spezifikation fordert nur, dass ein Control-Menü existiert und per Alt+Minus bedienbar ist; Ort und Abgrenzung zur Menüleiste sind nicht festgelegt. Diese Lücke wird hier geschlossen.
## What Changes
- Control-Menüs werden für alle Fensterarten nach einer einzigen Regel fensterlokal spezifiziert: Der Aufklappbereich SHALL an das `[≡]`-Symbol des aktiven Fensters angehängt sein, linke Spalte gleich Symbolspalte, und bevorzugt direkt unter der Titelzeile erscheinen, unabhängig davon, ob das Fenster normal, maximiert oder minimiert ist.
- Reicht der Platz unterhalb nicht aus (etwa bei minimierten Fenstern am unteren Rand), SHALL das Menü nach oben aufklappen und mit seiner untersten Zeile an die Titelzeile grenzen. Reicht der Platz rechts nicht aus, SHALL es nur so weit nach links rücken, dass es passt und die Symbolspalte weiter überdeckt. Es SHALL immer vollständig in der Arbeitsfläche liegen und sichtbar mit dem Fenster verbunden bleiben.
- Ein offenes Control-Menü MUST NOT einen Titel der Menüleiste hervorheben oder als Menüleisten-Auswahl gelten; Menüleiste und Control-Menü sind getrennte Zustände mit gemeinsamer Tastenführung (Auf/Ab, Enter, Mnemonic, Esc).
- Maus auf `[≡]` und Alt+Minus SHALL identisch wirken; Esc oder ein Klick außerhalb SHALL das Control-Menü schließen und den Fokus im Fenster belassen.
- Regressionsnachweis über TestBackend-Renderprüfung für mehrere Fensterarten: Position relativ zum Fensterrechteck, Aufklappen nach oben bei minimiertem Fenster, Linksverschiebung am rechten Rand, maximiertes Fenster, kein hervorgehobener Menüleistentitel.
## Capabilities
### New Capabilities
Keine.
### Modified Capabilities
- `ide-oberflaeche`: Requirement „MDI-Fenster und Fokus“ um die für alle Fensterarten gleiche Anheft- und Aufklappregel des Control-Menüs und dessen Abgrenzung von der Menüleiste präzisieren.
- `ide-projekte`: Requirement „Verlustfreies Speichern und Wechseln“ um plattformneutrale relative Verweise mit `/` ergänzen (Nebenbefund der Windows-Testausführung).
## Impact
Betroffen sind `crates/tb-ide/src/app.rs` (Zustand `control_menu`/`menu`, Tastenverteilung), `crates/tb-ide/src/render.rs` (Menüleisten-Hervorhebung, Popup-Position) und `crates/tb-ide/tests/app.rs`. Keine Änderung an Befehlen, Kürzeln, Optionen oder Dokumentformaten; `docs/ide-referenz.md` Abschnitt 2 wird um den Ort des Control-Menüs ergänzt. Als Nebenbefunde der Testausführung unter Windows werden zusätzlich `crates/tb-export/src/lib.rs` (Temporärdatei vor `sync_all` schreibend öffnen), `crates/tb-vm/src/project_io.rs` (relative Projektverweise immer mit `/`) sowie die zeilenendenabhängigen Vergleiche in `tb-cli`- und `tb-vm`-Tests korrigiert, damit der vollständige Workspace-Lauf auf allen Plattformen besteht.
Eigenständiger Korrektur-Change innerhalb Phase 6, ausgelöst durch die Validierung in 07. Er ist Voraussetzung für 07 Aufgabe 2.3 (Fachbefunde beheben, null offene Befunde); 07 bleibt Eigentümer der Phasenabnahme.