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 16 OverflowButton::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 25 OverflowButton::~OverflowButton() { 26 widget_.Destroy(); 27 } 28 29 void 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