-- v2: win32u: Move default WM_WINDOWPOSCHANGING implementation from user32.
From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/defwnd.c | 30 +++--------------------------- dlls/win32u/defwnd.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 27 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index 047822d00d6..67cb77a3121 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -262,9 +262,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa case WM_NCACTIVATE: return NC_HandleNCActivate( hwnd, wParam, lParam );
- case WM_NCDESTROY: - return NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, FALSE ); - case WM_PRINT: DEFWND_Print(hwnd, (HDC)wParam, lParam); return 0; @@ -524,30 +521,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa return res; }
- case WM_GETICON: - { - HICON ret; - WND *wndPtr = WIN_GetPtr( hwnd ); - - switch(wParam) - { - case ICON_SMALL: - ret = wndPtr->hIconSmall; - break; - case ICON_BIG: - ret = wndPtr->hIcon; - break; - case ICON_SMALL2: - ret = wndPtr->hIconSmall ? wndPtr->hIconSmall : wndPtr->hIconSmall2; - break; - default: - ret = 0; - break; - } - WIN_ReleasePtr( wndPtr ); - return (LRESULT)ret; - } - case WM_HELP: SendMessageW( GetParent(hwnd), msg, wParam, lParam ); break; @@ -614,6 +587,9 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa break; }
+ default: + return NtUserMessageCall( hwnd, msg, wParam, lParam, 0, NtUserDefWindowProc, FALSE ); + }
return 0; diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 1fa80928c65..3aa5a8286b3 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -112,6 +112,33 @@ static BOOL set_window_text( HWND hwnd, const void *text, BOOL ansi ) return TRUE; }
+static HICON get_window_icon( HWND hwnd, WPARAM type ) +{ + HICON ret; + WND *win; + + if (!(win = get_win_ptr( hwnd ))) return 0; + + switch(type) + { + case ICON_SMALL: + ret = win->hIconSmall; + break; + case ICON_BIG: + ret = win->hIcon; + break; + case ICON_SMALL2: + ret = win->hIconSmall ? win->hIconSmall : win->hIconSmall2; + break; + default: + ret = 0; + break; + } + + release_win_ptr( win ); + return ret; +} + static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) { HICON ret = 0; @@ -227,6 +254,10 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, result = (LRESULT)set_window_icon( hwnd, wparam, (HICON)lparam ); break;
+ case WM_GETICON: + result = (LRESULT)get_window_icon( hwnd, wparam ); + break; + case WM_SYSCOMMAND: result = handle_sys_command( hwnd, wparam, lparam ); break;
From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/defwnd.c | 25 ------------------------- dlls/win32u/defwnd.c | 26 +++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index 67cb77a3121..fdb100c9556 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -266,31 +266,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa DEFWND_Print(hwnd, (HDC)wParam, lParam); return 0;
- case WM_PAINTICON: - case WM_PAINT: - { - PAINTSTRUCT ps; - HDC hdc = NtUserBeginPaint( hwnd, &ps ); - if( hdc ) - { - HICON hIcon; - if (IsIconic(hwnd) && ((hIcon = (HICON)GetClassLongPtrW( hwnd, GCLP_HICON))) ) - { - RECT rc; - int x, y; - - GetClientRect( hwnd, &rc ); - x = (rc.right - rc.left - GetSystemMetrics(SM_CXICON))/2; - y = (rc.bottom - rc.top - GetSystemMetrics(SM_CYICON))/2; - TRACE("Painting class icon: vis rect=(%s)\n", - wine_dbgstr_rect(&ps.rcPaint)); - DrawIcon( hdc, x, y, hIcon ); - } - NtUserEndPaint( hwnd, &ps ); - } - return 0; - } - case WM_SYNCPAINT: NtUserRedrawWindow ( hwnd, NULL, 0, RDW_ERASENOW | RDW_ERASE | RDW_ALLCHILDREN ); return 0; diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 3aa5a8286b3..c345a6ab188 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -243,7 +243,31 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, if (user_callbacks) user_callbacks->free_win_ptr( win ); win->pScroll = NULL; release_win_ptr( win ); - return 0; + break; + } + + case WM_PAINTICON: + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = NtUserBeginPaint( hwnd, &ps ); + if (hdc) + { + HICON icon; + if (is_iconic(hwnd) && ((icon = UlongToHandle( get_class_long( hwnd, GCLP_HICON, FALSE ))))) + { + RECT rc; + int x, y; + + get_client_rect( hwnd, &rc ); + x = (rc.right - rc.left - get_system_metrics( SM_CXICON )) / 2; + y = (rc.bottom - rc.top - get_system_metrics( SM_CYICON )) / 2; + TRACE( "Painting class icon: vis rect=(%s)\n", wine_dbgstr_rect(&ps.rcPaint) ); + NtUserDrawIconEx( hdc, x, y, icon, 0, 0, 0, 0, DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE ); + } + NtUserEndPaint( hwnd, &ps ); + } + break; }
case WM_SETTEXT:
From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/defwnd.c | 43 ------------------------------------------- dlls/win32u/defwnd.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index fdb100c9556..af2b32614bc 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -266,46 +266,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa DEFWND_Print(hwnd, (HDC)wParam, lParam); return 0;
- case WM_SYNCPAINT: - NtUserRedrawWindow ( hwnd, NULL, 0, RDW_ERASENOW | RDW_ERASE | RDW_ALLCHILDREN ); - return 0; - - case WM_SETREDRAW: - if (wParam) WIN_SetStyle( hwnd, WS_VISIBLE, 0 ); - else - { - NtUserRedrawWindow( hwnd, NULL, 0, RDW_ALLCHILDREN | RDW_VALIDATE ); - WIN_SetStyle( hwnd, 0, WS_VISIBLE ); - } - return 0; - - case WM_CLOSE: - NtUserDestroyWindow( hwnd ); - return 0; - - case WM_MOUSEACTIVATE: - if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD) - { - LONG ret = SendMessageW( GetParent(hwnd), WM_MOUSEACTIVATE, wParam, lParam ); - if (ret) return ret; - } - - /* Caption clicks are handled by NC_HandleNCLButtonDown() */ - return ( HIWORD(lParam) == WM_LBUTTONDOWN && LOWORD(lParam) == HTCAPTION ? MA_NOACTIVATE : MA_ACTIVATE ); - - case WM_ACTIVATE: - /* The default action in Windows is to set the keyboard focus to - * the window, if it's being activated and not minimized */ - if (LOWORD(wParam) != WA_INACTIVE) { - if (!IsIconic(hwnd)) NtUserSetFocus( hwnd ); - } - break; - - case WM_MOUSEWHEEL: - if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD) - return SendMessageW( GetParent(hwnd), WM_MOUSEWHEEL, wParam, lParam ); - break; - case WM_ERASEBKGND: case WM_ICONERASEBKGND: { @@ -325,9 +285,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa return 1; }
- case WM_GETDLGCODE: - return 0; - case WM_CTLCOLORMSGBOX: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index c345a6ab188..72d9aa40164 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -270,6 +270,49 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, break; }
+ case WM_SYNCPAINT: + NtUserRedrawWindow ( hwnd, NULL, 0, RDW_ERASENOW | RDW_ERASE | RDW_ALLCHILDREN ); + return 0; + + case WM_SETREDRAW: + if (wparam) set_window_style( hwnd, WS_VISIBLE, 0 ); + else + { + NtUserRedrawWindow( hwnd, NULL, 0, RDW_ALLCHILDREN | RDW_VALIDATE ); + set_window_style( hwnd, 0, WS_VISIBLE ); + } + return 0; + + case WM_CLOSE: + NtUserDestroyWindow( hwnd ); + return 0; + + case WM_MOUSEACTIVATE: + if (get_window_long( hwnd, GWL_STYLE ) & WS_CHILD) + { + result = send_message( get_parent(hwnd), WM_MOUSEACTIVATE, wparam, lparam ); + if (result) break; + } + + /* Caption clicks are handled by NC_HandleNCLButtonDown() */ + result = HIWORD(lparam) == WM_LBUTTONDOWN && LOWORD(lparam) == HTCAPTION ? + MA_NOACTIVATE : MA_ACTIVATE; + break; + + case WM_ACTIVATE: + /* The default action in Windows is to set the keyboard focus to + * the window, if it's being activated and not minimized */ + if (LOWORD(wparam) != WA_INACTIVE && !is_iconic( hwnd )) NtUserSetFocus( hwnd ); + break; + + case WM_MOUSEWHEEL: + if (get_window_long( hwnd, GWL_STYLE ) & WS_CHILD) + result = send_message( get_parent( hwnd ), WM_MOUSEWHEEL, wparam, lparam ); + break; + + case WM_GETDLGCODE: + break; + case WM_SETTEXT: result = set_window_text( hwnd, (void *)lparam, ansi ); break;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=114543
Your paranoid android.
=== debian11 (32 bit Chinese:China report) ===
user32: menu.c:2324: Test failed: test 25
From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/defwnd.c | 19 ------------------- dlls/win32u/defwnd.c | 28 ++++++++++++++++++++++++++++ dlls/win32u/input.c | 9 --------- dlls/win32u/win32u_private.h | 1 + 4 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index af2b32614bc..74dfa609bbd 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -266,25 +266,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa DEFWND_Print(hwnd, (HDC)wParam, lParam); return 0;
- case WM_ERASEBKGND: - case WM_ICONERASEBKGND: - { - RECT rect; - HDC hdc = (HDC)wParam; - HBRUSH hbr = (HBRUSH)GetClassLongPtrW( hwnd, GCLP_HBRBACKGROUND ); - if (!hbr) return 0; - - if (GetClassLongW( hwnd, GCL_STYLE ) & CS_PARENTDC) - { - /* can't use GetClipBox with a parent DC or we fill the whole parent */ - GetClientRect( hwnd, &rect ); - DPtoLP( hdc, (LPPOINT)&rect, 2 ); - } - else GetClipBox( hdc, &rect ); - FillRect( hdc, &rect, hbr ); - return 1; - } - case WM_CTLCOLORMSGBOX: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 72d9aa40164..ec9a1685325 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -31,6 +31,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(win);
+void fill_rect( HDC dc, const RECT *rect, HBRUSH hbrush ) +{ + HBRUSH prev_brush; + + prev_brush = NtGdiSelectBrush( dc, hbrush ); + NtGdiPatBlt( dc, rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top, PATCOPY ); + if (prev_brush) NtGdiSelectBrush( dc, prev_brush ); +} + /*********************************************************************** * AdjustWindowRectEx (win32u.so) */ @@ -310,6 +319,25 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, result = send_message( get_parent( hwnd ), WM_MOUSEWHEEL, wparam, lparam ); break;
+ case WM_ERASEBKGND: + case WM_ICONERASEBKGND: + { + RECT rect; + HDC hdc = (HDC)wparam; + HBRUSH hbr = UlongToHandle( get_class_long( hwnd, GCLP_HBRBACKGROUND, FALSE )); + if (!hbr) break; + + if (get_class_long( hwnd, GCL_STYLE, FALSE ) & CS_PARENTDC) + { + /* can't use GetClipBox with a parent DC or we fill the whole parent */ + get_client_rect( hwnd, &rect ); + NtGdiTransformPoints( hdc, (POINT *)&rect, (POINT *)&rect, 1, NtGdiDPtoLP ); + } + else NtGdiGetAppClipBox( hdc, &rect ); + fill_rect( hdc, &rect, hbr ); + return 1; + } + case WM_GETDLGCODE: break;
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 877e3f1a064..2b196fb5b1d 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -1799,15 +1799,6 @@ static void display_caret( HWND hwnd, const RECT *r ) NtUserReleaseDC( hwnd, dc ); }
-static void fill_rect( HDC dc, const RECT *rect, HBRUSH hbrush ) -{ - HBRUSH prev_brush; - - prev_brush = NtGdiSelectBrush( dc, hbrush ); - NtGdiPatBlt( dc, rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top, PATCOPY ); - if (prev_brush) NtGdiSelectBrush( dc, prev_brush ); -} - static unsigned int get_caret_registry_timeout(void) { char value_buffer[FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data[11 * sizeof(WCHAR)])]; diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index ea6d67750b4..63eca06ecd6 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -353,6 +353,7 @@ extern void register_window_surface( struct window_surface *old, /* defwnd.c */ extern LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) DECLSPEC_HIDDEN; +extern void fill_rect( HDC dc, const RECT *rect, HBRUSH hbrush ) DECLSPEC_HIDDEN;
/* hook.c */ extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=114544
Your paranoid android.
=== debian11 (32 bit Chinese:China report) ===
user32: msg.c:15143: Test failed: bad time 11c33347
From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/defwnd.c | 3 --- dlls/user32/win.h | 1 - dlls/user32/winpos.c | 25 ------------------------- dlls/win32u/defwnd.c | 22 ++++++++++++++++++++++ dlls/win32u/win32u_private.h | 1 + dlls/win32u/window.c | 2 +- 6 files changed, 24 insertions(+), 30 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c index 74dfa609bbd..c4263edac93 100644 --- a/dlls/user32/defwnd.c +++ b/dlls/user32/defwnd.c @@ -180,9 +180,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa NC_HandleNCCalcSize( hwnd, wParam, (RECT *)lParam ); break;
- case WM_WINDOWPOSCHANGING: - return WINPOS_HandleWindowPosChanging( hwnd, (WINDOWPOS *)lParam ); - case WM_WINDOWPOSCHANGED: DEFWND_HandleWindowPosChanged( hwnd, (const WINDOWPOS *)lParam ); break; diff --git a/dlls/user32/win.h b/dlls/user32/win.h index 0c5bb2be5a8..c9ac3b8e977 100644 --- a/dlls/user32/win.h +++ b/dlls/user32/win.h @@ -60,7 +60,6 @@ static inline void WIN_ReleasePtr( WND *ptr )
extern LRESULT HOOK_CallHooks( INT id, INT code, WPARAM wparam, LPARAM lparam, BOOL unicode ) DECLSPEC_HIDDEN;
-extern LONG WINPOS_HandleWindowPosChanging(HWND hwnd, WINDOWPOS *winpos) DECLSPEC_HIDDEN; extern HWND WINPOS_WindowFromPoint( HWND hwndScope, POINT pt, INT *hittest ) DECLSPEC_HIDDEN; extern void WINPOS_ActivateOtherWindow( HWND hwnd ) DECLSPEC_HIDDEN; extern void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam ) DECLSPEC_HIDDEN; diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c index cdcd03484cd..a5bc7d9ce17 100644 --- a/dlls/user32/winpos.c +++ b/dlls/user32/winpos.c @@ -653,31 +653,6 @@ void WINPOS_ActivateOtherWindow(HWND hwnd) }
-/*********************************************************************** - * WINPOS_HandleWindowPosChanging - * - * Default handling for a WM_WINDOWPOSCHANGING. Called from DefWindowProc(). - */ -LONG WINPOS_HandleWindowPosChanging( HWND hwnd, WINDOWPOS *winpos ) -{ - LONG style = GetWindowLongW( hwnd, GWL_STYLE ); - - if (winpos->flags & SWP_NOSIZE) return 0; - if ((style & WS_THICKFRAME) || ((style & (WS_POPUP | WS_CHILD)) == 0)) - { - MINMAXINFO info = NtUserGetMinMaxInfo( hwnd ); - winpos->cx = min( winpos->cx, info.ptMaxTrackSize.x ); - winpos->cy = min( winpos->cy, info.ptMaxTrackSize.y ); - if (!(style & WS_MINIMIZE)) - { - winpos->cx = max( winpos->cx, info.ptMinTrackSize.x ); - winpos->cy = max( winpos->cy, info.ptMinTrackSize.y ); - } - } - return 0; -} - - /*********************************************************************** * BeginDeferWindowPos (USER32.@) */ diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index ec9a1685325..67472246960 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -195,6 +195,25 @@ static HICON set_window_icon( HWND hwnd, WPARAM type, HICON icon ) return ret; }
+static LONG handle_window_pos_changing( HWND hwnd, WINDOWPOS *winpos ) +{ + LONG style = get_window_long( hwnd, GWL_STYLE ); + + if (winpos->flags & SWP_NOSIZE) return 0; + if ((style & WS_THICKFRAME) || ((style & (WS_POPUP | WS_CHILD)) == 0)) + { + MINMAXINFO info = get_min_max_info( hwnd ); + winpos->cx = min( winpos->cx, info.ptMaxTrackSize.x ); + winpos->cy = min( winpos->cy, info.ptMaxTrackSize.y ); + if (!(style & WS_MINIMIZE)) + { + winpos->cx = max( winpos->cx, info.ptMinTrackSize.x ); + winpos->cy = max( winpos->cy, info.ptMinTrackSize.y ); + } + } + return 0; +} + static LRESULT handle_sys_command( HWND hwnd, WPARAM wparam, LPARAM lparam ) { if (!is_window_enabled( hwnd )) return 0; @@ -255,6 +274,9 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, break; }
+ case WM_WINDOWPOSCHANGING: + return handle_window_pos_changing( hwnd, (WINDOWPOS *)lparam ); + case WM_PAINTICON: case WM_PAINT: { diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 63eca06ecd6..e459e6df6bd 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -434,6 +434,7 @@ extern HWND get_parent( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND get_hwnd_message_parent(void) DECLSPEC_HIDDEN; extern DPI_AWARENESS_CONTEXT get_window_dpi_awareness_context( HWND hwnd ) DECLSPEC_HIDDEN; extern BOOL get_window_placement( HWND hwnd, WINDOWPLACEMENT *placement ) DECLSPEC_HIDDEN; +extern MINMAXINFO get_min_max_info( HWND hwnd ) DECLSPEC_HIDDEN; extern HWND get_window_relative( HWND hwnd, UINT rel ) DECLSPEC_HIDDEN; extern DWORD get_window_thread( HWND hwnd, DWORD *process ) DECLSPEC_HIDDEN; extern HWND is_current_process_window( HWND hwnd ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 94cdd7f7280..31512c03e15 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -3657,7 +3657,7 @@ static void send_parent_notify( HWND hwnd, UINT msg ) * * Get the minimized and maximized information for a window. */ -static MINMAXINFO get_min_max_info( HWND hwnd ) +MINMAXINFO get_min_max_info( HWND hwnd ) { LONG style = get_window_long( hwnd, GWL_STYLE ); LONG exstyle = get_window_long( hwnd, GWL_EXSTYLE );
This merge request was approved by Huw Davies.
On Thu May 12 15:39:22 2022 +0000, Huw Davies wrote:
There are some tabs left in this function. I don't seem to be able to push to your branch, otherwise I'd have fixed them up myself.
I pushed v2, thanks.
FWIW, the option in merge request that allows pushing to this branch is enabled, but my understanding is that for that to work, you'd need commit access to target branch. I could also probably give you access to my repo, but it's not how I think it's intended to work.