summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 22:02:55 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-09 22:02:55 +0000
commit4bf43a6de3ed4e6895499ac536c39bc9a38f2262 (patch)
tree9dc46be76fa4613e2ac9d6800689802cfdc3fa3a /chrome
parent6c127d63e215511c83c534f168e6952476489350 (diff)
downloadchromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.zip
chromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.tar.gz
chromium_src-4bf43a6de3ed4e6895499ac536c39bc9a38f2262.tar.bz2
Porting the toolbar to GTK.
Quite a bit of TODOs in the code, but it displays and properly enables/disables buttons and routes mouse clicks. This also moves all the gtk files into the gtk/ folder, at Ben's request. Review URL: http://codereview.chromium.org/21176 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9421 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser.scons7
-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.cc144
-rw-r--r--chrome/browser/gtk/browser_toolbar_view_gtk.h74
-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_