| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/ime/input_method_win.h" | 5 #include "ui/base/ime/input_method_win.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "ui/base/ime/text_input_client.h" | 8 #include "ui/base/ime/text_input_client.h" |
| 9 #include "ui/events/event.h" | 9 #include "ui/events/event.h" |
| 10 #include "ui/events/event_constants.h" | 10 #include "ui/events/event_constants.h" |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 char_positon->cLineHeight = rect.height(); | 312 char_positon->cLineHeight = rect.height(); |
| 313 return 1; // returns non-zero value when succeeded. | 313 return 1; // returns non-zero value when succeeded. |
| 314 } | 314 } |
| 315 | 315 |
| 316 HWND InputMethodWin::GetAttachedWindowHandle( | 316 HWND InputMethodWin::GetAttachedWindowHandle( |
| 317 const TextInputClient* text_input_client) const { | 317 const TextInputClient* text_input_client) const { |
| 318 // On Aura environment, we can assume that |toplevel_window_handle_| always | 318 // On Aura environment, we can assume that |toplevel_window_handle_| always |
| 319 // represents the valid top-level window handle because each top-level window | 319 // represents the valid top-level window handle because each top-level window |
| 320 // is responsible for lifecycle management of corresponding InputMethod | 320 // is responsible for lifecycle management of corresponding InputMethod |
| 321 // instance. | 321 // instance. |
| 322 #if defined(USE_AURA) | |
| 323 return toplevel_window_handle_; | 322 return toplevel_window_handle_; |
| 324 #else | |
| 325 // On Non-Aura environment, TextInputClient::GetAttachedWindow() returns | |
| 326 // window handle to which each input method is bound. | |
| 327 if (!text_input_client) | |
| 328 return NULL; | |
| 329 return text_input_client->GetAttachedWindow(); | |
| 330 #endif | |
| 331 } | 323 } |
| 332 | 324 |
| 333 bool InputMethodWin::IsWindowFocused(const TextInputClient* client) const { | 325 bool InputMethodWin::IsWindowFocused(const TextInputClient* client) const { |
| 334 if (!client) | 326 if (!client) |
| 335 return false; | 327 return false; |
| 336 HWND attached_window_handle = GetAttachedWindowHandle(client); | 328 HWND attached_window_handle = GetAttachedWindowHandle(client); |
| 337 #if defined(USE_AURA) | |
| 338 // When Aura is enabled, |attached_window_handle| should always be a top-level | 329 // When Aura is enabled, |attached_window_handle| should always be a top-level |
| 339 // window. So we can safely assume that |attached_window_handle| is ready for | 330 // window. So we can safely assume that |attached_window_handle| is ready for |
| 340 // receiving keyboard input as long as it is an active window. This works well | 331 // receiving keyboard input as long as it is an active window. This works well |
| 341 // even when the |attached_window_handle| becomes active but has not received | 332 // even when the |attached_window_handle| becomes active but has not received |
| 342 // WM_FOCUS yet. | 333 // WM_FOCUS yet. |
| 343 return attached_window_handle && GetActiveWindow() == attached_window_handle; | 334 return attached_window_handle && GetActiveWindow() == attached_window_handle; |
| 344 #else | |
| 345 return attached_window_handle && GetFocus() == attached_window_handle; | |
| 346 #endif | |
| 347 } | 335 } |
| 348 | 336 |
| 349 bool InputMethodWin::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { | 337 bool InputMethodWin::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) { |
| 350 // TODO(ananta) | |
| 351 // Support IMEs and RTL layout in Windows 8 metro Ash. The code below won't | |
| 352 // work with IMEs. | |
| 353 // Bug: https://code.google.com/p/chromium/issues/detail?id=164964 | |
| 354 if (event.is_char()) { | 338 if (event.is_char()) { |
| 355 if (GetTextInputClient()) { | 339 if (GetTextInputClient()) { |
| 356 GetTextInputClient()->InsertChar(event.key_code(), | 340 GetTextInputClient()->InsertChar(event.key_code(), |
| 357 ui::GetModifiersFromKeyState()); | 341 ui::GetModifiersFromKeyState()); |
| 358 return true; | 342 return true; |
| 359 } | 343 } |
| 360 } | 344 } |
| 361 return DispatchKeyEventPostIME(event); | 345 return DispatchKeyEventPostIME(event); |
| 362 } | 346 } |
| 363 | 347 |
| 364 } // namespace ui | 348 } // namespace ui |
| OLD | NEW |