예제 #1
0
        private void RegisterIbusKeyboards()
        {
            if (IbusKeyboards.Count <= 0)
            {
                return;
            }

            var           ibusAdaptor    = GetAdaptor <IbusKeyboardAdaptor>();
            List <string> missingLayouts = new List <string>(IbusKeyboards.Keys);

            foreach (var ibusKeyboard in ibusAdaptor.GetAllIBusKeyboards())
            {
                if (IbusKeyboards.ContainsKey(ibusKeyboard.LongName))
                {
                    missingLayouts.Remove(ibusKeyboard.LongName);
                    var keyboard = new IbusKeyboardDescription(this, ibusKeyboard);
                    keyboard.SystemIndex = IbusKeyboards[ibusKeyboard.LongName];
                    KeyboardController.Manager.RegisterKeyboard(keyboard);
                }
                else if (IbusKeyboards.ContainsKey(ibusKeyboard.Name) && ibusKeyboard.Name.StartsWith("xkb:"))
                {
                    missingLayouts.Remove(ibusKeyboard.Name);
                    var keyboard = new IbusKeyboardDescription(this, ibusKeyboard);
                    keyboard.SystemIndex = IbusKeyboards [ibusKeyboard.LongName];
                    KeyboardController.Manager.RegisterKeyboard(keyboard);
                }
            }
            foreach (var layout in missingLayouts)
            {
                Console.WriteLine("Didn't find " + layout);
            }
        }
예제 #2
0
        protected override void AddAllKeyboards(string[] list)
        {
            // e.g., "pinyin", "xkb:us::eng", "xkb:fr::fra", "xkb:de::ger", "/usr/share/kmfl/IPA14.kmn", "xkb:es::spa"
            int kbdIndex = 0;

            foreach (var item in list)
            {
                IbusKeyboards.Add(item, kbdIndex);
                ++kbdIndex;
            }
            RegisterIbusKeyboards();
        }
예제 #3
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;
        }