diff --git a/reactos/subsystems/win32/csrss/include/conio.h b/reactos/subsystems/win32/csrss/include/conio.h index c4590307ead..4b13f4cdedb 100644 --- a/reactos/subsystems/win32/csrss/include/conio.h +++ b/reactos/subsystems/win32/csrss/include/conio.h @@ -56,6 +56,7 @@ typedef struct tagCSRSS_CONSOLE_VTBL BOOL (STDCALL *SetCursorInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer); BOOL (STDCALL *SetScreenInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer, UINT OldCursorX, UINT OldCursorY); + BOOL (STDCALL *UpdateScreenInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer); BOOL (STDCALL *ChangeTitle)(PCSRSS_CONSOLE Console); VOID (STDCALL *CleanupConsole)(PCSRSS_CONSOLE Console); BOOL (STDCALL *ChangeIcon)(PCSRSS_CONSOLE Console); @@ -152,6 +153,8 @@ CSR_API(CsrGetProcessList); #define ConioSetCursorInfo(Console, Buff) (Console)->Vtbl->SetCursorInfo((Console), (Buff)) #define ConioSetScreenInfo(Console, Buff, OldCursorX, OldCursorY) \ (Console)->Vtbl->SetScreenInfo((Console), (Buff), (OldCursorX), (OldCursorY)) +#define ConioUpdateScreenInfo(Console, Buff) \ + (Console)->Vtbl->UpdateScreenInfo(Console, Buff) #define ConioChangeTitle(Console) (Console)->Vtbl->ChangeTitle(Console) #define ConioCleanupConsole(Console) (Console)->Vtbl->CleanupConsole(Console) diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index bf2c741a2af..045cc23de2c 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -2049,7 +2049,6 @@ CSR_API(CsrSetTextAttrib) NTSTATUS Status; PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; - LONG OldCursorX, OldCursorY; DPRINT("CsrSetTextAttrib\n"); @@ -2069,12 +2068,10 @@ CSR_API(CsrSetTextAttrib) return Request->Status = Status; } - ConioPhysicalToLogical(Buff, Buff->CurrentX, Buff->CurrentY, &OldCursorX, &OldCursorY); - Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib; if (NULL != Console && Buff == Console->ActiveBuffer) { - if (! ConioSetScreenInfo(Console, Buff, OldCursorX, OldCursorY)) + if (! ConioUpdateScreenInfo(Console, Buff)) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); diff --git a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c index d576aa22524..a5fc2cde9cf 100644 --- a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c @@ -1246,6 +1246,20 @@ GuiSetScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff, UINT OldCurs return TRUE; } +static BOOL STDCALL +GuiUpdateScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff) +{ + PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA) Console->PrivateData; + + if (Console->ActiveBuffer == Buff) + { + GuiData->ScreenText = GuiConsoleRGBFromAttribute(Buff->DefaultAttrib & 0x0f); + GuiData->ScreenBackground = GuiConsoleRGBFromAttribute((Buff->DefaultAttrib & 0xf0) >> 4); + } + + return TRUE; +} + static VOID FASTCALL GuiConsoleHandleTimer(HWND hWnd) { @@ -2124,6 +2138,7 @@ static CSRSS_CONSOLE_VTBL GuiVtbl = GuiDrawRegion, GuiSetCursorInfo, GuiSetScreenInfo, + GuiUpdateScreenInfo, GuiChangeTitle, GuiCleanupConsole, GuiChangeIcon diff --git a/reactos/subsystems/win32/csrss/win32csr/tuiconsole.c b/reactos/subsystems/win32/csrss/win32csr/tuiconsole.c index 0de0a0c8184..03a61c9895f 100644 --- a/reactos/subsystems/win32/csrss/win32csr/tuiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/tuiconsole.c @@ -213,6 +213,12 @@ TuiSetScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff, UINT OldCurs return TRUE; } +static BOOL STDCALL +TuiUpdateScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff) +{ + return TRUE; +} + static BOOL STDCALL TuiChangeTitle(PCSRSS_CONSOLE Console) { @@ -293,6 +299,7 @@ static CSRSS_CONSOLE_VTBL TuiVtbl = TuiDrawRegion, TuiSetCursorInfo, TuiSetScreenInfo, + TuiUpdateScreenInfo, TuiChangeTitle, TuiCleanupConsole };