OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/views/status_icons/status_icon_chromeos.h" | 5 #include "chrome/browser/ui/views/status_icons/status_icon_chromeos.h" |
6 | 6 |
7 #include "chrome/browser/chromeos/frame/browser_view.h" | 7 #include "chrome/browser/chromeos/frame/browser_view.h" |
8 #include "chrome/browser/chromeos/status/status_area_button.h" | 8 #include "chrome/browser/chromeos/status/status_area_button.h" |
9 #include "chrome/browser/profiles/profile_manager.h" | 9 #include "chrome/browser/profiles/profile_manager.h" |
10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
11 #include "chrome/browser/ui/browser_list.h" | 11 #include "chrome/browser/ui/browser_list.h" |
12 #include "chrome/common/chrome_notification_types.h" | 12 #include "chrome/common/chrome_notification_types.h" |
13 #include "content/public/browser/notification_service.h" | 13 #include "content/public/browser/notification_service.h" |
14 #include "ui/views/controls/button/menu_button_delegate.h" | 14 #include "ui/views/controls/button/menu_button_listener.h" |
15 #include "ui/views/controls/menu/menu_delegate.h" | 15 #include "ui/views/controls/menu/menu_delegate.h" |
16 #include "ui/views/controls/menu/menu_model_adapter.h" | 16 #include "ui/views/controls/menu/menu_model_adapter.h" |
17 #include "ui/views/controls/menu/menu_runner.h" | 17 #include "ui/views/controls/menu/menu_runner.h" |
18 | 18 |
19 class StatusIconChromeOS::NotificationTrayButton | 19 class StatusIconChromeOS::NotificationTrayButton |
20 : public StatusAreaButton, | 20 : public StatusAreaButton, |
21 public views::MenuDelegate, | 21 public views::MenuDelegate, |
22 public views::MenuButtonDelegate { | 22 public views::MenuButtonListener { |
23 public: | 23 public: |
24 NotificationTrayButton(StatusIconChromeOS* status_icon, | 24 NotificationTrayButton(StatusIconChromeOS* status_icon, |
25 StatusAreaButton::Delegate* delegate) | 25 StatusAreaButton::Delegate* delegate) |
26 : StatusAreaButton(delegate, this), | 26 : StatusAreaButton(delegate, this), |
27 status_icon_(status_icon) { | 27 status_icon_(status_icon) { |
28 } | 28 } |
29 virtual ~NotificationTrayButton() {} | 29 virtual ~NotificationTrayButton() {} |
30 | 30 |
31 void SetImage(const SkBitmap& image) { | 31 void SetImage(const SkBitmap& image) { |
32 SetIcon(image); | 32 SetIcon(image); |
33 SetVisible(true); | 33 SetVisible(true); |
34 PreferredSizeChanged(); | 34 PreferredSizeChanged(); |
35 SchedulePaint(); | 35 SchedulePaint(); |
36 } | 36 } |
37 | 37 |
38 void Hide() { | 38 void Hide() { |
39 SetVisible(false); | 39 SetVisible(false); |
40 SchedulePaint(); | 40 SchedulePaint(); |
41 } | 41 } |
42 | 42 |
43 // views::MenuButton overrides. | 43 // Overridden from views::MenuButton: |
44 virtual bool Activate() OVERRIDE { | 44 virtual bool Activate() OVERRIDE { |
45 // All tray buttons are removed on status icon destruction. | 45 // All tray buttons are removed on status icon destruction. |
46 // This should never be called afterwards. | 46 // This should never be called afterwards. |
47 bool retval = views::MenuButton::Activate(); | 47 bool retval = views::MenuButton::Activate(); |
48 status_icon_->Clicked(); | 48 status_icon_->Clicked(); |
49 return retval; | 49 return retval; |
50 } | 50 } |
51 | 51 |
52 // views::MenuButtonDelegate implementation. | 52 // Overridden from views::MenuButtonListener: |
53 virtual void RunMenu(views::View* source, const gfx::Point& pt) | 53 virtual void OnMenuButtonClicked(views::View* source, |
54 OVERRIDE { | 54 const gfx::Point& point) OVERRIDE { |
55 views::MenuRunner* menu_runner = status_icon_->menu_runner(); | 55 views::MenuRunner* menu_runner = status_icon_->menu_runner(); |
56 if (!menu_runner) | 56 if (!menu_runner) |
57 return; | 57 return; |
58 | 58 |
59 gfx::Point screen_location; | 59 gfx::Point screen_location; |
60 views::View::ConvertPointToScreen(source, &screen_location); | 60 views::View::ConvertPointToScreen(source, &screen_location); |
61 gfx::Rect bounds(screen_location, source->size()); | 61 gfx::Rect bounds(screen_location, source->size()); |
62 if (menu_runner->RunMenuAt( | 62 if (menu_runner->RunMenuAt( |
63 source->GetWidget()->GetTopLevelWidget(), this, bounds, | 63 source->GetWidget()->GetTopLevelWidget(), this, bounds, |
64 views::MenuItemView::TOPRIGHT, views::MenuRunner::HAS_MNEMONICS) == | 64 views::MenuItemView::TOPRIGHT, views::MenuRunner::HAS_MNEMONICS) == |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 | 194 |
195 // Create context menu with the new contents. | 195 // Create context menu with the new contents. |
196 views::MenuModelAdapter* adapter = new views::MenuModelAdapter(menu); | 196 views::MenuModelAdapter* adapter = new views::MenuModelAdapter(menu); |
197 context_menu_adapter_.reset(adapter); | 197 context_menu_adapter_.reset(adapter); |
198 views::MenuItemView* menu_view = new views::MenuItemView(adapter); | 198 views::MenuItemView* menu_view = new views::MenuItemView(adapter); |
199 adapter->BuildMenu(menu_view); | 199 adapter->BuildMenu(menu_view); |
200 | 200 |
201 // menu_runner_ takes ownership of menu. | 201 // menu_runner_ takes ownership of menu. |
202 menu_runner_.reset(new views::MenuRunner(menu_view)); | 202 menu_runner_.reset(new views::MenuRunner(menu_view)); |
203 } | 203 } |
OLD | NEW |