| 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/aura/remote_root_window_host_win.h" | 5 #include "ui/aura/remote_root_window_host_win.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 namespace aura { | 23 namespace aura { |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 const char* kRootWindowHostWinKey = "__AURA_REMOTE_ROOT_WINDOW_HOST_WIN__"; | 27 const char* kRootWindowHostWinKey = "__AURA_REMOTE_ROOT_WINDOW_HOST_WIN__"; |
| 28 | 28 |
| 29 // The touch id to be used for touch events coming in from Windows Ash. | 29 // The touch id to be used for touch events coming in from Windows Ash. |
| 30 const int kRemoteWindowTouchId = 10; | 30 const int kRemoteWindowTouchId = 10; |
| 31 | 31 |
| 32 // Sets the keystate for the virtual key passed in to down or up. |
| 33 void SetKeyState(uint8* key_states, bool key_down, uint32 virtual_key_code) { |
| 34 DCHECK(key_states); |
| 35 |
| 36 if (key_down) |
| 37 key_states[virtual_key_code] |= 0x80; |
| 38 else |
| 39 key_states[virtual_key_code] &= 0x7F; |
| 40 } |
| 41 |
| 42 // Sets the keyboard states for the Shift/Control/Alt/Caps lock keys. |
| 43 void SetVirtualKeyStates(uint32 flags) { |
| 44 uint8 keyboard_state[256] = {0}; |
| 45 ::GetKeyboardState(keyboard_state); |
| 46 |
| 47 SetKeyState(keyboard_state, !!(flags & ui::EF_SHIFT_DOWN), VK_SHIFT); |
| 48 SetKeyState(keyboard_state, !!(flags & ui::EF_CONTROL_DOWN), VK_CONTROL); |
| 49 SetKeyState(keyboard_state, !!(flags & ui::EF_ALT_DOWN), VK_MENU); |
| 50 SetKeyState(keyboard_state, !!(flags & ui::EF_CAPS_LOCK_DOWN), VK_CAPITAL); |
| 51 |
| 52 ::SetKeyboardState(keyboard_state); |
| 53 } |
| 54 |
| 32 } // namespace | 55 } // namespace |
| 33 | 56 |
| 34 void HandleOpenFile( | 57 void HandleOpenFile( |
| 35 const string16& title, | 58 const string16& title, |
| 36 const base::FilePath& default_path, | 59 const base::FilePath& default_path, |
| 37 const string16& filter, | 60 const string16& filter, |
| 38 const OpenFileCompletion& callback) { | 61 const OpenFileCompletion& callback) { |
| 39 DCHECK(aura::RemoteRootWindowHostWin::Instance()); | 62 DCHECK(aura::RemoteRootWindowHostWin::Instance()); |
| 40 aura::RemoteRootWindowHostWin::Instance()->HandleOpenFile(title, | 63 aura::RemoteRootWindowHostWin::Instance()->HandleOpenFile(title, |
| 41 default_path, | 64 default_path, |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 } else { | 333 } else { |
| 311 mouse_event.SetClickCount(1); | 334 mouse_event.SetClickCount(1); |
| 312 delegate_->OnHostMouseEvent(&mouse_event); | 335 delegate_->OnHostMouseEvent(&mouse_event); |
| 313 } | 336 } |
| 314 } | 337 } |
| 315 | 338 |
| 316 void RemoteRootWindowHostWin::OnKeyDown(uint32 vkey, | 339 void RemoteRootWindowHostWin::OnKeyDown(uint32 vkey, |
| 317 uint32 repeat_count, | 340 uint32 repeat_count, |
| 318 uint32 scan_code, | 341 uint32 scan_code, |
| 319 uint32 flags) { | 342 uint32 flags) { |
| 320 ui::KeyEvent event(ui::ET_KEY_PRESSED, | 343 DispatchKeyboardMessage(ui::ET_KEY_PRESSED, vkey, repeat_count, scan_code, |
| 321 ui::KeyboardCodeForWindowsKeyCode(vkey), | 344 flags, false); |
| 322 flags, | |
| 323 false); | |
| 324 delegate_->OnHostKeyEvent(&event); | |
| 325 } | 345 } |
| 326 | 346 |
| 327 void RemoteRootWindowHostWin::OnKeyUp(uint32 vkey, | 347 void RemoteRootWindowHostWin::OnKeyUp(uint32 vkey, |
| 328 uint32 repeat_count, | 348 uint32 repeat_count, |
| 329 uint32 scan_code, | 349 uint32 scan_code, |
| 330 uint32 flags) { | 350 uint32 flags) { |
| 331 ui::KeyEvent event(ui::ET_KEY_RELEASED, | 351 DispatchKeyboardMessage(ui::ET_KEY_RELEASED, vkey, repeat_count, scan_code, |
| 332 ui::KeyboardCodeForWindowsKeyCode(vkey), | 352 flags, false); |
| 333 flags, | |
| 334 false); | |
| 335 delegate_->OnHostKeyEvent(&event); | |
| 336 } | 353 } |
| 337 | 354 |
| 338 void RemoteRootWindowHostWin::OnChar(uint32 key_code, | 355 void RemoteRootWindowHostWin::OnChar(uint32 key_code, |
| 339 uint32 repeat_count, | 356 uint32 repeat_count, |
| 340 uint32 scan_code, | 357 uint32 scan_code, |
| 341 uint32 flags) { | 358 uint32 flags) { |
| 342 ui::KeyEvent event(ui::ET_KEY_PRESSED, | 359 DispatchKeyboardMessage(ui::ET_KEY_PRESSED, key_code, repeat_count, |
| 343 ui::KeyboardCodeForWindowsKeyCode(key_code), | 360 scan_code, flags, true); |
| 344 flags, | |
| 345 true); | |
| 346 delegate_->OnHostKeyEvent(&event); | |
| 347 } | 361 } |
| 348 | 362 |
| 349 void RemoteRootWindowHostWin::OnVisibilityChanged(bool visible) { | 363 void RemoteRootWindowHostWin::OnVisibilityChanged(bool visible) { |
| 350 if (visible) | 364 if (visible) |
| 351 delegate_->OnHostActivated(); | 365 delegate_->OnHostActivated(); |
| 352 } | 366 } |
| 353 | 367 |
| 354 void RemoteRootWindowHostWin::OnTouchDown(int32 x, int32 y, uint64 timestamp) { | 368 void RemoteRootWindowHostWin::OnTouchDown(int32 x, int32 y, uint64 timestamp) { |
| 355 ui::TouchEvent event(ui::ET_TOUCH_PRESSED, | 369 ui::TouchEvent event(ui::ET_TOUCH_PRESSED, |
| 356 gfx::Point(x, y), | 370 gfx::Point(x, y), |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 | 412 |
| 399 void RemoteRootWindowHostWin::OnMultiFileOpenDone( | 413 void RemoteRootWindowHostWin::OnMultiFileOpenDone( |
| 400 bool success, | 414 bool success, |
| 401 const std::vector<base::FilePath>& files) { | 415 const std::vector<base::FilePath>& files) { |
| 402 if (success) { | 416 if (success) { |
| 403 multi_file_open_completion_callback_.Run(files, NULL); | 417 multi_file_open_completion_callback_.Run(files, NULL); |
| 404 } | 418 } |
| 405 multi_file_open_completion_callback_.Reset(); | 419 multi_file_open_completion_callback_.Reset(); |
| 406 } | 420 } |
| 407 | 421 |
| 422 void RemoteRootWindowHostWin::DispatchKeyboardMessage(ui::EventType type, |
| 423 uint32 vkey, |
| 424 uint32 repeat_count, |
| 425 uint32 scan_code, |
| 426 uint32 flags, |
| 427 bool is_character) { |
| 428 if (MessageLoop::current()->IsNested()) { |
| 429 SetVirtualKeyStates(flags); |
| 430 |
| 431 uint32 message = is_character ? WM_CHAR : |
| 432 (type == ui::ET_KEY_PRESSED ? WM_KEYDOWN : WM_KEYUP); |
| 433 ::PostThreadMessage(::GetCurrentThreadId(), |
| 434 message, |
| 435 vkey, |
| 436 repeat_count | scan_code >> 15); |
| 437 } else { |
| 438 ui::KeyEvent event(type, |
| 439 ui::KeyboardCodeForWindowsKeyCode(vkey), |
| 440 flags, |
| 441 is_character); |
| 442 delegate_->OnHostKeyEvent(&event); |
| 443 } |
| 444 } |
| 445 |
| 408 } // namespace aura | 446 } // namespace aura |
| OLD | NEW |