Fixes updating default character attributes when calling SetConsoleTextAttribute().

See issue #2705 for more details.

svn path=/trunk/; revision=29723
This commit is contained in:
Thomas Bluemel 2007-10-20 22:26:58 +00:00
parent b7b9154d87
commit f3936aecb5
4 changed files with 26 additions and 4 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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

View file

@ -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
};