1// Copyright (c) 2011 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/gtk/overflow_button.h" 6 7#include <gtk/gtk.h> 8 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/ui/gtk/gtk_theme_service.h" 11#include "content/common/notification_service.h" 12#include "content/common/notification_type.h" 13#include "grit/theme_resources.h" 14#include "ui/base/resource/resource_bundle.h" 15 16OverflowButton::OverflowButton(Profile* profile) : profile_(profile) { 17 widget_.Own(GtkThemeService::GetFrom(profile)->BuildChromeButton()); 18 gtk_widget_set_no_show_all(widget_.get(), TRUE); 19 20 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, 21 NotificationService::AllSources()); 22 GtkThemeService::GetFrom(profile)->InitThemesFor(this); 23} 24 25OverflowButton::~OverflowButton() { 26 widget_.Destroy(); 27} 28 29void OverflowButton::Observe(NotificationType type, 30 const NotificationSource& source, 31 const NotificationDetails& details) { 32 GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(widget())); 33 if (former_child) 34 gtk_widget_destroy(former_child); 35 36 GtkWidget* new_child = 37 GtkThemeService::GetFrom(profile_)->UseGtkTheme() ? 38 gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE) : 39 gtk_image_new_from_pixbuf(ResourceBundle::GetSharedInstance(). 40 GetRTLEnabledPixbufNamed(IDR_BOOKMARK_BAR_CHEVRONS)); 41 42 gtk_container_add(GTK_CONTAINER(widget()), new_child); 43 gtk_widget_show(new_child); 44} 45