diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-09-20 10:53:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-20 10:53:03 +0200 |
commit | 275aa4edb8a583ab3ee54fa5df62bcb999a49775 (patch) | |
tree | acb2f4e64ba5c094141416c7fe493190cf591041 /platform | |
parent | a24e870c7192775f5e03d53b14a23d4e42472eb3 (diff) | |
parent | 131f5dbb54878692475510f55b362b0b33bfb96f (diff) |
Merge pull request #52858 from SilverCreekEntertainment/fix-cursor-disappearing-in-windows-fullscreen-4.x
Fix Windows cursor with trails disappearing in fullscreen
Diffstat (limited to 'platform')
-rw-r--r-- | platform/windows/display_server_windows.cpp | 16 | ||||
-rw-r--r-- | platform/windows/display_server_windows.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 1723026849..6402702415 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -955,6 +955,11 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) _update_window_style(p_window, false); MoveWindow(wd.hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); + + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0); + restore_mouse_trails = 0; + } } else if (p_mode == WINDOW_MODE_WINDOWED) { ShowWindow(wd.hWnd, SW_RESTORE); wd.maximized = false; @@ -994,6 +999,13 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window) _update_window_style(false); MoveWindow(wd.hWnd, pos.x, pos.y, size.width, size.height, TRUE); + + // If the user has mouse trails enabled in windows, then sometimes the cursor disappears in fullscreen mode. + // Save number of trails so we can restore when exiting, then turn off mouse trails + SystemParametersInfoA(SPI_GETMOUSETRAILS, 0, &restore_mouse_trails, 0); + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, 0, 0, 0); + } } } @@ -3395,4 +3407,8 @@ DisplayServerWindows::~DisplayServerWindows() { memdelete(context_vulkan); } #endif + + if (restore_mouse_trails > 1) { + SystemParametersInfoA(SPI_SETMOUSETRAILS, restore_mouse_trails, 0, 0); + } } diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 06014fbabe..c02a90c543 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -403,6 +403,7 @@ class DisplayServerWindows : public DisplayServer { void _get_window_style(bool p_main_window, bool p_fullscreen, bool p_borderless, bool p_resizable, bool p_maximized, bool p_no_activate_focus, DWORD &r_style, DWORD &r_style_ex); MouseMode mouse_mode; + int restore_mouse_trails = 0; bool alt_mem = false; bool gr_mem = false; bool shift_mem = false; |