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/status_icons/status_icon_linux_wrapper.h" 6 7#include "ui/views/linux_ui/linux_ui.h" 8 9StatusIconLinuxWrapper::StatusIconLinuxWrapper( 10 views::StatusIconLinux* status_icon) 11 : menu_model_(NULL) { 12 status_icon_.reset(status_icon); 13 status_icon_->set_delegate(this); 14} 15 16StatusIconLinuxWrapper::~StatusIconLinuxWrapper() { 17 if (menu_model_) 18 menu_model_->RemoveObserver(this); 19} 20 21void StatusIconLinuxWrapper::SetImage(const gfx::ImageSkia& image) { 22 status_icon_->SetImage(image); 23} 24 25void StatusIconLinuxWrapper::SetToolTip(const base::string16& tool_tip) { 26 status_icon_->SetToolTip(tool_tip); 27} 28 29void StatusIconLinuxWrapper::DisplayBalloon(const gfx::ImageSkia& icon, 30 const base::string16& title, 31 const base::string16& contents) { 32 notification_.DisplayBalloon(icon, title, contents); 33} 34 35void StatusIconLinuxWrapper::OnClick() { 36 DispatchClickEvent(); 37} 38 39bool StatusIconLinuxWrapper::HasClickAction() { 40 return HasObservers(); 41} 42 43void StatusIconLinuxWrapper::OnMenuStateChanged() { 44 status_icon_->RefreshPlatformContextMenu(); 45} 46 47StatusIconLinuxWrapper* StatusIconLinuxWrapper::CreateWrappedStatusIcon( 48 const gfx::ImageSkia& image, 49 const base::string16& tool_tip) { 50 const views::LinuxUI* linux_ui = views::LinuxUI::instance(); 51 if (linux_ui) { 52 scoped_ptr<views::StatusIconLinux> status_icon = 53 linux_ui->CreateLinuxStatusIcon(image, tool_tip); 54 if (status_icon.get()) 55 return new StatusIconLinuxWrapper(status_icon.release()); 56 } 57 return NULL; 58} 59 60void StatusIconLinuxWrapper::UpdatePlatformContextMenu( 61 StatusIconMenuModel* model) { 62 // If a menu already exists, remove ourself from its oberver list. 63 if (menu_model_) 64 menu_model_->RemoveObserver(this); 65 66 status_icon_->UpdatePlatformContextMenu(model); 67 menu_model_ = model; 68 69 if (model) 70 model->AddObserver(this); 71} 72