ExecutableInputMethodManager() { // set up host adapter locator Toolkit toolkit = Toolkit.getDefaultToolkit(); try { if (toolkit instanceof InputMethodSupport) { InputMethodDescriptor hostAdapterDescriptor = ((InputMethodSupport)toolkit) .getInputMethodAdapterDescriptor(); if (hostAdapterDescriptor != null) { hostAdapterLocator = new InputMethodLocator(hostAdapterDescriptor, null, null); } } } catch (AWTException e) { // if we can't get a descriptor, we'll just have to do without native input methods } javaInputMethodLocatorList = new Vector<InputMethodLocator>(); initializeInputMethodLocatorList(); }
private void show(Component origin, InputMethodContext imc) { imContext = imc; for (int i = 0; i < getItemCount(); i++) { MenuItem item = getItem(i); if (!(item instanceof IMSubmenu)) { // skip all non-menu elements, such as separators continue; } IMSubmenu subMenu = (IMSubmenu) item; InputMethodDescriptor desc = subMenu.getDesc(); if (desc == null) { continue; } if (desc.hasDynamicLocaleList()) { subMenu.removeAll(); subMenu.addLocales(); } subMenu.checkItems(); i++; } show(origin, 50, 50); }
private void initializeInputMethodLocatorList() { synchronized (javaInputMethodLocatorList) { javaInputMethodLocatorList.clear(); try { AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() { public Object run() { for (InputMethodDescriptor descriptor : ServiceLoader.loadInstalled(InputMethodDescriptor.class)) { ClassLoader cl = descriptor.getClass().getClassLoader(); javaInputMethodLocatorList.add(new InputMethodLocator(descriptor, cl, null)); } return null; } }); } catch (PrivilegedActionException e) { e.printStackTrace(); } javaInputMethodCount = javaInputMethodLocatorList.size(); } if (hasMultipleInputMethods()) { // initialize preferences if (userRoot == null) { userRoot = getUserRoot(); } } else { // indicate to clients not to offer the menu triggerMenuString = null; } }
InputMethodLocator(InputMethodDescriptor descriptor, ClassLoader loader, Locale locale) { if (descriptor == null) { throw new NullPointerException("descriptor can't be null"); } this.descriptor = descriptor; this.loader = loader; this.locale = locale; }
void addOneInputMethodToMenu(InputMethodLocator locator, String currentSelection) { InputMethodDescriptor descriptor = locator.getDescriptor(); String label = descriptor.getInputMethodDisplayName(null, Locale.getDefault()); String command = locator.getActionCommandString(); Locale[] locales = null; int localeCount; try { locales = descriptor.getAvailableLocales(); localeCount = locales.length; } catch (AWTException e) { // ??? should have better error handling - // tell user what happened, then remove this input method from the list. // For the time being, just show it disabled. localeCount = 0; } if (localeCount == 0) { // could be IIIMP adapter which has lost its connection addMenuItem(label, null, currentSelection); } else if (localeCount == 1) { if (descriptor.hasDynamicLocaleList()) { // try to make sure that what the user sees and what // we eventually select is consistent even if the locale // list changes in the meantime label = descriptor.getInputMethodDisplayName(locales[0], Locale.getDefault()); command = locator.deriveLocator(locales[0]).getActionCommandString(); } addMenuItem(label, command, currentSelection); } else { Object submenu = createSubmenu(label); add(submenu); for (int j = 0; j < localeCount; j++) { Locale locale = locales[j]; String subLabel = getLocaleName(locale); String subCommand = locator.deriveLocator(locale).getActionCommandString(); addMenuItem(submenu, subLabel, subCommand, currentSelection); } } }
@Override public InputMethodDescriptor getInputMethodAdapterDescriptor() { if (sInputMethodDescriptor == null) sInputMethodDescriptor = new CInputMethodDescriptor(); return sInputMethodDescriptor; }
private void initializeInputMethodLocatorList() { synchronized (javaInputMethodLocatorList) { javaInputMethodLocatorList.clear(); try { AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() { public Object run() { for (InputMethodDescriptor descriptor : ServiceLoader.load(InputMethodDescriptor.class, ClassLoader.getSystemClassLoader())) { ClassLoader cl = descriptor.getClass().getClassLoader(); javaInputMethodLocatorList.add(new InputMethodLocator(descriptor, cl, null)); } return null; } }); } catch (PrivilegedActionException e) { e.printStackTrace(); } javaInputMethodCount = javaInputMethodLocatorList.size(); } if (hasMultipleInputMethods()) { // initialize preferences if (userRoot == null) { userRoot = getUserRoot(); } } else { // indicate to clients not to offer the menu triggerMenuString = null; } }