32
32
33
33
#include " drop_target_windows.h"
34
34
#include " os_windows.h"
35
+ #include " scene/main/window.h"
35
36
#include " wgl_detect_version.h"
36
37
37
38
#include " core/config/project_settings.h"
83
84
84
85
#define WM_INDICATOR_CALLBACK_MESSAGE (WM_USER + 1 )
85
86
87
+ int constexpr FS_TRANSP_BORDER = 2 ;
88
+
86
89
static String format_error_message (DWORD id) {
87
90
LPWSTR messageBuffer = nullptr ;
88
91
size_t size = FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
@@ -167,8 +170,11 @@ void DisplayServerWindows::_set_mouse_mode_impl(MouseMode p_mode) {
167
170
168
171
WindowData &wd = windows[window_id];
169
172
173
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
174
+
170
175
RECT clipRect;
171
176
GetClientRect (wd.hWnd , &clipRect);
177
+ clipRect.right -= off_x;
172
178
ClientToScreen (wd.hWnd , (POINT *)&clipRect.left );
173
179
ClientToScreen (wd.hWnd , (POINT *)&clipRect.right );
174
180
ClipCursor (&clipRect);
@@ -1925,23 +1931,37 @@ void DisplayServerWindows::window_set_mouse_passthrough(const Vector<Vector2> &p
1925
1931
1926
1932
void DisplayServerWindows::_update_window_mouse_passthrough (WindowID p_window) {
1927
1933
ERR_FAIL_COND (!windows.has (p_window));
1928
- if (windows[p_window].mpass || windows[p_window].mpath .size () == 0 ) {
1929
- SetWindowRgn (windows[p_window].hWnd , nullptr , FALSE );
1934
+
1935
+ const WindowData &wd = windows[p_window];
1936
+ bool clip_pixel = (wd.multiwindow_fs || (wd.borderless && wd.maximized ));
1937
+ bool pass_set = (wd.mpath .size () > 0 );
1938
+ if (!clip_pixel && !pass_set) {
1939
+ SetWindowRgn (wd.hWnd , nullptr , TRUE );
1930
1940
} else {
1931
- POINT *points = (POINT *)memalloc (sizeof (POINT) * windows[p_window].mpath .size ());
1932
- for (int i = 0 ; i < windows[p_window].mpath .size (); i++) {
1933
- if (windows[p_window].borderless ) {
1934
- points[i].x = windows[p_window].mpath [i].x ;
1935
- points[i].y = windows[p_window].mpath [i].y ;
1936
- } else {
1937
- points[i].x = windows[p_window].mpath [i].x + GetSystemMetrics (SM_CXSIZEFRAME);
1938
- points[i].y = windows[p_window].mpath [i].y + GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION);
1941
+ HRGN region = nullptr ;
1942
+ if (pass_set) {
1943
+ Vector<POINT> points;
1944
+ points.resize (wd.mpath .size ());
1945
+ POINT *points_ptr = points.ptrw ();
1946
+ for (int i = 0 ; i < wd.mpath .size (); i++) {
1947
+ if (wd.borderless ) {
1948
+ points_ptr[i].x = wd.mpath [i].x ;
1949
+ points_ptr[i].y = wd.mpath [i].y ;
1950
+ } else {
1951
+ points_ptr[i].x = wd.mpath [i].x + GetSystemMetrics (SM_CXSIZEFRAME);
1952
+ points_ptr[i].y = wd.mpath [i].y + GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION);
1953
+ }
1939
1954
}
1955
+ region = CreatePolygonRgn (points.ptr (), points.size (), ALTERNATE);
1956
+ } else {
1957
+ region = CreateRectRgn (0 , 0 , wd.width , wd.height );
1940
1958
}
1941
-
1942
- HRGN region = CreatePolygonRgn (points, windows[p_window].mpath .size (), ALTERNATE);
1943
- SetWindowRgn (windows[p_window].hWnd , region, FALSE );
1944
- memfree (points);
1959
+ if (clip_pixel) {
1960
+ HRGN region_clip = CreateRectRgn (0 , 0 , wd.width , wd.height );
1961
+ CombineRgn (region, region, region_clip, RGN_AND);
1962
+ DeleteObject (region_clip);
1963
+ }
1964
+ SetWindowRgn (wd.hWnd , region, FALSE );
1945
1965
}
1946
1966
}
1947
1967
@@ -1972,14 +1992,16 @@ void DisplayServerWindows::window_set_current_screen(int p_screen, WindowID p_wi
1972
1992
if (wd.fullscreen ) {
1973
1993
Point2 pos = screen_get_position (p_screen) + _get_screens_origin ();
1974
1994
Size2 size = screen_get_size (p_screen);
1995
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
1975
1996
1976
- MoveWindow (wd.hWnd , pos.x , pos.y , size.width , size.height , TRUE );
1997
+ MoveWindow (wd.hWnd , pos.x , pos.y , size.width + off_x , size.height , TRUE );
1977
1998
} else if (wd.maximized ) {
1978
1999
Point2 pos = screen_get_position (p_screen) + _get_screens_origin ();
1979
2000
Size2 size = screen_get_size (p_screen);
2001
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
1980
2002
1981
2003
ShowWindow (wd.hWnd , SW_RESTORE);
1982
- MoveWindow (wd.hWnd , pos.x , pos.y , size.width , size.height , TRUE );
2004
+ MoveWindow (wd.hWnd , pos.x , pos.y , size.width + off_x , size.height , TRUE );
1983
2005
ShowWindow (wd.hWnd , SW_MAXIMIZE);
1984
2006
} else {
1985
2007
Rect2i srect = screen_get_usable_rect (p_screen);
@@ -2228,7 +2250,8 @@ Size2i DisplayServerWindows::window_get_size(WindowID p_window) const {
2228
2250
2229
2251
RECT r;
2230
2252
if (GetClientRect (wd.hWnd , &r)) { // Retrieves area inside of window border, including decoration.
2231
- return Size2 (r.right - r.left , r.bottom - r.top );
2253
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
2254
+ return Size2 (r.right - r.left - off_x, r.bottom - r.top );
2232
2255
}
2233
2256
return Size2 ();
2234
2257
}
@@ -2241,7 +2264,8 @@ Size2i DisplayServerWindows::window_get_size_with_decorations(WindowID p_window)
2241
2264
2242
2265
RECT r;
2243
2266
if (GetWindowRect (wd.hWnd , &r)) { // Retrieves area inside of window border, including decoration.
2244
- return Size2 (r.right - r.left , r.bottom - r.top );
2267
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
2268
+ return Size2 (r.right - r.left - off_x, r.bottom - r.top );
2245
2269
}
2246
2270
return Size2 ();
2247
2271
}
@@ -2280,9 +2304,6 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_initiali
2280
2304
r_style |= WS_MAXIMIZEBOX;
2281
2305
}
2282
2306
}
2283
- if ((p_fullscreen && p_multiwindow_fs) || p_maximized_fs) {
2284
- r_style |= WS_BORDER; // Allows child windows to be displayed on top of full screen.
2285
- }
2286
2307
} else {
2287
2308
if (p_resizable) {
2288
2309
if (p_minimized) {
@@ -2340,8 +2361,8 @@ void DisplayServerWindows::_update_window_style(WindowID p_window, bool p_repain
2340
2361
if (p_repaint) {
2341
2362
RECT rect;
2342
2363
GetWindowRect (wd.hWnd , &rect);
2343
-
2344
- MoveWindow (wd.hWnd , rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top , TRUE );
2364
+ int off_x = (wd. multiwindow_fs || (!wd. fullscreen && wd. borderless && wd. maximized )) ? FS_TRANSP_BORDER : 0 ;
2365
+ MoveWindow (wd.hWnd , rect.left , rect.top , rect.right - rect.left + off_x , rect.bottom - rect.top , TRUE );
2345
2366
}
2346
2367
}
2347
2368
@@ -2359,6 +2380,10 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
2359
2380
bool was_fullscreen = wd.fullscreen ;
2360
2381
wd.was_fullscreen_pre_min = false ;
2361
2382
2383
+ if (p_mode == WINDOW_MODE_MAXIMIZED && wd.borderless ) {
2384
+ p_mode = WINDOW_MODE_FULLSCREEN;
2385
+ }
2386
+
2362
2387
if (wd.fullscreen && p_mode != WINDOW_MODE_FULLSCREEN && p_mode != WINDOW_MODE_EXCLUSIVE_FULLSCREEN) {
2363
2388
RECT rect;
2364
2389
@@ -2410,11 +2435,10 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
2410
2435
2411
2436
if (p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN) {
2412
2437
wd.multiwindow_fs = false ;
2413
- _update_window_style (p_window, false );
2414
- } else {
2438
+ } else if (p_mode == WINDOW_MODE_FULLSCREEN) {
2415
2439
wd.multiwindow_fs = true ;
2416
- _update_window_style (p_window, false );
2417
2440
}
2441
+ _update_window_style (p_window, false );
2418
2442
2419
2443
if ((p_mode == WINDOW_MODE_FULLSCREEN || p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN) && !wd.fullscreen ) {
2420
2444
if (wd.minimized || wd.maximized ) {
@@ -2440,7 +2464,8 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
2440
2464
2441
2465
_update_window_style (p_window, false );
2442
2466
2443
- MoveWindow (wd.hWnd , pos.x , pos.y , size.width , size.height , TRUE );
2467
+ int off_x = (wd.multiwindow_fs || (!wd.fullscreen && wd.borderless && wd.maximized )) ? FS_TRANSP_BORDER : 0 ;
2468
+ MoveWindow (wd.hWnd , pos.x , pos.y , size.width + off_x, size.height , TRUE );
2444
2469
2445
2470
// If the user has mouse trails enabled in windows, then sometimes the cursor disappears in fullscreen mode.
2446
2471
// Save number of trails so we can restore when exiting, then turn off mouse trails
@@ -2449,6 +2474,7 @@ void DisplayServerWindows::window_set_mode(WindowMode p_mode, WindowID p_window)
2449
2474
SystemParametersInfoA (SPI_SETMOUSETRAILS, 0 , nullptr , 0 );
2450
2475
}
2451
2476
}
2477
+ _update_window_mouse_passthrough (p_window);
2452
2478
}
2453
2479
2454
2480
DisplayServer::WindowMode DisplayServerWindows::window_get_mode (WindowID p_window) const {
@@ -2498,8 +2524,8 @@ void DisplayServerWindows::window_set_flag(WindowFlags p_flag, bool p_enabled, W
2498
2524
} break ;
2499
2525
case WINDOW_FLAG_BORDERLESS: {
2500
2526
wd.borderless = p_enabled;
2501
- _update_window_style (p_window);
2502
2527
_update_window_mouse_passthrough (p_window);
2528
+ _update_window_style (p_window);
2503
2529
ShowWindow (wd.hWnd , (wd.no_focus || wd.is_popup ) ? SW_SHOWNOACTIVATE : SW_SHOW); // Show the window.
2504
2530
} break ;
2505
2531
case WINDOW_FLAG_ALWAYS_ON_TOP: {
@@ -2550,7 +2576,6 @@ void DisplayServerWindows::window_set_flag(WindowFlags p_flag, bool p_enabled, W
2550
2576
} break ;
2551
2577
case WINDOW_FLAG_MOUSE_PASSTHROUGH: {
2552
2578
wd.mpass = p_enabled;
2553
- _update_window_mouse_passthrough (p_window);
2554
2579
} break ;
2555
2580
case WINDOW_FLAG_EXCLUDE_FROM_CAPTURE: {
2556
2581
wd.hide_from_capture = p_enabled;
@@ -4529,30 +4554,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
4529
4554
SendMessageW (windows[window_id].hWnd , WM_PAINT, 0 , 0 );
4530
4555
}
4531
4556
} break ;
4532
- case WM_NCPAINT: {
4533
- if (RenderingServer::get_singleton () && (windows[window_id].borderless || (windows[window_id].fullscreen && windows[window_id].multiwindow_fs ))) {
4534
- Color color = RenderingServer::get_singleton ()->get_default_clear_color ();
4535
- HDC hdc = GetWindowDC (hWnd);
4536
- if (hdc) {
4537
- HPEN pen = CreatePen (PS_SOLID, 1 , RGB (color.r * 255 .f , color.g * 255 .f , color.b * 255 .f ));
4538
- if (pen) {
4539
- HGDIOBJ prev_pen = SelectObject (hdc, pen);
4540
- HGDIOBJ prev_brush = SelectObject (hdc, GetStockObject (NULL_BRUSH));
4541
-
4542
- RECT rc;
4543
- GetWindowRect (hWnd, &rc);
4544
- OffsetRect (&rc, -rc.left , -rc.top );
4545
- Rectangle (hdc, rc.left , rc.top , rc.right , rc.bottom );
4546
-
4547
- SelectObject (hdc, prev_pen);
4548
- SelectObject (hdc, prev_brush);
4549
- DeleteObject (pen);
4550
- }
4551
- ReleaseDC (hWnd, hdc);
4552
- }
4553
- return 0 ;
4554
- }
4555
- } break ;
4556
4557
case WM_NCHITTEST: {
4557
4558
if (windows[window_id].mpass ) {
4558
4559
return HTTRANSPARENT;
@@ -5558,24 +5559,26 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
5558
5559
} break ;
5559
5560
5560
5561
case WM_WINDOWPOSCHANGED: {
5562
+ WindowData &window = windows[window_id];
5563
+
5564
+ int off_x = (window.multiwindow_fs || (!window.fullscreen && window.borderless && IsZoomed (hWnd))) ? FS_TRANSP_BORDER : 0 ;
5561
5565
Rect2i window_client_rect;
5562
5566
Rect2i window_rect;
5563
5567
{
5564
5568
RECT rect;
5565
5569
GetClientRect (hWnd, &rect);
5566
5570
ClientToScreen (hWnd, (POINT *)&rect.left );
5567
5571
ClientToScreen (hWnd, (POINT *)&rect.right );
5568
- window_client_rect = Rect2i (rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top );
5572
+ window_client_rect = Rect2i (rect.left , rect.top , rect.right - rect.left - off_x , rect.bottom - rect.top );
5569
5573
window_client_rect.position -= _get_screens_origin ();
5570
5574
5571
5575
RECT wrect;
5572
5576
GetWindowRect (hWnd, &wrect);
5573
- window_rect = Rect2i (wrect.left , wrect.top , wrect.right - wrect.left , wrect.bottom - wrect.top );
5577
+ window_rect = Rect2i (wrect.left , wrect.top , wrect.right - wrect.left - off_x , wrect.bottom - wrect.top );
5574
5578
window_rect.position -= _get_screens_origin ();
5575
5579
}
5576
5580
5577
5581
WINDOWPOS *window_pos_params = (WINDOWPOS *)lParam;
5578
- WindowData &window = windows[window_id];
5579
5582
5580
5583
bool rect_changed = false ;
5581
5584
if (!(window_pos_params->flags & SWP_NOSIZE) || window_pos_params->flags & SWP_FRAMECHANGED) {
@@ -5644,6 +5647,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
5644
5647
if (mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED || mouse_mode == MOUSE_MODE_CONFINED_HIDDEN) {
5645
5648
RECT crect;
5646
5649
GetClientRect (window.hWnd , &crect);
5650
+ crect.right -= off_x;
5647
5651
ClientToScreen (window.hWnd , (POINT *)&crect.left );
5648
5652
ClientToScreen (window.hWnd , (POINT *)&crect.right );
5649
5653
ClipCursor (&crect);
@@ -6109,26 +6113,29 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
6109
6113
6110
6114
_get_window_style (window_id_counter == MAIN_WINDOW_ID, false , (p_mode == WINDOW_MODE_FULLSCREEN || p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN), p_mode != WINDOW_MODE_EXCLUSIVE_FULLSCREEN, p_flags & WINDOW_FLAG_BORDERLESS_BIT, !(p_flags & WINDOW_FLAG_RESIZE_DISABLED_BIT), p_mode == WINDOW_MODE_MINIMIZED, p_mode == WINDOW_MODE_MAXIMIZED, false , (p_flags & WINDOW_FLAG_NO_FOCUS_BIT) | (p_flags & WINDOW_FLAG_POPUP), p_parent_hwnd, dwStyle, dwExStyle);
6111
6115
6112
- RECT WindowRect;
6113
-
6114
- WindowRect.left = p_rect.position .x ;
6115
- WindowRect.right = p_rect.position .x + p_rect.size .x ;
6116
- WindowRect.top = p_rect.position .y ;
6117
- WindowRect.bottom = p_rect.position .y + p_rect.size .y ;
6118
-
6119
6116
int rq_screen = get_screen_from_rect (p_rect);
6120
6117
if (rq_screen < 0 ) {
6121
6118
rq_screen = get_primary_screen (); // Requested window rect is outside any screen bounds.
6122
6119
}
6120
+ Rect2i usable_rect = screen_get_usable_rect (rq_screen);
6123
6121
6124
6122
Point2i offset = _get_screens_origin ();
6125
6123
6124
+ RECT WindowRect;
6125
+
6126
+ int off_x = (p_mode == WINDOW_MODE_FULLSCREEN || ((p_flags & WINDOW_FLAG_BORDERLESS_BIT) && p_mode == WINDOW_MODE_MAXIMIZED)) ? FS_TRANSP_BORDER : 0 ;
6127
+
6128
+ WindowRect.left = p_rect.position .x ;
6129
+ WindowRect.right = p_rect.position .x + p_rect.size .x + off_x;
6130
+ WindowRect.top = p_rect.position .y ;
6131
+ WindowRect.bottom = p_rect.position .y + p_rect.size .y ;
6132
+
6126
6133
if (!p_parent_hwnd) {
6127
6134
if (p_mode == WINDOW_MODE_FULLSCREEN || p_mode == WINDOW_MODE_EXCLUSIVE_FULLSCREEN) {
6128
6135
Rect2i screen_rect = Rect2i (screen_get_position (rq_screen), screen_get_size (rq_screen));
6129
6136
6130
6137
WindowRect.left = screen_rect.position .x ;
6131
- WindowRect.right = screen_rect.position .x + screen_rect.size .x ;
6138
+ WindowRect.right = screen_rect.position .x + screen_rect.size .x + off_x ;
6132
6139
WindowRect.top = screen_rect.position .y ;
6133
6140
WindowRect.bottom = screen_rect.position .y + screen_rect.size .y ;
6134
6141
} else {
@@ -6139,7 +6146,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
6139
6146
}
6140
6147
6141
6148
WindowRect.left = wpos.x ;
6142
- WindowRect.right = wpos.x + p_rect.size .x ;
6149
+ WindowRect.right = wpos.x + p_rect.size .x + off_x ;
6143
6150
WindowRect.top = wpos.y ;
6144
6151
WindowRect.bottom = wpos.y + p_rect.size .y ;
6145
6152
}
@@ -6277,15 +6284,15 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
6277
6284
return INVALID_WINDOW_ID;
6278
6285
}
6279
6286
6280
- rendering_context->window_set_size (id, real_client_rect.right - real_client_rect.left , real_client_rect.bottom - real_client_rect.top );
6287
+ rendering_context->window_set_size (id, real_client_rect.right - real_client_rect.left - off_x , real_client_rect.bottom - real_client_rect.top );
6281
6288
rendering_context->window_set_vsync_mode (id, p_vsync_mode);
6282
6289
wd.context_created = true ;
6283
6290
}
6284
6291
#endif
6285
6292
6286
6293
#ifdef GLES3_ENABLED
6287
6294
if (gl_manager_native) {
6288
- if (gl_manager_native->window_create (id, wd.hWnd , hInstance, real_client_rect.right - real_client_rect.left , real_client_rect.bottom - real_client_rect.top ) != OK) {
6295
+ if (gl_manager_native->window_create (id, wd.hWnd , hInstance, real_client_rect.right - real_client_rect.left - off_x , real_client_rect.bottom - real_client_rect.top ) != OK) {
6289
6296
memdelete (gl_manager_native);
6290
6297
gl_manager_native = nullptr ;
6291
6298
windows.erase (id);
@@ -6295,7 +6302,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
6295
6302
}
6296
6303
6297
6304
if (gl_manager_angle) {
6298
- if (gl_manager_angle->window_create (id, nullptr , wd.hWnd , real_client_rect.right - real_client_rect.left , real_client_rect.bottom - real_client_rect.top ) != OK) {
6305
+ if (gl_manager_angle->window_create (id, nullptr , wd.hWnd , real_client_rect.right - real_client_rect.left - off_x , real_client_rect.bottom - real_client_rect.top ) != OK) {
6299
6306
memdelete (gl_manager_angle);
6300
6307
gl_manager_angle = nullptr ;
6301
6308
windows.erase (id);
@@ -6390,21 +6397,20 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
6390
6397
ClientToScreen (wd.hWnd , (POINT *)&r.left );
6391
6398
ClientToScreen (wd.hWnd , (POINT *)&r.right );
6392
6399
wd.last_pos = Point2i (r.left , r.top ) - _get_screens_origin ();
6393
- wd.width = r.right - r.left ;
6400
+ wd.width = r.right - r.left - off_x ;
6394
6401
wd.height = r.bottom - r.top ;
6395
6402
} else {
6396
6403
wd.last_pos = p_rect.position ;
6397
6404
wd.width = p_rect.size .width ;
6398
6405
wd.height = p_rect.size .height ;
6399
6406
}
6400
6407
6408
+ wd.create_completed = true ;
6401
6409
// Set size of maximized borderless window (by default it covers the entire screen).
6402
- if (p_mode == WINDOW_MODE_MAXIMIZED && (p_flags & WINDOW_FLAG_BORDERLESS_BIT)) {
6403
- Rect2i srect = screen_get_usable_rect (rq_screen);
6404
- SetWindowPos (wd.hWnd , HWND_TOP, srect.position .x , srect.position .y , srect.size .width , srect.size .height , SWP_NOZORDER | SWP_NOACTIVATE);
6410
+ if (!p_parent_hwnd && p_mode == WINDOW_MODE_MAXIMIZED && (p_flags & WINDOW_FLAG_BORDERLESS_BIT)) {
6411
+ SetWindowPos (wd.hWnd , HWND_TOP, usable_rect.position .x - off_x, usable_rect.position .y , usable_rect.size .width + off_x, usable_rect.size .height , SWP_NOZORDER | SWP_NOACTIVATE);
6405
6412
}
6406
-
6407
- wd.create_completed = true ;
6413
+ _update_window_mouse_passthrough (id);
6408
6414
window_id_counter++;
6409
6415
}
6410
6416
0 commit comments