Home | History | Annotate | Download | only in gtk
      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