| Index: chrome/browser/gtk/browser_toolbar_gtk.cc
|
| diff --git a/chrome/browser/gtk/browser_toolbar_gtk.cc b/chrome/browser/gtk/browser_toolbar_gtk.cc
|
| index b218beb1881382f4dc65fd6cea2bfbe3aee3ea4e..c51d27dd42c89f28881b90f59059e7231cfb9043 100644
|
| --- a/chrome/browser/gtk/browser_toolbar_gtk.cc
|
| +++ b/chrome/browser/gtk/browser_toolbar_gtk.cc
|
| @@ -11,8 +11,9 @@
|
| #include "base/path_service.h"
|
| #include "chrome/app/chrome_dll_resource.h"
|
| #include "chrome/browser/browser.h"
|
| -#include "chrome/browser/gtk/custom_button.h"
|
| #include "chrome/browser/gtk/back_forward_menu_model_gtk.h"
|
| +#include "chrome/browser/gtk/custom_button.h"
|
| +#include "chrome/browser/gtk/location_bar_view_gtk.h"
|
| #include "chrome/browser/gtk/standard_menus.h"
|
| #include "chrome/browser/net/url_fixer_upper.h"
|
| #include "chrome/common/l10n_util.h"
|
| @@ -21,17 +22,19 @@
|
| #include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
|
|
| -// TODO(deanm): Remove this when the LocationBarView is used.
|
| -class LocationBar;
|
| -
|
| const int BrowserToolbarGtk::kToolbarHeight = 38;
|
| // For the back/forward dropdown menus, the time in milliseconds between
|
| // when the user clicks and the popup menu appears.
|
| static const int kMenuTimerDelay = 500;
|
|
|
| +static void OnGrabFocusThunk(GtkWidget* toolbar, gpointer self) {
|
| + reinterpret_cast<BrowserToolbarGtk*>(self)->FocusLocationBar();
|
| +}
|
| +
|
| BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser)
|
| : toolbar_(NULL),
|
| - entry_(NULL),
|
| + location_bar_(new LocationBarViewGtk(browser->command_updater(),
|
| + browser->toolbar_model())),
|
| model_(browser->toolbar_model()),
|
| browser_(browser),
|
| profile_(NULL),
|
| @@ -52,6 +55,9 @@ BrowserToolbarGtk::~BrowserToolbarGtk() {
|
| }
|
|
|
| void BrowserToolbarGtk::Init(Profile* profile, GtkAccelGroup* accel_group) {
|
| + // Make sure to tell the location bar the profile before calling its Init.
|
| + SetProfile(profile);
|
| +
|
| accel_group_ = accel_group;
|
|
|
| show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this);
|
| @@ -89,22 +95,17 @@ void BrowserToolbarGtk::Init(Profile* profile, GtkAccelGroup* accel_group) {
|
| star_.reset(BuildToolbarButton(IDR_STAR, IDR_STAR_P, IDR_STAR_H, IDR_STAR_D,
|
| l10n_util::GetString(IDS_TOOLTIP_STAR)));
|
|
|
| - entry_ = gtk_entry_new();
|
| - gtk_widget_set_size_request(entry_, 0, 27);
|
| - g_signal_connect(G_OBJECT(entry_), "activate",
|
| - G_CALLBACK(OnEntryActivate), this);
|
| - g_signal_connect(G_OBJECT(entry_), "focus",
|
| - G_CALLBACK(OnEntryFocus), this);
|
| - g_signal_connect(G_OBJECT(entry_), "focus-in-event",
|
| - G_CALLBACK(OnEntryFocusIn), this);
|
| - g_signal_connect(G_OBJECT(entry_), "focus-out-event",
|
| - G_CALLBACK(OnEntryFocusOut), this);
|
| + location_bar_->Init();
|
| + gtk_box_pack_start(GTK_BOX(toolbar_), location_bar_->widget(), TRUE, TRUE, 0);
|
| +
|
| + // We listen for ctrl-l which we have send a grab-focus action to the
|
| + // toolbar. We want our callback to just call FocusLocationBar().
|
| + g_signal_connect(toolbar_, "grab-focus",
|
| + G_CALLBACK(OnGrabFocusThunk), this);
|
| gtk_widget_add_accelerator(
|
| - entry_, "grab-focus", accel_group_, GDK_l,
|
| + toolbar_, "grab-focus", accel_group_, GDK_l,
|
| GDK_CONTROL_MASK, GtkAccelFlags(0));
|
|
|
| - gtk_box_pack_start(GTK_BOX(toolbar_), entry_, TRUE, TRUE, 0);
|
| -
|
| go_.reset(BuildToolbarButton(IDR_GO, IDR_GO_P, IDR_GO_H, 0, L""));
|
|
|
| gtk_box_pack_start(GTK_BOX(toolbar_), gtk_label_new(" "), FALSE, FALSE, 0);
|
| @@ -117,8 +118,6 @@ void BrowserToolbarGtk::Init(Profile* profile, GtkAccelGroup* accel_group) {
|
| l10n_util::GetStringF(IDS_APPMENU_TOOLTIP,
|
| l10n_util::GetString(IDS_PRODUCT_NAME))));
|
| app_menu_.reset(new MenuGtk(this, GetStandardAppMenu(), accel_group_));
|
| -
|
| - SetProfile(profile);
|
| }
|
|
|
| void BrowserToolbarGtk::AddToolbarToBox(GtkWidget* box) {
|
| @@ -126,12 +125,11 @@ void BrowserToolbarGtk::AddToolbarToBox(GtkWidget* box) {
|
| }
|
|
|
| LocationBar* BrowserToolbarGtk::GetLocationBar() const {
|
| - NOTIMPLEMENTED();
|
| - return NULL;
|
| + return location_bar_.get();
|
| }
|
|
|
| void BrowserToolbarGtk::FocusLocationBar() {
|
| - gtk_widget_grab_focus(entry_);
|
| + location_bar_->FocusLocation();
|
| }
|
|
|
| void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) {
|
| @@ -195,16 +193,12 @@ void BrowserToolbarGtk::SetProfile(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);
|
| + location_bar_->SetProfile(profile);
|
| }
|
|
|
| void BrowserToolbarGtk::UpdateTabContents(TabContents* contents,
|
| bool should_restore_state) {
|
| - // Extract the UTF-8 representation of the URL.
|
| - gtk_entry_set_text(GTK_ENTRY(entry_),
|
| - contents->GetURL().possibly_invalid_spec().c_str());
|
| + location_bar_->Update(should_restore_state ? contents : NULL);
|
| }
|
|
|
| CustomDrawButton* BrowserToolbarGtk::BuildToolbarButton(
|
| @@ -249,45 +243,6 @@ CustomContainerButton* BrowserToolbarGtk::BuildToolbarMenuButton(
|
| }
|
|
|
| // static
|
| -void BrowserToolbarGtk::OnEntryActivate(GtkEntry *entry,
|
| - BrowserToolbarGtk* toolbar) {
|
| - GURL dest(URLFixerUpper::FixupURL(std::string(gtk_entry_get_text(entry)),
|
| - std::string()));
|
| - toolbar->browser_->GetSelectedTabContents()->
|
| - OpenURL(dest, GURL(), CURRENT_TAB, PageTransition::TYPED);
|
| -}
|
| -
|
| -// static
|
| -gboolean BrowserToolbarGtk::OnEntryFocus(GtkWidget* widget,
|
| - GtkDirectionType direction,
|
| - BrowserToolbarGtk* host) {
|
| - if (!GTK_WIDGET_HAS_FOCUS(widget)) {
|
| - gtk_widget_grab_focus(widget);
|
| - return TRUE;
|
| - }
|
| -
|
| - return FALSE;
|
| -}
|
| -
|
| -// static
|
| -gboolean BrowserToolbarGtk::OnEntryFocusIn(GtkWidget* widget,
|
| - GdkEventFocus* focus,
|
| - BrowserToolbarGtk* host) {
|
| - // Set the caret at the end of the text.
|
| - gtk_editable_set_position(GTK_EDITABLE(widget), -1);
|
| - return FALSE;
|
| -}
|
| -
|
| -// static
|
| -gboolean BrowserToolbarGtk::OnEntryFocusOut(GtkWidget* widget,
|
| - GdkEventFocus* focus,
|
| - BrowserToolbarGtk* host) {
|
| - // Clear the selected text (if any).
|
| - gtk_editable_set_position(GTK_EDITABLE(widget), 0);
|
| - return FALSE;
|
| -}
|
| -
|
| -// static
|
| void BrowserToolbarGtk::OnButtonClick(GtkWidget* button,
|
| BrowserToolbarGtk* toolbar) {
|
| int tag = -1;
|
|
|