bubble_icon_view.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1// Copyright 2013 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 "chrome/browser/ui/views/location_bar/bubble_icon_view.h"
6
7#include "chrome/browser/command_updater.h"
8#include "ui/accessibility/ax_view_state.h"
9#include "ui/events/event.h"
10
11BubbleIconView::BubbleIconView(CommandUpdater* command_updater, int command_id)
12    : command_updater_(command_updater),
13      command_id_(command_id),
14      suppress_mouse_released_action_(false) {
15  SetAccessibilityFocusable(true);
16}
17
18BubbleIconView::~BubbleIconView() {
19}
20
21void BubbleIconView::GetAccessibleState(ui::AXViewState* state) {
22  views::ImageView::GetAccessibleState(state);
23  state->role = ui::AX_ROLE_BUTTON;
24}
25
26bool BubbleIconView::GetTooltipText(const gfx::Point& p,
27                                    base::string16* tooltip) const {
28  if (IsBubbleShowing())
29    return false;
30
31  return views::ImageView::GetTooltipText(p, tooltip);
32}
33
34bool BubbleIconView::OnMousePressed(const ui::MouseEvent& event) {
35  // If the bubble is showing then don't reshow it when the mouse is released.
36  suppress_mouse_released_action_ = IsBubbleShowing();
37
38  // We want to show the bubble on mouse release; that is the standard behavior
39  // for buttons.
40  return true;
41}
42
43void BubbleIconView::OnMouseReleased(const ui::MouseEvent& event) {
44  // If this is the second click on this view then the bubble was showing on the
45  // mouse pressed event and is hidden now. Prevent the bubble from reshowing by
46  // doing nothing here.
47  if (suppress_mouse_released_action_) {
48    suppress_mouse_released_action_ = false;
49    return;
50  }
51
52  if (event.IsOnlyLeftMouseButton() && HitTestPoint(event.location())) {
53    OnExecuting(EXECUTE_SOURCE_MOUSE);
54    command_updater_->ExecuteCommand(command_id_);
55  }
56}
57
58bool BubbleIconView::OnKeyPressed(const ui::KeyEvent& event) {
59  if (event.key_code() == ui::VKEY_SPACE ||
60      event.key_code() == ui::VKEY_RETURN) {
61    OnExecuting(EXECUTE_SOURCE_KEYBOARD);
62    command_updater_->ExecuteCommand(command_id_);
63    return true;
64  }
65  return false;
66}
67
68void BubbleIconView::OnGestureEvent(ui::GestureEvent* event) {
69  if (event->type() == ui::ET_GESTURE_TAP) {
70    OnExecuting(EXECUTE_SOURCE_GESTURE);
71    command_updater_->ExecuteCommand(command_id_);
72    event->SetHandled();
73  }
74}
75