2D: Zifferntasten während Punkt-Griff-Bearbeitung nicht mehr als Werkzeug-Wechsel

Bug (Nutzer-Report direkt nach dem vorigen Commit): sobald man nach Tab
einen Länge-/Winkel-Wert eintippte, wechselte die App mitten in die
Griff-Bearbeitung ins Zeichenwerkzeug (z.B. "3" -> Kreis-Werkzeug).

Ursache: useToolNumberShortcuts (Vectorworks-Zifferntasten fürs
Werkzeug wählen) erlaubt Zifferntasten auch bei fokussiertem, leerem
Befehlsfeld, SOFERN die Zeichen-Engine gerade keinen Befehl mit
Feldern laufen hat (`!eng.hasFields() && !eng.acceptsFreeText()`).
Genau das trifft während der Griff-Bearbeitung IMMER zu, da dort gar
keine Engine-Befehl läuft, sondern der separate Feld-Controller aus
useGripEditing.ts -- der Wächter kannte diesen zweiten Fall nicht.

Fix: gripDragInfoRef (schon vorhanden, zeigt "ein Punkt-Griff ist
bewaffnet" an) wird von useGripEditing zurückgegeben und an
useToolNumberShortcuts durchgereicht; dessen Handler bricht jetzt ganz
vorne ab, wenn ein Griff bewaffnet ist -- unabhängig davon, ob/wo
gerade Fokus liegt. Der useToolNumberShortcuts-Aufruf in App.tsx
musste dafür hinter den useGripEditing()-Aufruf wandern (Reihenfolge
war vorher umgekehrt, gripDragInfoRef existierte an der alten Stelle
noch nicht).
This commit is contained in:
2026-08-21 23:13:02 +02:00
parent a6c984e517
commit f9b202ac25
3 changed files with 25 additions and 5 deletions
+12 -5
View File
@@ -949,11 +949,11 @@ export default function App() {
// Globaler Undo/Redo-Shortcut — siehe state/useKeyboardShortcuts.ts.
useUndoRedoShortcut(undo, redo);
// Nummern-Shortcuts für Zeichenwerkzeuge (Vectorworks-Stil): 1 Text, 2 Linie,
// 3 Kreis, 4 Rechteck, 5 Polylinie, 6 Wand, 7 Decke, 8 Fenster, 9 Türe, 0 Raum
// — sowie Esc/Enter/Backspace für das aktive Zeichenwerkzeug. Siehe
// state/useKeyboardShortcuts.ts.
useToolNumberShortcuts(onSelectTool, activeLevel.kind === "floor", engineRef);
// Esc/Enter/Backspace für das aktive Zeichenwerkzeug. Siehe
// state/useKeyboardShortcuts.ts. Die Zifferntasten-Werkzeugwahl
// (useToolNumberShortcuts) folgt weiter unten, NACH useGripEditing() — sie
// braucht dessen gripDragInfoRef, um Zifferntasten während einer Griff-
// Bearbeitung nicht als Werkzeug-Wechsel misszuverstehen.
useActiveToolKeys(activeTool, toolCtx, engineRef, toolStateRef, setDraft, setActiveTool, setProject);
// ── Editier-Griffe (Grips) des einzeln selektierten Elements ──────────────
@@ -1294,6 +1294,7 @@ export default function App() {
gripEditFields,
cycleGripEditField,
submitGripEditValue,
gripDragInfoRef,
} = useGripEditing({
project,
selectedDrawing,
@@ -1327,6 +1328,12 @@ export default function App() {
moveElementByOf,
});
// Nummern-Shortcuts für Zeichenwerkzeuge (Vectorworks-Stil): 1 Text, 2 Linie,
// 3 Kreis, 4 Rechteck, 5 Polylinie, 6 Wand, 7 Decke, 8 Fenster, 9 Türe, 0 Raum.
// Siehe state/useKeyboardShortcuts.ts. Braucht gripDragInfoRef (s. o.), daher
// erst hier nach useGripEditing() registriert.
useToolNumberShortcuts(onSelectTool, activeLevel.kind === "floor", engineRef, gripDragInfoRef);
// Feld-Zustand fürs Cursor-HUD (neben der Maus, VW-Stil): läuft ein
// Punkt-Griff-Drag, hat er Vorrang (dieselben Felder wie unten in der
// Befehlszeile — Länge/Winkel-Tab-Zyklus), sonst die Befehls-Engine-Felder