Home | History | Annotate | Download | only in ime
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/base/ime/input_method_factory.h"
      6 
      7 #include "ui/base/ime/input_method_delegate.h"
      8 #include "ui/base/ime/mock_input_method.h"
      9 
     10 #if defined(OS_CHROMEOS) && defined(USE_X11)
     11 #include "ui/base/ime/input_method_ibus.h"
     12 #elif defined(OS_WIN)
     13 #include "base/win/metro.h"
     14 #include "ui/base/ime/input_method_imm32.h"
     15 #include "ui/base/ime/input_method_tsf.h"
     16 #else
     17 #include "ui/base/ime/fake_input_method.h"
     18 #endif
     19 
     20 namespace ui {
     21 namespace {
     22 
     23 bool g_input_method_set_for_testing = false;
     24 InputMethod* g_shared_input_method = NULL;
     25 
     26 #if defined(OS_WIN)
     27 // Returns a new instance of input method object for IMM32 or TSF.
     28 InputMethod* CreateInputMethodWinInternal(
     29     internal::InputMethodDelegate* delegate,
     30     gfx::AcceleratedWidget widget) {
     31   if (base::win::IsTSFAwareRequired())
     32     return new InputMethodTSF(delegate, widget);
     33   else
     34     return new InputMethodIMM32(delegate, widget);
     35 }
     36 #endif
     37 
     38 }  // namespace
     39 
     40 InputMethod* CreateInputMethod(internal::InputMethodDelegate* delegate,
     41                                gfx::AcceleratedWidget widget) {
     42   if (g_input_method_set_for_testing)
     43     return new MockInputMethod(delegate);
     44 #if defined(OS_CHROMEOS) && defined(USE_X11)
     45   return new InputMethodIBus(delegate);
     46 #elif defined(OS_WIN)
     47   return CreateInputMethodWinInternal(delegate, widget);
     48 #else
     49   return new FakeInputMethod(delegate);
     50 #endif
     51 }
     52 
     53 void SetUpInputMethodFactoryForTesting() {
     54   g_input_method_set_for_testing = true;
     55 }
     56 
     57 InputMethod* GetSharedInputMethod() {
     58 #if defined(OS_WIN)
     59   if (!g_shared_input_method)
     60     g_shared_input_method = CreateInputMethod(NULL, NULL);
     61 #else
     62   NOTREACHED();
     63 #endif
     64   return g_shared_input_method;
     65 }
     66 
     67 namespace internal {
     68 
     69 void DestroySharedInputMethod() {
     70   delete g_shared_input_method;
     71   g_shared_input_method = NULL;
     72 }
     73 
     74 }  // namespace internal
     75 }  // namespace ui
     76