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