From 7c2e8c67f1bd4e9aff9dfd9e37df21b7a470bbb0 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Mon, 8 Jan 2024 13:49:28 +0100 Subject: [PATCH] [CONSRV] Don't blink cursor if the console window is not active (#5601) Co-authored-by: Stanislav Motylkov --- win32ss/user/winsrv/consrv/frontends/gui/conwnd.c | 10 ++++++++-- win32ss/user/winsrv/consrv/frontends/gui/conwnd.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c index 42a8288073e..a677adfd648 100644 --- a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c +++ b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c @@ -642,6 +642,7 @@ OnNcCreate(HWND hWnd, LPCREATESTRUCTW Create) GuiData->hWindow = hWnd; GuiData->hSysMenu = GetSystemMenu(hWnd, FALSE); + GuiData->IsWindowActive = FALSE; /* Initialize the fonts */ if (!InitFonts(GuiData, @@ -725,6 +726,8 @@ OnActivate(PGUI_CONSOLE_DATA GuiData, WPARAM wParam) DPRINT("WM_ACTIVATE - ActivationState = %d\n", ActivationState); + GuiData->IsWindowActive = (ActivationState != WA_INACTIVE); + if ( ActivationState == WA_ACTIVE || ActivationState == WA_CLICKACTIVE ) { @@ -1324,8 +1327,11 @@ OnTimer(PGUI_CONSOLE_DATA GuiData) if (GetType(Buff) == TEXTMODE_BUFFER) { /* Repaint the caret */ - InvalidateCell(GuiData, Buff->CursorPosition.X, Buff->CursorPosition.Y); - Buff->CursorBlinkOn = !Buff->CursorBlinkOn; + if (GuiData->IsWindowActive || Buff->CursorBlinkOn) + { + InvalidateCell(GuiData, Buff->CursorPosition.X, Buff->CursorPosition.Y); + Buff->CursorBlinkOn = !Buff->CursorBlinkOn; + } if ((GuiData->OldCursor.x != Buff->CursorPosition.X) || (GuiData->OldCursor.y != Buff->CursorPosition.Y)) diff --git a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.h b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.h index 826f3fa875d..f6c20f2067f 100644 --- a/win32ss/user/winsrv/consrv/frontends/gui/conwnd.h +++ b/win32ss/user/winsrv/consrv/frontends/gui/conwnd.h @@ -50,6 +50,7 @@ typedef struct _GUI_CONSOLE_DATA HDESK Desktop; BOOLEAN IsWindowVisible; + BOOLEAN IsWindowActive; POINT OldCursor;