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

Side by Side Diff: ui/views/test/ui_controls_factory_desktop_aurax11.cc

Issue 184903003: Window ownership -> WindowTreeHost (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 9 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 | « ui/views/event_utils_aura.cc ('k') | ui/views/widget/desktop_aura/desktop_capture_client.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <X11/keysym.h> 5 #include <X11/keysym.h>
6 #include <X11/Xlib.h> 6 #include <X11/Xlib.h>
7 7
8 // X macro fail. 8 // X macro fail.
9 #if defined(RootWindow) 9 #if defined(RootWindow)
10 #undef RootWindow 10 #undef RootWindow
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 virtual bool SendKeyPressNotifyWhenDone( 118 virtual bool SendKeyPressNotifyWhenDone(
119 gfx::NativeWindow window, 119 gfx::NativeWindow window,
120 ui::KeyboardCode key, 120 ui::KeyboardCode key,
121 bool control, 121 bool control,
122 bool shift, 122 bool shift,
123 bool alt, 123 bool alt,
124 bool command, 124 bool command,
125 const base::Closure& closure) OVERRIDE { 125 const base::Closure& closure) OVERRIDE {
126 DCHECK(!command); // No command key on Aura 126 DCHECK(!command); // No command key on Aura
127 127
128 aura::WindowEventDispatcher* dispatcher = window->GetDispatcher(); 128 aura::WindowTreeHost* host = window->GetHost();
129 129
130 XEvent xevent = {0}; 130 XEvent xevent = {0};
131 xevent.xkey.type = KeyPress; 131 xevent.xkey.type = KeyPress;
132 if (control) { 132 if (control) {
133 SetKeycodeAndSendThenMask(dispatcher, &xevent, XK_Control_L, 133 SetKeycodeAndSendThenMask(host, &xevent, XK_Control_L, ControlMask);
134 ControlMask);
135 } 134 }
136 if (shift) 135 if (shift)
137 SetKeycodeAndSendThenMask(dispatcher, &xevent, XK_Shift_L, ShiftMask); 136 SetKeycodeAndSendThenMask(host, &xevent, XK_Shift_L, ShiftMask);
138 if (alt) 137 if (alt)
139 SetKeycodeAndSendThenMask(dispatcher, &xevent, XK_Alt_L, Mod1Mask); 138 SetKeycodeAndSendThenMask(host, &xevent, XK_Alt_L, Mod1Mask);
140 xevent.xkey.keycode = 139 xevent.xkey.keycode =
141 XKeysymToKeycode(x_display_, 140 XKeysymToKeycode(x_display_,
142 ui::XKeysymForWindowsKeyCode(key, shift)); 141 ui::XKeysymForWindowsKeyCode(key, shift));
143 dispatcher->host()->PostNativeEvent(&xevent); 142 host->PostNativeEvent(&xevent);
144 143
145 // Send key release events. 144 // Send key release events.
146 xevent.xkey.type = KeyRelease; 145 xevent.xkey.type = KeyRelease;
147 dispatcher->host()->PostNativeEvent(&xevent); 146 host->PostNativeEvent(&xevent);
148 if (alt) 147 if (alt)
149 UnmaskAndSetKeycodeThenSend(dispatcher, &xevent, Mod1Mask, XK_Alt_L); 148 UnmaskAndSetKeycodeThenSend(host, &xevent, Mod1Mask, XK_Alt_L);
150 if (shift) 149 if (shift)
151 UnmaskAndSetKeycodeThenSend(dispatcher, &xevent, ShiftMask, XK_Shift_L); 150 UnmaskAndSetKeycodeThenSend(host, &xevent, ShiftMask, XK_Shift_L);
152 if (control) { 151 if (control) {
153 UnmaskAndSetKeycodeThenSend(dispatcher, &xevent, ControlMask, 152 UnmaskAndSetKeycodeThenSend(host, &xevent, ControlMask, XK_Control_L);
154 XK_Control_L);
155 } 153 }
156 DCHECK(!xevent.xkey.state); 154 DCHECK(!xevent.xkey.state);
157 RunClosureAfterAllPendingUIEvents(closure); 155 RunClosureAfterAllPendingUIEvents(closure);
158 return true; 156 return true;
159 } 157 }
160 158
161 virtual bool SendMouseMove(long screen_x, long screen_y) OVERRIDE { 159 virtual bool SendMouseMove(long screen_x, long screen_y) OVERRIDE {
162 return SendMouseMoveNotifyWhenDone(screen_x, screen_y, base::Closure()); 160 return SendMouseMoveNotifyWhenDone(screen_x, screen_y, base::Closure());
163 } 161 }
164 virtual bool SendMouseMoveNotifyWhenDone( 162 virtual bool SendMouseMoveNotifyWhenDone(
165 long screen_x, 163 long screen_x,
166 long screen_y, 164 long screen_y,
167 const base::Closure& closure) OVERRIDE { 165 const base::Closure& closure) OVERRIDE {
168 gfx::Point screen_location(screen_x, screen_y); 166 gfx::Point screen_location(screen_x, screen_y);
169 gfx::Point root_location = screen_location; 167 gfx::Point root_location = screen_location;
170 aura::Window* root_window = RootWindowForPoint(screen_location); 168 aura::Window* root_window = RootWindowForPoint(screen_location);
171 169
172 aura::client::ScreenPositionClient* screen_position_client = 170 aura::client::ScreenPositionClient* screen_position_client =
173 aura::client::GetScreenPositionClient(root_window); 171 aura::client::GetScreenPositionClient(root_window);
174 if (screen_position_client) { 172 if (screen_position_client) {
175 screen_position_client->ConvertPointFromScreen(root_window, 173 screen_position_client->ConvertPointFromScreen(root_window,
176 &root_location); 174 &root_location);
177 } 175 }
178 176
179 aura::WindowEventDispatcher* dispatcher = root_window->GetDispatcher(); 177 aura::WindowTreeHost* host = root_window->GetHost();
180 gfx::Point root_current_location; 178 gfx::Point root_current_location;
181 dispatcher->host()->QueryMouseLocation(&root_current_location); 179 host->QueryMouseLocation(&root_current_location);
182 dispatcher->host()->ConvertPointFromHost(&root_current_location); 180 host->ConvertPointFromHost(&root_current_location);
183 181
184 if (root_location != root_current_location && button_down_mask == 0) { 182 if (root_location != root_current_location && button_down_mask == 0) {
185 // Move the cursor because EnterNotify/LeaveNotify are generated with the 183 // Move the cursor because EnterNotify/LeaveNotify are generated with the
186 // current mouse position as a result of XGrabPointer() 184 // current mouse position as a result of XGrabPointer()
187 root_window->MoveCursorTo(root_location); 185 root_window->MoveCursorTo(root_location);
188 } else { 186 } else {
189 XEvent xevent = {0}; 187 XEvent xevent = {0};
190 XMotionEvent* xmotion = &xevent.xmotion; 188 XMotionEvent* xmotion = &xevent.xmotion;
191 xmotion->type = MotionNotify; 189 xmotion->type = MotionNotify;
192 xmotion->x = root_location.x(); 190 xmotion->x = root_location.x();
193 xmotion->y = root_location.y(); 191 xmotion->y = root_location.y();
194 xmotion->state = button_down_mask; 192 xmotion->state = button_down_mask;
195 xmotion->same_screen = True; 193 xmotion->same_screen = True;
196 // RootWindow will take care of other necessary fields. 194 // RootWindow will take care of other necessary fields.
197 dispatcher->host()->PostNativeEvent(&xevent); 195 host->PostNativeEvent(&xevent);
198 } 196 }
199 RunClosureAfterAllPendingUIEvents(closure); 197 RunClosureAfterAllPendingUIEvents(closure);
200 return true; 198 return true;
201 } 199 }
202 virtual bool SendMouseEvents(MouseButton type, int state) OVERRIDE { 200 virtual bool SendMouseEvents(MouseButton type, int state) OVERRIDE {
203 return SendMouseEventsNotifyWhenDone(type, state, base::Closure()); 201 return SendMouseEventsNotifyWhenDone(type, state, base::Closure());
204 } 202 }
205 virtual bool SendMouseEventsNotifyWhenDone( 203 virtual bool SendMouseEventsNotifyWhenDone(
206 MouseButton type, 204 MouseButton type,
207 int state, 205 int state,
(...skipping 19 matching lines...) Expand all
227 xbutton->state = Button2Mask; 225 xbutton->state = Button2Mask;
228 break; 226 break;
229 case RIGHT: 227 case RIGHT:
230 xbutton->button = Button3; 228 xbutton->button = Button3;
231 xbutton->state = Button3Mask; 229 xbutton->state = Button3Mask;
232 break; 230 break;
233 } 231 }
234 // RootWindow will take care of other necessary fields. 232 // RootWindow will take care of other necessary fields.
235 if (state & DOWN) { 233 if (state & DOWN) {
236 xevent.xbutton.type = ButtonPress; 234 xevent.xbutton.type = ButtonPress;
237 root_window->GetDispatcher()->host()->PostNativeEvent(&xevent); 235 root_window->GetHost()->PostNativeEvent(&xevent);
238 button_down_mask |= xbutton->state; 236 button_down_mask |= xbutton->state;
239 } 237 }
240 if (state & UP) { 238 if (state & UP) {
241 xevent.xbutton.type = ButtonRelease; 239 xevent.xbutton.type = ButtonRelease;
242 root_window->GetDispatcher()->host()->PostNativeEvent(&xevent); 240 root_window->GetHost()->PostNativeEvent(&xevent);
243 button_down_mask = (button_down_mask | xbutton->state) ^ xbutton->state; 241 button_down_mask = (button_down_mask | xbutton->state) ^ xbutton->state;
244 } 242 }
245 RunClosureAfterAllPendingUIEvents(closure); 243 RunClosureAfterAllPendingUIEvents(closure);
246 return true; 244 return true;
247 } 245 }
248 virtual bool SendMouseClick(MouseButton type) OVERRIDE { 246 virtual bool SendMouseClick(MouseButton type) OVERRIDE {
249 return SendMouseEvents(type, UP | DOWN); 247 return SendMouseEvents(type, UP | DOWN);
250 } 248 }
251 virtual void RunClosureAfterAllPendingUIEvents( 249 virtual void RunClosureAfterAllPendingUIEvents(
252 const base::Closure& closure) OVERRIDE { 250 const base::Closure& closure) OVERRIDE {
(...skipping 25 matching lines...) Expand all
278 if ((*it)->GetBoundsInScreen().Contains(point)) { 276 if ((*it)->GetBoundsInScreen().Contains(point)) {
279 return (*it)->GetRootWindow(); 277 return (*it)->GetRootWindow();
280 } 278 }
281 } 279 }
282 280
283 NOTREACHED() << "Coulding find RW for " << point.ToString() << " among " 281 NOTREACHED() << "Coulding find RW for " << point.ToString() << " among "
284 << windows.size() << " RWs."; 282 << windows.size() << " RWs.";
285 return NULL; 283 return NULL;
286 } 284 }
287 285
288 void SetKeycodeAndSendThenMask(aura::WindowEventDispatcher* dispatcher, 286 void SetKeycodeAndSendThenMask(aura::WindowTreeHost* host,
289 XEvent* xevent, 287 XEvent* xevent,
290 KeySym keysym, 288 KeySym keysym,
291 unsigned int mask) { 289 unsigned int mask) {
292 xevent->xkey.keycode = XKeysymToKeycode(x_display_, keysym); 290 xevent->xkey.keycode = XKeysymToKeycode(x_display_, keysym);
293 dispatcher->host()->PostNativeEvent(xevent); 291 host->PostNativeEvent(xevent);
294 xevent->xkey.state |= mask; 292 xevent->xkey.state |= mask;
295 } 293 }
296 294
297 void UnmaskAndSetKeycodeThenSend(aura::WindowEventDispatcher* dispatcher, 295 void UnmaskAndSetKeycodeThenSend(aura::WindowTreeHost* host,
298 XEvent* xevent, 296 XEvent* xevent,
299 unsigned int mask, 297 unsigned int mask,
300 KeySym keysym) { 298 KeySym keysym) {
301 xevent->xkey.state ^= mask; 299 xevent->xkey.state ^= mask;
302 xevent->xkey.keycode = XKeysymToKeycode(x_display_, keysym); 300 xevent->xkey.keycode = XKeysymToKeycode(x_display_, keysym);
303 dispatcher->host()->PostNativeEvent(xevent); 301 host->PostNativeEvent(xevent);
304 } 302 }
305 303
306 // Our X11 state. 304 // Our X11 state.
307 Display* x_display_; 305 Display* x_display_;
308 ::Window x_root_window_; 306 ::Window x_root_window_;
309 307
310 // Input-only window used for events. 308 // Input-only window used for events.
311 ::Window x_window_; 309 ::Window x_window_;
312 310
313 DISALLOW_COPY_AND_ASSIGN(UIControlsDesktopX11); 311 DISALLOW_COPY_AND_ASSIGN(UIControlsDesktopX11);
314 }; 312 };
315 313
316 } // namespace 314 } // namespace
317 315
318 UIControlsAura* CreateUIControlsDesktopAura() { 316 UIControlsAura* CreateUIControlsDesktopAura() {
319 return new UIControlsDesktopX11(); 317 return new UIControlsDesktopX11();
320 } 318 }
321 319
322 } // namespace test 320 } // namespace test
323 } // namespace views 321 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/event_utils_aura.cc ('k') | ui/views/widget/desktop_aura/desktop_capture_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698