diff --git a/win32ss/user/winsrv/consrv/condrv/conoutput.c b/win32ss/user/winsrv/consrv/condrv/conoutput.c index 06a7da9d656..c1ef1898d38 100644 --- a/win32ss/user/winsrv/consrv/condrv/conoutput.c +++ b/win32ss/user/winsrv/consrv/condrv/conoutput.c @@ -214,13 +214,6 @@ ConDrvGetActiveScreenBuffer(IN PCONSOLE Console) /* PUBLIC DRIVER APIS *********************************************************/ -NTSTATUS NTAPI -ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console, - IN PTEXTMODE_SCREEN_BUFFER Buffer, - IN PCHAR_CELL CharInfo/*Buffer*/, - IN COORD CharInfoSize, - IN OUT PSMALL_RECT WriteRegion, - IN BOOLEAN DrawRegion); NTSTATUS NTAPI ConDrvInvalidateBitMapRect(IN PCONSOLE Console, IN PCONSOLE_SCREEN_BUFFER Buffer, @@ -232,19 +225,6 @@ ConDrvInvalidateBitMapRect(IN PCONSOLE Console, /* Validity check */ ASSERT(Console == Buffer->Header.Console); - /* In text-mode only, draw the VDM buffer if present */ - if (GetType(Buffer) == TEXTMODE_BUFFER) - { - PTEXTMODE_SCREEN_BUFFER TextBuffer = (PTEXTMODE_SCREEN_BUFFER)Buffer; - - /*Status =*/ ConDrvWriteConsoleOutputVDM(Buffer->Header.Console, - TextBuffer, - Console->VDMBuffer, - Console->VDMBufferSize, - Region, - FALSE); - } - /* If the output buffer is the current one, redraw the correct portion of the screen */ if (Buffer == Console->ActiveBuffer) TermDrawRegion(Console, Region); diff --git a/win32ss/user/winsrv/consrv/condrv/text.c b/win32ss/user/winsrv/consrv/condrv/text.c index 700a4151c9a..b95e89ade75 100644 --- a/win32ss/user/winsrv/consrv/condrv/text.c +++ b/win32ss/user/winsrv/consrv/condrv/text.c @@ -597,14 +597,15 @@ ConDrvWriteConsoleOutput(IN PCONSOLE Console, /* * NOTE: This function is strongly inspired by ConDrvWriteConsoleOutput... + * FIXME: This function MUST be moved into consrv/conoutput.c because only + * consrv knows how to manipulate VDM screenbuffers. */ NTSTATUS NTAPI ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console, IN PTEXTMODE_SCREEN_BUFFER Buffer, IN PCHAR_CELL CharInfo/*Buffer*/, IN COORD CharInfoSize, - IN OUT PSMALL_RECT WriteRegion, - IN BOOLEAN DrawRegion) + IN PSMALL_RECT WriteRegion) { SHORT X, Y; SMALL_RECT ScreenBuffer; @@ -650,10 +651,6 @@ ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console, } } - if (DrawRegion) TermDrawRegion(Console, &CapturedWriteRegion); - - *WriteRegion = CapturedWriteRegion; - return STATUS_SUCCESS; } diff --git a/win32ss/user/winsrv/consrv/conoutput.c b/win32ss/user/winsrv/consrv/conoutput.c index b8e00689c4d..0ab69b9ee48 100644 --- a/win32ss/user/winsrv/consrv/conoutput.c +++ b/win32ss/user/winsrv/consrv/conoutput.c @@ -16,6 +16,16 @@ /* PUBLIC SERVER APIS *********************************************************/ +/* + * FIXME: This function MUST be moved fro condrv/conoutput.c because only + * consrv knows how to manipulate VDM screenbuffers. + */ +NTSTATUS NTAPI +ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console, + IN PTEXTMODE_SCREEN_BUFFER Buffer, + IN PCHAR_CELL CharInfo/*Buffer*/, + IN COORD CharInfoSize, + IN PSMALL_RECT WriteRegion); NTSTATUS NTAPI ConDrvInvalidateBitMapRect(IN PCONSOLE Console, IN PCONSOLE_SCREEN_BUFFER Buffer, @@ -33,6 +43,18 @@ CSR_API(SrvInvalidateBitMapRect) &Buffer, GENERIC_READ, TRUE); if (!NT_SUCCESS(Status)) return Status; + /* In text-mode only, draw the VDM buffer if present */ + if (GetType(Buffer) == TEXTMODE_BUFFER) + { + PTEXTMODE_SCREEN_BUFFER TextBuffer = (PTEXTMODE_SCREEN_BUFFER)Buffer; + + /*Status =*/ ConDrvWriteConsoleOutputVDM(Buffer->Header.Console, + TextBuffer, + Buffer->Header.Console->VDMBuffer, + Buffer->Header.Console->VDMBufferSize, + &InvalidateDIBitsRequest->Region); + } + Status = ConDrvInvalidateBitMapRect(Buffer->Header.Console, Buffer, &InvalidateDIBitsRequest->Region); diff --git a/win32ss/user/winsrv/consrv/include/conio.h b/win32ss/user/winsrv/consrv/include/conio.h index 271a130bdef..b3123e76454 100644 --- a/win32ss/user/winsrv/consrv/include/conio.h +++ b/win32ss/user/winsrv/consrv/include/conio.h @@ -307,12 +307,12 @@ typedef struct _CONSOLE LONG ReferenceCount; /* Is incremented each time a handle to something in the console (a screen-buffer or the input buffer of this console) gets referenced */ CRITICAL_SECTION Lock; - CONSOLE_STATE State; /* State of the console */ - TERMINAL TermIFace; /* Frontend-specific interface */ - ULONG ConsoleID; /* The ID of the console */ LIST_ENTRY ListEntry; /* Entry in the list of consoles */ + CONSOLE_STATE State; /* State of the console */ + TERMINAL TermIFace; /* Terminal-specific interface */ + HANDLE UnpauseEvent; /* When != NULL, event for pausing the console */ /******************************** Input buffer ********************************/