// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/ui/accelerator_utils.h" #import #include "chrome/browser/global_keyboard_shortcuts_mac.h" #include "chrome/browser/ui/cocoa/accelerators_cocoa.h" #include "ui/base/accelerators/accelerator.h" #import "ui/base/accelerators/platform_accelerator_cocoa.h" #import "ui/events/keycodes/keyboard_code_conversion_mac.h" namespace chrome { bool IsChromeAccelerator(const ui::Accelerator& accelerator, Profile* profile) { // The |accelerator| passed in contains a Windows key code but no platform // accelerator info. The Accelerator list is the opposite: It has accelerators // that have key_code() == VKEY_UNKNOWN but they contain a platform // accelerator. We find common ground by converting the passed in Windows key // code to a character and use that when comparing against the Accelerator // list. unichar shifted_character; ui::MacKeyCodeForWindowsKeyCode(accelerator.key_code(), 0, &shifted_character, nullptr); NSString* characters = [[[NSString alloc] initWithCharacters:&shifted_character length:1] autorelease]; NSUInteger modifiers = (accelerator.IsCtrlDown() ? NSControlKeyMask : 0) | (accelerator.IsCmdDown() ? NSCommandKeyMask : 0) | (accelerator.IsAltDown() ? NSAlternateKeyMask : 0) | (accelerator.IsShiftDown() ? NSShiftKeyMask : 0); NSEvent* event = [NSEvent keyEventWithType:NSKeyDown location:NSZeroPoint modifierFlags:modifiers timestamp:0 windowNumber:0 context:nil characters:characters charactersIgnoringModifiers:characters isARepeat:NO keyCode:accelerator.key_code()]; return CommandForKeyEvent(event) != -1; } ui::Accelerator GetPrimaryChromeAcceleratorForCommandId(int command_id) { const ui::Accelerator* accelerator = AcceleratorsCocoa::GetInstance()->GetAcceleratorForCommand(command_id); return accelerator ? *accelerator : ui::Accelerator(); } } // namespace chrome