views: Show menubar's accelerator when "Alt" is pressed.

This commit is contained in:
Cheng Zhao 2014-08-18 14:12:12 +08:00
parent 965f2b1b6b
commit e9536508a5
5 changed files with 30 additions and 1 deletions

View file

@ -572,6 +572,11 @@ void NativeWindowViews::HandleKeyboardEvent(
const content::NativeWebKeyboardEvent& event) {
keyboard_event_handler_->HandleKeyboardEvent(event, GetFocusManager());
if (menu_bar_ && menu_bar_visible_ && IsAltKey(event)) {
menu_bar_->SetAcceleratorVisibility(
event.type == blink::WebInputEvent::RawKeyDown);
}
if (!menu_bar_autohide_)
return;
@ -627,6 +632,10 @@ void NativeWindowViews::SetMenuBarVisibility(bool visible) {
if (!menu_bar_)
return;
// Always show the accelerator when the auto-hide menu bar shows.
if (menu_bar_autohide_)
menu_bar_->SetAcceleratorVisibility(visible);
menu_bar_visible_ = visible;
if (visible) {
DCHECK_EQ(child_count(), 1);

View file

@ -85,6 +85,11 @@ void MenuBar::SetMenu(ui::MenuModel* model) {
}
}
void MenuBar::SetAcceleratorVisibility(bool visible) {
for (int i = 0; i < child_count(); ++i)
static_cast<SubmenuButton*>(child_at(i))->SetAcceleratorVisibility(visible);
}
int MenuBar::GetItemCount() const {
return menu_model_->GetItemCount();
}

View file

@ -31,6 +31,9 @@ class MenuBar : public views::View,
// Replaces current menu with a new one.
void SetMenu(ui::MenuModel* menu_model);
// Shows underline under accelerators.
void SetAcceleratorVisibility(bool visible);
// Returns there are how many items in the root menu.
int GetItemCount() const;

View file

@ -27,6 +27,7 @@ SubmenuButton::SubmenuButton(views::ButtonListener* listener,
views::MenuButtonListener* menu_button_listener)
: views::MenuButton(listener, FilterAccecelator(title),
menu_button_listener, false),
show_underline_(false),
underline_start_(-1),
underline_end_(-1),
text_width_(0),
@ -40,6 +41,14 @@ SubmenuButton::SubmenuButton(views::ButtonListener* listener,
SubmenuButton::~SubmenuButton() {
}
void SubmenuButton::SetAcceleratorVisibility(bool visible) {
if (visible == show_underline_)
return;
show_underline_ = visible;
SchedulePaint();
}
void SubmenuButton::SetUnderlineColor(SkColor color) {
underline_color_ = color;
}
@ -47,7 +56,7 @@ void SubmenuButton::SetUnderlineColor(SkColor color) {
void SubmenuButton::OnPaint(gfx::Canvas* canvas) {
views::MenuButton::OnPaint(canvas);
if (underline_start_ != underline_end_) {
if (show_underline_ && (underline_start_ != underline_end_)) {
int padding = (width() - text_width_) / 2;
int underline_height = (height() + text_height_) / 2 - 2;
canvas->DrawLine(gfx::Point(underline_start_ + padding, underline_height),

View file

@ -17,6 +17,7 @@ class SubmenuButton : public views::MenuButton {
views::MenuButtonListener* menu_button_listener);
virtual ~SubmenuButton();
void SetAcceleratorVisibility(bool visible);
void SetUnderlineColor(SkColor color);
// views::MenuButton:
@ -28,6 +29,8 @@ class SubmenuButton : public views::MenuButton {
void GetCharacterPosition(
const base::string16& text, int index, int* pos);
bool show_underline_;
int underline_start_;
int underline_end_;
int text_width_;