OLD | NEW |
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/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 gtk_drag_dest_set(bookmark_toolbar_.get(), GTK_DEST_DEFAULT_DROP, | 257 gtk_drag_dest_set(bookmark_toolbar_.get(), GTK_DEST_DEFAULT_DROP, |
258 NULL, 0, kDragAction); | 258 NULL, 0, kDragAction); |
259 ui::SetDestTargetList(bookmark_toolbar_.get(), kDestTargetList); | 259 ui::SetDestTargetList(bookmark_toolbar_.get(), kDestTargetList); |
260 g_signal_connect(bookmark_toolbar_.get(), "drag-motion", | 260 g_signal_connect(bookmark_toolbar_.get(), "drag-motion", |
261 G_CALLBACK(&OnToolbarDragMotionThunk), this); | 261 G_CALLBACK(&OnToolbarDragMotionThunk), this); |
262 g_signal_connect(bookmark_toolbar_.get(), "drag-leave", | 262 g_signal_connect(bookmark_toolbar_.get(), "drag-leave", |
263 G_CALLBACK(&OnDragLeaveThunk), this); | 263 G_CALLBACK(&OnDragLeaveThunk), this); |
264 g_signal_connect(bookmark_toolbar_.get(), "drag-data-received", | 264 g_signal_connect(bookmark_toolbar_.get(), "drag-data-received", |
265 G_CALLBACK(&OnDragReceivedThunk), this); | 265 G_CALLBACK(&OnDragReceivedThunk), this); |
266 | 266 |
267 GtkWidget* vseparator = theme_service_->CreateToolbarSeparator(); | 267 other_bookmarks_separator_ = theme_service_->CreateToolbarSeparator(); |
268 gtk_box_pack_start(GTK_BOX(bookmark_hbox_), vseparator, | 268 gtk_box_pack_start(GTK_BOX(bookmark_hbox_), other_bookmarks_separator_, |
269 FALSE, FALSE, 0); | 269 FALSE, FALSE, 0); |
270 | 270 |
271 // We pack the button manually (rather than using gtk_button_set_*) so that | 271 // We pack the button manually (rather than using gtk_button_set_*) so that |
272 // we can have finer control over its label. | 272 // we can have finer control over its label. |
273 other_bookmarks_button_ = theme_service_->BuildChromeButton(); | 273 other_bookmarks_button_ = theme_service_->BuildChromeButton(); |
274 ConnectFolderButtonEvents(other_bookmarks_button_, false); | 274 ConnectFolderButtonEvents(other_bookmarks_button_, false); |
275 GtkWidget* other_padding = gtk_alignment_new(0, 0, 1, 1); | 275 GtkWidget* other_padding = gtk_alignment_new(0, 0, 1, 1); |
276 gtk_alignment_set_padding(GTK_ALIGNMENT(other_padding), | 276 gtk_alignment_set_padding(GTK_ALIGNMENT(other_padding), |
277 kOtherBookmarksPaddingVertical, | 277 kOtherBookmarksPaddingVertical, |
278 kOtherBookmarksPaddingVertical, | 278 kOtherBookmarksPaddingVertical, |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 if (GTK_WIDGET_VISIBLE(overflow_button_)) | 532 if (GTK_WIDGET_VISIBLE(overflow_button_)) |
533 extra_space = overflow_button_->allocation.width; | 533 extra_space = overflow_button_->allocation.width; |
534 | 534 |
535 int overflow_idx = GetFirstHiddenBookmark(extra_space, NULL); | 535 int overflow_idx = GetFirstHiddenBookmark(extra_space, NULL); |
536 if (overflow_idx == -1) | 536 if (overflow_idx == -1) |
537 gtk_widget_hide(overflow_button_); | 537 gtk_widget_hide(overflow_button_); |
538 else | 538 else |
539 gtk_widget_show_all(overflow_button_); | 539 gtk_widget_show_all(overflow_button_); |
540 } | 540 } |
541 | 541 |
| 542 void BookmarkBarGtk::UpdateOtherBookmarksVisibility() { |
| 543 bool has_other_children = !model_->other_node()->empty(); |
| 544 if (has_other_children == gtk_widget_get_visible(other_bookmarks_button_)) |
| 545 return; |
| 546 |
| 547 gtk_widget_set_visible(other_bookmarks_button_, has_other_children); |
| 548 gtk_widget_set_visible(other_bookmarks_separator_, has_other_children); |
| 549 } |
| 550 |
542 void BookmarkBarGtk::RemoveAllBookmarkButtons() { | 551 void BookmarkBarGtk::RemoveAllBookmarkButtons() { |
543 gtk_util::RemoveAllChildren(bookmark_toolbar_.get()); | 552 gtk_util::RemoveAllChildren(bookmark_toolbar_.get()); |
544 menu_bar_helper_.Clear(); | 553 menu_bar_helper_.Clear(); |
545 menu_bar_helper_.Add(other_bookmarks_button_); | 554 menu_bar_helper_.Add(other_bookmarks_button_); |
546 menu_bar_helper_.Add(overflow_button_); | 555 menu_bar_helper_.Add(overflow_button_); |
547 } | 556 } |
548 | 557 |
549 int BookmarkBarGtk::GetBookmarkButtonCount() { | 558 int BookmarkBarGtk::GetBookmarkButtonCount() { |
550 GList* children = gtk_container_get_children( | 559 GList* children = gtk_container_get_children( |
551 GTK_CONTAINER(bookmark_toolbar_.get())); | 560 GTK_CONTAINER(bookmark_toolbar_.get())); |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(bookmark_toolbar_.get()), | 830 gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(bookmark_toolbar_.get()), |
822 NULL, 0); | 831 NULL, 0); |
823 } | 832 } |
824 | 833 |
825 void BookmarkBarGtk::Loaded(BookmarkModel* model) { | 834 void BookmarkBarGtk::Loaded(BookmarkModel* model) { |
826 // If |instructions_| has been nulled, we are in the middle of browser | 835 // If |instructions_| has been nulled, we are in the middle of browser |
827 // shutdown. Do nothing. | 836 // shutdown. Do nothing. |
828 if (!instructions_) | 837 if (!instructions_) |
829 return; | 838 return; |
830 | 839 |
| 840 UpdateOtherBookmarksVisibility(); |
831 RemoveAllBookmarkButtons(); | 841 RemoveAllBookmarkButtons(); |
832 CreateAllBookmarkButtons(); | 842 CreateAllBookmarkButtons(); |
833 } | 843 } |
834 | 844 |
835 void BookmarkBarGtk::BookmarkModelBeingDeleted(BookmarkModel* model) { | 845 void BookmarkBarGtk::BookmarkModelBeingDeleted(BookmarkModel* model) { |
836 // The bookmark model should never be deleted before us. This code exists | 846 // The bookmark model should never be deleted before us. This code exists |
837 // to check for regressions in shutdown code and not crash. | 847 // to check for regressions in shutdown code and not crash. |
838 if (!browser_shutdown::ShuttingDownWithoutClosingBrowsers()) | 848 if (!browser_shutdown::ShuttingDownWithoutClosingBrowsers()) |
839 NOTREACHED(); | 849 NOTREACHED(); |
840 | 850 |
(...skipping 21 matching lines...) Expand all Loading... |
862 return; | 872 return; |
863 } | 873 } |
864 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); | 874 DCHECK(index >= 0 && index <= GetBookmarkButtonCount()); |
865 | 875 |
866 GtkToolItem* item = CreateBookmarkToolItem(node); | 876 GtkToolItem* item = CreateBookmarkToolItem(node); |
867 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), | 877 gtk_toolbar_insert(GTK_TOOLBAR(bookmark_toolbar_.get()), |
868 item, index); | 878 item, index); |
869 if (node->is_folder()) | 879 if (node->is_folder()) |
870 menu_bar_helper_.Add(gtk_bin_get_child(GTK_BIN(item))); | 880 menu_bar_helper_.Add(gtk_bin_get_child(GTK_BIN(item))); |
871 | 881 |
| 882 UpdateOtherBookmarksVisibility(); |
872 SetInstructionState(); | 883 SetInstructionState(); |
873 SetChevronState(); | 884 SetChevronState(); |
874 | 885 |
875 StartThrobbingAfterAllocation(GTK_WIDGET(item)); | 886 StartThrobbingAfterAllocation(GTK_WIDGET(item)); |
876 } | 887 } |
877 | 888 |
878 void BookmarkBarGtk::BookmarkNodeRemoved(BookmarkModel* model, | 889 void BookmarkBarGtk::BookmarkNodeRemoved(BookmarkModel* model, |
879 const BookmarkNode* parent, | 890 const BookmarkNode* parent, |
880 int old_index, | 891 int old_index, |
881 const BookmarkNode* node) { | 892 const BookmarkNode* node) { |
882 if (parent != model_->GetBookmarkBarNode()) { | 893 if (parent != model_->GetBookmarkBarNode()) { |
883 // We only care about nodes on the bookmark bar. | 894 // We only care about nodes on the bookmark bar. |
884 return; | 895 return; |
885 } | 896 } |
886 DCHECK(old_index >= 0 && old_index < GetBookmarkButtonCount()); | 897 DCHECK(old_index >= 0 && old_index < GetBookmarkButtonCount()); |
887 | 898 |
888 GtkWidget* to_remove = GTK_WIDGET(gtk_toolbar_get_nth_item( | 899 GtkWidget* to_remove = GTK_WIDGET(gtk_toolbar_get_nth_item( |
889 GTK_TOOLBAR(bookmark_toolbar_.get()), old_index)); | 900 GTK_TOOLBAR(bookmark_toolbar_.get()), old_index)); |
890 if (node->is_folder()) | 901 if (node->is_folder()) |
891 menu_bar_helper_.Remove(gtk_bin_get_child(GTK_BIN(to_remove))); | 902 menu_bar_helper_.Remove(gtk_bin_get_child(GTK_BIN(to_remove))); |
892 gtk_container_remove(GTK_CONTAINER(bookmark_toolbar_.get()), | 903 gtk_container_remove(GTK_CONTAINER(bookmark_toolbar_.get()), |
893 to_remove); | 904 to_remove); |
894 | 905 |
| 906 UpdateOtherBookmarksVisibility(); |
895 SetInstructionState(); | 907 SetInstructionState(); |
896 SetChevronState(); | 908 SetChevronState(); |
897 } | 909 } |
898 | 910 |
899 void BookmarkBarGtk::BookmarkNodeChanged(BookmarkModel* model, | 911 void BookmarkBarGtk::BookmarkNodeChanged(BookmarkModel* model, |
900 const BookmarkNode* node) { | 912 const BookmarkNode* node) { |
901 if (node->parent() != model_->GetBookmarkBarNode()) { | 913 if (node->parent() != model_->GetBookmarkBarNode()) { |
902 // We only care about nodes on the bookmark bar. | 914 // We only care about nodes on the bookmark bar. |
903 return; | 915 return; |
904 } | 916 } |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 void BookmarkBarGtk::OnEditBookmarksEnabledChanged() { | 1456 void BookmarkBarGtk::OnEditBookmarksEnabledChanged() { |
1445 GtkDestDefaults dest_defaults = | 1457 GtkDestDefaults dest_defaults = |
1446 *edit_bookmarks_enabled_ ? GTK_DEST_DEFAULT_ALL : | 1458 *edit_bookmarks_enabled_ ? GTK_DEST_DEFAULT_ALL : |
1447 GTK_DEST_DEFAULT_DROP; | 1459 GTK_DEST_DEFAULT_DROP; |
1448 gtk_drag_dest_set(overflow_button_, dest_defaults, NULL, 0, kDragAction); | 1460 gtk_drag_dest_set(overflow_button_, dest_defaults, NULL, 0, kDragAction); |
1449 gtk_drag_dest_set(other_bookmarks_button_, dest_defaults, | 1461 gtk_drag_dest_set(other_bookmarks_button_, dest_defaults, |
1450 NULL, 0, kDragAction); | 1462 NULL, 0, kDragAction); |
1451 ui::SetDestTargetList(overflow_button_, kDestTargetList); | 1463 ui::SetDestTargetList(overflow_button_, kDestTargetList); |
1452 ui::SetDestTargetList(other_bookmarks_button_, kDestTargetList); | 1464 ui::SetDestTargetList(other_bookmarks_button_, kDestTargetList); |
1453 } | 1465 } |
OLD | NEW |