### Godot version

4.1.1

### System information

linux

### Issue description

![image](https://github.com/godotengine/godot-proposals/assets/71937306/04dcf0e9-1c0d-4a7f-8ca9-827dd281253a)

![image](https://github.com/godotengine/godot-proposals/assets/71937306/aa70e31e-0486-455a-b8b4-7e589ec7b754)

notice how the first option in the list is never aligned with the button that spawned it.

### Steps to reproduce

right click in the FileSystem dock and hover over the `Create New →` option.

### Minimal reproduction project

editor
for (const Rect2 &E : autohide_areas) {
			if (!Rect2(Point2(), get_size()).has_point(m->get_position()) && E.has_point(m->get_position())) {
				_close_pressed();
				return;
			}
		}
		if (!item_clickable_area.has_point(m->get_position())) {
			return;
		}
		int over = _get_mouse_over(m->get_position());
		int id = (over < 0 || items[over].separator || items[over].disabled) ? -1 : (items[over].id >= 0 ? items[over].id : over);
		if (id < 0) {
			mouse_over = -1;
			control->queue_redraw();
			return;
		}
		if (!items[over].submenu.is_empty() && submenu_over != over) {
			submenu_over = over;
			submenu_timer->start();
		}
		if (over != mouse_over) {
			mouse_over = over;
			control->queue_redraw();
		}
	}
	Ref<InputEventKey> k = p_event;
	if (allow_search && k.is_valid() && k->get_unicode() && k->is_pressed()) {
		uint64_t now = OS::get_singleton()->get_ticks_msec();
		uint64_t diff = now - search_time_msec;
		uint64_t max_interval = uint64_t(GLOBAL_GET("gui/timers/incremental_search_max_interval_msec"));