summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-30 23:51:44 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-30 23:51:44 +0000
commit08173b245a9fbe6381a805cc5987d434a641d96e (patch)
treedc0d07b7760a0a93c793e5eb02f68ce2e194803f /chrome
parentc1ec29d5a0d1cbaa759053f6542adc280ff56d91 (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/browser/browser_theme_provider.cc5
-rw-r--r--chrome/browser/gtk/bookmark_bubble_gtk.cc2
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.cc107
-rw-r--r--chrome/browser/gtk/browser_toolbar_gtk.h22
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc6
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.cc61
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.h26
-rw-r--r--chrome/browser/gtk/toolbar_star_toggle_gtk.cc142
-rw-r--r--chrome/browser/gtk/toolbar_star_toggle_gtk.h76
-rwxr-xr-xchrome/chrome_browser.gypi2
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',