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

Side by Side Diff: chrome/browser/renderer_host/render_widget_host_view_mac.mm

Issue 460105: Fix issue 23221: accesskey is not supported on Chromium Mac.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 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 | chrome/browser/tab_contents/tab_contents_view_mac.mm » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/renderer_host/render_widget_host_view_mac.h" 5 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #include "base/histogram.h" 7 #include "base/histogram.h"
8 #import "base/scoped_nsobject.h" 8 #import "base/scoped_nsobject.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/sys_string_conversions.h" 10 #include "base/sys_string_conversions.h"
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 696
697 // We don't get insertText: calls if ctrl is down and not even a keyDown: 697 // We don't get insertText: calls if ctrl is down and not even a keyDown:
698 // call if cmd is down, so synthesize a keypress event for these cases. 698 // call if cmd is down, so synthesize a keypress event for these cases.
699 // Note that this makes our behavior deviate from the windows and linux 699 // Note that this makes our behavior deviate from the windows and linux
700 // versions of chrome (however, see http://crbug.com/13891 ), but it makes 700 // versions of chrome (however, see http://crbug.com/13891 ), but it makes
701 // us behave similar to how Safari behaves. 701 // us behave similar to how Safari behaves.
702 if ([theEvent modifierFlags] & (NSControlKeyMask | NSCommandKeyMask) && 702 if ([theEvent modifierFlags] & (NSControlKeyMask | NSCommandKeyMask) &&
703 lastKeyPressedEvent_.get() != theEvent && 703 lastKeyPressedEvent_.get() != theEvent &&
704 [[theEvent characters] length] > 0 && 704 [[theEvent characters] length] > 0 &&
705 renderWidgetHostView_->render_widget_host_) { 705 renderWidgetHostView_->render_widget_host_) {
706 NativeWebKeyboardEvent event([[theEvent characters] characterAtIndex:0], 706 // Just fabricate a Char event by changing the type of the RawKeyDown
707 ToWebKitModifiers([theEvent modifierFlags]), 707 // event, to retain all necessary informations, such as unmodifiedText.
708 base::Time::Now().ToDoubleT()); 708 event.type = WebKit::WebInputEvent::Char;
709 // We fire menu items on keydown, we don't want to activate menu items 709 // We fire menu items on keydown, we don't want to activate menu items
710 // twice. 710 // twice.
711 event.skip_in_browser = true; 711 event.skip_in_browser = true;
712 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event); 712 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event);
713 } 713 }
714 } 714 }
715 715
716 // Possibly autohide the cursor. 716 // Possibly autohide the cursor.
717 if ([RenderWidgetHostViewCocoa shouldAutohideCursorForEvent:theEvent]) 717 if ([RenderWidgetHostViewCocoa shouldAutohideCursorForEvent:theEvent])
718 [NSCursor setHiddenUntilMouseMoves:YES]; 718 [NSCursor setHiddenUntilMouseMoves:YES];
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 - (void)doCommandBySelector:(SEL)selector { 1345 - (void)doCommandBySelector:(SEL)selector {
1346 // An input method calls this function to dispatch an editing command to be 1346 // An input method calls this function to dispatch an editing command to be
1347 // handled by this view. 1347 // handled by this view.
1348 // Even though most editing commands has been already handled by the 1348 // Even though most editing commands has been already handled by the
1349 // RWHVMEditCommandHelper object, we need to handle an insertNewline: command 1349 // RWHVMEditCommandHelper object, we need to handle an insertNewline: command
1350 // and send a '\r' character to WebKit so that WebKit dispatches this 1350 // and send a '\r' character to WebKit so that WebKit dispatches this
1351 // character to onkeypress() event handlers. 1351 // character to onkeypress() event handlers.
1352 // TODO(hbono): need to handle more commands? 1352 // TODO(hbono): need to handle more commands?
1353 if (selector == @selector(insertNewline:)) { 1353 if (selector == @selector(insertNewline:)) {
1354 lastKeyPressedEvent_.reset([[NSApp currentEvent] retain]); 1354 lastKeyPressedEvent_.reset([[NSApp currentEvent] retain]);
1355 NativeWebKeyboardEvent event('\r', renderWidgetHostView_->im_modifiers_, 1355 // Create the Char event from the NSEvent object, so that we can retain
1356 base::Time::Now().ToDoubleT()); 1356 // necessary informations, especially unmodifiedText.
1357 NativeWebKeyboardEvent event(lastKeyPressedEvent_.get());
1358 event.type = WebKit::WebInputEvent::Char;
1359 event.text[0] = '\r';
1360 event.text[1] = 0;
1361 event.skip_in_browser = true;
1357 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event); 1362 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event);
1358 } 1363 }
1359 } 1364 }
1360 1365
1361 - (void)insertText:(id)string { 1366 - (void)insertText:(id)string {
1362 // An input method has characters to be inserted. 1367 // An input method has characters to be inserted.
1363 // Same as Linux, Mac calls this method not only: 1368 // Same as Linux, Mac calls this method not only:
1364 // * when an input method finishs composing text, but also; 1369 // * when an input method finishs composing text, but also;
1365 // * when we type an ASCII character (without using input methods). 1370 // * when we type an ASCII character (without using input methods).
1366 // When we aren't using input methods, we should send the given character as 1371 // When we aren't using input methods, we should send the given character as
1367 // a Char event so it is dispatched to an onkeypress() event handler of 1372 // a Char event so it is dispatched to an onkeypress() event handler of
1368 // JavaScript. 1373 // JavaScript.
1369 // On the other hand, when we are using input methods, we should send the 1374 // On the other hand, when we are using input methods, we should send the
1370 // given characters as an IME event and prevent the characters from being 1375 // given characters as an IME event and prevent the characters from being
1371 // dispatched to onkeypress() event handlers. 1376 // dispatched to onkeypress() event handlers.
1372 BOOL isAttributedString = [string isKindOfClass:[NSAttributedString class]]; 1377 BOOL isAttributedString = [string isKindOfClass:[NSAttributedString class]];
1373 NSString* im_text = isAttributedString ? [string string] : string; 1378 NSString* im_text = isAttributedString ? [string string] : string;
1374 if (!renderWidgetHostView_->im_composing_ && [im_text length] == 1) { 1379 if (!renderWidgetHostView_->im_composing_ && [im_text length] == 1) {
1375 lastKeyPressedEvent_.reset([[NSApp currentEvent] retain]); 1380 lastKeyPressedEvent_.reset([[NSApp currentEvent] retain]);
1376 NativeWebKeyboardEvent event([im_text characterAtIndex:0], 1381 // Create the Char event from the NSEvent object, so that we can retain
1377 renderWidgetHostView_->im_modifiers_, 1382 // necessary informations, especially unmodifiedText.
1378 base::Time::Now().ToDoubleT()); 1383 NativeWebKeyboardEvent event(lastKeyPressedEvent_.get());
1384 event.type = WebKit::WebInputEvent::Char;
1385 event.text[0] = [im_text characterAtIndex:0];
1386 event.text[1] = 0;
1387 event.skip_in_browser = true;
1379 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event); 1388 renderWidgetHostView_->render_widget_host_->ForwardKeyboardEvent(event);
1380 } else { 1389 } else {
1381 renderWidgetHostView_->render_widget_host_->ImeConfirmComposition( 1390 renderWidgetHostView_->render_widget_host_->ImeConfirmComposition(
1382 UTF8ToUTF16([im_text UTF8String])); 1391 UTF8ToUTF16([im_text UTF8String]));
1383 } 1392 }
1384 renderWidgetHostView_->im_composing_ = false; 1393 renderWidgetHostView_->im_composing_ = false;
1385 } 1394 }
1386 1395
1387 @end 1396 @end
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/tab_contents/tab_contents_view_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698