mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-31 12:23:31 +00:00
- alter keyboard layout when a non default language is chosen
- fix typo svn path=/trunk/; revision=31636
This commit is contained in:
@@ -45,6 +45,8 @@ LONG UnattendFormatPartition = 0;
|
||||
LONG AutoPartition = 0;
|
||||
WCHAR UnattendInstallationDirectory[MAX_PATH];
|
||||
PWCHAR SelectedLanguageId;
|
||||
WCHAR DefaultLanguage[20];
|
||||
WCHAR DefaultKBLayout[20];
|
||||
BOOLEAN RepairUpdateFlag = FALSE;
|
||||
HANDLE hPnpThread = INVALID_HANDLE_VALUE;
|
||||
|
||||
@@ -543,13 +545,39 @@ CheckUnattendedSetup(VOID)
|
||||
DPRINT("Running unattended setup\n");
|
||||
}
|
||||
|
||||
void
|
||||
UpdateKBLayout()
|
||||
{
|
||||
PLIST_ENTRY Entry;
|
||||
PGENERIC_LIST_ENTRY ListEntry;
|
||||
WCHAR szNewLayout[20];
|
||||
|
||||
MUIDefaultKeyboardLayout(szNewLayout);
|
||||
|
||||
if (LayoutList == NULL)
|
||||
{
|
||||
LayoutList = CreateKeyboardLayoutList(SetupInf, DefaultKBLayout);
|
||||
}
|
||||
Entry = LayoutList->ListHead.Flink;
|
||||
while (Entry != &LayoutList->ListHead)
|
||||
{
|
||||
ListEntry = CONTAINING_RECORD (Entry, GENERIC_LIST_ENTRY, Entry);
|
||||
if (!wcscmp(szNewLayout, ListEntry->UserData))
|
||||
{
|
||||
LayoutList->CurrentEntry = ListEntry;
|
||||
break;
|
||||
}
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
}
|
||||
|
||||
static PAGE_NUMBER
|
||||
LanguagePage(PINPUT_RECORD Ir)
|
||||
{
|
||||
/* Initialize the computer settings list */
|
||||
if (LanguageList == NULL)
|
||||
{
|
||||
LanguageList = CreateLanguageList(SetupInf);
|
||||
LanguageList = CreateLanguageList(SetupInf, DefaultLanguage);
|
||||
if (LanguageList == NULL)
|
||||
{
|
||||
PopupError("Setup failed to initialize available translations", NULL, NULL, POPUP_WAIT_NONE);
|
||||
@@ -572,7 +600,7 @@ LanguagePage(PINPUT_RECORD Ir)
|
||||
if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&
|
||||
(Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */
|
||||
{
|
||||
#if 0 //Dinamically update user interface
|
||||
#if 0 //Dynamically update user interface
|
||||
SelectedLanguageId = (PWCHAR)LanguageList->CurrentEntry->UserData;
|
||||
MUIDisplayPage(LANGUAGE_PAGE);
|
||||
#endif
|
||||
@@ -596,6 +624,10 @@ LanguagePage(PINPUT_RECORD Ir)
|
||||
else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */
|
||||
{
|
||||
SelectedLanguageId = (PWCHAR)LanguageList->CurrentEntry->UserData;
|
||||
if (wcscmp(SelectedLanguageId, DefaultLanguage))
|
||||
{
|
||||
UpdateKBLayout();
|
||||
}
|
||||
return INTRO_PAGE;
|
||||
}
|
||||
}
|
||||
@@ -713,8 +745,8 @@ SetupStartPage(PINPUT_RECORD Ir)
|
||||
ComputerList = CreateComputerTypeList(SetupInf);
|
||||
DisplayList = CreateDisplayDriverList(SetupInf);
|
||||
KeyboardList = CreateKeyboardDriverList(SetupInf);
|
||||
LayoutList = CreateKeyboardLayoutList(SetupInf);
|
||||
LanguageList = CreateLanguageList(SetupInf);
|
||||
LayoutList = CreateKeyboardLayoutList(SetupInf, DefaultKBLayout);
|
||||
LanguageList = CreateLanguageList(SetupInf, DefaultLanguage);
|
||||
|
||||
return INSTALL_INTRO_PAGE;
|
||||
}
|
||||
@@ -937,7 +969,7 @@ DeviceSettingsPage(PINPUT_RECORD Ir)
|
||||
/* Initialize the keyboard layout list */
|
||||
if (LayoutList == NULL)
|
||||
{
|
||||
LayoutList = CreateKeyboardLayoutList(SetupInf);
|
||||
LayoutList = CreateKeyboardLayoutList(SetupInf, DefaultKBLayout);
|
||||
if (LayoutList == NULL)
|
||||
{
|
||||
/* FIXME: report error */
|
||||
|
||||
@@ -181,6 +181,27 @@ FindMUIErrorEntries ()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VOID
|
||||
MUIDefaultKeyboardLayout(WCHAR * KeyboardLayout)
|
||||
{
|
||||
ULONG lngIndex = 0;
|
||||
do
|
||||
{
|
||||
/* First we search the language list till we find current selected language messages */
|
||||
if (_wcsicmp(LanguageList[lngIndex].LanguageID , SelectedLanguageId) == 0)
|
||||
{
|
||||
/* Get all available error messages for this language */
|
||||
wcscpy(KeyboardLayout, LanguageList[lngIndex].LanguageKeyboardLayoutID);
|
||||
return;
|
||||
}
|
||||
|
||||
lngIndex++;
|
||||
}
|
||||
while (LanguageList[lngIndex].MuiPages != NULL);
|
||||
|
||||
KeyboardLayout[0] = L'\0';
|
||||
}
|
||||
|
||||
VOID
|
||||
MUIDisplayPage(ULONG page)
|
||||
{
|
||||
|
||||
@@ -47,4 +47,8 @@ MUIDisplayPage (ULONG PageNumber);
|
||||
VOID
|
||||
MUIDisplayError (ULONG ErrorNum, PINPUT_RECORD Ir, ULONG WaitEvent);
|
||||
|
||||
VOID
|
||||
MUIDefaultKeyboardLayout(WCHAR * KeyboardLayout);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -656,7 +656,7 @@ CreateKeyboardDriverList(HINF InfFile)
|
||||
}
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateLanguageList(HINF InfFile)
|
||||
CreateLanguageList(HINF InfFile, WCHAR * DefaultLanguage)
|
||||
{
|
||||
CHAR Buffer[128];
|
||||
PGENERIC_LIST List;
|
||||
@@ -664,7 +664,6 @@ CreateLanguageList(HINF InfFile)
|
||||
PWCHAR KeyName;
|
||||
PWCHAR KeyValue;
|
||||
PWCHAR UserData;
|
||||
WCHAR DefaultLanguage[20];
|
||||
|
||||
/* Get default language id */
|
||||
if (!SetupFindFirstLineW (InfFile, L"NLS", L"DefaultLanguage", &Context))
|
||||
@@ -718,7 +717,7 @@ CreateLanguageList(HINF InfFile)
|
||||
}
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardLayoutList(HINF InfFile)
|
||||
CreateKeyboardLayoutList(HINF InfFile, WCHAR * DefaultKBLayout)
|
||||
{
|
||||
CHAR Buffer[128];
|
||||
PGENERIC_LIST List;
|
||||
@@ -726,7 +725,6 @@ CreateKeyboardLayoutList(HINF InfFile)
|
||||
PWCHAR KeyName;
|
||||
PWCHAR KeyValue;
|
||||
PWCHAR UserData;
|
||||
WCHAR DefaultLayout[20];
|
||||
|
||||
/* Get default layout id */
|
||||
if (!SetupFindFirstLineW (InfFile, L"NLS", L"DefaultLayout", &Context))
|
||||
@@ -735,7 +733,7 @@ CreateKeyboardLayoutList(HINF InfFile)
|
||||
if (!INF_GetData (&Context, NULL, &KeyValue))
|
||||
return NULL;
|
||||
|
||||
wcscpy(DefaultLayout, KeyValue);
|
||||
wcscpy(DefaultKBLayout, KeyValue);
|
||||
|
||||
List = CreateGenericList();
|
||||
if (List == NULL)
|
||||
@@ -753,6 +751,7 @@ CreateKeyboardLayoutList(HINF InfFile)
|
||||
{
|
||||
/* FIXME: Handle error! */
|
||||
DPRINT("INF_GetData() failed\n");
|
||||
DestroyGenericList(List, FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -770,7 +769,7 @@ CreateKeyboardLayoutList(HINF InfFile)
|
||||
AppendGenericListEntry(List,
|
||||
Buffer,
|
||||
UserData,
|
||||
_wcsicmp(KeyName, DefaultLayout) ? FALSE : TRUE);
|
||||
_wcsicmp(KeyName, DefaultKBLayout) ? FALSE : TRUE);
|
||||
}
|
||||
while (SetupFindNextLine(&Context, &Context));
|
||||
|
||||
|
||||
@@ -46,10 +46,10 @@ PGENERIC_LIST
|
||||
CreateKeyboardDriverList(HINF InfFile);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateKeyboardLayoutList(HINF InfFile);
|
||||
CreateKeyboardLayoutList(HINF InfFile, WCHAR *DefaultKBLayout);
|
||||
|
||||
PGENERIC_LIST
|
||||
CreateLanguageList(HINF InfFile);
|
||||
CreateLanguageList(HINF InfFile, WCHAR * DefaultLanguage);
|
||||
|
||||
BOOLEAN
|
||||
ProcessKeyboardLayoutRegistry(PGENERIC_LIST List);
|
||||
|
||||
Reference in New Issue
Block a user