Merge pull request #5685 from keymanapp/fix/windows/cherry-pick/5683-keyboard-name-fallback

fix(windows): fallback to filename if `&name` not set 🍒
This commit is contained in:
Marc Durdin 2021-09-17 10:12:18 +10:00 • committed by GitHub
commit e7c6c5e19c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 12 deletions

View file

@ -195,7 +195,9 @@ end;
function TKeymanKeyboardFile.Get_Name: WideString;
begin
Result := FKeyboardInfo.KeyboardName;
if FKeyboardInfo.KeyboardName = ''
then Result := Get_ID
else Result := FKeyboardInfo.KeyboardName;
end;
function TKeymanKeyboardFile.Get_Version: WideString;

View file

@ -316,7 +316,7 @@ var
FLanguages: TArray<Integer>;
FLanguageInstalled: Boolean;
ki: TKeyboardInfo;
kbdname: string;
KeyboardID: string;
FDestPath: string;
FDestFileName: string;
FIconFileName: string;
@ -325,6 +325,7 @@ var
i: Integer;
kpil: TKPInstallKeyboardLanguage;
ml: TMitigateWin10_1803.TMitigatedLanguage;
KeyboardName: string;
type
TWSLCallback = reference to procedure(r: TRegistryErrorControlled);
@ -367,7 +368,11 @@ begin
FDefaultHKL := GetDefaultHKL;
kbdname := GetShortKeyboardName(FileName);
KeyboardID := GetShortKeyboardName(FileName);
if ki.KeyboardName = ''
then KeyboardName := KeyboardID
else KeyboardName := ki.KeyboardName;
if ikPartOfPackage in FInstallOptions
then FDestPath := GetPackageInstallPath(PackageID)
@ -412,7 +417,7 @@ begin
kpil := TKPInstallKeyboardLanguage.Create(Context);
try
if kpil.FindInstallationLangID(BCP47Tag, LangID, TemporaryKeyboardID, []) and not IsTransientLanguageID(LangID) then
kpil.RegisterTip(kbdname, BCP47Tag, ki.KeyboardName, LangID, FIconFileName, PackageLanguageMetadata[i].Name);
kpil.RegisterTip(KeyboardID, BCP47Tag, KeyboardName, LangID, FIconFileName, PackageLanguageMetadata[i].Name);
finally
kpil.Free;
end;
@ -432,7 +437,7 @@ begin
begin
BCP47Tag := TCanonicalLanguageCodeUtils.FindBestTag(PackageLanguageMetadata[i].ID, True, True);
if BCP47Tag <> '' then
FLanguageInstalled := LegacyRegisterAndInstallLanguageProfile(BCP47Tag, kbdname, ki.KeyboardName, FIconFileName, PackageLanguageMetadata[i].Name);
FLanguageInstalled := LegacyRegisterAndInstallLanguageProfile(BCP47Tag, KeyboardID, KeyboardName, FIconFileName, PackageLanguageMetadata[i].Name);
if FLanguageInstalled then
Break;
end;
@ -443,7 +448,7 @@ begin
// This is most likely to happen on Win7 where custom BCP 47 tags
// are not allowed
AddLanguage(HKLToLanguageID(FDefaultHKL));
LegacyRegisterAndInstallLanguageProfile(FLanguages, kbdname, ki.KeyboardName, FIconFileName); // I3581 // I3707
LegacyRegisterAndInstallLanguageProfile(FLanguages, KeyboardID, KeyboardName, FIconFileName); // I3581 // I3707
end;
end;
end
@ -466,7 +471,7 @@ begin
if ikLegacyRegisterAndInstallProfiles in FInstallOptions then
begin
// Registers only the first language
LegacyRegisterAndInstallLanguageProfile(FLanguages, kbdname, ki.KeyboardName, FIconFileName); // I3581 // I3707
LegacyRegisterAndInstallLanguageProfile(FLanguages, KeyboardID, KeyboardName, FIconFileName); // I3581 // I3707
end;
// Save the list of preferred languages for the keyboard, translated to BCP47 tags
@ -490,7 +495,7 @@ begin
kpil := TKPInstallKeyboardLanguage.Create(Context);
try
kpil.RegisterTip(kbdname, BCP47Tag, ki.KeyboardName, FLanguages[i], FIconFileName, ''); //TODO: language name
kpil.RegisterTip(KeyboardID, BCP47Tag, KeyboardName, FLanguages[i], FIconFileName, ''); //TODO: language name
finally
kpil.Free;
end;
@ -504,7 +509,7 @@ begin
// Write the four transient language ID profiles
kpil := TKPInstallKeyboardLanguage.Create(Context);
try
kpil.RegisterTransientTips(kbdname, ki.KeyboardName, FIconFileName);
kpil.RegisterTransientTips(KeyboardID, KeyboardName, FIconFileName);
finally
kpil.Free;
end;

View file

@ -145,7 +145,8 @@ begin
s := ReadString(SRegValue_KeymanFile);
try
GetKeyboardInfo(s, False, ki);
Result := ki.KeyboardName;
if ki.KeyboardName <> '' then
Result := ki.KeyboardName;
except
;
end;
@ -170,7 +171,8 @@ begin
s := ReadString(SRegValue_KeymanFile);
try
GetKeyboardInfo(s, False, ki);
Result := ki.KeyboardName;
if ki.KeyboardName <> '' then
Result := ki.KeyboardName;
except
;
end;

View file

@ -408,7 +408,11 @@ begin
Exit;
end;
end;
FKeyboardName := ki.KeyboardName;
if ki.KeyboardName = ''
then FKeyboardName := GetShortKeyboardName(FName)
else FKeyboardName := ki.KeyboardName;
FEncodings := ki.Encodings;
FIsRegistered := ki.IsRegistered;
FMessage := ki.MessageString;