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 *SetCursorInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer);
BOOL (STDCALL *SetScreenInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer, BOOL (STDCALL *SetScreenInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer,
UINT OldCursorX, UINT OldCursorY); UINT OldCursorX, UINT OldCursorY);
BOOL (STDCALL *UpdateScreenInfo)(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER ScreenBuffer);
BOOL (STDCALL *ChangeTitle)(PCSRSS_CONSOLE Console); BOOL (STDCALL *ChangeTitle)(PCSRSS_CONSOLE Console);
VOID (STDCALL *CleanupConsole)(PCSRSS_CONSOLE Console); VOID (STDCALL *CleanupConsole)(PCSRSS_CONSOLE Console);
BOOL (STDCALL *ChangeIcon)(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 ConioSetCursorInfo(Console, Buff) (Console)->Vtbl->SetCursorInfo((Console), (Buff))
#define ConioSetScreenInfo(Console, Buff, OldCursorX, OldCursorY) \ #define ConioSetScreenInfo(Console, Buff, OldCursorX, OldCursorY) \
(Console)->Vtbl->SetScreenInfo((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 ConioChangeTitle(Console) (Console)->Vtbl->ChangeTitle(Console)
#define ConioCleanupConsole(Console) (Console)->Vtbl->CleanupConsole(Console) #define ConioCleanupConsole(Console) (Console)->Vtbl->CleanupConsole(Console)

View file

@ -2049,7 +2049,6 @@ CSR_API(CsrSetTextAttrib)
NTSTATUS Status; NTSTATUS Status;
PCSRSS_CONSOLE Console; PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff; PCSRSS_SCREEN_BUFFER Buff;
LONG OldCursorX, OldCursorY;
DPRINT("CsrSetTextAttrib\n"); DPRINT("CsrSetTextAttrib\n");
@ -2069,12 +2068,10 @@ CSR_API(CsrSetTextAttrib)
return Request->Status = Status; return Request->Status = Status;
} }
ConioPhysicalToLogical(Buff, Buff->CurrentX, Buff->CurrentY, &OldCursorX, &OldCursorY);
Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib; Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib;
if (NULL != Console && Buff == Console->ActiveBuffer) if (NULL != Console && Buff == Console->ActiveBuffer)
{ {
if (! ConioSetScreenInfo(Console, Buff, OldCursorX, OldCursorY)) if (! ConioUpdateScreenInfo(Console, Buff))
{ {
ConioUnlockScreenBuffer(Buff); ConioUnlockScreenBuffer(Buff);
ConioUnlockConsole(Console); ConioUnlockConsole(Console);

View file

@ -1246,6 +1246,20 @@ GuiSetScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff, UINT OldCurs
return TRUE; 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 static VOID FASTCALL
GuiConsoleHandleTimer(HWND hWnd) GuiConsoleHandleTimer(HWND hWnd)
{ {
@ -2124,6 +2138,7 @@ static CSRSS_CONSOLE_VTBL GuiVtbl =
GuiDrawRegion, GuiDrawRegion,
GuiSetCursorInfo, GuiSetCursorInfo,
GuiSetScreenInfo, GuiSetScreenInfo,
GuiUpdateScreenInfo,
GuiChangeTitle, GuiChangeTitle,
GuiCleanupConsole, GuiCleanupConsole,
GuiChangeIcon GuiChangeIcon

View file

@ -213,6 +213,12 @@ TuiSetScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff, UINT OldCurs
return TRUE; return TRUE;
} }
static BOOL STDCALL
TuiUpdateScreenInfo(PCSRSS_CONSOLE Console, PCSRSS_SCREEN_BUFFER Buff)
{
return TRUE;
}
static BOOL STDCALL static BOOL STDCALL
TuiChangeTitle(PCSRSS_CONSOLE Console) TuiChangeTitle(PCSRSS_CONSOLE Console)
{ {
@ -293,6 +299,7 @@ static CSRSS_CONSOLE_VTBL TuiVtbl =
TuiDrawRegion, TuiDrawRegion,
TuiSetCursorInfo, TuiSetCursorInfo,
TuiSetScreenInfo, TuiSetScreenInfo,
TuiUpdateScreenInfo,
TuiChangeTitle, TuiChangeTitle,
TuiCleanupConsole TuiCleanupConsole
}; };