Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(750)

Side by Side Diff: remoting/client/plugin/pepper_input_handler.cc

Issue 136093013: Don't send mouse events if the plugin doesn't have focus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Retry upload Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | remoting/webapp/client_session.js » ('j') | remoting/webapp/client_session.js » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "remoting/client/plugin/pepper_input_handler.h" 5 #include "remoting/client/plugin/pepper_input_handler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "ppapi/cpp/image_data.h" 8 #include "ppapi/cpp/image_data.h"
9 #include "ppapi/cpp/input_event.h" 9 #include "ppapi/cpp/input_event.h"
10 #include "ppapi/cpp/module_impl.h" 10 #include "ppapi/cpp/module_impl.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 } 45 }
46 46
47 bool PepperInputHandler::HandleInputEvent(const pp::InputEvent& event) { 47 bool PepperInputHandler::HandleInputEvent(const pp::InputEvent& event) {
48 switch (event.GetType()) { 48 switch (event.GetType()) {
49 case PP_INPUTEVENT_TYPE_CONTEXTMENU: { 49 case PP_INPUTEVENT_TYPE_CONTEXTMENU: {
50 // We need to return true here or else we'll get a local (plugin) context 50 // We need to return true here or else we'll get a local (plugin) context
51 // menu instead of the mouseup event for the right click. 51 // menu instead of the mouseup event for the right click.
52 return true; 52 return true;
53 } 53 }
54 54
55 case PP_INPUTEVENT_TYPE_KEYDOWN: 55 case PP_INPUTEVENT_TYPE_KEYDOWN:
weitao 2014/02/07 23:54:23 While at it, could you please also ignore key even
Jamie 2014/02/08 00:12:54 We don't get key events when we don't have focus.
56 case PP_INPUTEVENT_TYPE_KEYUP: { 56 case PP_INPUTEVENT_TYPE_KEYUP: {
57 pp::KeyboardInputEvent pp_key_event(event); 57 pp::KeyboardInputEvent pp_key_event(event);
58 uint32_t modifiers = event.GetModifiers(); 58 uint32_t modifiers = event.GetModifiers();
59 uint32_t lock_states = 0; 59 uint32_t lock_states = 0;
60 60
61 if (modifiers & PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY) 61 if (modifiers & PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY)
62 lock_states |= protocol::KeyEvent::LOCK_STATES_CAPSLOCK; 62 lock_states |= protocol::KeyEvent::LOCK_STATES_CAPSLOCK;
63 63
64 if (modifiers & PP_INPUTEVENT_MODIFIER_NUMLOCKKEY) 64 if (modifiers & PP_INPUTEVENT_MODIFIER_NUMLOCKKEY)
65 lock_states |= protocol::KeyEvent::LOCK_STATES_NUMLOCK; 65 lock_states |= protocol::KeyEvent::LOCK_STATES_NUMLOCK;
66 66
67 protocol::KeyEvent key_event; 67 protocol::KeyEvent key_event;
68 key_event.set_usb_keycode(GetUsbKeyCode(pp_key_event)); 68 key_event.set_usb_keycode(GetUsbKeyCode(pp_key_event));
69 key_event.set_pressed(event.GetType() == PP_INPUTEVENT_TYPE_KEYDOWN); 69 key_event.set_pressed(event.GetType() == PP_INPUTEVENT_TYPE_KEYDOWN);
70 key_event.set_lock_states(lock_states); 70 key_event.set_lock_states(lock_states);
71 71
72 input_stub_->InjectKeyEvent(key_event); 72 input_stub_->InjectKeyEvent(key_event);
73 return true; 73 return true;
74 } 74 }
75 75
76 case PP_INPUTEVENT_TYPE_MOUSEDOWN: 76 case PP_INPUTEVENT_TYPE_MOUSEDOWN:
77 case PP_INPUTEVENT_TYPE_MOUSEUP: { 77 case PP_INPUTEVENT_TYPE_MOUSEUP: {
78 if (!has_focus_)
79 return false;
Jamie 2014/02/07 22:34:39 I'm in two minds about this one. Some platforms (s
weitao 2014/02/07 23:54:23 I agree the first behavior is better. On 2014/02/
80
78 pp::MouseInputEvent pp_mouse_event(event); 81 pp::MouseInputEvent pp_mouse_event(event);
79 protocol::MouseEvent mouse_event; 82 protocol::MouseEvent mouse_event;
80 switch (pp_mouse_event.GetButton()) { 83 switch (pp_mouse_event.GetButton()) {
81 case PP_INPUTEVENT_MOUSEBUTTON_LEFT: 84 case PP_INPUTEVENT_MOUSEBUTTON_LEFT:
82 mouse_event.set_button(protocol::MouseEvent::BUTTON_LEFT); 85 mouse_event.set_button(protocol::MouseEvent::BUTTON_LEFT);
83 break; 86 break;
84 case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE: 87 case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE:
85 mouse_event.set_button(protocol::MouseEvent::BUTTON_MIDDLE); 88 mouse_event.set_button(protocol::MouseEvent::BUTTON_MIDDLE);
86 break; 89 break;
87 case PP_INPUTEVENT_MOUSEBUTTON_RIGHT: 90 case PP_INPUTEVENT_MOUSEBUTTON_RIGHT:
(...skipping 16 matching lines...) Expand all
104 } 107 }
105 108
106 input_stub_->InjectMouseEvent(mouse_event); 109 input_stub_->InjectMouseEvent(mouse_event);
107 } 110 }
108 return true; 111 return true;
109 } 112 }
110 113
111 case PP_INPUTEVENT_TYPE_MOUSEMOVE: 114 case PP_INPUTEVENT_TYPE_MOUSEMOVE:
112 case PP_INPUTEVENT_TYPE_MOUSEENTER: 115 case PP_INPUTEVENT_TYPE_MOUSEENTER:
113 case PP_INPUTEVENT_TYPE_MOUSELEAVE: { 116 case PP_INPUTEVENT_TYPE_MOUSELEAVE: {
117 if (!has_focus_)
118 return false;
119
114 pp::MouseInputEvent pp_mouse_event(event); 120 pp::MouseInputEvent pp_mouse_event(event);
115 protocol::MouseEvent mouse_event; 121 protocol::MouseEvent mouse_event;
116 mouse_event.set_x(pp_mouse_event.GetPosition().x()); 122 mouse_event.set_x(pp_mouse_event.GetPosition().x());
117 mouse_event.set_y(pp_mouse_event.GetPosition().y()); 123 mouse_event.set_y(pp_mouse_event.GetPosition().y());
118 124
119 // Add relative movement if the mouse is locked. 125 // Add relative movement if the mouse is locked.
120 if (mouse_lock_state_ == MouseLockOn) { 126 if (mouse_lock_state_ == MouseLockOn) {
121 pp::Point delta = pp_mouse_event.GetMovement(); 127 pp::Point delta = pp_mouse_event.GetMovement();
122 mouse_event.set_delta_x(delta.x()); 128 mouse_event.set_delta_x(delta.x());
123 mouse_event.set_delta_y(delta.y()); 129 mouse_event.set_delta_y(delta.y());
124 } 130 }
125 131
126 input_stub_->InjectMouseEvent(mouse_event); 132 input_stub_->InjectMouseEvent(mouse_event);
127 return true; 133 return true;
128 } 134 }
129 135
130 case PP_INPUTEVENT_TYPE_WHEEL: { 136 case PP_INPUTEVENT_TYPE_WHEEL: {
137 if (!has_focus_)
138 return false;
139
131 pp::WheelInputEvent pp_wheel_event(event); 140 pp::WheelInputEvent pp_wheel_event(event);
132 141
133 // Don't handle scroll-by-page events, for now. 142 // Don't handle scroll-by-page events, for now.
134 if (pp_wheel_event.GetScrollByPage()) 143 if (pp_wheel_event.GetScrollByPage())
135 return false; 144 return false;
136 145
137 // Add this event to our accumulated sub-pixel deltas and clicks. 146 // Add this event to our accumulated sub-pixel deltas and clicks.
138 pp::FloatPoint delta = pp_wheel_event.GetDelta(); 147 pp::FloatPoint delta = pp_wheel_event.GetDelta();
139 wheel_delta_x_ += delta.x(); 148 wheel_delta_x_ += delta.x();
140 wheel_delta_y_ += delta.y(); 149 wheel_delta_y_ += delta.y();
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 mouse_lock_state_ = MouseLockOff; 298 mouse_lock_state_ = MouseLockOff;
290 UpdateMouseCursor(); 299 UpdateMouseCursor();
291 } 300 }
292 301
293 // Cancel as needed. 302 // Cancel as needed.
294 if (should_cancel) 303 if (should_cancel)
295 CancelMouseLock(); 304 CancelMouseLock();
296 } 305 }
297 306
298 } // namespace remoting 307 } // namespace remoting
OLDNEW
« no previous file with comments | « no previous file | remoting/webapp/client_session.js » ('j') | remoting/webapp/client_session.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698