• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
OverflowButton(Profile * profile)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 
~OverflowButton()25 OverflowButton::~OverflowButton() {
26   widget_.Destroy();
27 }
28 
Observe(NotificationType type,const NotificationSource & source,const NotificationDetails & details)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