- alter keyboard layout when a non default language is chosen

- fix typo

svn path=/trunk/; revision=31636
This commit is contained in:
Johannes Anderwald
2008-01-06 23:36:01 +00:00
parent 2eacda93bd
commit 82aae4981b
5 changed files with 69 additions and 13 deletions
+37 -5
View File
@@ -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 */
+21
View File
@@ -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)
{
+4
View File
@@ -47,4 +47,8 @@ MUIDisplayPage (ULONG PageNumber);
VOID
MUIDisplayError (ULONG ErrorNum, PINPUT_RECORD Ir, ULONG WaitEvent);
VOID
MUIDefaultKeyboardLayout(WCHAR * KeyboardLayout);
#endif
+5 -6
View File
@@ -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));
+2 -2
View File
@@ -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);