diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/browser.scons | 7 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_main_gtk.cc (renamed from chrome/browser/browser_main_gtk.cc) | 0 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_toolbar_view_gtk.cc | 144 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_toolbar_view_gtk.h | 74 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_factory_gtk.cc (renamed from chrome/browser/browser_window_factory_gtk.cc) | 2 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.cc (renamed from chrome/browser/browser_window_gtk.cc) | 11 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.h (renamed from chrome/browser/browser_window_gtk.h) | 6 |
7 files changed, 238 insertions, 6 deletions
diff --git a/chrome/browser/browser.scons b/chrome/browser/browser.scons index af9df76..bb09aaa 100644 --- a/chrome/browser/browser.scons +++ b/chrome/browser/browser.scons @@ -800,9 +800,10 @@ if not env.Bit('windows'): if env.Bit('linux'): input_files.Extend([ - 'browser_main_gtk.cc', - 'browser_window_factory_gtk.cc', - 'browser_window_gtk.cc', + 'gtk/browser_main_gtk.cc', + 'gtk/browser_toolbar_view_gtk.cc', + 'gtk/browser_window_factory_gtk.cc', + 'gtk/browser_window_gtk.cc', 'renderer_host/render_widget_host_view_gtk.cc', 'tab_contents/web_contents_view_gtk.cc', ]) diff --git a/chrome/browser/browser_main_gtk.cc b/chrome/browser/gtk/browser_main_gtk.cc index b7e8360..b7e8360 100644 --- a/chrome/browser/browser_main_gtk.cc +++ b/chrome/browser/gtk/browser_main_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 0000000..00c28d7 --- /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. + } +} diff --git a/chrome/browser/gtk/browser_toolbar_view_gtk.h b/chrome/browser/gtk/browser_toolbar_view_gtk.h new file mode 100644 index 0000000..673bc10 --- /dev/null +++ b/chrome/browser/gtk/browser_toolbar_view_gtk.h @@ -0,0 +1,74 @@ +// 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. + +#ifndef CHROME_BROWSER_BROWSER_TOOLBAR_VIEW_GTK_H_ +#define CHROME_BROWSER_BROWSER_TOOLBAR_VIEW_GTK_H_ + +#include "chrome/browser/command_updater.h" +#include "chrome/common/pref_member.h" + +#include <gtk/gtk.h> + +class Browser; +class Profile; +class ToolbarModel; + +// View class that displays the GTK version of the toolbar and routes gtk +// events back to the Browser. +class BrowserToolbarGtk : public CommandUpdater::CommandObserver { + public: + explicit BrowserToolbarGtk(Browser* browser); + virtual ~BrowserToolbarGtk(); + + // Create the contents of the toolbar + void Init(Profile* profile); + + // Adds this GTK toolbar into a sizing box. + void AddToolbarToBox(GtkWidget* box); + + // Overridden from CommandUpdater::CommandObserver: + virtual void EnabledStateChangedForCommand(int id, bool enabled); + + void SetProfile(Profile* profile); + + private: + // Builds a GtkButton with all the properties set. + GtkWidget* BuildToolbarButton(const std::wstring& localized_tooltip); + + // Gtk callback for the "clicked" signal. + static void ButtonClickCallback(GtkWidget* button, + BrowserToolbarGtk* toolbar); + + // Gtk widgets. The toolbar is an hbox with each of the other pieces of the + // toolbar placed side by side. + GtkWidget* toolbar_; + + // Tooltip container for all GTK widgets in this class. + GtkTooltips* toolbar_tooltips_; + + // All the GTK buttons in the toolbar. + GtkWidget* back_; + GtkWidget* forward_; + GtkWidget* reload_; + GtkWidget* home_; + GtkWidget* star_; + GtkWidget* go_; + GtkWidget* page_menu_; + GtkWidget* app_menu_; + + // The model that contains the security level, text, icon to display... + ToolbarModel* model_; + + // TODO(port): Port BackForwardMenuModel + // scoped_ptr<BackForwardMenuModel> back_menu_model_; + // scoped_ptr<BackForwardMenuModel> forward_menu_model_; + + Browser* browser_; + Profile* profile_; + + // Controls whether or not a home button should be shown on the toolbar. + BooleanPrefMember show_home_button_; +}; + +#endif diff --git a/chrome/browser/browser_window_factory_gtk.cc b/chrome/browser/gtk/browser_window_factory_gtk.cc index 0d0ffb6..5367341 100644 --- a/chrome/browser/browser_window_factory_gtk.cc +++ b/chrome/browser/gtk/browser_window_factory_gtk.cc @@ -4,7 +4,7 @@ #include "chrome/browser/browser_window.h" -#include "chrome/browser/browser_window_gtk.h" +#include "chrome/browser/gtk/browser_window_gtk.h" BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { return new BrowserWindowGtk(browser); diff --git a/chrome/browser/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc index 3cbb55d..8ec0f44 100644 --- a/chrome/browser/browser_window_gtk.cc +++ b/chrome/browser/gtk/browser_window_gtk.cc @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/browser_window_gtk.h" +#include "chrome/browser/gtk/browser_window_gtk.h" #include "base/logging.h" #include "chrome/browser/browser.h" +#include "chrome/browser/gtk/browser_toolbar_view_gtk.h" namespace { @@ -58,6 +59,14 @@ void BrowserWindowGtk::Init() { g_signal_connect(G_OBJECT(window_), "window-state-event", G_CALLBACK(MainWindowStateChanged), this); bounds_ = GetInitialWindowBounds(window_); + + GtkWidget* vbox = gtk_vbox_new(FALSE, 0); + + toolbar_.reset(new BrowserToolbarGtk(browser_.get())); + toolbar_->Init(browser_->profile()); + toolbar_->AddToolbarToBox(vbox); + + gtk_container_add(GTK_CONTAINER(window_), vbox); } void BrowserWindowGtk::Show() { diff --git a/chrome/browser/browser_window_gtk.h b/chrome/browser/gtk/browser_window_gtk.h index 6fa093b..cbf8a1e3 100644 --- a/chrome/browser/browser_window_gtk.h +++ b/chrome/browser/gtk/browser_window_gtk.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. + // 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. @@ -11,6 +11,7 @@ #include "base/scoped_ptr.h" #include "chrome/browser/browser_window.h" +class BrowserToolbarGtk; // An implementation of BrowserWindow for GTK. // Cross-platform code will interact with this object when @@ -64,11 +65,14 @@ class BrowserWindowGtk : public BrowserWindow { protected: virtual void DestroyBrowser(); GtkWindow* window_; + scoped_ptr<Browser> browser_; private: gfx::Rect bounds_; GdkWindowState state_; + + scoped_ptr<BrowserToolbarGtk> toolbar_; }; #endif // CHROME_BROWSER_WINDOW_GTK_H_ |