private static IKeyboardDefinition HandleFwLegacyKeyboards(ILegacyWritingSystemDefinition ws, KeyboardControllerImpl controller) { var lcid = GetLcid(ws); if (lcid >= 0) { try { if (string.IsNullOrEmpty(ws.Keyboard)) { // FW system keyboard var keyboard = controller.Keyboards.FirstOrDefault( kbd => { var keyboardDescription = kbd as KeyboardDescription; if (keyboardDescription == null || keyboardDescription.InputLanguage == null || keyboardDescription.InputLanguage.Culture == null) return false; return keyboardDescription.InputLanguage.Culture.LCID == lcid; }); if (keyboard != null) return keyboard; } else { // FW keyman keyboard var culture = new CultureInfo(lcid); if (controller.Keyboards.Contains(ws.Keyboard, culture.Name)) return controller.Keyboards[ws.Keyboard, culture.Name]; } } catch (CultureNotFoundException) { // Culture specified by LCID is not supported on current system. Just ignore. } } return null; }
public static IKeyboardDefinition GetKeyboardFromLegacyWritingSystem(ILegacyWritingSystemDefinition ws, KeyboardControllerImpl controller) { if (!string.IsNullOrEmpty(ws.WindowsLcid)) { var keyboard = HandleFwLegacyKeyboards(ws, controller); if (keyboard != null) return keyboard; } if (!string.IsNullOrEmpty(ws.Keyboard)) { if (controller.Keyboards.Contains(ws.Keyboard)) return controller.Keyboards[ws.Keyboard]; // Palaso WinIME keyboard var locale = GetLocaleName(ws.Keyboard); var layout = GetLayoutName(ws.Keyboard); if (controller.Keyboards.Contains(layout, locale)) return controller.Keyboards[layout, locale]; // Palaso Keyman or Ibus keyboard var keyboard = controller.Keyboards.FirstOrDefault(kbd => kbd.Layout == layout); if (keyboard != null) return keyboard; } return null; }