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 3// found in the LICENSE file. 4 5#include "ui/base/accelerators/platform_accelerator_gtk.h" 6 7#include "ui/base/events/event_conversion_gtk.h" 8#include "ui/base/keycodes/keyboard_code_conversion_gtk.h" 9 10namespace ui { 11 12PlatformAcceleratorGtk::PlatformAcceleratorGtk() 13 : gdk_key_code_(0), 14 gdk_modifier_(static_cast<GdkModifierType>(0)) { 15} 16 17PlatformAcceleratorGtk::PlatformAcceleratorGtk(guint gdk_key_code, 18 GdkModifierType gdk_modifier) 19 : gdk_key_code_(gdk_key_code), 20 gdk_modifier_(gdk_modifier) { 21} 22 23PlatformAcceleratorGtk::~PlatformAcceleratorGtk() { 24} 25 26scoped_ptr<PlatformAccelerator> PlatformAcceleratorGtk::CreateCopy() const { 27 scoped_ptr<PlatformAcceleratorGtk> copy(new PlatformAcceleratorGtk); 28 copy->gdk_key_code_ = gdk_key_code_; 29 copy->gdk_modifier_ = gdk_modifier_; 30 return scoped_ptr<PlatformAccelerator>(copy.release()); 31} 32 33bool PlatformAcceleratorGtk::Equals(const PlatformAccelerator& rhs) const { 34 const PlatformAcceleratorGtk& rhs_gtk = 35 static_cast<const PlatformAcceleratorGtk&>(rhs); 36 return gdk_key_code_ == rhs_gtk.gdk_key_code_ && 37 gdk_modifier_ == rhs_gtk.gdk_modifier_; 38} 39 40Accelerator AcceleratorForGdkKeyCodeAndModifier(guint gdk_key_code, 41 GdkModifierType gdk_modifier) { 42 ui::Accelerator accelerator(ui::WindowsKeyCodeForGdkKeyCode(gdk_key_code), 43 ui::GdkModifierToEventFlag(gdk_modifier)); 44 scoped_ptr<PlatformAccelerator> platform_accelerator( 45 new PlatformAcceleratorGtk(gdk_key_code, gdk_modifier)); 46 accelerator.set_platform_accelerator(platform_accelerator.Pass()); 47 return accelerator; 48} 49 50guint GetGdkKeyCodeForAccelerator(const Accelerator& accelerator) { 51 if (accelerator.platform_accelerator()) { 52 return static_cast<const PlatformAcceleratorGtk*>( 53 accelerator.platform_accelerator())->gdk_key_code(); 54 } 55 // The second parameter is false because accelerator keys are expressed in 56 // terms of the non-shift-modified key. 57 return GdkKeyCodeForWindowsKeyCode(accelerator.key_code(), false); 58} 59 60GdkModifierType GetGdkModifierForAccelerator(const Accelerator& accelerator) { 61 if (accelerator.platform_accelerator()) { 62 return static_cast<const PlatformAcceleratorGtk*>( 63 accelerator.platform_accelerator())->gdk_modifier(); 64 } 65 return EventFlagToGdkModifier(accelerator.modifiers()); 66} 67 68} // namespace ui 69