From f4cfe1759401c6936104a77136ec4d67bee4ad14 Mon Sep 17 00:00:00 2001 From: "Hermes (scopedvr-dev)" Date: Tue, 20 Oct 2026 18:19:42 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Datei-Men=C3=BC=20komplett=20tot=20?= =?UTF-8?q?=E2=80=94=20id=5Fpressed=20landete=20als=20Argument=20VOR=20dem?= =?UTF-8?q?=20Methodennamen=20(Sly-Befund=2020.10.=20=E2=80=9EKartengr?= =?UTF-8?q?=C3=B6=C3=9Fe=20=C3=A4ndern=20tut=20nichts=E2=80=9C).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit popup.id_pressed.connect(main.call.bind("_on_menu_action")) rief effektiv call(6, "_on_menu_action") → „Cannot convert argument 1 from int to StringName“ (map-builder.log 20.10., 2 Treffer) — KEIN Menü-Eintrag tat etwas (Neue Map/Öffnen/Speichern/Kartengröße/Updates). Alle anderen .call.bind-Stellen hängen an arg-losen Signalen (pressed/timeout) und waren unbeeinträchtigt. Fix: Lambda mit expliziter Reihenfolge (Stil wie grid_btn/contours_btn). Regression: test_resize_dialog stellt jetzt den echten Klick nach (id_pressed.emit(6) am Datei-Popup) — vorher rief die Suite _open_resize_dialog() direkt auf und sah den Bruch nicht. Suiten: test_resize_dialog 42 OK, test_theme 35 OK, test_gui_smoke 92 OK, test_ux 137 OK. --- src/ui/panels/toolbar.gd | 9 ++++++++- tests/test_resize_dialog.gd | 20 +++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/ui/panels/toolbar.gd b/src/ui/panels/toolbar.gd index 44cecb1..7b80a85 100644 --- a/src/ui/panels/toolbar.gd +++ b/src/ui/panels/toolbar.gd @@ -61,7 +61,14 @@ func build() -> void: popup.add_separator() popup.add_item("🔄 Updates prüfen", 7) popup.add_item("Beenden", 4) - popup.id_pressed.connect(main.call.bind("_on_menu_action")) + # FIX 20.10. (Sly-Befund „Kartengröße ändern tut nichts“): id_pressed sendet + # die Menü-ID. main.call.bind("_on_menu_action") hängt die ID aber ALS + # ARGUMENT an call() → effektiv call(6, "_on_menu_action") → + # „Cannot convert argument 1 from int to StringName“ (map-builder.log + # 20.10.) — das GESAMTE Datei-Menü verpufft, kein Eintrag tut etwas. + # Lambda macht die Reihenfolge (Name zuerst, ID als Argument) explizit, + # Stil wie grid_btn/contours_btn oben. + popup.id_pressed.connect(func(id: int) -> void: main.call("_on_menu_action", id)) add_child(file_menu) undo_btn = Button.new() diff --git a/tests/test_resize_dialog.gd b/tests/test_resize_dialog.gd index 243cbb1..6faf797 100644 --- a/tests/test_resize_dialog.gd +++ b/tests/test_resize_dialog.gd @@ -251,4 +251,22 @@ func _test_main_wiring() -> void: _check((main.doc["spawn_zones"]["0"]["points"] as Array).size() == before_count, "Drop aus: draußen liegende Spawn-Punkte bleiben in der Map") _check(not bool(SvmapIO.save_to_file("/tmp/r3_drop_aus.svmap", main.doc)["ok"]), - "Drop aus + Punkte draußen: Speichern blockiert (V9), wie im Dialog gewarnt") \ No newline at end of file + "Drop aus + Punkte draußen: Speichern blockiert (V9), wie im Dialog gewarnt") + + # REGRESSION 20.10. (Sly-Befund „Kartengröße ändern tut nichts“): der + # ECHTE UI-Pfad ist das id_pressed-SIGNAL des Datei-Popups. Vorher hing + # main.call.bind("_on_menu_action") daran — die Menü-ID landete als + # ARGUMENT VOR dem Methodennamen (call(6, "_on_menu_action")) → + # „Cannot convert argument 1 from int to StringName“, das GESAMTE + # Datei-Menü war tot. Diese Suite rief _open_resize_dialog() direkt auf + # und sah den Bruch nicht — jetzt wird der echte Klick nachgestellt. + var file_menu_btn: MenuButton = null + for n in main.find_children("*", "MenuButton", true, false): + if n is MenuButton and n.text == "Datei": + file_menu_btn = n + _check(file_menu_btn != null, "Datei-Menü (MenuButton) gefunden") + if file_menu_btn != null: + main.resize_dialog.hide() + (file_menu_btn.get_popup() as PopupMenu).id_pressed.emit(6) + _check(main.resize_dialog.visible, + "Echter Menü-Klick (id_pressed=6) öffnet den Resize-Dialog") \ No newline at end of file