+++ /dev/null
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS Console Server DLL
- * FILE: consrv/frontends/gui/guisettings.c
- * PURPOSE: GUI Terminal Front-End Settings Management
- * PROGRAMMERS: Johannes Anderwald
- * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
- */
-
-/* INCLUDES *******************************************************************/
-
-#include <consrv.h>
-
-#define NDEBUG
-#include <debug.h>
-
-#include "guiterm.h"
-#include "guisettings.h"
-
-/* FUNCTIONS ******************************************************************/
-
-BOOL
-GuiConsoleReadUserSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
- IN LPCWSTR ConsoleTitle,
- IN DWORD ProcessId)
-{
- /*****************************************************
- * Adapted from ConSrvReadUserSettings in settings.c *
- *****************************************************/
-
- BOOL RetVal = FALSE;
- HKEY hKey;
- DWORD dwNumSubKeys = 0;
- DWORD dwIndex;
- DWORD dwType;
- WCHAR szValueName[MAX_PATH];
- DWORD dwValueName;
- WCHAR szValue[LF_FACESIZE] = L"\0";
- DWORD Value;
- DWORD dwValue;
-
- if (!ConSrvOpenUserSettings(ProcessId,
- ConsoleTitle,
- &hKey, KEY_READ,
- FALSE))
- {
- DPRINT("ConSrvOpenUserSettings failed\n");
- return FALSE;
- }
-
- if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL,
- &dwNumSubKeys, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
- {
- DPRINT("GuiConsoleReadUserSettings: RegQueryInfoKey failed\n");
- RegCloseKey(hKey);
- return FALSE;
- }
-
- DPRINT("GuiConsoleReadUserSettings entered dwNumSubKeys %d\n", dwNumSubKeys);
-
- for (dwIndex = 0; dwIndex < dwNumSubKeys; dwIndex++)
- {
- dwValue = sizeof(Value);
- dwValueName = MAX_PATH; // sizeof(szValueName)/sizeof(szValueName[0])
-
- if (RegEnumValueW(hKey, dwIndex, szValueName, &dwValueName, NULL, &dwType, (BYTE*)&Value, &dwValue) != ERROR_SUCCESS)
- {
- if (dwType == REG_SZ)
- {
- /*
- * Retry in case of string value
- */
- dwValue = sizeof(szValue);
- dwValueName = MAX_PATH; // sizeof(szValueName)/sizeof(szValueName[0])
- if (RegEnumValueW(hKey, dwIndex, szValueName, &dwValueName, NULL, NULL, (BYTE*)szValue, &dwValue) != ERROR_SUCCESS)
- break;
- }
- else
- {
- break;
- }
- }
-
- if (!wcscmp(szValueName, L"FaceName"))
- {
- wcsncpy(TermInfo->FaceName, szValue, LF_FACESIZE);
- TermInfo->FaceName[LF_FACESIZE - 1] = UNICODE_NULL;
- RetVal = TRUE;
- }
- else if (!wcscmp(szValueName, L"FontFamily"))
- {
- TermInfo->FontFamily = Value;
- RetVal = TRUE;
- }
- else if (!wcscmp(szValueName, L"FontSize"))
- {
- TermInfo->FontSize.X = LOWORD(Value); // Width
- TermInfo->FontSize.Y = HIWORD(Value); // Height
- RetVal = TRUE;
- }
- else if (!wcscmp(szValueName, L"FontWeight"))
- {
- TermInfo->FontWeight = Value;
- RetVal = TRUE;
- }
- else if (!wcscmp(szValueName, L"FullScreen"))
- {
- TermInfo->FullScreen = Value;
- RetVal = TRUE;
- }
- else if (!wcscmp(szValueName, L"WindowPosition"))
- {
- TermInfo->AutoPosition = FALSE;
- TermInfo->WindowOrigin.x = LOWORD(Value);
- TermInfo->WindowOrigin.y = HIWORD(Value);
- RetVal = TRUE;
- }
- }
-
- RegCloseKey(hKey);
- return RetVal;
-}
-
-BOOL
-GuiConsoleWriteUserSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
- IN LPCWSTR ConsoleTitle,
- IN DWORD ProcessId)
-{
- /******************************************************
- * Adapted from ConSrvWriteUserSettings in settings.c *
- ******************************************************/
-
- BOOL GlobalSettings = (ConsoleTitle[0] == L'\0');
- HKEY hKey;
- DWORD Storage = 0;
-
-#define SetConsoleSetting(SettingName, SettingType, SettingSize, Setting, DefaultValue) \
-do { \
- if (GlobalSettings || (!GlobalSettings && (*(Setting) != (DefaultValue)))) \
- { \
- RegSetValueExW(hKey, (SettingName), 0, (SettingType), (PBYTE)(Setting), (SettingSize)); \
- } \
- else \
- { \
- RegDeleteValue(hKey, (SettingName)); \
- } \
-} while (0)
-
- if (!ConSrvOpenUserSettings(ProcessId,
- ConsoleTitle,
- &hKey, KEY_WRITE,
- TRUE))
- {
- return FALSE;
- }
-
- 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);
-
- Storage = MAKELONG(TermInfo->FontSize.X, TermInfo->FontSize.Y); // Width, Height
- SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &Storage, 0);
-
- SetConsoleSetting(L"FontWeight", REG_DWORD, sizeof(DWORD), &TermInfo->FontWeight, FW_DONTCARE);
-
- Storage = TermInfo->FullScreen;
- SetConsoleSetting(L"FullScreen", REG_DWORD, sizeof(DWORD), &Storage, FALSE);
-
- if (TermInfo->AutoPosition == FALSE)
- {
- Storage = MAKELONG(TermInfo->WindowOrigin.x, TermInfo->WindowOrigin.y);
- RegSetValueExW(hKey, L"WindowPosition", 0, REG_DWORD, (PBYTE)&Storage, sizeof(DWORD));
- }
- else
- {
- RegDeleteValue(hKey, L"WindowPosition");
- }
-
- RegCloseKey(hKey);
- return TRUE;
-}
-
-VOID
-GuiConsoleGetDefaultSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
- IN DWORD ProcessId)
-{
- /*******************************************************
- * Adapted from ConSrvGetDefaultSettings in settings.c *
- *******************************************************/
-
- if (TermInfo == NULL) return;
-
- /*
- * 1. Load the default values
- */
- // wcsncpy(TermInfo->FaceName, L"DejaVu Sans Mono", LF_FACESIZE);
- // TermInfo->FontSize = MAKELONG(8, 12); // 0x000C0008; // font is 8x12
- // TermInfo->FontSize = MAKELONG(16, 16); // font is 16x16
-
- wcsncpy(TermInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !!
- // TermInfo->FaceName[0] = L'\0';
- TermInfo->FontFamily = FF_DONTCARE;
- TermInfo->FontSize.X = 0;
- TermInfo->FontSize.Y = 0;
- TermInfo->FontWeight = FW_NORMAL; // HACK: !!
- // TermInfo->FontWeight = FW_DONTCARE;
-
- TermInfo->FullScreen = FALSE;
- TermInfo->ShowWindow = SW_SHOWNORMAL;
- TermInfo->AutoPosition = TRUE;
- TermInfo->WindowOrigin.x = 0;
- TermInfo->WindowOrigin.y = 0;
-
- /*
- * 2. Overwrite them with the ones stored in HKCU\Console.
- * If the HKCU\Console key doesn't exist, create it
- * and store the default values inside.
- */
- if (!GuiConsoleReadUserSettings(TermInfo, L"", ProcessId))
- {
- GuiConsoleWriteUserSettings(TermInfo, L"", ProcessId);
- }
-}
-
-VOID
-GuiConsoleShowConsoleProperties(PGUI_CONSOLE_DATA GuiData,
- BOOL Defaults)
-{
- NTSTATUS Status;
- PCONSRV_CONSOLE Console = GuiData->Console;
- PCONSOLE_SCREEN_BUFFER ActiveBuffer = GuiData->ActiveBuffer;
- PCONSOLE_PROCESS_DATA ProcessData;
- HANDLE hSection = NULL, hClientSection = NULL;
- LARGE_INTEGER SectionSize;
- ULONG ViewSize = 0;
- SIZE_T Length = 0;
- PCONSOLE_PROPS pSharedInfo = NULL;
- PGUI_CONSOLE_INFO GuiInfo = NULL;
-
- DPRINT("GuiConsoleShowConsoleProperties entered\n");
-
- if (!ConDrvValidateConsoleUnsafe((PCONSOLE)Console, CONSOLE_RUNNING, TRUE)) return;
-
- /*
- * Create a memory section to share with the applet, and map it.
- */
- /* Holds data for console.dll + console info + terminal-specific info */
- SectionSize.QuadPart = sizeof(CONSOLE_PROPS) + sizeof(GUI_CONSOLE_INFO);
- Status = NtCreateSection(&hSection,
- SECTION_ALL_ACCESS,
- NULL,
- &SectionSize,
- PAGE_READWRITE,
- SEC_COMMIT,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Error: Impossible to create a shared section, Status = 0x%08lx\n", Status);
- goto Quit;
- }
-
- Status = NtMapViewOfSection(hSection,
- NtCurrentProcess(),
- (PVOID*)&pSharedInfo,
- 0,
- 0,
- NULL,
- &ViewSize,
- ViewUnmap,
- 0,
- PAGE_READWRITE);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Error: Impossible to map the shared section, Status = 0x%08lx\n", Status);
- goto Quit;
- }
-
-
- /*
- * Setup the shared console properties structure.
- */
-
- /* Header */
- pSharedInfo->hConsoleWindow = GuiData->hWindow;
- pSharedInfo->ShowDefaultParams = Defaults;
-
- /*
- * We fill-in the fields only if we display
- * our properties, not the default ones.
- */
- if (!Defaults)
- {
- /* Console information */
- pSharedInfo->ci.HistoryBufferSize = Console->HistoryBufferSize;
- pSharedInfo->ci.NumberOfHistoryBuffers = Console->NumberOfHistoryBuffers;
- pSharedInfo->ci.HistoryNoDup = Console->HistoryNoDup;
- pSharedInfo->ci.QuickEdit = Console->QuickEdit;
- pSharedInfo->ci.InsertMode = Console->InsertMode;
- /////////////pSharedInfo->ci.InputBufferSize = 0;
- pSharedInfo->ci.ScreenBufferSize = ActiveBuffer->ScreenBufferSize;
- pSharedInfo->ci.ConsoleSize = ActiveBuffer->ViewSize;
- pSharedInfo->ci.CursorBlinkOn;
- pSharedInfo->ci.ForceCursorOff;
- pSharedInfo->ci.CursorSize = ActiveBuffer->CursorInfo.dwSize;
- if (GetType(ActiveBuffer) == TEXTMODE_BUFFER)
- {
- PTEXTMODE_SCREEN_BUFFER Buffer = (PTEXTMODE_SCREEN_BUFFER)ActiveBuffer;
-
- pSharedInfo->ci.ScreenAttrib = Buffer->ScreenDefaultAttrib;
- pSharedInfo->ci.PopupAttrib = Buffer->PopupDefaultAttrib;
- }
- else // if (GetType(ActiveBuffer) == GRAPHICS_BUFFER)
- {
- // PGRAPHICS_SCREEN_BUFFER Buffer = (PGRAPHICS_SCREEN_BUFFER)ActiveBuffer;
- DPRINT1("GuiConsoleShowConsoleProperties - Graphics buffer\n");
-
- // FIXME: Gather defaults from the registry ?
- pSharedInfo->ci.ScreenAttrib = DEFAULT_SCREEN_ATTRIB;
- pSharedInfo->ci.PopupAttrib = DEFAULT_POPUP_ATTRIB ;
- }
- pSharedInfo->ci.CodePage;
-
- /* GUI Information */
- pSharedInfo->TerminalInfo.Size = sizeof(GUI_CONSOLE_INFO);
- GuiInfo = pSharedInfo->TerminalInfo.TermInfo = (PGUI_CONSOLE_INFO)(pSharedInfo + 1);
- wcsncpy(GuiInfo->FaceName, GuiData->GuiInfo.FaceName, LF_FACESIZE);
- GuiInfo->FaceName[LF_FACESIZE - 1] = UNICODE_NULL;
- GuiInfo->FontFamily = GuiData->GuiInfo.FontFamily;
- GuiInfo->FontSize = GuiData->GuiInfo.FontSize;
- GuiInfo->FontWeight = GuiData->GuiInfo.FontWeight;
- GuiInfo->FullScreen = GuiData->GuiInfo.FullScreen;
- GuiInfo->AutoPosition = GuiData->GuiInfo.AutoPosition;
- GuiInfo->WindowOrigin = GuiData->GuiInfo.WindowOrigin;
- /* Offsetize */
- pSharedInfo->TerminalInfo.TermInfo = (PVOID)((ULONG_PTR)GuiInfo - (ULONG_PTR)pSharedInfo);
-
- /* Palette */
- memcpy(pSharedInfo->ci.Colors, Console->Colors, sizeof(Console->Colors));
-
- /* Title of the console, original one corresponding to the one set by the console leader */
- Length = min(sizeof(pSharedInfo->ci.ConsoleTitle) / sizeof(pSharedInfo->ci.ConsoleTitle[0]) - 1,
- Console->OriginalTitle.Length / sizeof(WCHAR));
- wcsncpy(pSharedInfo->ci.ConsoleTitle, Console->OriginalTitle.Buffer, Length);
- }
- else
- {
- Length = 0;
- // FIXME: Load the default parameters from the registry.
- }
-
- /* Null-terminate the title */
- pSharedInfo->ci.ConsoleTitle[Length] = L'\0';
-
-
- /* Unmap the view */
- NtUnmapViewOfSection(NtCurrentProcess(), pSharedInfo);
-
- /* Get the console leader process, our client */
- ProcessData = ConSrvGetConsoleLeaderProcess(Console);
-
- /* Duplicate the section handle for the client */
- Status = NtDuplicateObject(NtCurrentProcess(),
- hSection,
- ProcessData->Process->ProcessHandle,
- &hClientSection,
- 0, 0, DUPLICATE_SAME_ACCESS);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Error: Impossible to duplicate section handle for client, Status = 0x%08lx\n", Status);
- goto Quit;
- }
-
- /* Start the properties dialog */
- if (ProcessData->PropRoutine)
- {
- _SEH2_TRY
- {
- HANDLE Thread = NULL;
-
- _SEH2_TRY
- {
- Thread = CreateRemoteThread(ProcessData->Process->ProcessHandle, NULL, 0,
- ProcessData->PropRoutine,
- (PVOID)hClientSection, 0, NULL);
- if (NULL == Thread)
- {
- DPRINT1("Failed thread creation (Error: 0x%x)\n", GetLastError());
- }
- else
- {
- DPRINT("ProcessData->PropRoutine remote thread creation succeeded, ProcessId = %x, Process = 0x%p\n",
- ProcessData->Process->ClientId.UniqueProcess, ProcessData->Process);
- /// WaitForSingleObject(Thread, INFINITE);
- }
- }
- _SEH2_FINALLY
- {
- CloseHandle(Thread);
- }
- _SEH2_END;
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- DPRINT1("GuiConsoleShowConsoleProperties - Caught an exception, Status = 0x%08lx\n", Status);
- }
- _SEH2_END;
- }
-
-Quit:
- /* We have finished, close the section handle */
- if (hSection) NtClose(hSection);
-
- LeaveCriticalSection(&Console->Lock);
- return;
-}
-
-VOID
-GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
- HANDLE hClientSection,
- BOOL SaveSettings)
-{
- NTSTATUS Status = STATUS_SUCCESS;
- PCONSRV_CONSOLE Console = GuiData->Console;
- PCONSOLE_PROCESS_DATA ProcessData;
- HANDLE hSection = NULL;
- ULONG ViewSize = 0;
- PCONSOLE_PROPS pConInfo = NULL;
- PCONSOLE_INFO ConInfo = NULL;
- PTERMINAL_INFO TermInfo = NULL;
- PGUI_CONSOLE_INFO GuiInfo = NULL;
-
- if (!ConDrvValidateConsoleUnsafe((PCONSOLE)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 = 0x%08lx\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 = 0x%08lx\n", Status);
- goto Quit;
- }
-
- _SEH2_TRY
- {
- /* Check that the section is well-sized */
- if ( (ViewSize < sizeof(CONSOLE_PROPS)) ||
- (pConInfo->TerminalInfo.Size != sizeof(GUI_CONSOLE_INFO)) ||
- (ViewSize < sizeof(CONSOLE_PROPS) + pConInfo->TerminalInfo.Size) )
- {
- DPRINT1("Error: section bad-sized: sizeof(Section) < sizeof(CONSOLE_PROPS) + sizeof(Terminal_specific_info)\n");
- Status = STATUS_INVALID_VIEW_SIZE;
- _SEH2_YIELD(goto Quit);
- }
-
- // TODO: Check that GuiData->hWindow == pConInfo->hConsoleWindow
-
- /* Retrieve terminal informations */
- ConInfo = &pConInfo->ci;
- TermInfo = &pConInfo->TerminalInfo;
- GuiInfo = TermInfo->TermInfo = (PVOID)((ULONG_PTR)pConInfo + (ULONG_PTR)TermInfo->TermInfo);
-
- /*
- * If we don't set the default parameters,
- * apply them, otherwise just save them.
- */
- if (pConInfo->ShowDefaultParams == FALSE)
- {
- /* Set the console informations */
- ConSrvApplyUserSettings(Console, ConInfo);
-
- /* Set the terminal informations */
-
- // memcpy(&GuiData->GuiInfo, GuiInfo, sizeof(GUI_CONSOLE_INFO));
-
- /* Change the font */
- InitFonts(GuiData,
- GuiInfo->FaceName,
- GuiInfo->FontFamily,
- GuiInfo->FontSize,
- GuiInfo->FontWeight);
- // HACK, needed because changing font may change the size of the window
- /**/TermResizeTerminal(Console);/**/
-
- /* 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);
- }
- }
-
- /*
- * 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);
- }
-
- Status = STATUS_SUCCESS;
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- DPRINT1("GuiApplyUserSettings - Caught an exception, Status = 0x%08lx\n", Status);
- }
- _SEH2_END;
-
-Quit:
- /* Finally, close the section and return */
- if (hSection)
- {
- NtUnmapViewOfSection(NtCurrentProcess(), pConInfo);
- NtClose(hSection);
- }
-
- LeaveCriticalSection(&Console->Lock);
- 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;
- PCONSRV_CONSOLE 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;
-#if 0
- SIZE_T Length;
-#endif
-
- if (!ConDrvValidateConsoleUnsafe((PCONSOLE)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 = 0x%08lx\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 = 0x%08lx\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
- // BOOLEAN ConInfo.CursorBlinkOn = pConInfo->
- // BOOLEAN ConInfo.ForceCursorOff = pConInfo->
-
-
- // Terminal information
- wcsncpy(GuiInfo.FaceName, pConInfo->FaceName, LF_FACESIZE);
- GuiInfo.FaceName[LF_FACESIZE - 1] = UNICODE_NULL;
-
- GuiInfo.FontFamily = pConInfo->FontFamily;
- GuiInfo.FontSize = pConInfo->FontSize;
- GuiInfo.FontWeight = pConInfo->FontWeight;
- GuiInfo.FullScreen = !!pConInfo->FullScreen;
- GuiInfo.AutoPosition = !!pConInfo->AutoPosition;
- GuiInfo.WindowOrigin = pConInfo->WindowPosition;
- // 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));
-
- /* Change the font */
- InitFonts(GuiData,
- GuiInfo.FaceName,
- GuiInfo.FontFamily,
- GuiInfo.FontSize,
- GuiInfo.FontWeight);
- // HACK, needed because changing font may change the size of the window
- /**/TermResizeTerminal(Console);/**/
-
- /* 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 = 0x%08lx\n", Status);
- }
- _SEH2_END;
-
-Quit:
- /* Finally, close the section and return */
- if (hSection)
- {
- NtUnmapViewOfSection(NtCurrentProcess(), pConInfo);
- NtClose(hSection);
- }
-
- LeaveCriticalSection(&Console->Lock);
- return;
-}
-
-/* EOF */