Enable Drag and Drop for SubViewports and Windows
Make Drag and Drop an application-wide operation. This allows do drop on Controls in other Viewports/Windows. In order to achieve this, `Viewport::_update_mouse_over` is adjusted to remember the Control, that the mouse is over (possibly within nested viewports). This Control is used as a basis for the Drop-operation, which replaces the previous algorithm, which was only aware of the topmost Viewport. Also now all nodes in the SceneTree are notified about the Drag and Drop operation, with the exception of SubViewports that are not children of SubViewportContainers.
This commit is contained in:
parent
6681f2563b
commit
60aaa017ff
7 changed files with 213 additions and 148 deletions
|
|
@ -1787,12 +1787,6 @@ void DisplayServerX11::delete_sub_window(WindowID p_id) {
|
|||
_send_window_event(windows[p_id], WINDOW_EVENT_MOUSE_EXIT);
|
||||
}
|
||||
|
||||
window_set_rect_changed_callback(Callable(), p_id);
|
||||
window_set_window_event_callback(Callable(), p_id);
|
||||
window_set_input_event_callback(Callable(), p_id);
|
||||
window_set_input_text_callback(Callable(), p_id);
|
||||
window_set_drop_files_callback(Callable(), p_id);
|
||||
|
||||
while (wd.transient_children.size()) {
|
||||
window_set_transient(*wd.transient_children.begin(), INVALID_WINDOW_ID);
|
||||
}
|
||||
|
|
@ -1836,6 +1830,12 @@ void DisplayServerX11::delete_sub_window(WindowID p_id) {
|
|||
XUnmapWindow(x11_display, wd.x11_window);
|
||||
XDestroyWindow(x11_display, wd.x11_window);
|
||||
|
||||
window_set_rect_changed_callback(Callable(), p_id);
|
||||
window_set_window_event_callback(Callable(), p_id);
|
||||
window_set_input_event_callback(Callable(), p_id);
|
||||
window_set_input_text_callback(Callable(), p_id);
|
||||
window_set_drop_files_callback(Callable(), p_id);
|
||||
|
||||
windows.erase(p_id);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue