Author: hbelusca Date: Thu Aug 7 13:16:49 2014 New Revision: 63834
URL: http://svn.reactos.org/svn/reactos?rev=63834&view=rev Log: Second partial merge of the condrv_restructure branch, including additions from revisions 63818, 63819, 63820 and 63831. CORE-7931 #comment Second partial merge of the condrv_restructure branch in revision 63834.
Modified: trunk/reactos/ (props changed) trunk/reactos/dll/cpl/console/console.c trunk/reactos/dll/cpl/console/layout.c trunk/reactos/dll/win32/kernel32/client/console/console.c trunk/reactos/dll/win32/kernel32/client/console/readwrite.c trunk/reactos/include/reactos/subsys/win/conmsg.h trunk/reactos/win32ss/user/winsrv/consrv/console.c trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h
Propchange: trunk/reactos/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Aug 7 13:16:49 2014 @@ -3,7 +3,7 @@ /branches/GSoC_2011/TcpIpDriver:51551-53074,53076-53119 /branches/GSoC_Network:51545-51546 /branches/cmake-bringup:50484,50693,50719,51544-52564 -/branches/condrv_restructure:63104-63808 +/branches/condrv_restructure:63104-63833 /branches/header-work:45691-47721 /branches/kd++:58883-58973 /branches/ntvdm:59241-63176
Modified: trunk/reactos/dll/cpl/console/console.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/console/console.c?r... ============================================================================== --- trunk/reactos/dll/cpl/console/console.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/console/console.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -115,7 +115,8 @@ wcsncpy(GuiInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !! // GuiInfo->FaceName[0] = L'\0'; GuiInfo->FontFamily = FF_DONTCARE; - GuiInfo->FontSize = 0; + GuiInfo->FontSize.X = 0; + GuiInfo->FontSize.Y = 0; GuiInfo->FontWeight = FW_DONTCARE; GuiInfo->UseRasterFonts = TRUE;
Modified: trunk/reactos/dll/cpl/console/layout.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/console/layout.c?re... ============================================================================== --- trunk/reactos/dll/cpl/console/layout.c [iso-8859-1] (original) +++ trunk/reactos/dll/cpl/console/layout.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -120,8 +120,8 @@ hBrush = CreateSolidBrush(nbkColor); if (!hBrush) return FALSE;
- Font = CreateFontW(LOWORD(GuiInfo->FontSize), - 0, // HIWORD(GuiInfo->FontSize), + Font = CreateFontW(GuiInfo->FontSize.X, + 0, // GuiInfo->FontSize.Y, 0, TA_BASELINE, GuiInfo->FontWeight,
Modified: trunk/reactos/dll/win32/kernel32/client/console/console.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/c... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/console/console.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/console/console.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -1076,24 +1076,37 @@ WINAPI FreeConsole(VOID) { - // AG: I'm not sure if this is correct (what happens to std handles?) - // but I just tried to reverse what AllocConsole() does... - - NTSTATUS Status; - CONSOLE_API_MESSAGE ApiMessage; - - Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, - NULL, - CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFree), - sizeof(CONSOLE_FREECONSOLE)); - if (!NT_SUCCESS(Status)) - { - BaseSetLastNTError(Status); - return FALSE; - } - + CONSOLE_API_MESSAGE ApiMessage; + PCONSOLE_FREECONSOLE FreeConsoleRequest = &ApiMessage.Data.FreeConsoleRequest; + HANDLE ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; + + /* We must have a non-trivial handle to close */ + if (ConsoleHandle == NULL) // IsConsoleHandle(ConsoleHandle) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + /* Set up the data to send to the Console Server */ + FreeConsoleRequest->ConsoleHandle = ConsoleHandle; + + /* Call the server */ + CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + NULL, + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFree), + sizeof(*FreeConsoleRequest)); + + /* Check for success */ + if (!NT_SUCCESS(ApiMessage.Status)) + { + BaseSetLastNTError(ApiMessage.Status); + return FALSE; + } + + /* Reset the console handle */ NtCurrentPeb()->ProcessParameters->ConsoleHandle = NULL;
+ /* Close the associated input handle */ CloseHandle(InputWaitHandle); InputWaitHandle = INVALID_HANDLE_VALUE;
@@ -1311,7 +1324,7 @@ BaseSetLastNTError(ApiMessage.Status); }
- DPRINT1("GetLargestConsoleWindowSize, X = %d, Y = %d\n", GetLargestWindowSizeRequest->Size.X, GetLargestWindowSizeRequest->Size.Y); + DPRINT("GetLargestConsoleWindowSize, X = %d, Y = %d\n", GetLargestWindowSizeRequest->Size.X, GetLargestWindowSizeRequest->Size.Y); return GetLargestWindowSizeRequest->Size; }
@@ -2602,22 +2615,67 @@ }
-/* - * @unimplemented - */ -BOOL WINAPI GetConsoleKeyboardLayoutNameA(LPSTR name) -{ - STUB; - return 0; -} - -/* - * @unimplemented - */ -BOOL WINAPI GetConsoleKeyboardLayoutNameW(LPWSTR name) -{ - STUB; - return 0; +BOOL +IntGetConsoleKeyboardLayoutName(OUT PVOID pszLayoutName, + IN BOOL bAnsi) +{ + CONSOLE_API_MESSAGE ApiMessage; + PCONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest = &ApiMessage.Data.GetKbdLayoutNameRequest; + + /* Set up the data to send to the Console Server */ + GetKbdLayoutNameRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle; + GetKbdLayoutNameRequest->Ansi = bAnsi; + + /* Call the server */ + CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + NULL, + CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetKeyboardLayoutName), + sizeof(*GetKbdLayoutNameRequest)); + + /* Check for success */ + if (!NT_SUCCESS(ApiMessage.Status)) + { + BaseSetLastNTError(ApiMessage.Status); + return FALSE; + } + + /* Retrieve the results */ + _SEH2_TRY + { + /* Copy only KL_NAMELENGTH == 9 characters, ANSI or UNICODE */ + if (bAnsi) + strncpy(pszLayoutName, (PCHAR)GetKbdLayoutNameRequest->LayoutBuffer, KL_NAMELENGTH); + else + wcsncpy(pszLayoutName, (PWCHAR)GetKbdLayoutNameRequest->LayoutBuffer, KL_NAMELENGTH); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + SetLastError(ERROR_INVALID_ACCESS); + _SEH2_YIELD(return FALSE); + } + _SEH2_END; + + return TRUE; +} + +/* + * @implemented (undocumented) + */ +BOOL +WINAPI +GetConsoleKeyboardLayoutNameA(OUT LPSTR pszLayoutName) +{ + return IntGetConsoleKeyboardLayoutName(pszLayoutName, TRUE); +} + +/* + * @implemented (undocumented) + */ +BOOL +WINAPI +GetConsoleKeyboardLayoutNameW(OUT LPWSTR pszLayoutName) +{ + return IntGetConsoleKeyboardLayoutName(pszLayoutName, FALSE); }
/*
Modified: trunk/reactos/dll/win32/kernel32/client/console/readwrite.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/c... ============================================================================== --- trunk/reactos/dll/win32/kernel32/client/console/readwrite.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/client/console/readwrite.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -399,7 +399,7 @@ _SEH2_END;
NumCells = SizeX * SizeY; - DPRINT1("IntReadConsoleOutput: (%d x %d)\n", SizeX, SizeY); + DPRINT("IntReadConsoleOutput: (%d x %d)\n", SizeX, SizeY);
/* * For optimization purposes, Windows (and hence ReactOS, too, for @@ -869,7 +869,7 @@ _SEH2_END;
NumCells = SizeX * SizeY; - DPRINT1("IntWriteConsoleOutput: (%d x %d)\n", SizeX, SizeY); + DPRINT("IntWriteConsoleOutput: (%d x %d)\n", SizeX, SizeY);
/* * For optimization purposes, Windows (and hence ReactOS, too, for
Modified: trunk/reactos/include/reactos/subsys/win/conmsg.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/subsys/win/... ============================================================================== --- trunk/reactos/include/reactos/subsys/win/conmsg.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/subsys/win/conmsg.h [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -164,6 +164,7 @@ DWORD dwHotKey; DWORD dwStartupFlags; CONSOLE_PROPERTIES; + BOOLEAN ConsoleNeeded; // Used for GUI apps only. LPTHREAD_START_ROUTINE CtrlDispatcher; LPTHREAD_START_ROUTINE ImeDispatcher; @@ -281,7 +282,7 @@
typedef struct { - ULONG Dummy; + HANDLE ConsoleHandle; } CONSOLE_FREECONSOLE, *PCONSOLE_FREECONSOLE;
typedef struct @@ -793,6 +794,13 @@ HANDLE EventHandle; } CONSOLE_SETINPUTOUTPUTCP, *PCONSOLE_SETINPUTOUTPUTCP;
+typedef struct +{ + HANDLE ConsoleHandle; + CHAR LayoutBuffer[KL_NAMELENGTH * sizeof(WCHAR)]; // Can hold up to 9 wchars + BOOL Ansi; +} CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME; + typedef struct _CONSOLE_API_MESSAGE { PORT_MESSAGE Header; @@ -886,9 +894,10 @@ CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest; CONSOLE_SETHISTORYMODE SetHistoryModeRequest;
- /* Input and Output Code Pages */ + /* Input and Output Code Pages; keyboard */ CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest; CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest; + CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest; } Data; } CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/console.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/console.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/console.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -999,50 +999,63 @@
CSR_API(SrvGetConsoleKeyboardLayoutName) { + NTSTATUS Status; + PCONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetKbdLayoutNameRequest; + PCONSOLE Console; + + Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE); + if (!NT_SUCCESS(Status)) return Status; + + /* Retrieve the keyboard layout name of the system */ + if (GetKbdLayoutNameRequest->Ansi) + GetKeyboardLayoutNameA((PCHAR)GetKbdLayoutNameRequest->LayoutBuffer); + else + GetKeyboardLayoutNameW((PWCHAR)GetKbdLayoutNameRequest->LayoutBuffer); + + ConSrvReleaseConsole(Console, TRUE); + return STATUS_SUCCESS; +} + +CSR_API(SrvGetConsoleCharType) +{ DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvGetConsoleCharType) +CSR_API(SrvSetConsoleLocalEUDC) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvSetConsoleLocalEUDC) +CSR_API(SrvSetConsoleCursorMode) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvSetConsoleCursorMode) +CSR_API(SrvGetConsoleCursorMode) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvGetConsoleCursorMode) +CSR_API(SrvGetConsoleNlsMode) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvGetConsoleNlsMode) +CSR_API(SrvSetConsoleNlsMode) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvSetConsoleNlsMode) +CSR_API(SrvGetConsoleLangId) { DPRINT1("%s not yet implemented\n", __FUNCTION__); return STATUS_NOT_IMPLEMENTED; }
-CSR_API(SrvGetConsoleLangId) -{ - DPRINT1("%s not yet implemented\n", __FUNCTION__); - return STATUS_NOT_IMPLEMENTED; -} - /* EOF */
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/conwnd.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -506,8 +506,8 @@
GuiData->hWindow = hWnd;
- GuiData->Font = CreateFontW(LOWORD(GuiData->GuiInfo.FontSize), - 0, // HIWORD(GuiData->GuiInfo.FontSize), + GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.X, + 0, // GuiData->GuiInfo.FontSize.Y, 0, TA_BASELINE, GuiData->GuiInfo.FontWeight, @@ -2321,6 +2321,19 @@ break; }
+ /* + * Undocumented message sent by Windows' console.dll for applying console info. + * See http://www.catch22.net/sites/default/source/files/setconsoleinfo.c + * and http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf + * for more information. + */ + case WM_SETCONSOLEINFO: + { + DPRINT1("WM_SETCONSOLEINFO message\n"); + GuiApplyWindowsConsoleSettings(GuiData, (HANDLE)wParam); + break; + } + case PM_CONSOLE_BEEP: DPRINT1("Beep !!\n"); Beep(800, 200);
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.c [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -98,7 +98,8 @@ } else if (!wcscmp(szValueName, L"FontSize")) { - TermInfo->FontSize = Value; + TermInfo->FontSize.X = LOWORD(Value); + TermInfo->FontSize.Y = HIWORD(Value); RetVal = TRUE; } else if (!wcscmp(szValueName, L"FontWeight")) @@ -159,7 +160,10 @@
SetConsoleSetting(L"FaceName", REG_SZ, (wcslen(TermInfo->FaceName) + 1) * sizeof(WCHAR), TermInfo->FaceName, L'\0'); // wcsnlen SetConsoleSetting(L"FontFamily", REG_DWORD, sizeof(DWORD), &TermInfo->FontFamily, FF_DONTCARE); - SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &TermInfo->FontSize, 0); + + Storage = MAKELONG(TermInfo->FontSize.X, TermInfo->FontSize.Y); + SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &Storage, 0); + SetConsoleSetting(L"FontWeight", REG_DWORD, sizeof(DWORD), &TermInfo->FontWeight, FW_DONTCARE);
Storage = TermInfo->FullScreen; @@ -200,7 +204,8 @@ wcsncpy(TermInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !! // TermInfo->FaceName[0] = L'\0'; TermInfo->FontFamily = FF_DONTCARE; - TermInfo->FontSize = 0; + TermInfo->FontSize.X = 0; + TermInfo->FontSize.Y = 0; TermInfo->FontWeight = FW_DONTCARE; TermInfo->UseRasterFonts = TRUE;
@@ -544,4 +549,180 @@ return; }
+/* + * Function for dealing with the undocumented message and structure used by + * Windows' console.dll for setting console info. + * See http://www.catch22.net/sites/default/source/files/setconsoleinfo.c + * and http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf + * for more information. + */ +VOID +GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData, + HANDLE hClientSection) +{ + NTSTATUS Status = STATUS_SUCCESS; + PCONSOLE Console = GuiData->Console; + PCONSOLE_PROCESS_DATA ProcessData; + HANDLE hSection = NULL; + ULONG ViewSize = 0; + PCONSOLE_STATE_INFO pConInfo = NULL; + CONSOLE_INFO ConInfo; + GUI_CONSOLE_INFO GuiInfo; + SIZE_T Length; + + if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return; + + /* Get the console leader process, our client */ + ProcessData = ConSrvGetConsoleLeaderProcess(Console); + + /* Duplicate the section handle for ourselves */ + Status = NtDuplicateObject(ProcessData->Process->ProcessHandle, + hClientSection, + NtCurrentProcess(), + &hSection, + 0, 0, DUPLICATE_SAME_ACCESS); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Error when mapping client handle, Status = %lu\n", Status); + goto Quit; + } + + /* Get a view of the shared section */ + Status = NtMapViewOfSection(hSection, + NtCurrentProcess(), + (PVOID*)&pConInfo, + 0, + 0, + NULL, + &ViewSize, + ViewUnmap, + 0, + PAGE_READWRITE); + if (!NT_SUCCESS(Status)) + { + DPRINT1("Error when mapping view of file, Status = %lu\n", Status); + goto Quit; + } + + _SEH2_TRY + { + /* Check that the section is well-sized */ + if ( (ViewSize < sizeof(CONSOLE_STATE_INFO)) || + (pConInfo->cbSize != sizeof(CONSOLE_STATE_INFO)) ) + { + DPRINT1("Error: section bad-sized: sizeof(Section) < sizeof(CONSOLE_STATE_INFO)\n"); + Status = STATUS_INVALID_VIEW_SIZE; + _SEH2_YIELD(goto Quit); + } + + // TODO: Check that GuiData->hWindow == pConInfo->hConsoleWindow + + /* Retrieve terminal informations */ + + // Console information + ConInfo.HistoryBufferSize = pConInfo->HistoryBufferSize; + ConInfo.NumberOfHistoryBuffers = pConInfo->NumberOfHistoryBuffers; + ConInfo.HistoryNoDup = !!pConInfo->HistoryNoDup; + ConInfo.QuickEdit = !!pConInfo->QuickEdit; + ConInfo.InsertMode = !!pConInfo->InsertMode; + ConInfo.ScreenBufferSize = pConInfo->ScreenBufferSize; + ConInfo.ConsoleSize = pConInfo->WindowSize; + ConInfo.CursorSize = pConInfo->CursorSize; + ConInfo.ScreenAttrib = pConInfo->ScreenColors; + ConInfo.PopupAttrib = pConInfo->PopupColors; + memcpy(&ConInfo.Colors, pConInfo->ColorTable, sizeof(ConInfo.Colors)); + ConInfo.CodePage = pConInfo->CodePage; + /**ConInfo.ConsoleTitle[MAX_PATH + 1] = pConInfo->ConsoleTitle; // FIXME: memcpy**/ +#if 0 + /* Title of the console, original one corresponding to the one set by the console leader */ + Length = min(sizeof(pConInfo->ConsoleTitle) / sizeof(pConInfo->ConsoleTitle[0]) - 1, + Console->OriginalTitle.Length / sizeof(WCHAR)); + wcsncpy(pSharedInfo->ci.ConsoleTitle, Console->OriginalTitle.Buffer, Length); +#endif + // ULONG ConInfo.InputBufferSize = pConInfo-> + // BOOLEAN ConInfo.CursorBlinkOn = pConInfo-> + // BOOLEAN ConInfo.ForceCursorOff = pConInfo-> + + + // Terminal information + Length = min(wcslen(pConInfo->FaceName) + 1, LF_FACESIZE); // wcsnlen + wcsncpy(GuiInfo.FaceName, pConInfo->FaceName, LF_FACESIZE); + GuiInfo.FaceName[Length] = L'\0'; + + GuiInfo.FontFamily = pConInfo->FontFamily; + GuiInfo.FontSize = pConInfo->FontSize; + GuiInfo.FontWeight = pConInfo->FontWeight; + GuiInfo.FullScreen = !!pConInfo->FullScreen; + GuiInfo.AutoPosition = !!pConInfo->AutoPosition; + GuiInfo.WindowOrigin = pConInfo->WindowPosition; + // BOOL GuiInfo.UseRasterFonts = pConInfo-> + // WORD GuiInfo.ShowWindow = pConInfo-> + + + + /* + * If we don't set the default parameters, + * apply them, otherwise just save them. + */ +#if 0 + if (pConInfo->ShowDefaultParams == FALSE) +#endif + { + /* Set the console informations */ + ConSrvApplyUserSettings(Console, &ConInfo); + + /* Set the terminal informations */ + + // memcpy(&GuiData->GuiInfo, &GuiInfo, sizeof(GUI_CONSOLE_INFO)); + + /* Move the window to the user's values */ + GuiData->GuiInfo.AutoPosition = GuiInfo.AutoPosition; + GuiData->GuiInfo.WindowOrigin = GuiInfo.WindowOrigin; + GuiConsoleMoveWindow(GuiData); + + InvalidateRect(GuiData->hWindow, NULL, TRUE); + + /* + * Apply full-screen mode. + */ + if (GuiInfo.FullScreen != GuiData->GuiInfo.FullScreen) + { + SwitchFullScreen(GuiData, GuiInfo.FullScreen); + } + } + +#if 0 + /* + * Save settings if needed + */ + // FIXME: Do it in the console properties applet ?? + if (SaveSettings) + { + DWORD ProcessId = HandleToUlong(ProcessData->Process->ClientId.UniqueProcess); + ConSrvWriteUserSettings(&ConInfo, ProcessId); + GuiConsoleWriteUserSettings(&GuiInfo, ConInfo.ConsoleTitle, ProcessId); + } +#endif + + Status = STATUS_SUCCESS; + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + DPRINT1("GuiApplyUserSettings - Caught an exception, Status = %08X\n", Status); + } + _SEH2_END; + +Quit: + /* Finally, close the section and return */ + if (hSection) + { + NtUnmapViewOfSection(NtCurrentProcess(), pConInfo); + NtClose(hSection); + } + + LeaveCriticalSection(&Console->Lock); + return; +} + /* EOF */
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -14,7 +14,16 @@ #ifndef WM_APP #define WM_APP 0x8000 #endif -#define PM_APPLY_CONSOLE_INFO (WM_APP + 100) +/* Message sent by ReactOS' console.dll for applying console info */ +#define PM_APPLY_CONSOLE_INFO (WM_APP + 100) + +/* + * Undocumented message sent by Windows' console.dll for applying console info. + * See http://www.catch22.net/sites/default/source/files/setconsoleinfo.c + * and http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf + * for more information. + */ +#define WM_SETCONSOLEINFO (WM_USER + 201)
/* STRUCTURES *****************************************************************/
@@ -22,9 +31,9 @@ { // FONTSIGNATURE FontSignature; WCHAR FaceName[LF_FACESIZE]; - UINT FontFamily; - DWORD FontSize; - DWORD FontWeight; + ULONG FontFamily; + COORD FontSize; + ULONG FontWeight; BOOL UseRasterFonts;
BOOL FullScreen; /* Whether the console is displayed in full-screen or windowed mode */ @@ -34,6 +43,46 @@ BOOL AutoPosition; POINT WindowOrigin; } GUI_CONSOLE_INFO, *PGUI_CONSOLE_INFO; + +/* + * Undocumented structure used by Windows' console.dll for setting console info. + * See http://www.catch22.net/sites/default/source/files/setconsoleinfo.c + * and http://www.scn.rain.com/~neighorn/PDF/MSBugPaper.pdf + * for more information. + */ +#pragma pack(push, 1) +typedef struct _CONSOLE_STATE_INFO +{ + ULONG cbSize; + COORD ScreenBufferSize; + COORD WindowSize; + POINT WindowPosition; // WindowPosX and Y + + COORD FontSize; + ULONG FontFamily; + ULONG FontWeight; + WCHAR FaceName[LF_FACESIZE]; + + ULONG CursorSize; + BOOL FullScreen; + BOOL QuickEdit; + BOOL AutoPosition; + BOOL InsertMode; + + USHORT ScreenColors; // ScreenAttributes + USHORT PopupColors; // PopupAttributes + BOOL HistoryNoDup; + ULONG HistoryBufferSize; + ULONG NumberOfHistoryBuffers; + + COLORREF ColorTable[16]; + + ULONG CodePage; + HWND HWnd; + + WCHAR ConsoleTitle[256]; +} CONSOLE_STATE_INFO, *PCONSOLE_STATE_INFO; +#pragma pack(pop)
#ifndef CONSOLE_H__ // If we aren't included by console.dll
@@ -59,6 +108,9 @@ GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData, HANDLE hClientSection, BOOL SaveSettings); +VOID +GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData, + HANDLE hClientSection);
#endif
Modified: trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/include/settings.h [iso-8859-1] Thu Aug 7 13:16:49 2014 @@ -10,6 +10,8 @@ #pragma once
/* STRUCTURES *****************************************************************/ + +#pragma pack(push, 1)
/* * Structure used to hold terminal-specific information @@ -69,6 +71,8 @@ TERMINAL_INFO TerminalInfo; /* Frontend-specific parameters */ } CONSOLE_PROPS, *PCONSOLE_PROPS;
+#pragma pack(pop) + /* FUNCTIONS ******************************************************************/
#ifndef CONSOLE_H__ // If we aren't included by console.dll