| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/gtk/browser_toolbar_gtk.h" | 5 #include "chrome/browser/gtk/browser_toolbar_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 | 8 |
| 9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/base_paths_linux.h" | 12 #include "base/base_paths_linux.h" |
| 13 #include "base/path_service.h" | 13 #include "base/path_service.h" |
| 14 #include "chrome/app/chrome_dll_resource.h" | 14 #include "chrome/app/chrome_dll_resource.h" |
| 15 #include "chrome/browser/browser.h" | 15 #include "chrome/browser/browser.h" |
| 16 #include "chrome/browser/browser_theme_provider.h" | 16 #include "chrome/browser/browser_theme_provider.h" |
| 17 #include "chrome/browser/gtk/back_forward_button_gtk.h" | 17 #include "chrome/browser/gtk/back_forward_button_gtk.h" |
| 18 #include "chrome/browser/gtk/browser_window_gtk.h" | 18 #include "chrome/browser/gtk/browser_window_gtk.h" |
| 19 #include "chrome/browser/gtk/custom_button.h" | 19 #include "chrome/browser/gtk/custom_button.h" |
| 20 #include "chrome/browser/gtk/go_button_gtk.h" | 20 #include "chrome/browser/gtk/go_button_gtk.h" |
| 21 #include "chrome/browser/gtk/gtk_chrome_button.h" | 21 #include "chrome/browser/gtk/gtk_chrome_button.h" |
| 22 #include "chrome/browser/gtk/location_bar_view_gtk.h" | 22 #include "chrome/browser/gtk/location_bar_view_gtk.h" |
| 23 #include "chrome/browser/gtk/nine_box.h" | 23 #include "chrome/browser/gtk/nine_box.h" |
| 24 #include "chrome/browser/gtk/standard_menus.h" | 24 #include "chrome/browser/gtk/standard_menus.h" |
| 25 #include "chrome/browser/gtk/tabs/tab_strip_gtk.h" | 25 #include "chrome/browser/gtk/tabs/tab_strip_gtk.h" |
| 26 #include "chrome/browser/gtk/toolbar_star_toggle_gtk.h" | 26 #include "chrome/browser/gtk/toolbar_star_toggle_gtk.h" |
| 27 #include "chrome/browser/net/url_fixer_upper.h" | 27 #include "chrome/browser/net/url_fixer_upper.h" |
| 28 #include "chrome/browser/profile.h" | 28 #include "chrome/browser/profile.h" |
| 29 #include "chrome/common/gtk_util.h" |
| 29 #include "chrome/common/notification_details.h" | 30 #include "chrome/common/notification_details.h" |
| 30 #include "chrome/common/notification_type.h" | 31 #include "chrome/common/notification_type.h" |
| 31 #include "chrome/common/pref_names.h" | 32 #include "chrome/common/pref_names.h" |
| 32 #include "chrome/common/pref_service.h" | 33 #include "chrome/common/pref_service.h" |
| 33 #include "grit/chromium_strings.h" | 34 #include "grit/chromium_strings.h" |
| 34 #include "grit/generated_resources.h" | 35 #include "grit/generated_resources.h" |
| 35 #include "grit/theme_resources.h" | 36 #include "grit/theme_resources.h" |
| 36 | 37 |
| 37 namespace { | 38 namespace { |
| 38 | 39 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 56 // BrowserToolbarGtk, public --------------------------------------------------- | 57 // BrowserToolbarGtk, public --------------------------------------------------- |
| 57 | 58 |
| 58 BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window) | 59 BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window) |
| 59 : toolbar_(NULL), | 60 : toolbar_(NULL), |
| 60 location_bar_(new LocationBarViewGtk(browser->command_updater(), | 61 location_bar_(new LocationBarViewGtk(browser->command_updater(), |
| 61 browser->toolbar_model(), | 62 browser->toolbar_model(), |
| 62 this)), | 63 this)), |
| 63 model_(browser->toolbar_model()), | 64 model_(browser->toolbar_model()), |
| 64 browser_(browser), | 65 browser_(browser), |
| 65 window_(window), | 66 window_(window), |
| 66 profile_(NULL) { | 67 profile_(NULL), |
| 68 last_release_event_flags_(0) { |
| 67 browser_->command_updater()->AddCommandObserver(IDC_BACK, this); | 69 browser_->command_updater()->AddCommandObserver(IDC_BACK, this); |
| 68 browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this); | 70 browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this); |
| 69 browser_->command_updater()->AddCommandObserver(IDC_RELOAD, this); | 71 browser_->command_updater()->AddCommandObserver(IDC_RELOAD, this); |
| 70 browser_->command_updater()->AddCommandObserver(IDC_HOME, this); | 72 browser_->command_updater()->AddCommandObserver(IDC_HOME, this); |
| 71 browser_->command_updater()->AddCommandObserver(IDC_STAR, this); | 73 browser_->command_updater()->AddCommandObserver(IDC_STAR, this); |
| 72 | 74 |
| 73 InitNineBox(); | 75 InitNineBox(); |
| 74 } | 76 } |
| 75 | 77 |
| 76 BrowserToolbarGtk::~BrowserToolbarGtk() { | 78 BrowserToolbarGtk::~BrowserToolbarGtk() { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 gtk_box_pack_start(GTK_BOX(toolbar_), back_forward_hbox_, FALSE, FALSE, 0); | 125 gtk_box_pack_start(GTK_BOX(toolbar_), back_forward_hbox_, FALSE, FALSE, 0); |
| 124 | 126 |
| 125 reload_.reset(BuildToolbarButton(IDR_RELOAD, IDR_RELOAD_P, IDR_RELOAD_H, 0, | 127 reload_.reset(BuildToolbarButton(IDR_RELOAD, IDR_RELOAD_P, IDR_RELOAD_H, 0, |
| 126 l10n_util::GetStringUTF8(IDS_TOOLTIP_RELOAD))); | 128 l10n_util::GetStringUTF8(IDS_TOOLTIP_RELOAD))); |
| 127 AddAcceleratorToButton(reload_->widget(), GDK_r, GDK_CONTROL_MASK); | 129 AddAcceleratorToButton(reload_->widget(), GDK_r, GDK_CONTROL_MASK); |
| 128 AddAcceleratorToButton(reload_->widget(), GDK_F5, GdkModifierType(0)); | 130 AddAcceleratorToButton(reload_->widget(), GDK_F5, GdkModifierType(0)); |
| 129 AddAcceleratorToButton(reload_->widget(), GDK_F5, GDK_CONTROL_MASK); | 131 AddAcceleratorToButton(reload_->widget(), GDK_F5, GDK_CONTROL_MASK); |
| 130 | 132 |
| 131 home_.reset(BuildToolbarButton(IDR_HOME, IDR_HOME_P, IDR_HOME_H, 0, | 133 home_.reset(BuildToolbarButton(IDR_HOME, IDR_HOME_P, IDR_HOME_H, 0, |
| 132 l10n_util::GetStringUTF8(IDS_TOOLTIP_HOME))); | 134 l10n_util::GetStringUTF8(IDS_TOOLTIP_HOME))); |
| 135 gtk_util::SetButtonTriggersNavigation(home_->widget()); |
| 133 | 136 |
| 134 // Group the start, omnibox, and go button into an hbox. | 137 // Group the start, omnibox, and go button into an hbox. |
| 135 GtkWidget* omnibox_hbox_ = gtk_hbox_new(FALSE, 0); | 138 GtkWidget* omnibox_hbox_ = gtk_hbox_new(FALSE, 0); |
| 136 star_.reset(BuildStarButton(l10n_util::GetStringUTF8(IDS_TOOLTIP_STAR))); | 139 star_.reset(BuildStarButton(l10n_util::GetStringUTF8(IDS_TOOLTIP_STAR))); |
| 137 gtk_box_pack_start(GTK_BOX(omnibox_hbox_), star_->widget(), FALSE, FALSE, 0); | 140 gtk_box_pack_start(GTK_BOX(omnibox_hbox_), star_->widget(), FALSE, FALSE, 0); |
| 138 | 141 |
| 139 location_bar_->Init(); | 142 location_bar_->Init(); |
| 140 gtk_box_pack_start(GTK_BOX(omnibox_hbox_), location_bar_->widget(), TRUE, | 143 gtk_box_pack_start(GTK_BOX(omnibox_hbox_), location_bar_->widget(), TRUE, |
| 141 TRUE, 0); | 144 TRUE, 0); |
| 142 | 145 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 CustomDrawButton* BrowserToolbarGtk::BuildToolbarButton( | 301 CustomDrawButton* BrowserToolbarGtk::BuildToolbarButton( |
| 299 int normal_id, int active_id, int highlight_id, int depressed_id, | 302 int normal_id, int active_id, int highlight_id, int depressed_id, |
| 300 const std::string& localized_tooltip) { | 303 const std::string& localized_tooltip) { |
| 301 CustomDrawButton* button = new CustomDrawButton(normal_id, active_id, | 304 CustomDrawButton* button = new CustomDrawButton(normal_id, active_id, |
| 302 highlight_id, depressed_id); | 305 highlight_id, depressed_id); |
| 303 | 306 |
| 304 gtk_widget_set_tooltip_text(button->widget(), | 307 gtk_widget_set_tooltip_text(button->widget(), |
| 305 localized_tooltip.c_str()); | 308 localized_tooltip.c_str()); |
| 306 g_signal_connect(button->widget(), "clicked", | 309 g_signal_connect(button->widget(), "clicked", |
| 307 G_CALLBACK(OnButtonClick), this); | 310 G_CALLBACK(OnButtonClick), this); |
| 311 g_signal_connect(button->widget(), "button-release-event", |
| 312 G_CALLBACK(OnButtonRelease), this); |
| 308 | 313 |
| 309 gtk_box_pack_start(GTK_BOX(toolbar_), button->widget(), FALSE, FALSE, 0); | 314 gtk_box_pack_start(GTK_BOX(toolbar_), button->widget(), FALSE, FALSE, 0); |
| 310 return button; | 315 return button; |
| 311 } | 316 } |
| 312 | 317 |
| 313 ToolbarStarToggleGtk* BrowserToolbarGtk::BuildStarButton( | 318 ToolbarStarToggleGtk* BrowserToolbarGtk::BuildStarButton( |
| 314 const std::string& localized_tooltip) { | 319 const std::string& localized_tooltip) { |
| 315 ToolbarStarToggleGtk* button = new ToolbarStarToggleGtk(this); | 320 ToolbarStarToggleGtk* button = new ToolbarStarToggleGtk(this); |
| 316 | 321 |
| 317 gtk_widget_set_tooltip_text(button->widget(), | 322 gtk_widget_set_tooltip_text(button->widget(), |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 void BrowserToolbarGtk::OnButtonClick(GtkWidget* button, | 371 void BrowserToolbarGtk::OnButtonClick(GtkWidget* button, |
| 367 BrowserToolbarGtk* toolbar) { | 372 BrowserToolbarGtk* toolbar) { |
| 368 int tag = -1; | 373 int tag = -1; |
| 369 if (button == toolbar->reload_->widget()) | 374 if (button == toolbar->reload_->widget()) |
| 370 tag = IDC_RELOAD; | 375 tag = IDC_RELOAD; |
| 371 else if (toolbar->home_.get() && button == toolbar->home_->widget()) | 376 else if (toolbar->home_.get() && button == toolbar->home_->widget()) |
| 372 tag = IDC_HOME; | 377 tag = IDC_HOME; |
| 373 else if (button == toolbar->star_->widget()) | 378 else if (button == toolbar->star_->widget()) |
| 374 tag = IDC_STAR; | 379 tag = IDC_STAR; |
| 375 | 380 |
| 376 DCHECK_NE(tag, -1) << "Impossible button click callback"; | 381 DCHECK_NE(tag, -1) << "Unexpected button click callback"; |
| 377 toolbar->browser_->ExecuteCommand(tag); | 382 toolbar->browser_->ExecuteCommandWithDisposition(tag, |
| 383 event_utils::DispositionFromEventFlags( |
| 384 toolbar->last_release_event_flags_)); |
| 385 } |
| 386 |
| 387 // static |
| 388 gboolean BrowserToolbarGtk::OnButtonRelease(GtkWidget* button, |
| 389 GdkEventButton* event, |
| 390 BrowserToolbarGtk* toolbar) { |
| 391 toolbar->last_release_event_flags_ = event->state; |
| 392 return FALSE; |
| 378 } | 393 } |
| 379 | 394 |
| 380 // static | 395 // static |
| 381 gboolean BrowserToolbarGtk::OnMenuButtonPressEvent(GtkWidget* button, | 396 gboolean BrowserToolbarGtk::OnMenuButtonPressEvent(GtkWidget* button, |
| 382 GdkEventButton* event, | 397 GdkEventButton* event, |
| 383 BrowserToolbarGtk* toolbar) { | 398 BrowserToolbarGtk* toolbar) { |
| 384 if (event->button != 1) | 399 if (event->button != 1) |
| 385 return FALSE; | 400 return FALSE; |
| 386 | 401 |
| 387 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(button), | 402 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(button), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 401 widget, "clicked", accel_group_, accelerator, | 416 widget, "clicked", accel_group_, accelerator, |
| 402 GdkModifierType(accelerator_mod), GtkAccelFlags(0)); | 417 GdkModifierType(accelerator_mod), GtkAccelFlags(0)); |
| 403 } | 418 } |
| 404 | 419 |
| 405 void BrowserToolbarGtk::InitNineBox() { | 420 void BrowserToolbarGtk::InitNineBox() { |
| 406 // TODO(estade): use |profile_|? | 421 // TODO(estade): use |profile_|? |
| 407 background_ninebox_.reset(new NineBox( | 422 background_ninebox_.reset(new NineBox( |
| 408 browser_->profile()->GetThemeProvider(), | 423 browser_->profile()->GetThemeProvider(), |
| 409 0, IDR_THEME_TOOLBAR, 0, 0, 0, 0, 0, 0, 0)); | 424 0, IDR_THEME_TOOLBAR, 0, 0, 0, 0, 0, 0, 0)); |
| 410 } | 425 } |
| OLD | NEW |