diff --git a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index 2c48f7841b..1d7211ce7c 100644 --- a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -412,7 +412,7 @@ GuiGetGuiData(HWND hWnd) } static VOID -ResizeConWnd(PGUI_CONSOLE_DATA GuiData, DWORD WidthUnit, DWORD HeightUnit) +ResizeConWnd(PGUI_CONSOLE_DATA GuiData, DWORD WidthUnit, DWORD HeightUnit, BOOL *HScroll, BOOL *VScroll) { PCONSOLE_SCREEN_BUFFER Buff = GuiData->ActiveBuffer; SCROLLINFO sInfo; @@ -436,10 +436,12 @@ ResizeConWnd(PGUI_CONSOLE_DATA GuiData, DWORD WidthUnit, DWORD HeightUnit) SetScrollInfo(GuiData->hWindow, SB_VERT, &sInfo, TRUE); Width += GetSystemMetrics(SM_CXVSCROLL); ShowScrollBar(GuiData->hWindow, SB_VERT, TRUE); + if (VScroll != NULL) *VScroll = TRUE; } else { ShowScrollBar(GuiData->hWindow, SB_VERT, FALSE); + if (VScroll != NULL) *VScroll = FALSE; } if (Buff->ScreenBufferSize.X > Buff->ViewSize.X) @@ -448,12 +450,14 @@ ResizeConWnd(PGUI_CONSOLE_DATA GuiData, DWORD WidthUnit, DWORD HeightUnit) sInfo.nPage = Buff->ViewSize.X; sInfo.nPos = Buff->ViewOrigin.X; SetScrollInfo(GuiData->hWindow, SB_HORZ, &sInfo, TRUE); - Height += GetSystemMetrics(SM_CYHSCROLL); +// Height += GetSystemMetrics(SM_CYHSCROLL); // Removed to eliminate Height growth. ShowScrollBar(GuiData->hWindow, SB_HORZ, TRUE); + if (HScroll != NULL) *HScroll = TRUE; } else { ShowScrollBar(GuiData->hWindow, SB_HORZ, FALSE); + if (HScroll != NULL) *HScroll = FALSE; } /* Resize the window */ @@ -2029,9 +2033,12 @@ static VOID OnSize(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM lParam) { PCONSRV_CONSOLE Console = GuiData->Console; + static BOOL HScroll = FALSE, VScroll = FALSE, PrevMinimized = FALSE; + + if (IsIconic(GuiData->hWindow)) PrevMinimized = 1; // Added to capture that window has been minimized /* Do nothing if the window is hidden */ - if (!GuiData->IsWindowVisible) return; + if (!GuiData->IsWindowVisible || IsIconic(GuiData->hWindow)) return; if (!ConDrvValidateConsoleUnsafe((PCONSOLE)Console, CONSOLE_RUNNING, TRUE)) return; @@ -2061,8 +2068,12 @@ OnSize(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM lParam) if ((windy % HeightUnit) >= (HeightUnit / 2)) ++chary; /* Compensate for added scroll bars in window */ - if (charx < (DWORD)Buff->ScreenBufferSize.X) windy -= GetSystemMetrics(SM_CYHSCROLL); // Window will have a horizontal scroll bar - if (chary < (DWORD)Buff->ScreenBufferSize.Y) windx -= GetSystemMetrics(SM_CXVSCROLL); // Window will have a vertical scroll bar + if ((charx < (DWORD)Buff->ScreenBufferSize.X) && (!HScroll)) // Added (!HScroll) test + windy -= GetSystemMetrics(SM_CYHSCROLL); // Window will have a new horizontal scroll bar + if ((chary < (DWORD)Buff->ScreenBufferSize.Y) && (!VScroll || PrevMinimized)) // Added (!VScroll || PrevMinimized) test + windx -= GetSystemMetrics(SM_CXVSCROLL); // Window will have a new vertical scroll bar + + PrevMinimized = 0; // Now reset charx = windx / (int)WidthUnit ; chary = windy / (int)HeightUnit; @@ -2078,7 +2089,7 @@ OnSize(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM lParam) Buff->ViewSize.Y = (chary <= (DWORD)Buff->ScreenBufferSize.Y) ? chary : Buff->ScreenBufferSize.Y; } - ResizeConWnd(GuiData, WidthUnit, HeightUnit); + ResizeConWnd(GuiData, WidthUnit, HeightUnit, &HScroll, &VScroll); /* Adjust the start of the visible area if we are attempting to show nonexistent areas */ if ((Buff->ScreenBufferSize.X - Buff->ViewOrigin.X) < Buff->ViewSize.X) Buff->ViewOrigin.X = Buff->ScreenBufferSize.X - Buff->ViewSize.X; @@ -2506,7 +2517,7 @@ ConWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) /* Resize the window to the user's values */ GuiData->WindowSizeLock = TRUE; - ResizeConWnd(GuiData, WidthUnit, HeightUnit); + ResizeConWnd(GuiData, WidthUnit, HeightUnit, NULL, NULL); GuiData->WindowSizeLock = FALSE; break; }