diff options
| author | Andreas Haas | 2016-07-01 15:31:37 +0200 |
|---|---|---|
| committer | Andreas Haas | 2016-07-01 16:55:53 +0200 |
| commit | 6856c5249104d2b69fe297ff7546092e3bb23555 (patch) | |
| tree | c58519110ceacda48508e877957162dd63d7b83e /platform/windows/os_windows.cpp | |
| parent | 729e61e1d5faedeee116f3e3189c5453e206643e (diff) | |
| download | godot-6856c5249104d2b69fe297ff7546092e3bb23555.tar.gz godot-6856c5249104d2b69fe297ff7546092e3bb23555.tar.zst godot-6856c5249104d2b69fe297ff7546092e3bb23555.zip | |
Windows: prevent freeze while moving or resizing the game window.
When moving or resizing the window, Windows spins up a seperate event-loop, effectively blocking the normal one.
To work around this, we're starting a timer that will continue sending WM_TIMER messages which we can use to keep the mainloop running.
fixes #4695
Diffstat (limited to 'platform/windows/os_windows.cpp')
| -rw-r--r-- | platform/windows/os_windows.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 9421e0d48..89de969cf 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -612,6 +612,20 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } //return 0; // Jump Back } break; + + case WM_ENTERSIZEMOVE: { + move_timer_id = SetTimer(hWnd, 1, USER_TIMER_MINIMUM,(TIMERPROC) NULL); + } break; + case WM_EXITSIZEMOVE: { + KillTimer(hWnd, move_timer_id); + } break; + case WM_TIMER: { + if (wParam == move_timer_id) { + process_key_events(); + Main::iteration(); + } + } break; + case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYUP: @@ -1140,7 +1154,7 @@ void OS_Windows::initialize(const VideoMode& p_desired,int p_video_driver,int p_ DragAcceptFiles(hWnd,true); - + move_timer_id = 1; } void OS_Windows::set_clipboard(const String& p_text) { |
