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

Side by Side Diff: chrome/browser/ui/ash/event_rewriter.cc

Issue 11280153: Add Search-. as a shortcut for the Insert key when Search is acting as a Function key. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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
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 "chrome/browser/ui/ash/event_rewriter.h" 5 #include "chrome/browser/ui/ash/event_rewriter.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 // |device_id| is unknown. This means the device was connected before 273 // |device_id| is unknown. This means the device was connected before
274 // booting the OS. Query the name of the device and add it to the map. 274 // booting the OS. Query the name of the device and add it to the map.
275 DeviceAdded(device_id); 275 DeviceAdded(device_id);
276 } 276 }
277 277
278 last_device_id_ = device_id; 278 last_device_id_ = device_id;
279 } 279 }
280 280
281 void EventRewriter::RefreshKeycodes() { 281 void EventRewriter::RefreshKeycodes() {
282 Display* display = ui::GetXDisplay(); 282 Display* display = ui::GetXDisplay();
283 control_l_xkeycode_ = XKeysymToKeycode(display, XK_Control_L); 283 control_l_xkeycode_ = XKeysymToKeycode(display, XK_Control_L);
Wez 2012/11/26 21:03:19 There are sufficiently many of these now that it'd
Yusuke Sato 2012/11/30 23:43:55 +1
284 control_r_xkeycode_ = XKeysymToKeycode(display, XK_Control_R); 284 control_r_xkeycode_ = XKeysymToKeycode(display, XK_Control_R);
285 alt_l_xkeycode_ = XKeysymToKeycode(display, XK_Alt_L); 285 alt_l_xkeycode_ = XKeysymToKeycode(display, XK_Alt_L);
286 alt_r_xkeycode_ = XKeysymToKeycode(display, XK_Alt_R); 286 alt_r_xkeycode_ = XKeysymToKeycode(display, XK_Alt_R);
287 meta_l_xkeycode_ = XKeysymToKeycode(display, XK_Meta_L); 287 meta_l_xkeycode_ = XKeysymToKeycode(display, XK_Meta_L);
288 meta_r_xkeycode_ = XKeysymToKeycode(display, XK_Meta_R); 288 meta_r_xkeycode_ = XKeysymToKeycode(display, XK_Meta_R);
289 windows_l_xkeycode_ = XKeysymToKeycode(display, XK_Super_L); 289 windows_l_xkeycode_ = XKeysymToKeycode(display, XK_Super_L);
290 caps_lock_xkeycode_ = XKeysymToKeycode(display, XK_Caps_Lock); 290 caps_lock_xkeycode_ = XKeysymToKeycode(display, XK_Caps_Lock);
291 void_symbol_xkeycode_ = XKeysymToKeycode(display, XK_VoidSymbol); 291 void_symbol_xkeycode_ = XKeysymToKeycode(display, XK_VoidSymbol);
292 delete_xkeycode_ = XKeysymToKeycode(display, XK_Delete); 292 delete_xkeycode_ = XKeysymToKeycode(display, XK_Delete);
293 home_xkeycode_ = XKeysymToKeycode(display, XK_Home); 293 home_xkeycode_ = XKeysymToKeycode(display, XK_Home);
294 end_xkeycode_ = XKeysymToKeycode(display, XK_End); 294 end_xkeycode_ = XKeysymToKeycode(display, XK_End);
295 prior_xkeycode_ = XKeysymToKeycode(display, XK_Prior); 295 prior_xkeycode_ = XKeysymToKeycode(display, XK_Prior);
296 next_xkeycode_ = XKeysymToKeycode(display, XK_Next); 296 next_xkeycode_ = XKeysymToKeycode(display, XK_Next);
297 insert_xkeycode_ = XKeysymToKeycode(display, XK_Insert);
297 kp_0_xkeycode_ = XKeysymToKeycode(display, XK_KP_0); 298 kp_0_xkeycode_ = XKeysymToKeycode(display, XK_KP_0);
298 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1); 299 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1);
299 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2); 300 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2);
300 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3); 301 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3);
301 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4); 302 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4);
302 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5); 303 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5);
303 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6); 304 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6);
304 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7); 305 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7);
305 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8); 306 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8);
306 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9); 307 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 case XK_Delete: 355 case XK_Delete:
355 return delete_xkeycode_; 356 return delete_xkeycode_;
356 case XK_Home: 357 case XK_Home:
357 return home_xkeycode_; 358 return home_xkeycode_;
358 case XK_End: 359 case XK_End:
359 return end_xkeycode_; 360 return end_xkeycode_;
360 case XK_Prior: 361 case XK_Prior:
361 return prior_xkeycode_; 362 return prior_xkeycode_;
362 case XK_Next: 363 case XK_Next:
363 return next_xkeycode_; 364 return next_xkeycode_;
365 case XK_Insert:
366 return insert_xkeycode_;
364 case XK_KP_0: 367 case XK_KP_0:
365 return kp_0_xkeycode_; 368 return kp_0_xkeycode_;
366 case XK_KP_1: 369 case XK_KP_1:
367 return kp_1_xkeycode_; 370 return kp_1_xkeycode_;
368 case XK_KP_2: 371 case XK_KP_2:
369 return kp_2_xkeycode_; 372 return kp_2_xkeycode_;
370 case XK_KP_3: 373 case XK_KP_3:
371 return kp_3_xkeycode_; 374 return kp_3_xkeycode_;
372 case XK_KP_4: 375 case XK_KP_4:
373 return kp_4_xkeycode_; 376 return kp_4_xkeycode_;
(...skipping 21 matching lines...) Expand all
395 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See 398 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
396 // crbug.com/136465. 399 // crbug.com/136465.
397 if (event->native_event()->xkey.send_event) 400 if (event->native_event()->xkey.send_event)
398 return ash::EventRewriterDelegate::ACTION_REWRITE_EVENT; 401 return ash::EventRewriterDelegate::ACTION_REWRITE_EVENT;
399 402
400 if (DropSearchKey(event)) 403 if (DropSearchKey(event))
401 return ash::EventRewriterDelegate::ACTION_DROP_EVENT; 404 return ash::EventRewriterDelegate::ACTION_DROP_EVENT;
402 #endif 405 #endif
403 RewriteModifiers(event); 406 RewriteModifiers(event);
404 RewriteNumPadKeys(event); 407 RewriteNumPadKeys(event);
405 RewriteBackspaceAndArrowKeys(event); 408 RewriteBackspaceBackslashAndArrowKeys(event);
406 RewriteFunctionKeys(event); 409 RewriteFunctionKeys(event);
407 return ash::EventRewriterDelegate::ACTION_REWRITE_EVENT; 410 return ash::EventRewriterDelegate::ACTION_REWRITE_EVENT;
408 } 411 }
409 412
410 bool EventRewriter::IsAppleKeyboard() const { 413 bool EventRewriter::IsAppleKeyboard() const {
411 if (last_device_id_ == kBadDeviceId) 414 if (last_device_id_ == kBadDeviceId)
412 return false; 415 return false;
413 416
414 // Check which device generated |event|. 417 // Check which device generated |event|.
415 std::map<int, DeviceType>::const_iterator iter = 418 std::map<int, DeviceType>::const_iterator iter =
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 break; 669 break;
667 default: 670 default:
668 break; 671 break;
669 } 672 }
670 #else 673 #else
671 // TODO(yusukes): Support Ash on other platforms if needed. 674 // TODO(yusukes): Support Ash on other platforms if needed.
672 #endif 675 #endif
673 return rewritten; 676 return rewritten;
674 } 677 }
675 678
676 bool EventRewriter::RewriteBackspaceAndArrowKeys(ui::KeyEvent* event) { 679 bool EventRewriter::RewriteBackspaceBackslashAndArrowKeys(ui::KeyEvent* event) {
677 bool rewritten = false; 680 bool rewritten = false;
678 #if defined(OS_CHROMEOS) 681 #if defined(OS_CHROMEOS)
679 const PrefService* pref_service = 682 const PrefService* pref_service =
680 pref_service_ ? pref_service_ : GetPrefService(); 683 pref_service_ ? pref_service_ : GetPrefService();
681 684
682 const bool search_as_function_key = pref_service && 685 const bool search_as_function_key = pref_service &&
683 pref_service->GetBoolean(prefs::kLanguageSearchKeyActsAsFunctionKey); 686 pref_service->GetBoolean(prefs::kLanguageSearchKeyActsAsFunctionKey);
684 687
685 XEvent* xev = event->native_event(); 688 XEvent* xev = event->native_event();
686 XKeyEvent* xkey = &(xev->xkey); 689 XKeyEvent* xkey = &(xev->xkey);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 // Without Search as Function key: Remap Alt+Down to Next (aka PageDown). 748 // Without Search as Function key: Remap Alt+Down to Next (aka PageDown).
746 OverwriteEvent(event, next_xkeycode_, xkey->state & ~Mod1Mask, 749 OverwriteEvent(event, next_xkeycode_, xkey->state & ~Mod1Mask,
747 ui::VKEY_NEXT, event->flags() & ~ui::EF_ALT_DOWN); 750 ui::VKEY_NEXT, event->flags() & ~ui::EF_ALT_DOWN);
748 rewritten = true; 751 rewritten = true;
749 } else if (search_as_function_key && 752 } else if (search_as_function_key &&
750 keysym == XK_Down && (xkey->state & Mod4Mask)) { 753 keysym == XK_Down && (xkey->state & Mod4Mask)) {
751 // With Search as Function key: Remap Search+Down to Next (aka PageDown). 754 // With Search as Function key: Remap Search+Down to Next (aka PageDown).
752 OverwriteEvent(event, next_xkeycode_, xkey->state & ~Mod4Mask, 755 OverwriteEvent(event, next_xkeycode_, xkey->state & ~Mod4Mask,
753 ui::VKEY_NEXT, event->flags()); 756 ui::VKEY_NEXT, event->flags());
754 rewritten = true; 757 rewritten = true;
758 } else if (search_as_function_key &&
Wez 2012/11/26 21:03:19 nit: This function would be easier to read if it h
759 keysym == XK_backslash && (xkey->state & Mod4Mask)) {
Yusuke Sato 2012/11/26 07:54:44 \ might be a bit inconvenient for non-US versions
danakj 2012/11/26 17:47:28 Sure that sounds fine. :)
Wez 2012/11/26 21:03:19 Agreed; "\" not only changes location between US &
Yusuke Sato 2012/11/26 21:08:28 Unfortunately - and = are already used for F11 and
760 // With Search as Function key: Remap Search+backslash to Insert.
761 OverwriteEvent(event, insert_xkeycode_, xkey->state & ~Mod4Mask,
762 ui::VKEY_INSERT, event->flags());
763 rewritten = true;
755 } 764 }
756 #else 765 #else
757 // TODO(yusukes): Support Ash on other platforms if needed. 766 // TODO(yusukes): Support Ash on other platforms if needed.
758 #endif 767 #endif
759 return rewritten; 768 return rewritten;
760 } 769 }
761 770
762 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) { 771 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) {
763 #if defined(OS_CHROMEOS) 772 #if defined(OS_CHROMEOS)
764 XEvent* xev = event->native_event(); 773 XEvent* xev = event->native_event();
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 const DeviceType type = EventRewriter::GetDeviceType(device_name); 1054 const DeviceType type = EventRewriter::GetDeviceType(device_name);
1046 if (type == kDeviceAppleKeyboard) { 1055 if (type == kDeviceAppleKeyboard) {
1047 VLOG(1) << "Apple keyboard '" << device_name << "' connected: " 1056 VLOG(1) << "Apple keyboard '" << device_name << "' connected: "
1048 << "id=" << device_id; 1057 << "id=" << device_id;
1049 } 1058 }
1050 // Always overwrite the existing device_id since the X server may reuse a 1059 // Always overwrite the existing device_id since the X server may reuse a
1051 // device id for an unattached device. 1060 // device id for an unattached device.
1052 device_id_to_type_[device_id] = type; 1061 device_id_to_type_[device_id] = type;
1053 return type; 1062 return type;
1054 } 1063 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/ash/event_rewriter.h ('k') | chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698