Window management improvements.
[macOS] Fix transient windows not working in the full-screen mode. [macOS] Fix moving transient windows to the other screen than parent window. [macOS] Fix popup menu switch on hover. [macOS] Use content origin rect for windows position (to ensure `DS.mouse_get_position` is equal to `DS.window_get_position` + mouse position from the input events). [macOS] Fix incorrect input coordinates, when external display with different scaling in connected/disconnected. [macOS/Windows] Fix moving fullscreen windows between the screens. Add auto refocusing of the parent window, when the focused transient window is closed. Remove redundant `DS.mouse_get_absolute_position` function (returns mouse position in the screen coordinates, same as `DS.mouse_get_position`).
This commit is contained in:
@@ -674,8 +674,20 @@ void DisplayServerWindows::window_set_current_screen(int p_screen, WindowID p_wi
|
||||
ERR_FAIL_COND(!windows.has(p_window));
|
||||
ERR_FAIL_INDEX(p_screen, get_screen_count());
|
||||
|
||||
Vector2 ofs = window_get_position(p_window) - screen_get_position(window_get_current_screen(p_window));
|
||||
window_set_position(ofs + screen_get_position(p_screen), p_window);
|
||||
const WindowData &wd = windows[p_window];
|
||||
if (wd.fullscreen) {
|
||||
int cs = window_get_current_screen(p_window);
|
||||
if (cs == p_screen) {
|
||||
return;
|
||||
}
|
||||
Point2 pos = screen_get_position(p_screen);
|
||||
Size2 size = screen_get_size(p_screen);
|
||||
|
||||
MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE);
|
||||
} else {
|
||||
Vector2 ofs = window_get_position(p_window) - screen_get_position(window_get_current_screen(p_window));
|
||||
window_set_position(ofs + screen_get_position(p_screen), p_window);
|
||||
}
|
||||
}
|
||||
|
||||
Point2i DisplayServerWindows::window_get_position(WindowID p_window) const {
|
||||
|
||||
Reference in New Issue
Block a user