// Copyright 2014 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 "ui/wm/core/accelerator_filter.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/accelerators/accelerator_history.h" #include "ui/events/event.h" #include "ui/wm/core/accelerator_delegate.h" namespace wm { namespace { // Returns true if |key_code| is a key usually handled directly by the shell. bool IsSystemKey(ui::KeyboardCode key_code) { #if defined(OS_CHROMEOS) switch (key_code) { case ui::VKEY_MEDIA_LAUNCH_APP2: // Fullscreen button. case ui::VKEY_MEDIA_LAUNCH_APP1: // Overview button. case ui::VKEY_BRIGHTNESS_DOWN: case ui::VKEY_BRIGHTNESS_UP: case ui::VKEY_KBD_BRIGHTNESS_DOWN: case ui::VKEY_KBD_BRIGHTNESS_UP: case ui::VKEY_VOLUME_MUTE: case ui::VKEY_VOLUME_DOWN: case ui::VKEY_VOLUME_UP: return true; default: return false; } #endif // defined(OS_CHROMEOS) return false; } } // namespace //////////////////////////////////////////////////////////////////////////////// // AcceleratorFilter, public: AcceleratorFilter::AcceleratorFilter( scoped_ptr delegate, ui::AcceleratorHistory* accelerator_history) : delegate_(delegate.Pass()), accelerator_history_(accelerator_history) { DCHECK(accelerator_history); } AcceleratorFilter::~AcceleratorFilter() { } //////////////////////////////////////////////////////////////////////////////// // AcceleratorFilter, EventFilter implementation: void AcceleratorFilter::OnKeyEvent(ui::KeyEvent* event) { const ui::EventType type = event->type(); DCHECK(event->target()); if ((type != ui::ET_KEY_PRESSED && type != ui::ET_KEY_RELEASED) || event->is_char() || !event->target()) { return; } ui::Accelerator accelerator(*event); accelerator_history_->StoreCurrentAccelerator(accelerator); AcceleratorDelegate::KeyType key_type = IsSystemKey(event->key_code()) ? AcceleratorDelegate::KEY_TYPE_SYSTEM : AcceleratorDelegate::KEY_TYPE_OTHER; if (delegate_->ProcessAccelerator(*event, accelerator, key_type)) event->StopPropagation(); } } // namespace wm