1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/views/accelerator_table.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/accelerators/accelerator.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(USE_ASH) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/accelerators/accelerator_table.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // USE_ASH 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chrome { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool IsChromeAccelerator(const ui::Accelerator& accelerator, Profile* profile) { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(USE_ASH) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < ash::kAcceleratorDataLength; ++i) { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ash::AcceleratorData& accel_data = ash::kAcceleratorData[i]; 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (accel_data.keycode == accelerator.key_code() && 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) accel_data.modifiers == accelerator.modifiers()) { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<chrome::AcceleratorMapping> accelerators = 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::GetAcceleratorList(); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (std::vector<chrome::AcceleratorMapping>::const_iterator it = 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) accelerators.begin(); it != accelerators.end(); ++it) { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (it->keycode == accelerator.key_code() && 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) it->modifiers == accelerator.modifiers()) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return false; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ui::Accelerator GetPrimaryChromeAcceleratorForCommandId(int command_id) { 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::Accelerator accelerator; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // GetAshAcceleratorForCommandId with HOST_DESKTOP_TYPE_ASH is used so we can 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // find Ash accelerators if Ash is supported on this platform, even if it's 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // not currently in use. 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (GetStandardAcceleratorForCommandId(command_id, &accelerator) || 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetAshAcceleratorForCommandId(command_id, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HOST_DESKTOP_TYPE_ASH, 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &accelerator)) { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return accelerator; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<chrome::AcceleratorMapping> accelerators = 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::GetAcceleratorList(); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < accelerators.size(); ++i) { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (accelerators[i].command_id == command_id) { 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ui::Accelerator(accelerators[i].keycode, 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) accelerators[i].modifiers); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ui::Accelerator(); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chrome 64