Module: wine Branch: master Commit: 957dfccb14a4ba73c8a9e2f8edfaa6d324c685b6 URL: https://gitlab.winehq.org/wine/wine/-/commit/957dfccb14a4ba73c8a9e2f8edfaa6d...
Author: Zhiyi Zhang zzhang@codeweavers.com Date: Thu Oct 20 22:47:41 2022 +0800
winecfg: Adjust top-level window rectangles after theme changes.
Manual tests show that calling EnableTheming() in uxtheme.dll doesn't update window sizes. So it seems more appropriate to do it in winecfg.exe.
---
programs/winecfg/theme.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c index d66d31837e6..621b471455f 100644 --- a/programs/winecfg/theme.c +++ b/programs/winecfg/theme.c @@ -1107,6 +1107,24 @@ static void update_mime_types(HWND hDlg) set_reg_key(config_key, keypath(L"FileOpenAssociations"), L"Enable", state); }
+static BOOL CALLBACK update_window_pos_proc(HWND hwnd, LPARAM lp) +{ + RECT rect; + + GetClientRect(hwnd, &rect); + AdjustWindowRectEx(&rect, GetWindowLongW(hwnd, GWL_STYLE), !!GetMenu(hwnd), + GetWindowLongW(hwnd, GWL_EXSTYLE)); + SetWindowPos(hwnd, 0, 0, 0, rect.right - rect.left, rect.bottom - rect.top, + SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); + return TRUE; +} + +/* Adjust the rectangle for top-level windows because the new non-client metrics may be different */ +static void update_window_pos(void) +{ + EnumWindows(update_window_pos_proc, 0); +} + INT_PTR CALLBACK ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -1261,6 +1279,7 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) read_shell_folder_link_targets(); update_shell_folder_listview(hDlg); update_mime_types(hDlg); + update_window_pos(); SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, PSNRET_NOERROR); break; }