status_icon_linux_wrapper.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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::SetPressedImage(const gfx::ImageSkia& image) { 26 status_icon_->SetPressedImage(image); 27} 28 29void StatusIconLinuxWrapper::SetToolTip(const base::string16& tool_tip) { 30 status_icon_->SetToolTip(tool_tip); 31} 32 33void StatusIconLinuxWrapper::DisplayBalloon(const gfx::ImageSkia& icon, 34 const base::string16& title, 35 const base::string16& contents) { 36 notification_.DisplayBalloon(icon, title, contents); 37} 38 39void StatusIconLinuxWrapper::OnClick() { 40 DispatchClickEvent(); 41} 42 43bool StatusIconLinuxWrapper::HasClickAction() { 44 return HasObservers(); 45} 46 47void StatusIconLinuxWrapper::OnMenuStateChanged() { 48 status_icon_->RefreshPlatformContextMenu(); 49} 50 51StatusIconLinuxWrapper* StatusIconLinuxWrapper::CreateWrappedStatusIcon( 52 const gfx::ImageSkia& image, 53 const base::string16& tool_tip) { 54 const views::LinuxUI* linux_ui = views::LinuxUI::instance(); 55 if (linux_ui) { 56 scoped_ptr<views::StatusIconLinux> status_icon = 57 linux_ui->CreateLinuxStatusIcon(image, tool_tip); 58 if (status_icon.get()) 59 return new StatusIconLinuxWrapper(status_icon.release()); 60 } 61 return NULL; 62} 63 64void StatusIconLinuxWrapper::UpdatePlatformContextMenu( 65 StatusIconMenuModel* model) { 66 // If a menu already exists, remove ourself from its oberver list. 67 if (menu_model_) 68 menu_model_->RemoveObserver(this); 69 70 status_icon_->UpdatePlatformContextMenu(model); 71 menu_model_ = model; 72 73 if (model) 74 model->AddObserver(this); 75} 76