diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-30 23:51:44 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-30 23:51:44 +0000 |
commit | 08173b245a9fbe6381a805cc5987d434a641d96e (patch) | |
tree | dc0d07b7760a0a93c793e5eb02f68ce2e194803f /chrome | |
parent | c1ec29d5a0d1cbaa759053f6542adc280ff56d91 (diff) | |
download | chromium_src-08173b245a9fbe6381a805cc5987d434a641d96e.zip chromium_src-08173b245a9fbe6381a805cc5987d434a641d96e.tar.gz chromium_src-08173b245a9fbe6381a805cc5987d434a641d96e.tar.bz2 |
GTK: toolbar reload/star shuffle.
BUG=37866
TEST=manual
Review URL: http://codereview.chromium.org/1491003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43146 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/browser_theme_pack.cc | 2 | ||||
-rw-r--r-- | chrome/browser/browser_theme_provider.cc | 5 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bubble_gtk.cc | 2 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_toolbar_gtk.cc | 107 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_toolbar_gtk.h | 22 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.cc | 6 | ||||
-rw-r--r-- | chrome/browser/gtk/location_bar_view_gtk.cc | 61 | ||||
-rw-r--r-- | chrome/browser/gtk/location_bar_view_gtk.h | 26 | ||||
-rw-r--r-- | chrome/browser/gtk/toolbar_star_toggle_gtk.cc | 142 | ||||
-rw-r--r-- | chrome/browser/gtk/toolbar_star_toggle_gtk.h | 76 | ||||
-rwxr-xr-x | chrome/chrome_browser.gypi | 2 |
11 files changed, 177 insertions, 274 deletions
diff --git a/chrome/browser/browser_theme_pack.cc b/chrome/browser/browser_theme_pack.cc index 05bcff0..bfa022d 100644 --- a/chrome/browser/browser_theme_pack.cc +++ b/chrome/browser/browser_theme_pack.cc @@ -34,7 +34,7 @@ namespace { // Version number of the current theme pack. We just throw out and rebuild // theme packs that aren't int-equal to this. -const int kThemePackVersion = 3; +const int kThemePackVersion = 4; // IDs that are in the DataPack won't clash with the positive integer // int32_t. kHeaderID should always have the maximum value because we want the diff --git a/chrome/browser/browser_theme_provider.cc b/chrome/browser/browser_theme_provider.cc index d682548..d062fbc 100644 --- a/chrome/browser/browser_theme_provider.cc +++ b/chrome/browser/browser_theme_provider.cc @@ -154,10 +154,13 @@ bool HasThemeableImage(int themeable_image_id) { } // The image resources that will be tinted by the 'button' tint value. +// If you change this list, you must increment the version number in +// browser_theme_pack.cc. const int kToolbarButtonIDs[] = { IDR_BACK, IDR_BACK_D, IDR_BACK_H, IDR_BACK_P, IDR_FORWARD, IDR_FORWARD_D, IDR_FORWARD_H, IDR_FORWARD_P, - IDR_RELOAD, IDR_RELOAD_H, IDR_RELOAD_P, + IDR_RELOAD, IDR_RELOAD_NOBORDER, IDR_RELOAD_NOBORDER_CENTER, IDR_RELOAD_H, + IDR_RELOAD_P, IDR_RELOAD_ENDCAP, IDR_RELOAD_ENDCAP_H, IDR_RELOAD_ENDCAP_P, IDR_HOME, IDR_HOME_H, IDR_HOME_P, IDR_STAR, IDR_STAR_NOBORDER, IDR_STAR_NOBORDER_CENTER, IDR_STAR_D, IDR_STAR_H, IDR_STAR_P, diff --git a/chrome/browser/gtk/bookmark_bubble_gtk.cc b/chrome/browser/gtk/bookmark_bubble_gtk.cc index 663d338..90e3849 100644 --- a/chrome/browser/gtk/bookmark_bubble_gtk.cc +++ b/chrome/browser/gtk/bookmark_bubble_gtk.cc @@ -222,7 +222,7 @@ BookmarkBubbleGtk::BookmarkBubbleGtk(GtkWindow* toplevel_window, gtk_container_set_focus_child(GTK_CONTAINER(content), table); InfoBubbleGtk::ArrowLocationGtk arrow_location = - !base::i18n::IsRTL() ? + base::i18n::IsRTL() ? InfoBubbleGtk::ARROW_LOCATION_TOP_LEFT : InfoBubbleGtk::ARROW_LOCATION_TOP_RIGHT; bubble_ = InfoBubbleGtk::Show(toplevel_window_, diff --git a/chrome/browser/gtk/browser_toolbar_gtk.cc b/chrome/browser/gtk/browser_toolbar_gtk.cc index 131c213..f59e999 100644 --- a/chrome/browser/gtk/browser_toolbar_gtk.cc +++ b/chrome/browser/gtk/browser_toolbar_gtk.cc @@ -35,7 +35,6 @@ #include "chrome/browser/gtk/location_bar_view_gtk.h" #include "chrome/browser/gtk/standard_menus.h" #include "chrome/browser/gtk/tabs/tab_strip_gtk.h" -#include "chrome/browser/gtk/toolbar_star_toggle_gtk.h" #include "chrome/browser/gtk/view_id_util.h" #include "chrome/browser/net/url_fixer_upper.h" #include "chrome/browser/pref_service.h" @@ -102,6 +101,7 @@ BrowserToolbarGtk::~BrowserToolbarGtk() { browser_->command_updater()->RemoveCommandObserver(IDC_HOME, this); browser_->command_updater()->RemoveCommandObserver(IDC_BOOKMARK_PAGE, this); + reload_.Destroy(); offscreen_entry_.Destroy(); page_menu_.reset(); @@ -156,11 +156,6 @@ void BrowserToolbarGtk::Init(Profile* profile, gtk_box_pack_start(GTK_BOX(toolbar_), back_forward_hbox_, FALSE, FALSE, kToolbarWidgetSpacing); - reload_.reset(BuildToolbarButton(IDR_RELOAD, IDR_RELOAD_P, IDR_RELOAD_H, 0, - IDR_BUTTON_MASK, - l10n_util::GetStringUTF8(IDS_TOOLTIP_RELOAD), - GTK_STOCK_REFRESH)); - home_.reset(BuildToolbarButton(IDR_HOME, IDR_HOME_P, IDR_HOME_H, 0, IDR_BUTTON_MASK, l10n_util::GetStringUTF8(IDS_TOOLTIP_HOME), @@ -168,10 +163,10 @@ void BrowserToolbarGtk::Init(Profile* profile, gtk_util::SetButtonTriggersNavigation(home_->widget()); SetUpDragForHomeButton(); - // Group the start, omnibox, and go button into an hbox. + // Group the reload, omnibox, and go button into an hbox. GtkWidget* location_hbox = gtk_hbox_new(FALSE, 0); - star_.reset(BuildStarButton(l10n_util::GetStringUTF8(IDS_TOOLTIP_STAR))); - gtk_box_pack_start(GTK_BOX(location_hbox), star_->widget(), FALSE, FALSE, 0); + BuildReloadButton(); + gtk_box_pack_start(GTK_BOX(location_hbox), reload_.get(), FALSE, FALSE, 0); location_bar_->Init(ShouldOnlyShowLocation()); gtk_box_pack_start(GTK_BOX(location_hbox), location_bar_->widget(), TRUE, @@ -224,7 +219,6 @@ void BrowserToolbarGtk::Init(Profile* profile, gtk_widget_show(alignment_); gtk_widget_show(toolbar_); gtk_widget_show_all(location_hbox); - gtk_widget_hide(star_->widget()); gtk_widget_hide(go_->widget()); } else { gtk_widget_show_all(event_box_); @@ -244,15 +238,15 @@ void BrowserToolbarGtk::Init(Profile* profile, location_bar_->UpdateContentSettingsIcons(); SetViewIDs(); + theme_provider_->InitThemesFor(this); } void BrowserToolbarGtk::SetViewIDs() { ViewIDUtil::SetID(widget(), VIEW_ID_TOOLBAR); ViewIDUtil::SetID(back_->widget(), VIEW_ID_BACK_BUTTON); ViewIDUtil::SetID(forward_->widget(), VIEW_ID_FORWARD_BUTTON); - ViewIDUtil::SetID(reload_->widget(), VIEW_ID_RELOAD_BUTTON); + ViewIDUtil::SetID(reload_.get(), VIEW_ID_RELOAD_BUTTON); ViewIDUtil::SetID(home_->widget(), VIEW_ID_HOME_BUTTON); - ViewIDUtil::SetID(star_->widget(), VIEW_ID_STAR_BUTTON); ViewIDUtil::SetID(location_bar_->widget(), VIEW_ID_LOCATION_BAR); ViewIDUtil::SetID(go_->widget(), VIEW_ID_GO_BUTTON); ViewIDUtil::SetID(page_menu_button_.get(), VIEW_ID_PAGE_MENU); @@ -299,7 +293,7 @@ void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) { widget = forward_->widget(); break; case IDC_RELOAD: - widget = reload_->widget(); + widget = reload_.get(); break; case IDC_GO: widget = go_->widget(); @@ -308,9 +302,6 @@ void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) { if (home_.get()) widget = home_->widget(); break; - case IDC_BOOKMARK_PAGE: - widget = star_->widget(); - break; } if (widget) gtk_widget_set_sensitive(widget, enabled); @@ -403,6 +394,8 @@ void BrowserToolbarGtk::Observe(NotificationType type, // themes, we want to let the background show through the toolbar. gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_), theme_provider_->UseGtkTheme()); + + UpdateReloadButton(); } else { NOTREACHED(); } @@ -444,9 +437,9 @@ gfx::Rect BrowserToolbarGtk::GetLocationStackBounds() const { GtkWidget* right; if (base::i18n::IsRTL()) { left = go_->widget(); - right = star_->widget(); + right = reload_.get(); } else { - left = star_->widget(); + left = reload_.get(); right = go_->widget(); } @@ -486,18 +479,6 @@ CustomDrawButton* BrowserToolbarGtk::BuildToolbarButton( return button; } -ToolbarStarToggleGtk* BrowserToolbarGtk::BuildStarButton( - const std::string& localized_tooltip) { - ToolbarStarToggleGtk* button = new ToolbarStarToggleGtk(this); - - gtk_widget_set_tooltip_text(button->widget(), - localized_tooltip.c_str()); - g_signal_connect(button->widget(), "clicked", - G_CALLBACK(OnButtonClickThunk), this); - - return button; -} - GtkWidget* BrowserToolbarGtk::BuildToolbarMenuButton( const std::string& localized_tooltip, OwnedWidgetGtk* owner) { @@ -523,6 +504,45 @@ void BrowserToolbarGtk::SetUpDragForHomeButton() { G_CALLBACK(OnDragDataReceivedThunk), this); } +void BrowserToolbarGtk::BuildReloadButton() { + reload_.Own(gtk_chrome_button_new()); + + g_signal_connect(reload_.get(), "expose-event", + G_CALLBACK(OnReloadExposeThunk), this); + GTK_WIDGET_UNSET_FLAGS(reload_.get(), GTK_CAN_FOCUS); + + reload_painter_.reset(new CustomDrawButtonBase(theme_provider_, + IDR_RELOAD_ENDCAP, IDR_RELOAD_ENDCAP_P, IDR_RELOAD_ENDCAP_H, + 0, IDR_STAR_MASK)); + + reload_hover_controller_.Init(reload_.get()); +} + +void BrowserToolbarGtk::UpdateReloadButton() { + bool use_gtk = theme_provider_ && theme_provider_->UseGtkTheme(); + GtkWidget* reload = reload_.get(); + + if (use_gtk) { + GdkPixbuf* pixbuf = + theme_provider_->GetPixbufNamed(IDR_RELOAD_NOBORDER_CENTER); + gtk_button_set_image(GTK_BUTTON(reload), + gtk_image_new_from_pixbuf(pixbuf)); + + gtk_widget_set_size_request(reload, -1, -1); + gtk_widget_set_app_paintable(reload, FALSE); + gtk_widget_set_double_buffered(reload, TRUE); + } else { + gtk_widget_set_size_request(reload, reload_painter_->Width(), + reload_painter_->Height()); + + gtk_widget_set_app_paintable(reload, TRUE); + gtk_widget_set_double_buffered(reload, FALSE); + } + + gtk_chrome_button_set_use_gtk_rendering( + GTK_CHROME_BUTTON(reload), use_gtk); +} + void BrowserToolbarGtk::ChangeActiveMenu(GtkWidget* active_menu, guint timestamp) { MenuGtk* old_menu; @@ -571,18 +591,19 @@ gboolean BrowserToolbarGtk::OnLocationHboxExpose(GtkWidget* location_hbox, // painting commands to the theme engine. We figure out the region from the // leftmost widget to the rightmost and then tell GTK to perform the same // drawing commands that draw a GtkEntry on that region. - GtkWidget* star = star_->widget(); + GtkWidget* reload = reload_.get(); + GtkWidget* go = go_->widget(); GtkWidget* left = NULL; GtkWidget* right = NULL; if (ShouldOnlyShowLocation()) { left = location_hbox; right = location_hbox; - } else if (gtk_widget_get_direction(star) == GTK_TEXT_DIR_LTR) { - left = star_->widget(); - right = go_->widget(); + } else if (gtk_widget_get_direction(location_hbox) == GTK_TEXT_DIR_LTR) { + left = reload; + right = go; } else { - left = go_->widget(); - right = star_->widget(); + left = go; + right = reload; } GdkRectangle rec = { @@ -608,7 +629,7 @@ void BrowserToolbarGtk::OnButtonClick(GtkWidget* button) { } int tag = -1; - if (button == reload_->widget()) { + if (button == reload_.get()) { GdkModifierType modifier_state; if (gtk_get_current_event_state(&modifier_state) && modifier_state & GDK_SHIFT_MASK) { @@ -619,8 +640,6 @@ void BrowserToolbarGtk::OnButtonClick(GtkWidget* button) { location_bar_->Revert(); } else if (home_.get() && button == home_->widget()) { tag = IDC_HOME; - } else if (button == star_->widget()) { - tag = IDC_BOOKMARK_PAGE; } DCHECK_NE(tag, -1) << "Unexpected button click callback"; @@ -712,3 +731,13 @@ void BrowserToolbarGtk::PopupForButtonNextTo(GtkWidget* button, app_menu_button_.get() : page_menu_button_.get(); PopupForButton(other_button); } + +gboolean BrowserToolbarGtk::OnReloadExpose(GtkWidget* widget, + GdkEventExpose* event) { + if (theme_provider_->UseGtkTheme()) { + return FALSE; + } else { + double hover_state = reload_hover_controller_.GetCurrentValue(); + return reload_painter_->OnExpose(widget, event, hover_state); + } +} diff --git a/chrome/browser/gtk/browser_toolbar_gtk.h b/chrome/browser/gtk/browser_toolbar_gtk.h index 1ece0db..c57499b 100644 --- a/chrome/browser/gtk/browser_toolbar_gtk.h +++ b/chrome/browser/gtk/browser_toolbar_gtk.h @@ -14,6 +14,7 @@ #include "chrome/browser/app_menu_model.h" #include "chrome/browser/bubble_positioner.h" #include "chrome/browser/command_updater.h" +#include "chrome/browser/gtk/custom_button.h" #include "chrome/browser/gtk/menu_bar_helper.h" #include "chrome/browser/gtk/menu_gtk.h" #include "chrome/browser/page_menu_model.h" @@ -35,7 +36,6 @@ class LocationBarViewGtk; class Profile; class TabContents; class ToolbarModel; -class ToolbarStarToggleGtk; // View class that displays the GTK version of the toolbar and routes gtk // events back to the Browser. @@ -113,8 +113,6 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver, // Message that we should react to a state change. void UpdateTabContents(TabContents* contents, bool should_restore_state); - ToolbarStarToggleGtk* star() { return star_.get(); } - // BubblePositioner: virtual gfx::Rect GetLocationStackBounds() const; @@ -135,9 +133,6 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver, const std::string& localized_tooltip, const char* stock_id); - // Create the star button given the tooltip. Returns the widget created. - ToolbarStarToggleGtk* BuildStarButton(const std::string& localized_tooltip); - // Create a menu for the toolbar given the icon id and tooltip. Returns the // widget created. GtkWidget* BuildToolbarMenuButton(const std::string& localized_tooltip, @@ -146,6 +141,12 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver, // Connect signals for dragging a url onto the home button. void SetUpDragForHomeButton(); + // Create the reload button. + void BuildReloadButton(); + + // Update the reload button following a themes change. + void UpdateReloadButton(); + // Helper for the PageAppMenu event handlers. Pops down the currently active // meun and pops up the other menu. void ChangeActiveMenu(GtkWidget* active_menu, guint timestamp); @@ -156,6 +157,8 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver, GdkEventExpose*); CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnLocationHboxExpose, GdkEventExpose*); + CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnReloadExpose, + GdkEventExpose*); // Gtk callback for the "clicked" signal. CHROMEGTK_CALLBACK_0(BrowserToolbarGtk, void, OnButtonClick); @@ -196,13 +199,16 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver, // All the buttons in the toolbar. scoped_ptr<BackForwardButtonGtk> back_, forward_; - scoped_ptr<CustomDrawButton> reload_; scoped_ptr<CustomDrawButton> home_; - scoped_ptr<ToolbarStarToggleGtk> star_; scoped_ptr<GoButtonGtk> go_; scoped_ptr<BrowserActionsToolbarGtk> actions_toolbar_; OwnedWidgetGtk page_menu_button_, app_menu_button_; + // Reload button stuff. + OwnedWidgetGtk reload_; + scoped_ptr<CustomDrawButtonBase> reload_painter_; + CustomDrawHoverController reload_hover_controller_; + // Keep a pointer to the menu button images because we change them when // the theme changes. GtkWidget* page_menu_image_; diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc index b128621..8b040fe 100644 --- a/chrome/browser/gtk/browser_window_gtk.cc +++ b/chrome/browser/gtk/browser_window_gtk.cc @@ -57,6 +57,7 @@ #include "chrome/browser/gtk/info_bubble_gtk.h" #include "chrome/browser/gtk/infobar_container_gtk.h" #include "chrome/browser/gtk/keyword_editor_view.h" +#include "chrome/browser/gtk/location_bar_view_gtk.h" #include "chrome/browser/gtk/nine_box.h" #include "chrome/browser/gtk/options/content_settings_window_gtk.h" #include "chrome/browser/gtk/repost_form_warning_gtk.h" @@ -65,7 +66,6 @@ #include "chrome/browser/gtk/tabs/tab_strip_gtk.h" #include "chrome/browser/gtk/task_manager_gtk.h" #include "chrome/browser/gtk/theme_install_bubble_view_gtk.h" -#include "chrome/browser/gtk/toolbar_star_toggle_gtk.h" #include "chrome/browser/location_bar.h" #include "chrome/browser/page_info_window.h" #include "chrome/browser/pref_service.h" @@ -733,7 +733,7 @@ void BrowserWindowGtk::LoadingAnimationCallback() { } void BrowserWindowGtk::SetStarredState(bool is_starred) { - toolbar_->star()->SetStarred(is_starred); + toolbar_->GetLocationBarView()->SetStarred(is_starred); } gfx::Rect BrowserWindowGtk::GetRestoredBounds() const { @@ -833,7 +833,7 @@ void BrowserWindowGtk::ShowBookmarkManager() { void BrowserWindowGtk::ShowBookmarkBubble(const GURL& url, bool already_bookmarked) { - toolbar_->star()->ShowStarBubble(url, !already_bookmarked); + toolbar_->GetLocationBarView()->ShowStarBubble(url, !already_bookmarked); } bool BrowserWindowGtk::IsDownloadShelfVisible() const { diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc index 9f0dcd5..d140c62 100644 --- a/chrome/browser/gtk/location_bar_view_gtk.cc +++ b/chrome/browser/gtk/location_bar_view_gtk.cc @@ -26,6 +26,7 @@ #include "chrome/browser/extensions/extension_browser_event_router.h" #include "chrome/browser/extensions/extension_tabs_module.h" #include "chrome/browser/extensions/extensions_service.h" +#include "chrome/browser/gtk/bookmark_bubble_gtk.h" #include "chrome/browser/gtk/cairo_cached_surface.h" #include "chrome/browser/gtk/content_blocked_bubble_gtk.h" #include "chrome/browser/gtk/extension_popup_gtk.h" @@ -138,7 +139,14 @@ const GdkColor LocationBarViewGtk::kBackgroundColor = LocationBarViewGtk::LocationBarViewGtk( const BubblePositioner* bubble_positioner, Browser* browser) - : location_icon_event_box_(NULL), + : starred_(false), + star_image_(NULL), + security_icon_event_box_(NULL), + ev_secure_icon_image_(NULL), + secure_icon_image_(NULL), + security_warning_icon_image_(NULL), + security_error_icon_image_(NULL), + location_icon_event_box_(NULL), location_icon_image_(NULL), security_info_label_(NULL), tab_to_search_box_(NULL), @@ -167,6 +175,7 @@ LocationBarViewGtk::LocationBarViewGtk( LocationBarViewGtk::~LocationBarViewGtk() { // All of our widgets should have be children of / owned by the alignment. + star_.Destroy(); hbox_.Destroy(); content_setting_hbox_.Destroy(); page_action_hbox_.Destroy(); @@ -307,11 +316,21 @@ void LocationBarViewGtk::Init(bool popup_window_mode) { g_signal_connect(location_icon_event_box_, "button-press-event", G_CALLBACK(&OnIconPressed), this); +<<<<<<< .mine + CreateStarButton(); + gtk_box_pack_end(GTK_BOX(hbox_.get()), star_.get(), FALSE, FALSE, 0); + + gtk_container_add(GTK_CONTAINER(security_icon_event_box_), security_icon_box); + gtk_widget_set_name(security_icon_event_box_, + "chrome-security-icon-eventbox"); + gtk_box_pack_end(GTK_BOX(hbox_.get()), security_icon_event_box_, +======= gtk_container_add(GTK_CONTAINER(location_icon_event_box_), location_icon_image_); gtk_widget_set_name(location_icon_event_box_, "chrome-location-icon-eventbox"); gtk_box_pack_end(GTK_BOX(hbox_.get()), location_icon_event_box_, +>>>>>>> .r43144 FALSE, FALSE, 0); content_setting_hbox_.Own(gtk_hbox_new(FALSE, kInnerPadding)); @@ -465,6 +484,17 @@ void LocationBarViewGtk::OnChanged() { AdjustChildrenVisibility(); } +void LocationBarViewGtk::CreateStarButton() { + star_.Own(gtk_event_box_new()); + gtk_event_box_set_visible_window(GTK_EVENT_BOX(star_.get()), FALSE); + star_image_ = gtk_image_new(); + gtk_container_add(GTK_CONTAINER(star_.get()), star_image_); + gtk_widget_show_all(star_.get()); + + g_signal_connect(star_.get(), "button-press-event", + G_CALLBACK(OnStarButtonPressThunk), this); +} + void LocationBarViewGtk::OnInputInProgress(bool in_progress) { // This is identical to the Windows code, except that we don't proxy the call // back through the Toolbar, and just access the model here. @@ -693,6 +723,8 @@ void LocationBarViewGtk::Observe(NotificationType type, &kHintTextColor); gtk_util::SetLabelColor(type_to_search_hint_, &kHintTextColor); } + + UpdateStarIcon(); } gboolean LocationBarViewGtk::HandleExpose(GtkWidget* widget, @@ -856,6 +888,33 @@ void LocationBarViewGtk::OnEntryBoxSizeAllocate(GtkAllocation* allocation) { } } +gboolean LocationBarViewGtk::OnStarButtonPress(GtkWidget* widget, + GdkEventButton* event) { + browser_->ExecuteCommand(IDC_BOOKMARK_PAGE); + return FALSE; +} + +void LocationBarViewGtk::ShowStarBubble(const GURL& url, + bool newly_bookmarked) { + BookmarkBubbleGtk::Show(GTK_WINDOW(gtk_widget_get_toplevel(star_.get())), + gtk_util::GetWidgetRectRelativeToToplevel(star_.get()), + profile_, url, newly_bookmarked); +} + +void LocationBarViewGtk::SetStarred(bool starred) { + if (starred == starred_) + return; + + starred_ = starred; + UpdateStarIcon(); +} + +void LocationBarViewGtk::UpdateStarIcon() { + gtk_image_set_from_pixbuf(GTK_IMAGE(star_image_), + theme_provider_->GetPixbufNamed(starred_ ? IDR_STARRED_NOBORDER_CENTER : + IDR_STAR_NOBORDER_CENTER)); +} + void LocationBarViewGtk::AdjustChildrenVisibility() { int text_width = location_entry_->TextWidth(); int available_width = entry_box_width_ - text_width - kInnerPadding; diff --git a/chrome/browser/gtk/location_bar_view_gtk.h b/chrome/browser/gtk/location_bar_view_gtk.h index 12e384f..07f6ede 100644 --- a/chrome/browser/gtk/location_bar_view_gtk.h +++ b/chrome/browser/gtk/location_bar_view_gtk.h @@ -77,6 +77,12 @@ class LocationBarViewGtk : public AutocompleteEditController, // restore saved state that the tab holds. void Update(const TabContents* tab_for_state_restoring); + // Show the bookmark bubble. + void ShowStarBubble(const GURL& url, bool newly_boomkarked); + + // Set the starred state of the bookmark star. + void SetStarred(bool starred); + // Implement the AutocompleteEditController interface. virtual void OnAutocompleteAccept(const GURL& url, WindowOpenDisposition disposition, @@ -298,15 +304,35 @@ class LocationBarViewGtk : public AutocompleteEditController, } void OnEntryBoxSizeAllocate(GtkAllocation* allocation); + CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, OnStarButtonPress, + GdkEventButton*); + // Show or hide |tab_to_search_box_|, |tab_to_search_hint_| and // |type_to_search_hint_| according to the value of |show_selected_keyword_|, // |show_keyword_hint_|, |show_search_hint_| and the available horizontal // space in the location bar. void AdjustChildrenVisibility(); + // Build the star icon. + void CreateStarButton(); + + // Update the star icon after it is toggled or the theme changes. + void UpdateStarIcon(); + // The outermost widget we want to be hosted. OwnedWidgetGtk hbox_; + // Star button. + OwnedWidgetGtk star_; + GtkWidget* star_image_; + bool starred_; + + // SSL state. + GtkWidget* security_icon_event_box_; + GtkWidget* ev_secure_icon_image_; + GtkWidget* secure_icon_image_; + GtkWidget* security_warning_icon_image_; + GtkWidget* security_error_icon_image_; // An icon to the left of the address bar. GtkWidget* location_icon_event_box_; GtkWidget* location_icon_image_; diff --git a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc b/chrome/browser/gtk/toolbar_star_toggle_gtk.cc deleted file mode 100644 index a57d79e..0000000 --- a/chrome/browser/gtk/toolbar_star_toggle_gtk.cc +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2010 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/toolbar_star_toggle_gtk.h" - -#include "app/gtk_dnd_util.h" -#include "app/resource_bundle.h" -#include "chrome/browser/browser.h" -#include "chrome/browser/gtk/bookmark_bubble_gtk.h" -#include "chrome/browser/gtk/browser_toolbar_gtk.h" -#include "chrome/browser/gtk/gtk_chrome_button.h" -#include "chrome/browser/gtk/gtk_theme_provider.h" -#include "chrome/browser/gtk/gtk_util.h" -#include "chrome/browser/profile.h" -#include "chrome/browser/tab_contents/tab_contents.h" -#include "chrome/common/notification_service.h" -#include "gfx/rect.h" -#include "grit/theme_resources.h" - -ToolbarStarToggleGtk::ToolbarStarToggleGtk(BrowserToolbarGtk* host) - : host_(host), - widget_(gtk_chrome_button_new()), - is_starred_(false), - theme_provider_(GtkThemeProvider::GetFrom(host->profile())), - unstarred_(theme_provider_, IDR_STAR, IDR_STAR_P, IDR_STAR_H, IDR_STAR_D, - IDR_STAR_MASK), - starred_(theme_provider_, IDR_STARRED, IDR_STARRED_P, IDR_STARRED_H, 0, - IDR_STAR_MASK) { - gtk_widget_set_size_request(widget_.get(), unstarred_.Width(), - unstarred_.Height()); - - gtk_widget_set_app_paintable(widget_.get(), TRUE); - // We effectively double-buffer by virtue of having only one image... - gtk_widget_set_double_buffered(widget_.get(), FALSE); - - g_signal_connect(widget(), "expose-event", - G_CALLBACK(OnExpose), this); - GTK_WIDGET_UNSET_FLAGS(widget(), GTK_CAN_FOCUS); - - gtk_drag_source_set(widget(), GDK_BUTTON1_MASK, NULL, 0, - static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_LINK)); - gtk_dnd_util::SetSourceTargetListFromCodeMask(widget(), - gtk_dnd_util::TEXT_PLAIN | - gtk_dnd_util::TEXT_URI_LIST | - gtk_dnd_util::CHROME_NAMED_URL | - gtk_dnd_util::NETSCAPE_URL); - g_signal_connect(widget(), "drag-data-get", G_CALLBACK(OnDragDataGet), this); - - theme_provider_->InitThemesFor(this); - registrar_.Add(this, - NotificationType::BROWSER_THEME_CHANGED, - NotificationService::AllSources()); - - hover_controller_.Init(widget()); -} - -ToolbarStarToggleGtk::~ToolbarStarToggleGtk() { - widget_.Destroy(); -} - -void ToolbarStarToggleGtk::Observe(NotificationType type, - const NotificationSource& source, const NotificationDetails& details) { - DCHECK(NotificationType::BROWSER_THEME_CHANGED == type); - - GtkThemeProvider* provider = static_cast<GtkThemeProvider*>( - Source<GtkThemeProvider>(source).ptr()); - DCHECK(provider == theme_provider_); - UpdateGTKButton(); -} - -void ToolbarStarToggleGtk::ShowStarBubble(const GURL& url, - bool newly_bookmarked) { - GtkWidget* widget = widget_.get(); - BookmarkBubbleGtk::Show(GTK_WINDOW(gtk_widget_get_toplevel(widget)), - gtk_util::GetWidgetRectRelativeToToplevel(widget), - host_->profile(), - url, - newly_bookmarked); -} - -void ToolbarStarToggleGtk::SetStarred(bool starred) { - is_starred_ = starred; - gtk_widget_queue_draw(widget_.get()); - UpdateGTKButton(); -} - -// static -gboolean ToolbarStarToggleGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e, - ToolbarStarToggleGtk* button) { - if (button->theme_provider_->UseGtkTheme()) { - return FALSE; - } else { - double hover_state = button->hover_controller_.GetCurrentValue(); - if (button->is_starred_) - return button->starred_.OnExpose(widget, e, hover_state); - else - return button->unstarred_.OnExpose(widget, e, hover_state); - } -} - -// static -void ToolbarStarToggleGtk::OnDragDataGet(GtkWidget* widget, - GdkDragContext* drag_context, GtkSelectionData* data, guint info, - guint time, ToolbarStarToggleGtk* star) { - const TabContents* tab = star->host_->browser()->tabstrip_model()-> - GetSelectedTabContents(); - if (!tab) - return; - gtk_dnd_util::WriteURLWithName(data, tab->GetURL(), tab->GetTitle(), info); -} - -void ToolbarStarToggleGtk::UpdateGTKButton() { - bool use_gtk = theme_provider_ && theme_provider_->UseGtkTheme(); - - if (use_gtk) { - GdkPixbuf* pixbuf = NULL; - if (is_starred_) { - pixbuf = theme_provider_->GetPixbufNamed(IDR_STARRED_NOBORDER_CENTER); - } else { - pixbuf = theme_provider_->GetPixbufNamed(IDR_STAR_NOBORDER_CENTER); - } - - gtk_button_set_image( - GTK_BUTTON(widget_.get()), - gtk_image_new_from_pixbuf(pixbuf)); - - gtk_widget_set_size_request(widget_.get(), -1, -1); - gtk_widget_set_app_paintable(widget_.get(), FALSE); - gtk_widget_set_double_buffered(widget_.get(), TRUE); - } else { - gtk_widget_set_size_request(widget_.get(), unstarred_.Width(), - unstarred_.Height()); - - gtk_widget_set_app_paintable(widget_.get(), TRUE); - // We effectively double-buffer by virtue of having only one image... - gtk_widget_set_double_buffered(widget_.get(), FALSE); - } - - gtk_chrome_button_set_use_gtk_rendering( - GTK_CHROME_BUTTON(widget_.get()), use_gtk); -} diff --git a/chrome/browser/gtk/toolbar_star_toggle_gtk.h b/chrome/browser/gtk/toolbar_star_toggle_gtk.h deleted file mode 100644 index faa025a..0000000 --- a/chrome/browser/gtk/toolbar_star_toggle_gtk.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2010 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_GTK_TOOLBAR_STAR_TOGGLE_GTK_H_ -#define CHROME_BROWSER_GTK_TOOLBAR_STAR_TOGGLE_GTK_H_ - -#include <gtk/gtk.h> - -#include "base/basictypes.h" -#include "chrome/browser/gtk/custom_button.h" -#include "chrome/common/notification_observer.h" -#include "chrome/common/notification_registrar.h" -#include "chrome/common/owned_widget_gtk.h" - -class BrowserToolbarGtk; -class GtkThemeProvider; -class GURL; - -// Displays the bookmark star button, which toggles between two images. -class ToolbarStarToggleGtk : public NotificationObserver { - public: - explicit ToolbarStarToggleGtk(BrowserToolbarGtk* host); - ~ToolbarStarToggleGtk(); - - // Provide NotificationObserver implementation. - virtual void Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details); - - // If the bubble isn't showing, shows it above the star button. - void ShowStarBubble(const GURL& url, bool newly_bookmarked); - - void SetStarred(bool starred); - - GtkWidget* widget() const { return widget_.get(); } - - private: - // Updates the properties of |widget_| when we would need to change its - // state. - void UpdateGTKButton(); - - // Callback for expose, used to draw the custom graphics. - static gboolean OnExpose(GtkWidget* widget, GdkEventExpose* e, - ToolbarStarToggleGtk* obj); - - // Callback to get the data associated with a drag. - static void OnDragDataGet(GtkWidget* widget, - GdkDragContext* drag_context, - GtkSelectionData* data, - guint info, - guint time, - ToolbarStarToggleGtk* star); - - // Used to listen for theme change notifications. - NotificationRegistrar registrar_; - - // The browser toolbar hosting this widget, for getting the current profile. - BrowserToolbarGtk* host_; - - // The actual button widget. - OwnedWidgetGtk widget_; - - // Whether we show the yellow star. - bool is_starred_; - - GtkThemeProvider* theme_provider_; - - CustomDrawButtonBase unstarred_; - CustomDrawButtonBase starred_; - CustomDrawHoverController hover_controller_; - - DISALLOW_COPY_AND_ASSIGN(ToolbarStarToggleGtk); -}; - -#endif // CHROME_BROWSER_GTK_TOOLBAR_STAR_TOGGLE_GTK_H_ diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 36e8a31..747c64f 100755 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1338,8 +1338,6 @@ 'browser/gtk/task_manager_gtk.h', 'browser/gtk/theme_install_bubble_view_gtk.cc', 'browser/gtk/theme_install_bubble_view_gtk.h', - 'browser/gtk/toolbar_star_toggle_gtk.cc', - 'browser/gtk/toolbar_star_toggle_gtk.h', 'browser/gtk/translate_infobars.cc', 'browser/gtk/translate_infobars.h', 'browser/gtk/view_id_util.cc', |