blob: 7e192e1dcbaa445331e2fe8792a236ff1178a1c5 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/status_icons/status_icon_linux_wrapper.h"
#include "ui/views/linux_ui/linux_ui.h"
StatusIconLinuxWrapper::StatusIconLinuxWrapper(
views::StatusIconLinux* status_icon)
: menu_model_(NULL) {
status_icon_.reset(status_icon);
status_icon_->set_delegate(this);
}
StatusIconLinuxWrapper::~StatusIconLinuxWrapper() {
if (menu_model_)
menu_model_->RemoveObserver(this);
}
void StatusIconLinuxWrapper::SetImage(const gfx::ImageSkia& image) {
status_icon_->SetImage(image);
}
void StatusIconLinuxWrapper::SetPressedImage(const gfx::ImageSkia& image) {
status_icon_->SetPressedImage(image);
}
void StatusIconLinuxWrapper::SetToolTip(const base::string16& tool_tip) {
status_icon_->SetToolTip(tool_tip);
}
void StatusIconLinuxWrapper::DisplayBalloon(const gfx::ImageSkia& icon,
const base::string16& title,
const base::string16& contents) {
notification_.DisplayBalloon(icon, title, contents);
}
void StatusIconLinuxWrapper::OnClick() {
DispatchClickEvent();
}
bool StatusIconLinuxWrapper::HasClickAction() {
return HasObservers();
}
void StatusIconLinuxWrapper::OnMenuStateChanged() {
status_icon_->RefreshPlatformContextMenu();
}
StatusIconLinuxWrapper* StatusIconLinuxWrapper::CreateWrappedStatusIcon(
const gfx::ImageSkia& image,
const base::string16& tool_tip) {
const views::LinuxUI* linux_ui = views::LinuxUI::instance();
if (linux_ui) {
scoped_ptr<views::StatusIconLinux> status_icon =
linux_ui->CreateLinuxStatusIcon(image, tool_tip);
if (status_icon.get())
return new StatusIconLinuxWrapper(status_icon.release());
}
return NULL;
}
void StatusIconLinuxWrapper::UpdatePlatformContextMenu(
StatusIconMenuModel* model) {
// If a menu already exists, remove ourself from its oberver list.
if (menu_model_)
menu_model_->RemoveObserver(this);
status_icon_->UpdatePlatformContextMenu(model);
menu_model_ = model;
if (model)
model->AddObserver(this);
}