summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/gtk/status_icons/status_icon_gtk.cc44
-rw-r--r--chrome/browser/gtk/status_icons/status_icon_gtk.h34
-rw-r--r--chrome/browser/gtk/status_icons/status_tray_gtk.cc21
-rw-r--r--chrome/browser/gtk/status_icons/status_tray_gtk.h23
-rw-r--r--chrome/browser/gtk/status_icons/status_tray_gtk_unittest.cc50
-rw-r--r--chrome/browser/status_icons/status_tray_manager.cc2
-rwxr-xr-xchrome/chrome_browser.gypi4
-rw-r--r--chrome/chrome_tests.gypi1
8 files changed, 178 insertions, 1 deletions
diff --git a/chrome/browser/gtk/status_icons/status_icon_gtk.cc b/chrome/browser/gtk/status_icons/status_icon_gtk.cc
new file mode 100644
index 0000000..c42b761
--- /dev/null
+++ b/chrome/browser/gtk/status_icons/status_icon_gtk.cc
@@ -0,0 +1,44 @@
+// Copyright (c) 2010 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/gtk/status_icons/status_icon_gtk.h"
+
+#include "base/string16.h"
+#include "base/logging.h"
+#include "base/utf_string_conversions.h"
+#include "gfx/gtk_util.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+StatusIconGtk::StatusIconGtk() {
+ icon_ = gtk_status_icon_new();
+ gtk_status_icon_set_visible(icon_, TRUE);
+
+ g_signal_connect(icon_, "activate",
+ G_CALLBACK(OnClick), this);
+}
+
+StatusIconGtk::~StatusIconGtk() {
+ g_object_unref(icon_);
+}
+
+void StatusIconGtk::SetImage(const SkBitmap& image) {
+ if (image.isNull())
+ return;
+
+ GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&image);
+ gtk_status_icon_set_from_pixbuf(icon_, pixbuf);
+}
+
+void StatusIconGtk::SetPressedImage(const SkBitmap& image) {
+ // Ignore pressed images, since the standard on Linux is to not highlight
+ // pressed status icons.
+}
+
+void StatusIconGtk::SetToolTip(const string16& tool_tip) {
+ gtk_status_icon_set_tooltip(icon_, UTF16ToUTF8(tool_tip).c_str());
+}
+
+void StatusIconGtk::OnClick(GtkWidget* widget, StatusIconGtk* status_icon) {
+ status_icon->DispatchClickEvent();
+}
diff --git a/chrome/browser/gtk/status_icons/status_icon_gtk.h b/chrome/browser/gtk/status_icons/status_icon_gtk.h
new file mode 100644
index 0000000..7ce1df2
--- /dev/null
+++ b/chrome/browser/gtk/status_icons/status_icon_gtk.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_ICON_GTK_H_
+#define CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_ICON_GTK_H_
+
+#include <gtk/gtk.h>
+
+#include "chrome/browser/status_icons/status_icon.h"
+
+class SkBitmap;
+
+class StatusIconGtk : public StatusIcon {
+ public:
+ StatusIconGtk();
+ virtual ~StatusIconGtk();
+
+ // Overridden from StatusIcon:
+ virtual void SetImage(const SkBitmap& image);
+ virtual void SetPressedImage(const SkBitmap& image);
+ virtual void SetToolTip(const string16& tool_tip);
+
+ // Exposed for testing.
+ static void OnClick(GtkWidget* widget, StatusIconGtk* status_icon);
+
+ private:
+ // The currently-displayed icon for the window.
+ GtkStatusIcon* icon_;
+
+ DISALLOW_COPY_AND_ASSIGN(StatusIconGtk);
+};
+
+#endif // CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_ICON_GTK_H_
diff --git a/chrome/browser/gtk/status_icons/status_tray_gtk.cc b/chrome/browser/gtk/status_icons/status_tray_gtk.cc
new file mode 100644
index 0000000..6b2764e
--- /dev/null
+++ b/chrome/browser/gtk/status_icons/status_tray_gtk.cc
@@ -0,0 +1,21 @@
+// Copyright (c) 2010 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/gtk/status_icons/status_tray_gtk.h"
+
+#include "chrome/browser/gtk/status_icons/status_icon_gtk.h"
+
+StatusTrayGtk::StatusTrayGtk() {
+}
+
+StatusTrayGtk::~StatusTrayGtk() {
+}
+
+StatusIcon* StatusTrayGtk::CreateStatusIcon() {
+ return new StatusIconGtk();
+}
+
+StatusTray* StatusTray::Create() {
+ return new StatusTrayGtk();
+}
diff --git a/chrome/browser/gtk/status_icons/status_tray_gtk.h b/chrome/browser/gtk/status_icons/status_tray_gtk.h
new file mode 100644
index 0000000..a41e5df0
--- /dev/null
+++ b/chrome/browser/gtk/status_icons/status_tray_gtk.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_TRAY_GTK_H_
+#define CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_TRAY_GTK_H_
+
+#include "chrome/browser/status_icons/status_tray.h"
+
+class StatusTrayGtk : public StatusTray {
+ public:
+ StatusTrayGtk();
+ ~StatusTrayGtk();
+
+ protected:
+ // Overriden from StatusTray:
+ virtual StatusIcon* CreateStatusIcon();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(StatusTrayGtk);
+};
+
+#endif // CHROME_BROWSER_GTK_STATUS_ICONS_STATUS_TRAY_GTK_H_
diff --git a/chrome/browser/gtk/status_icons/status_tray_gtk_unittest.cc b/chrome/browser/gtk/status_icons/status_tray_gtk_unittest.cc
new file mode 100644
index 0000000..58b2616
--- /dev/null
+++ b/chrome/browser/gtk/status_icons/status_tray_gtk_unittest.cc
@@ -0,0 +1,50 @@
+// Copyright (c) 2010 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 "app/resource_bundle.h"
+#include "base/string_util.h"
+#include "chrome/browser/gtk/status_icons/status_icon_gtk.h"
+#include "chrome/browser/gtk/status_icons/status_tray_gtk.h"
+#include "grit/browser_resources.h"
+#include "grit/theme_resources.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class MockStatusIconObserver : public StatusIcon::Observer {
+ public:
+ MOCK_METHOD0(OnClicked, void());
+};
+
+TEST(StatusTrayGtkTest, CreateTray) {
+ // Just tests creation/destruction.
+ StatusTrayGtk tray;
+}
+
+TEST(StatusTrayGtkTest, CreateIcon) {
+ // Create an icon, set the images and tooltip, then shut it down.
+ StatusTrayGtk tray;
+ StatusIcon* icon = tray.GetStatusIcon(ASCIIToUTF16("test"));
+ SkBitmap* bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed(
+ IDR_STATUS_TRAY_ICON);
+ icon->SetImage(*bitmap);
+ icon->SetPressedImage(*bitmap);
+ icon->SetToolTip(ASCIIToUTF16("tool tip"));
+}
+
+TEST(StatusTrayGtkTest, ClickOnIcon) {
+ // Create an icon, send a fake click event, make sure observer is called.
+ StatusTrayGtk tray;
+ StatusIconGtk* icon = static_cast<StatusIconGtk*>(
+ tray.GetStatusIcon(ASCIIToUTF16("test")));
+ MockStatusIconObserver observer;
+ icon->AddObserver(&observer);
+ EXPECT_CALL(observer, OnClicked());
+ // Mimic a click.
+ icon->OnClick(NULL, icon);
+ icon->RemoveObserver(&observer);
+}
+
+} // namespace
diff --git a/chrome/browser/status_icons/status_tray_manager.cc b/chrome/browser/status_icons/status_tray_manager.cc
index b5465c3..4040a51 100644
--- a/chrome/browser/status_icons/status_tray_manager.cc
+++ b/chrome/browser/status_icons/status_tray_manager.cc
@@ -23,7 +23,7 @@ StatusTrayManager::~StatusTrayManager() {
}
void StatusTrayManager::Init(Profile* profile) {
-#if !defined(OS_LINUX)
+#if !defined(OS_CHROMEOS)
DCHECK(profile);
profile_ = profile;
status_tray_.reset(StatusTray::Create());
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 78e26c1..5cf5560 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1332,6 +1332,10 @@
'browser/gtk/standard_menus.h',
'browser/gtk/status_bubble_gtk.cc',
'browser/gtk/status_bubble_gtk.h',
+ 'browser/gtk/status_icons/status_icon_gtk.h',
+ 'browser/gtk/status_icons/status_icon_gtk.cc',
+ 'browser/gtk/status_icons/status_tray_gtk.h',
+ 'browser/gtk/status_icons/status_tray_gtk.cc',
'browser/gtk/tab_contents_container_gtk.cc',
'browser/gtk/tab_contents_container_gtk.h',
'browser/gtk/tab_contents_drag_source.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 6b7228e..e4cfb40 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -771,6 +771,7 @@
'browser/gtk/keyword_editor_view_unittest.cc',
'browser/gtk/options/cookies_view_unittest.cc',
'browser/gtk/options/languages_page_gtk_unittest.cc',
+ 'browser/gtk/status_icons/status_tray_gtk_unittest.cc',
'browser/gtk/tabs/tab_renderer_gtk_unittest.cc',
'browser/history/expire_history_backend_unittest.cc',
'browser/history/history_backend_unittest.cc',