private void RegisterXkbKeyboards() { if (XkbKeyboards.Count <= 0) { return; } var xkbAdaptor = GetAdaptor <XkbKeyboardAdaptor>(); var configRegistry = XklConfigRegistry.Create(xkbAdaptor.XklEngine); var layouts = configRegistry.Layouts; foreach (var kvp in layouts) { foreach (var layout in kvp.Value) { int index; // Custom keyboards may omit defining a country code. Try to survive such cases. string codeToMatch; if (layout.CountryCode == null) { codeToMatch = layout.LanguageCode.ToLowerInvariant(); } else { codeToMatch = layout.CountryCode.ToLowerInvariant(); } if ((XkbKeyboards.TryGetValue(layout.LayoutId, out index) && (layout.LayoutId == codeToMatch)) || XkbKeyboards.TryGetValue(string.Format("{0}+{1}", codeToMatch, layout.LayoutId), out index)) { xkbAdaptor.AddKeyboardForLayout(layout, index, this); } } } }
private void AddKeyboard(string source) { var parts = source.Split(new String[] { ";;" }, StringSplitOptions.None); Debug.Assert(parts.Length == 2); if (parts.Length != 2) { return; } var type = parts[0]; var layout = parts[1]; if (type == "xkb") { XkbKeyboards.Add(layout, _kbdIndex); } else { IbusKeyboards.Add(layout, _kbdIndex); } ++_kbdIndex; }