Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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;
        }