Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: chrome/browser/ui/gtk/bookmarks/bookmark_bar_gtk.cc

Issue 8391034: Remove sync error button from bookmark bar (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/gtk/bookmarks/bookmark_bar_gtk.h" 5 #include "chrome/browser/ui/gtk/bookmarks/bookmark_bar_gtk.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/bookmarks/bookmark_model.h" 12 #include "chrome/browser/bookmarks/bookmark_model.h"
13 #include "chrome/browser/bookmarks/bookmark_node_data.h" 13 #include "chrome/browser/bookmarks/bookmark_node_data.h"
14 #include "chrome/browser/bookmarks/bookmark_utils.h" 14 #include "chrome/browser/bookmarks/bookmark_utils.h"
15 #include "chrome/browser/browser_shutdown.h" 15 #include "chrome/browser/browser_shutdown.h"
16 #include "chrome/browser/extensions/extension_service.h" 16 #include "chrome/browser/extensions/extension_service.h"
17 #include "chrome/browser/ntp_background_util.h" 17 #include "chrome/browser/ntp_background_util.h"
18 #include "chrome/browser/prefs/pref_service.h" 18 #include "chrome/browser/prefs/pref_service.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/sync/sync_ui_util.h"
21 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
22 #include "chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.h" 21 #include "chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.h"
23 #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h" 22 #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h"
24 #include "chrome/browser/ui/gtk/browser_window_gtk.h" 23 #include "chrome/browser/ui/gtk/browser_window_gtk.h"
25 #include "chrome/browser/ui/gtk/cairo_cached_surface.h" 24 #include "chrome/browser/ui/gtk/cairo_cached_surface.h"
26 #include "chrome/browser/ui/gtk/custom_button.h" 25 #include "chrome/browser/ui/gtk/custom_button.h"
27 #include "chrome/browser/ui/gtk/gtk_chrome_button.h" 26 #include "chrome/browser/ui/gtk/gtk_chrome_button.h"
28 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 27 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
29 #include "chrome/browser/ui/gtk/gtk_util.h" 28 #include "chrome/browser/ui/gtk/gtk_util.h"
30 #include "chrome/browser/ui/gtk/hover_controller_gtk.h" 29 #include "chrome/browser/ui/gtk/hover_controller_gtk.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 123
125 BookmarkBarGtk::BookmarkBarGtk(BrowserWindowGtk* window, 124 BookmarkBarGtk::BookmarkBarGtk(BrowserWindowGtk* window,
126 Browser* browser, 125 Browser* browser,
127 TabstripOriginProvider* tabstrip_origin_provider) 126 TabstripOriginProvider* tabstrip_origin_provider)
128 : page_navigator_(NULL), 127 : page_navigator_(NULL),
129 browser_(browser), 128 browser_(browser),
130 window_(window), 129 window_(window),
131 tabstrip_origin_provider_(tabstrip_origin_provider), 130 tabstrip_origin_provider_(tabstrip_origin_provider),
132 model_(NULL), 131 model_(NULL),
133 instructions_(NULL), 132 instructions_(NULL),
134 sync_service_(NULL),
135 dragged_node_(NULL), 133 dragged_node_(NULL),
136 drag_icon_(NULL), 134 drag_icon_(NULL),
137 toolbar_drop_item_(NULL), 135 toolbar_drop_item_(NULL),
138 theme_service_(GtkThemeService::GetFrom(browser->profile())), 136 theme_service_(GtkThemeService::GetFrom(browser->profile())),
139 show_instructions_(true), 137 show_instructions_(true),
140 menu_bar_helper_(this), 138 menu_bar_helper_(this),
141 slide_animation_(this), 139 slide_animation_(this),
142 last_allocation_width_(-1), 140 last_allocation_width_(-1),
143 throbbing_widget_(NULL), 141 throbbing_widget_(NULL),
144 weak_factory_(this), 142 weak_factory_(this),
145 bookmark_bar_state_(BookmarkBar::DETACHED), 143 bookmark_bar_state_(BookmarkBar::DETACHED),
146 max_height_(0) { 144 max_height_(0) {
147 Profile* profile = browser->profile();
148 if (profile->GetProfileSyncService()) {
149 // Obtain a pointer to the profile sync service and add our instance as an
150 // observer.
151 sync_service_ = profile->GetProfileSyncService();
152 sync_service_->AddObserver(this);
153 }
154
155 Init(); 145 Init();
156 // Force an update by simulating being in the wrong state. 146 // Force an update by simulating being in the wrong state.
157 // BrowserWindowGtk sets our true state after we're created. 147 // BrowserWindowGtk sets our true state after we're created.
158 SetBookmarkBarState(BookmarkBar::SHOW, 148 SetBookmarkBarState(BookmarkBar::SHOW,
159 BookmarkBar::DONT_ANIMATE_STATE_CHANGE); 149 BookmarkBar::DONT_ANIMATE_STATE_CHANGE);
160 150
161 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 151 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
162 content::Source<ThemeService>(theme_service_)); 152 content::Source<ThemeService>(theme_service_));
163 153
164 edit_bookmarks_enabled_.Init(prefs::kEditBookmarksEnabled, 154 edit_bookmarks_enabled_.Init(prefs::kEditBookmarksEnabled,
165 profile->GetPrefs(), this); 155 browser->profile()->GetPrefs(), this);
Peter Kasting 2011/10/26 18:12:01 Nit: Personal preference, but I'd use |browser_| i
166 OnEditBookmarksEnabledChanged(); 156 OnEditBookmarksEnabledChanged();
167 } 157 }
168 158
169 BookmarkBarGtk::~BookmarkBarGtk() { 159 BookmarkBarGtk::~BookmarkBarGtk() {
170 RemoveAllButtons(); 160 RemoveAllButtons();
171 bookmark_toolbar_.Destroy(); 161 bookmark_toolbar_.Destroy();
172 event_box_.Destroy(); 162 event_box_.Destroy();
173 } 163 }
174 164
175 void BookmarkBarGtk::SetPageNavigator(PageNavigator* navigator) { 165 void BookmarkBarGtk::SetPageNavigator(PageNavigator* navigator) {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 gtk_alignment_set_padding(GTK_ALIGNMENT(other_padding_), 252 gtk_alignment_set_padding(GTK_ALIGNMENT(other_padding_),
263 kOtherBookmarksPaddingVertical, 253 kOtherBookmarksPaddingVertical,
264 kOtherBookmarksPaddingVertical, 254 kOtherBookmarksPaddingVertical,
265 kOtherBookmarksPaddingHorizontal, 255 kOtherBookmarksPaddingHorizontal,
266 kOtherBookmarksPaddingHorizontal); 256 kOtherBookmarksPaddingHorizontal);
267 gtk_container_add(GTK_CONTAINER(other_padding_), other_bookmarks_button_); 257 gtk_container_add(GTK_CONTAINER(other_padding_), other_bookmarks_button_);
268 gtk_box_pack_start(GTK_BOX(bookmark_hbox_), other_padding_, 258 gtk_box_pack_start(GTK_BOX(bookmark_hbox_), other_padding_,
269 FALSE, FALSE, 0); 259 FALSE, FALSE, 0);
270 gtk_widget_set_no_show_all(other_padding_, TRUE); 260 gtk_widget_set_no_show_all(other_padding_, TRUE);
271 261
272 sync_error_button_ = theme_service_->BuildChromeButton();
273 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
274 gtk_widget_set_tooltip_text(
275 sync_error_button_,
276 l10n_util::GetStringUTF8(IDS_SYNC_BOOKMARK_BAR_ERROR_DESC).c_str());
277 gtk_button_set_label(
278 GTK_BUTTON(sync_error_button_),
279 l10n_util::GetStringUTF8(IDS_SYNC_BOOKMARK_BAR_ERROR).c_str());
280 gtk_button_set_image(
281 GTK_BUTTON(sync_error_button_),
282 gtk_image_new_from_pixbuf(rb.GetNativeImageNamed(IDR_WARNING)));
283 g_signal_connect(sync_error_button_, "button-press-event",
284 G_CALLBACK(OnSyncErrorButtonPressedThunk), this);
285 gtk_box_pack_start(GTK_BOX(bookmark_hbox_), sync_error_button_,
286 FALSE, FALSE, 0);
287
288 gtk_widget_set_size_request(event_box_.get(), -1, kBookmarkBarMinimumHeight); 262 gtk_widget_set_size_request(event_box_.get(), -1, kBookmarkBarMinimumHeight);
289 263
290 ViewIDUtil::SetID(other_bookmarks_button_, VIEW_ID_OTHER_BOOKMARKS); 264 ViewIDUtil::SetID(other_bookmarks_button_, VIEW_ID_OTHER_BOOKMARKS);
291 ViewIDUtil::SetID(widget(), VIEW_ID_BOOKMARK_BAR); 265 ViewIDUtil::SetID(widget(), VIEW_ID_BOOKMARK_BAR);
292 266
293 gtk_widget_show_all(widget()); 267 gtk_widget_show_all(widget());
294 gtk_widget_hide(widget()); 268 gtk_widget_hide(widget());
295 269
296 AddCoreButtons(); 270 AddCoreButtons();
297 // TODO(erg): Handle extensions 271 // TODO(erg): Handle extensions
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 // The event box won't stay below its children's GdkWindows unless we 436 // The event box won't stay below its children's GdkWindows unless we
463 // toggle the above-child property here. If the event box doesn't stay 437 // toggle the above-child property here. If the event box doesn't stay
464 // below its children then events will be routed to it rather than the 438 // below its children then events will be routed to it rather than the
465 // children. 439 // children.
466 gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box_.get()), TRUE); 440 gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box_.get()), TRUE);
467 gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box_.get()), FALSE); 441 gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box_.get()), FALSE);
468 } 442 }
469 } 443 }
470 } 444 }
471 445
472 gtk_widget_set_visible(
473 sync_error_button_,
474 sync_ui_util::ShouldShowSyncErrorButton(sync_service_));
475
476 // Maybe show the instructions 446 // Maybe show the instructions
477 gtk_widget_set_visible(bookmark_toolbar_.get(), !show_instructions_); 447 gtk_widget_set_visible(bookmark_toolbar_.get(), !show_instructions_);
478 gtk_widget_set_visible(instructions_, show_instructions_); 448 gtk_widget_set_visible(instructions_, show_instructions_);
479 449
480 SetChevronState(); 450 SetChevronState();
481 } 451 }
482 452
483 void BookmarkBarGtk::Hide(BookmarkBar::State old_state, 453 void BookmarkBarGtk::Hide(BookmarkBar::State old_state,
484 BookmarkBar::AnimateChangeType animate_type) { 454 BookmarkBar::AnimateChangeType animate_type) {
485 UpdateDetachedState(old_state); 455 UpdateDetachedState(old_state);
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 if (event->button == 3 && gtk_widget_get_visible(bookmark_hbox_)) { 1105 if (event->button == 3 && gtk_widget_get_visible(bookmark_hbox_)) {
1136 const BookmarkNode* node = GetNodeForToolButton(sender); 1106 const BookmarkNode* node = GetNodeForToolButton(sender);
1137 DCHECK(node); 1107 DCHECK(node);
1138 DCHECK(page_navigator_); 1108 DCHECK(page_navigator_);
1139 PopupMenuForNode(sender, node, event); 1109 PopupMenuForNode(sender, node, event);
1140 } 1110 }
1141 1111
1142 return FALSE; 1112 return FALSE;
1143 } 1113 }
1144 1114
1145 gboolean BookmarkBarGtk::OnSyncErrorButtonPressed(GtkWidget* sender,
1146 GdkEventButton* event) {
1147 if (sender == sync_error_button_) {
1148 DCHECK(sync_service_ && !sync_service_->IsManaged());
1149 sync_service_->ShowErrorUI();
1150 }
1151
1152 return FALSE;
1153 }
1154
1155 void BookmarkBarGtk::OnClicked(GtkWidget* sender) { 1115 void BookmarkBarGtk::OnClicked(GtkWidget* sender) {
1156 const BookmarkNode* node = GetNodeForToolButton(sender); 1116 const BookmarkNode* node = GetNodeForToolButton(sender);
1157 DCHECK(node); 1117 DCHECK(node);
1158 DCHECK(node->is_url()); 1118 DCHECK(node->is_url());
1159 DCHECK(page_navigator_); 1119 DCHECK(page_navigator_);
1160 1120
1161 Profile* profile = browser_->profile(); 1121 Profile* profile = browser_->profile();
1162 RecordAppLaunch(profile, node->url()); 1122 RecordAppLaunch(profile, node->url());
1163 bookmark_utils::OpenAll(window_->GetNativeHandle(), profile, page_navigator_, 1123 bookmark_utils::OpenAll(window_->GetNativeHandle(), profile, page_navigator_,
1164 node, gtk_util::DispositionForCurrentButtonPressEvent()); 1124 node, gtk_util::DispositionForCurrentButtonPressEvent());
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1430 NtpBackgroundUtil::PaintBackgroundDetachedMode(theme_provider, &canvas, 1390 NtpBackgroundUtil::PaintBackgroundDetachedMode(theme_provider, &canvas,
1431 area, tab_contents_size.height()); 1391 area, tab_contents_size.height());
1432 } 1392 }
1433 1393
1434 return FALSE; // Propagate expose to children. 1394 return FALSE; // Propagate expose to children.
1435 } 1395 }
1436 1396
1437 void BookmarkBarGtk::OnEventBoxDestroy(GtkWidget* widget) { 1397 void BookmarkBarGtk::OnEventBoxDestroy(GtkWidget* widget) {
1438 if (model_) 1398 if (model_)
1439 model_->RemoveObserver(this); 1399 model_->RemoveObserver(this);
1440
1441 if (sync_service_)
1442 sync_service_->RemoveObserver(this);
1443 } 1400 }
1444 1401
1445 void BookmarkBarGtk::OnParentSizeAllocate(GtkWidget* widget, 1402 void BookmarkBarGtk::OnParentSizeAllocate(GtkWidget* widget,
1446 GtkAllocation* allocation) { 1403 GtkAllocation* allocation) {
1447 // In detached mode, our layout depends on the size of the tab contents. 1404 // In detached mode, our layout depends on the size of the tab contents.
1448 // We get the size-allocate signal before the tab contents does, hence we 1405 // We get the size-allocate signal before the tab contents does, hence we
1449 // need to post a delayed task so we will paint correctly. Note that 1406 // need to post a delayed task so we will paint correctly. Note that
1450 // gtk_widget_queue_draw by itself does not work, despite that it claims to 1407 // gtk_widget_queue_draw by itself does not work, despite that it claims to
1451 // be asynchronous. 1408 // be asynchronous.
1452 if (bookmark_bar_state_ == BookmarkBar::DETACHED) { 1409 if (bookmark_bar_state_ == BookmarkBar::DETACHED) {
1453 MessageLoop::current()->PostTask( 1410 MessageLoop::current()->PostTask(
1454 FROM_HERE, 1411 FROM_HERE,
1455 base::Bind(&BookmarkBarGtk::PaintEventBox, weak_factory_.GetWeakPtr())); 1412 base::Bind(&BookmarkBarGtk::PaintEventBox, weak_factory_.GetWeakPtr()));
1456 } 1413 }
1457 } 1414 }
1458 1415
1459 void BookmarkBarGtk::OnThrobbingWidgetDestroy(GtkWidget* widget) { 1416 void BookmarkBarGtk::OnThrobbingWidgetDestroy(GtkWidget* widget) {
1460 SetThrobbingWidget(NULL); 1417 SetThrobbingWidget(NULL);
1461 } 1418 }
1462 1419
1463 void BookmarkBarGtk::OnStateChanged() {
1464 gtk_widget_set_visible(
1465 sync_error_button_,
1466 sync_ui_util::ShouldShowSyncErrorButton(sync_service_));
1467 }
1468
1469 void BookmarkBarGtk::ShowImportDialog() { 1420 void BookmarkBarGtk::ShowImportDialog() {
1470 browser_->OpenImportSettingsDialog(); 1421 browser_->OpenImportSettingsDialog();
1471 } 1422 }
1472 1423
1473 void BookmarkBarGtk::OnEditBookmarksEnabledChanged() { 1424 void BookmarkBarGtk::OnEditBookmarksEnabledChanged() {
1474 GtkDestDefaults dest_defaults = 1425 GtkDestDefaults dest_defaults =
1475 *edit_bookmarks_enabled_ ? GTK_DEST_DEFAULT_ALL : 1426 *edit_bookmarks_enabled_ ? GTK_DEST_DEFAULT_ALL :
1476 GTK_DEST_DEFAULT_DROP; 1427 GTK_DEST_DEFAULT_DROP;
1477 gtk_drag_dest_set(overflow_button_, dest_defaults, NULL, 0, kDragAction); 1428 gtk_drag_dest_set(overflow_button_, dest_defaults, NULL, 0, kDragAction);
1478 gtk_drag_dest_set(other_bookmarks_button_, dest_defaults, 1429 gtk_drag_dest_set(other_bookmarks_button_, dest_defaults,
1479 NULL, 0, kDragAction); 1430 NULL, 0, kDragAction);
1480 ui::SetDestTargetList(overflow_button_, kDestTargetList); 1431 ui::SetDestTargetList(overflow_button_, kDestTargetList);
1481 ui::SetDestTargetList(other_bookmarks_button_, kDestTargetList); 1432 ui::SetDestTargetList(other_bookmarks_button_, kDestTargetList);
1482 } 1433 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698