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 "chrome/browser/status_icons/status_icon.h" 6 7 #include "chrome/browser/status_icons/status_icon_observer.h" 8 #include "ui/base/models/menu_model.h" 9 10 StatusIcon::StatusIcon() { 11 } 12 13 StatusIcon::~StatusIcon() { 14 } 15 16 void StatusIcon::AddObserver(StatusIconObserver* observer) { 17 observers_.AddObserver(observer); 18 } 19 20 void StatusIcon::RemoveObserver(StatusIconObserver* observer) { 21 observers_.RemoveObserver(observer); 22 } 23 24 bool StatusIcon::HasObservers() const { 25 return observers_.size() > 0; 26 } 27 28 void StatusIcon::DispatchClickEvent() { 29 FOR_EACH_OBSERVER(StatusIconObserver, observers_, OnStatusIconClicked()); 30 } 31 32 #if defined(OS_WIN) 33 void StatusIcon::DispatchBalloonClickEvent() { 34 FOR_EACH_OBSERVER(StatusIconObserver, observers_, OnBalloonClicked()); 35 } 36 #endif 37 38 void StatusIcon::SetContextMenu(ui::MenuModel* menu) { 39 // The UI may been showing a menu for the current model, don't destroy it 40 // until we've notified the UI of the change. 41 scoped_ptr<ui::MenuModel> old_menu = context_menu_contents_.Pass(); 42 context_menu_contents_.reset(menu); 43 UpdatePlatformContextMenu(menu); 44 } 45