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

Side by Side Diff: chrome/browser/automation/ui_controls_aurax11.cc

Issue 8836007: Convert keysym to keycode for modifiers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years 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 | ui/base/keycodes/keyboard_code_conversion_x.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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/automation/ui_controls.h" 5 #include "chrome/browser/automation/ui_controls.h"
6 6
7 #include <X11/keysym.h> 7 #include <X11/keysym.h>
8 #include <X11/Xlib.h> 8 #include <X11/Xlib.h>
9 9
10 // X macro fail. 10 // X macro fail.
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 ui::KeyboardCode key, 83 ui::KeyboardCode key,
84 bool control, 84 bool control,
85 bool shift, 85 bool shift,
86 bool alt, 86 bool alt,
87 bool command) { 87 bool command) {
88 DCHECK(!command); // No command key on Aura 88 DCHECK(!command); // No command key on Aura
89 return SendKeyPressNotifyWhenDone( 89 return SendKeyPressNotifyWhenDone(
90 window, key, control, shift, alt, command, base::Closure()); 90 window, key, control, shift, alt, command, base::Closure());
91 } 91 }
92 92
93 void SetMaskAndKeycodeThenSend(XEvent* xevent, 93 void SetKeycodeAndSendThenMask(XEvent* xevent,
94 unsigned int mask, 94 KeySym keysym,
95 unsigned int keycode) { 95 unsigned int mask) {
96 xevent->xkey.keycode =
97 XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(),
98 keysym);
99 aura::RootWindow::GetInstance()->PostNativeEvent(xevent);
96 xevent->xkey.state |= mask; 100 xevent->xkey.state |= mask;
97 xevent->xkey.keycode = keycode; 101 }
102
103 void UnmaskAndSetKeycodeThenSend(XEvent* xevent,
104 unsigned int mask,
105 KeySym keysym) {
106 xevent->xkey.state ^= mask;
107 xevent->xkey.keycode =
108 XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(),
109 keysym);
98 aura::RootWindow::GetInstance()->PostNativeEvent(xevent); 110 aura::RootWindow::GetInstance()->PostNativeEvent(xevent);
99 } 111 }
100 112
101 void SetKeycodeAndSendThenUnmask(XEvent* xevent,
102 unsigned int mask,
103 unsigned int keycode) {
104 xevent->xkey.keycode = keycode;
105 aura::RootWindow::GetInstance()->PostNativeEvent(xevent);
106 xevent->xkey.state ^= mask;
107 }
108
109 bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window, 113 bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window,
110 ui::KeyboardCode key, 114 ui::KeyboardCode key,
111 bool control, 115 bool control,
112 bool shift, 116 bool shift,
113 bool alt, 117 bool alt,
114 bool command, 118 bool command,
115 const base::Closure& closure) { 119 const base::Closure& closure) {
116 DCHECK(!command); // No command key on Aura 120 DCHECK(!command); // No command key on Aura
117 XEvent xevent = {0}; 121 XEvent xevent = {0};
118 xevent.xkey.type = KeyPress; 122 xevent.xkey.type = KeyPress;
119 if (control) 123 if (control)
120 SetMaskAndKeycodeThenSend(&xevent, ControlMask, XK_Control_L); 124 SetKeycodeAndSendThenMask(&xevent, XK_Control_L, ControlMask);
121 if (shift) 125 if (shift)
122 SetMaskAndKeycodeThenSend(&xevent, ShiftMask, XK_Shift_L); 126 SetKeycodeAndSendThenMask(&xevent, XK_Shift_L, ShiftMask);
123 if (alt) 127 if (alt)
124 SetMaskAndKeycodeThenSend(&xevent, Mod1Mask, XK_Alt_L); 128 SetKeycodeAndSendThenMask(&xevent, XK_Alt_L, Mod1Mask);
125 xevent.xkey.keycode = 129 xevent.xkey.keycode =
126 XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(), 130 XKeysymToKeycode(base::MessagePumpX::GetDefaultXDisplay(),
127 ui::XKeysymForWindowsKeyCode(key, shift)); 131 ui::XKeysymForWindowsKeyCode(key, shift));
128 aura::RootWindow::GetInstance()->PostNativeEvent(&xevent); 132 aura::RootWindow::GetInstance()->PostNativeEvent(&xevent);
129 133
130 // Send key release events. 134 // Send key release events.
131 xevent.xkey.type = KeyRelease; 135 xevent.xkey.type = KeyRelease;
132 aura::RootWindow::GetInstance()->PostNativeEvent(&xevent); 136 aura::RootWindow::GetInstance()->PostNativeEvent(&xevent);
133 if (alt) 137 if (alt)
134 SetKeycodeAndSendThenUnmask(&xevent, Mod1Mask, XK_Alt_L); 138 UnmaskAndSetKeycodeThenSend(&xevent, Mod1Mask, XK_Alt_L);
135 if (shift) 139 if (shift)
136 SetKeycodeAndSendThenUnmask(&xevent, ShiftMask, XK_Shift_L); 140 UnmaskAndSetKeycodeThenSend(&xevent, ShiftMask, XK_Shift_L);
137 if (control) 141 if (control)
138 SetKeycodeAndSendThenUnmask(&xevent, ControlMask, XK_Control_L); 142 UnmaskAndSetKeycodeThenSend(&xevent, ControlMask, XK_Control_L);
139 DCHECK(!xevent.xkey.state); 143 DCHECK(!xevent.xkey.state);
140 RunClosureAfterAllPendingUIEvents(closure); 144 RunClosureAfterAllPendingUIEvents(closure);
141 return true; 145 return true;
142 } 146 }
143 147
144 bool SendMouseMove(long x, long y) { 148 bool SendMouseMove(long x, long y) {
145 return SendMouseMoveNotifyWhenDone(x, y, base::Closure()); 149 return SendMouseMoveNotifyWhenDone(x, y, base::Closure());
146 } 150 }
147 151
148 bool SendMouseMoveNotifyWhenDone(long x, long y, const base::Closure& closure) { 152 bool SendMouseMoveNotifyWhenDone(long x, long y, const base::Closure& closure) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 marker_event->xclient.display = NULL; 229 marker_event->xclient.display = NULL;
226 marker_event->xclient.window = None; 230 marker_event->xclient.window = None;
227 marker_event->xclient.format = 8; 231 marker_event->xclient.format = 8;
228 } 232 }
229 marker_event->xclient.message_type = MarkerEventAtom(); 233 marker_event->xclient.message_type = MarkerEventAtom();
230 aura::RootWindow::GetInstance()->PostNativeEvent(marker_event); 234 aura::RootWindow::GetInstance()->PostNativeEvent(marker_event);
231 new EventWaiter(closure, &Matcher); 235 new EventWaiter(closure, &Matcher);
232 } 236 }
233 237
234 } // namespace ui_controls 238 } // namespace ui_controls
OLDNEW
« no previous file with comments | « no previous file | ui/base/keycodes/keyboard_code_conversion_x.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698