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