Index: chrome/browser/gtk/browser_toolbar_view_gtk.cc |
diff --git a/chrome/browser/gtk/browser_toolbar_view_gtk.cc b/chrome/browser/gtk/browser_toolbar_view_gtk.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..00c28d7868f0fbdfe9bfe52ced7096aec21dd52c |
--- /dev/null |
+++ b/chrome/browser/gtk/browser_toolbar_view_gtk.cc |
@@ -0,0 +1,144 @@ |
+// Copyright (c) 2009 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/browser_toolbar_view_gtk.h" |
+ |
+#include "base/logging.h" |
+#include "chrome/app/chrome_dll_resource.h" |
+#include "chrome/browser/browser.h" |
+#include "chrome/common/l10n_util.h" |
+ |
+#include "chromium_strings.h" |
+#include "generated_resources.h" |
+ |
+BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser) |
+ : toolbar_(NULL), |
+ back_(NULL), |
+ forward_(NULL), |
+ reload_(NULL), |
+ home_(NULL), |
+ star_(NULL), |
+ model_(browser->toolbar_model()), |
+ browser_(browser), |
+ profile_(NULL) { |
+ browser_->command_updater()->AddCommandObserver(IDC_BACK, this); |
+ browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this); |
+ browser_->command_updater()->AddCommandObserver(IDC_RELOAD, this); |
+ browser_->command_updater()->AddCommandObserver(IDC_HOME, this); |
+ browser_->command_updater()->AddCommandObserver(IDC_STAR, this); |
+ |
+ // TODO(port): Port BackForwardMenuModel |
+ // back_menu_model_.reset(new BackForwardMenuModel( |
+ // browser, BackForwardMenuModel::BACKWARD_MENU_DELEGATE)); |
+ // forward_menu_model_.reset(new BackForwardMenuModel( |
+ // browser, BackForwardMenuModel::FORWARD_MENU_DELEGATE)); |
+} |
+ |
+BrowserToolbarGtk::~BrowserToolbarGtk() { |
+} |
+ |
+void BrowserToolbarGtk::Init(Profile* profile) { |
+ toolbar_ = gtk_hbox_new(FALSE, 0); |
+ gtk_container_set_border_width(GTK_CONTAINER(toolbar_), 6); |
+ |
+ toolbar_tooltips_ = gtk_tooltips_new(); |
+ |
+ back_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_BACK)); |
+ forward_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_FORWARD)); |
+ reload_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_RELOAD)); |
+ home_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_HOME)); |
+ star_ = BuildToolbarButton(l10n_util::GetString(IDS_TOOLTIP_STAR)); |
+ |
+ gtk_box_pack_start(GTK_BOX(toolbar_), gtk_label_new(" "), FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(toolbar_), gtk_entry_new(), TRUE, TRUE, 0); |
+ |
+ go_ = BuildToolbarButton(L""); |
+ page_menu_ = BuildToolbarButton(l10n_util::GetString(IDS_PAGEMENU_TOOLTIP)); |
+ |
+ // TODO(port): Need to get l10n_util::GetStringF working under linux to get |
+ // the correct string here. |
+ app_menu_ = BuildToolbarButton(l10n_util::GetString(IDS_APPMENU_TOOLTIP)); |
+ |
+ // TODO(erg): wchar_t mismatch on linux. Fix later. |
+ // show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this); |
+ |
+ SetProfile(profile); |
+} |
+ |
+void BrowserToolbarGtk::AddToolbarToBox(GtkWidget* box) { |
+ gtk_box_pack_start(GTK_BOX(box), toolbar_, FALSE, FALSE, 0); |
+} |
+ |
+void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) { |
+ GtkWidget* widget = NULL; |
+ switch (id) { |
+ case IDC_BACK: |
+ widget = back_; |
+ break; |
+ case IDC_FORWARD: |
+ widget = forward_; |
+ break; |
+ case IDC_RELOAD: |
+ widget = reload_; |
+ break; |
+ case IDC_HOME: |
+ widget = home_; |
+ break; |
+ case IDC_STAR: |
+ widget = star_; |
+ break; |
+ } |
+ if (widget) |
+ gtk_widget_set_sensitive(widget, enabled); |
+} |
+ |
+void BrowserToolbarGtk::SetProfile(Profile* profile) { |
+ if (profile == profile_) |
+ return; |
+ |
+ profile_ = profile; |
+ // TODO(erg): location_bar_ is a normal gtk text box right now. Change this |
+ // when we get omnibox support. |
+ // location_bar_->SetProfile(profile); |
+} |
+ |
+// TODO(port): This needs to deal with our styled pixmaps. |
+GtkWidget* BrowserToolbarGtk::BuildToolbarButton( |
+ const std::wstring& localized_tooltip) { |
+ GtkWidget* b = gtk_button_new(); |
+ gtk_widget_set_size_request(b, 29, 29); |
+ |
+ // TODO(erg): Mismatch between wstring and string. |
+ // gtk_tooltips_set_tip(GTK_TOOLTIPS(toolbar_tooltips_), |
+ // GTK_WIDGET(back_), |
+ // localized_tooltip, localized_tooltip); |
+ g_signal_connect(G_OBJECT(b), "clicked", |
+ G_CALLBACK(ButtonClickCallback), this); |
+ gtk_box_pack_start(GTK_BOX(toolbar_), b, FALSE, FALSE, 0); |
+ |
+ // TODO(erg): Change this when pixmap loading is working. |
+ return b; |
+} |
+ |
+/* static */ |
+void BrowserToolbarGtk::ButtonClickCallback(GtkWidget* button, |
+ BrowserToolbarGtk* toolbar) { |
+ int tag = -1; |
+ if (button == toolbar->back_) |
+ tag = IDC_BACK; |
+ else if (button == toolbar->forward_) |
+ tag = IDC_FORWARD; |
+ else if (button == toolbar->reload_) |
+ tag = IDC_RELOAD; |
+ else if (button == toolbar->home_) |
+ tag = IDC_HOME; |
+ else if (button == toolbar->star_) |
+ tag = IDC_STAR; |
+ |
+ if (tag != -1) { |
+ toolbar->browser_->ExecuteCommand(tag); |
+ } else { |
+ // TODO(erg): The menu buttons are special; they need to spawn menus. |
+ } |
+} |