Index: chrome/browser/status_icons/status_icon.h |
diff --git a/chrome/browser/status_icons/status_icon.h b/chrome/browser/status_icons/status_icon.h |
index 8245e123b5793e32684fb5b1c466f1075d2538d8..8f868b5c44aeaf9cd58fa9ecbec4461627be1fa1 100644 |
--- a/chrome/browser/status_icons/status_icon.h |
+++ b/chrome/browser/status_icons/status_icon.h |
@@ -7,14 +7,19 @@ |
#pragma once |
#include "base/observer_list.h" |
+#include "base/scoped_ptr.h" |
#include "base/string16.h" |
class SkBitmap; |
+namespace menus { |
+class MenuModel; |
+} |
+ |
class StatusIcon { |
public: |
- StatusIcon() {} |
- virtual ~StatusIcon() {} |
+ StatusIcon(); |
+ virtual ~StatusIcon(); |
// Sets the image associated with this status icon. |
virtual void SetImage(const SkBitmap& image) = 0; |
@@ -25,23 +30,45 @@ class StatusIcon { |
// Sets the hover text for this status icon. |
virtual void SetToolTip(const string16& tool_tip) = 0; |
+ // Set the context menu for this icon. The icon takes ownership of the passed |
+ // context menu. Passing NULL results in no menu at all. |
+ void SetContextMenu(menus::MenuModel* menu); |
+ |
class Observer { |
public: |
virtual ~Observer() {} |
- // Called when the user clicks on the system tray icon. |
+ // Called when the user clicks on the system tray icon. Clicks that result |
+ // in the context menu being displayed will not be passed to this observer |
+ // (i.e. if there's a context menu set on this status icon, and the user |
+ // right clicks on the icon to display the context menu, OnClicked will not |
+ // be called). |
virtual void OnClicked() = 0; |
}; |
- // Adds/Removes an observer for status bar events. |
+ // Adds/Removes an observer for clicks on the status icon. If an observer is |
+ // registered, then left clicks on the status icon will result in the observer |
+ // being called, otherwise, both left and right clicks will display the |
+ // context menu (if any). |
void AddObserver(Observer* observer); |
void RemoveObserver(Observer* observer); |
+ // Returns true if there are registered click observers. |
+ bool HasObservers(); |
+ |
// Dispatches a click event to the observers. |
void DispatchClickEvent(); |
+ protected: |
+ // Invoked after a call to SetContextMenu() to let the platform-specific |
+ // subclass update the native context menu based on the new model. If NULL is |
+ // passed, subclass should destroy the native context menu. |
+ virtual void ResetContextMenu(menus::MenuModel* model) = 0; |
+ |
private: |
ObserverList<Observer> observers_; |
+ // Context menu, if any. |
+ scoped_ptr<menus::MenuModel> context_menu_contents_; |
DISALLOW_COPY_AND_ASSIGN(StatusIcon); |
}; |