godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.22k stars 21.22k forks source link

Dialog content goes outside window #86767

Closed KoBeWi closed 9 months ago

KoBeWi commented 10 months ago

Tested versions

4.3 fbaab3c Does not happen in 4.2

System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)

Issue description

https://github.com/godotengine/godot/assets/2223172/1378d93c-9b1f-4348-882e-607f50569051

Seems to be regression from #84151

Steps to reproduce

  1. Right click node -> Attach script
  2. Enable Built-in Script

Minimal reproduction project (MRP)

N/A

YeldhamDev commented 10 months ago

I'm unable to reproduce it on Fedora Linux 39 (Wayland), I wonder if it's a Windows-specific bug? Can someone with a mac try it?

KoBeWi commented 9 months ago

This also affects the progress dialog: image

sabvdf commented 9 months ago

Unable to reproduce it on macOS Sonoma (latest, 14.2.1, M1, retina)

Calinou commented 9 months ago

I can reproduce this on Linux (Fedora 39 KDE X11) on 4.3.dev3.

YeldhamDev commented 9 months ago

@KoBeWi @Calinou Could you guys test if the following code section is reached when the contents of the dialog window grows? It does on my end.

https://github.com/godotengine/godot/pull/84151/files#diff-98ae49b43f623c9f779ac51456c6778f8a51f823ea7f83f60582e65d49ac2991R1145-R1148

KoBeWi commented 9 months ago

It's not reached. Where does your call come from? (i.e. stack trace)

YeldhamDev commented 9 months ago
Window::_update_viewport_size@0x0000000005345008 (/var/home/michael/Development/Projects/godot/scene/main/window.cpp:1197)
Window::_update_window_size@0x000000000534439a (/var/home/michael/Development/Projects/godot/scene/main/window.cpp:1051)
Window::_update_child_controls@0x0000000005347272 (/var/home/michael/Development/Projects/godot/scene/main/window.cpp:1555)
call_with_variant_args_helper<Window>(Window*, void (Window::*)(), Variant const**, Callable::CallError&, IndexSequence<>)@0x00000000044dd2a0 (/var/home/michael/Development/Projects/godot/core/variant/binder_common.h:304)
call_with_variant_args<Window>@0x00000000044dcd16 (/var/home/michael/Development/Projects/godot/core/variant/binder_common.h:418)
CallableCustomMethodPointer<Window>::call@0x00000000044dbe12 (/var/home/michael/Development/Projects/godot/core/object/callable_method_pointer.h:98)
Callable::callp@0x0000000006ffb3e9 (/var/home/michael/Development/Projects/godot/core/variant/callable.cpp:56)
CallQueue::_call_function@0x000000000731dfe7 (/var/home/michael/Development/Projects/godot/core/object/message_queue.cpp:221)
CallQueue::flush@0x000000000731e70c (/var/home/michael/Development/Projects/godot/core/object/message_queue.cpp:326)
SceneTree::physics_process@0x00000000052c51cd (/var/home/michael/Development/Projects/godot/scene/main/scene_tree.cpp:471)
Main::iteration@0x0000000002b3626d (/var/home/michael/Development/Projects/godot/main/main.cpp:3934)
OS_LinuxBSD::run@0x0000000002a7dfde (/var/home/michael/Development/Projects/godot/platform/linuxbsd/os_linuxbsd.cpp:938)
main@0x0000000002a76a90 (/var/home/michael/Development/Projects/godot/platform/linuxbsd/godot_linuxbsd.cpp:86)
KoBeWi commented 9 months ago

Well mine is the same:

Window::_update_viewport_size() Line 1196 (c:\godot_source\scene\main\window.cpp:1196)
Window::_update_window_size() Line 1052 (c:\godot_source\scene\main\window.cpp:1052)
Window::_update_child_controls() Line 1557 (c:\godot_source\scene\main\window.cpp:1557)
call_with_variant_args_helper<Window>(Window * p_instance, void(Window::*)() p_method, const Variant * * p_args, Callable::CallError & r_error, IndexSequence<> __formal) Line 309 (c:\godot_source\core\variant\binder_common.h:309)
call_with_variant_args<Window>(Window * p_instance, void(Window::*)() p_method, const Variant * * p_args, int p_argcount, Callable::CallError & r_error) Line 419 (c:\godot_source\core\variant\binder_common.h:419)
CallableCustomMethodPointer<Window>::call(const Variant * * p_arguments, int p_argcount, Variant & r_return_value, Callable::CallError & r_call_error) Line 99 (c:\godot_source\core\object\callable_method_pointer.h:99)
Callable::callp(const Variant * * p_arguments, int p_argcount, Variant & r_return_value, Callable::CallError & r_call_error) Line 57 (c:\godot_source\core\variant\callable.cpp:57)
CallQueue::_call_function(const Callable & p_callable, const Variant * p_args, int p_argcount, bool p_show_error) Line 222 (c:\godot_source\core\object\message_queue.cpp:222)
CallQueue::flush() Line 328 (c:\godot_source\core\object\message_queue.cpp:328)
SceneTree::physics_process(double p_time) Line 473 (c:\godot_source\scene\main\scene_tree.cpp:473)
Main::iteration() Line 3934 (c:\godot_source\main\main.cpp:3934)
OS_Windows::run() Line 1476 (c:\godot_source\platform\windows\os_windows.cpp:1476)

With the difference that the condition is not entered, because the size is the same.

akien-mga commented 9 months ago

For context, in the duplicate #88128 this was bisected as a regression from #84151.

YeldhamDev commented 9 months ago

UPDATE: Managed to finally reproduce this on my end to understand what's actually happening. The window contents themselves are not going outside as I thought they were, it's just that damn panel not shrinking back when its labels were removed, which is why the notification for size changing wasn't being triggered, because the size wasn't actually changed in the end.

The problem is that I don't have a clue on how to solve this besides reintroducing NOTIFICATION_WM_SIZE_CHANGED's old behavior.