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

Side by Side Diff: chrome/browser/gtk/bookmark_utils_gtk.cc

Issue 150203: Clean up some bookmark related hacks. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months 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
« no previous file with comments | « chrome/browser/gtk/bookmark_utils_gtk.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/bookmark_utils_gtk.h" 5 #include "chrome/browser/gtk/bookmark_utils_gtk.h"
6 6
7 #include "app/resource_bundle.h" 7 #include "app/resource_bundle.h"
8 #include "base/gfx/gtk_util.h" 8 #include "base/gfx/gtk_util.h"
9 #include "base/pickle.h" 9 #include "base/pickle.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 19 matching lines...) Expand all
30 const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4); 30 const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4);
31 31
32 // Color of the button text, taken from TextButtonView. 32 // Color of the button text, taken from TextButtonView.
33 const GdkColor kEnabledColor = GDK_COLOR_RGB(6, 45, 117); 33 const GdkColor kEnabledColor = GDK_COLOR_RGB(6, 45, 117);
34 const GdkColor kDisabledColor = GDK_COLOR_RGB(161, 161, 146); 34 const GdkColor kDisabledColor = GDK_COLOR_RGB(161, 161, 146);
35 // TextButtonView uses 255, 255, 255 with opacity of 200. We don't support 35 // TextButtonView uses 255, 255, 255 with opacity of 200. We don't support
36 // transparent text though, so just use a slightly lighter version of 36 // transparent text though, so just use a slightly lighter version of
37 // kEnabledColor. 37 // kEnabledColor.
38 const GdkColor kHighlightColor = GDK_COLOR_RGB(56, 95, 167); 38 const GdkColor kHighlightColor = GDK_COLOR_RGB(56, 95, 167);
39 39
40 std::string DoubleUnderscores(const std::string& text) {
41 std::string ret;
42 ret.reserve(text.length() * 2);
43 for (size_t i = 0; i < text.length(); ++i) {
44 if ('_' == text[i]) {
45 ret.push_back('_');
46 ret.push_back('_');
47 } else {
48 ret.push_back(text[i]);
49 }
50 }
51
52 return ret;
53 }
54
55 // Recursively search for label among the children of |widget|.
56 void SearchForLabel(GtkWidget* widget, gpointer data) {
57 if (GTK_IS_LABEL(widget)) {
58 *reinterpret_cast<GtkWidget**>(data) = widget;
59 } else if (GTK_IS_CONTAINER(widget)) {
60 gtk_container_foreach(GTK_CONTAINER(widget), SearchForLabel, data);
61 }
62 }
63
64 void* AsVoid(const BookmarkNode* node) { 40 void* AsVoid(const BookmarkNode* node) {
65 return const_cast<BookmarkNode*>(node); 41 return const_cast<BookmarkNode*>(node);
66 } 42 }
67 43
68 } // namespace 44 } // namespace
69 45
70 namespace bookmark_utils { 46 namespace bookmark_utils {
71 47
72 const char kBookmarkNode[] = "bookmark-node"; 48 const char kBookmarkNode[] = "bookmark-node";
73 49
50 const int kBarButtonPadding = 2;
51
74 GdkPixbuf* GetFolderIcon() { 52 GdkPixbuf* GetFolderIcon() {
75 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 53 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
76 static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed( 54 static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed(
77 IDR_BOOKMARK_BAR_FOLDER); 55 IDR_BOOKMARK_BAR_FOLDER);
78 return default_folder_icon; 56 return default_folder_icon;
79 } 57 }
80 58
81 GdkPixbuf* GetDefaultFavicon() { 59 GdkPixbuf* GetDefaultFavicon() {
82 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 60 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
83 static GdkPixbuf* default_bookmark_icon = rb.GetPixbufNamed( 61 static GdkPixbuf* default_bookmark_icon = rb.GetPixbufNamed(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 100
123 return window; 101 return window;
124 } 102 }
125 103
126 void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model, 104 void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model,
127 GtkWidget* button) { 105 GtkWidget* button) {
128 std::string tooltip = BuildTooltipFor(node); 106 std::string tooltip = BuildTooltipFor(node);
129 if (!tooltip.empty()) 107 if (!tooltip.empty())
130 gtk_widget_set_tooltip_text(button, tooltip.c_str()); 108 gtk_widget_set_tooltip_text(button, tooltip.c_str());
131 109
110 // We pack the button manually (rather than using gtk_button_set_*) so that
111 // we can have finer control over its label.
132 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model); 112 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model);
133 gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_pixbuf(pixbuf)); 113 GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
134 g_object_unref(pixbuf); 114 g_object_unref(pixbuf);
135 115
136 // TODO(erg): Consider a soft maximum instead of this hard 15. 116 GtkWidget* label = gtk_label_new(WideToUTF8(node->GetTitle()).c_str());
137 std::wstring title = node->GetTitle(); 117 gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton);
138 // Don't treat underscores as mnemonics. 118 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
139 // O, that we could just use gtk_button_set_use_underline()!
140 // See http://bugzilla.gnome.org/show_bug.cgi?id=586330
141 std::string text = DoubleUnderscores(WideToUTF8(title));
142 gtk_button_set_label(GTK_BUTTON(button), text.c_str());
143 GtkWidget* label = NULL;
144 gtk_container_foreach(GTK_CONTAINER(button), SearchForLabel, &label);
145 if (label) {
146 gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton);
147 gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
148 }
149 119
150 SetButtonTextColors(button); 120 GtkWidget* box = gtk_hbox_new(FALSE, kBarButtonPadding);
121 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0);
122 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
123 gtk_container_add(GTK_CONTAINER(button), box);
124
125 SetButtonTextColors(label);
151 g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode, 126 g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode,
152 AsVoid(node)); 127 AsVoid(node));
153 } 128 }
154 129
155 std::string BuildTooltipFor(const BookmarkNode* node) { 130 std::string BuildTooltipFor(const BookmarkNode* node) {
156 // TODO(erg): Actually build the tooltip. For now, we punt and just return 131 // TODO(erg): Actually build the tooltip. For now, we punt and just return
157 // the URL. 132 // the URL.
158 return node->GetURL().possibly_invalid_spec(); 133 return node->GetURL().possibly_invalid_spec();
159 } 134 }
160 135
161 const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) { 136 const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) {
162 return reinterpret_cast<const BookmarkNode*>( 137 return reinterpret_cast<const BookmarkNode*>(
163 g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode)); 138 g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode));
164 } 139 }
165 140
166 void SetButtonTextColors(GtkWidget* button) { 141 void SetButtonTextColors(GtkWidget* label) {
167 GtkWidget* label = NULL; 142 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor);
168 gtk_container_foreach(GTK_CONTAINER(button), SearchForLabel, &label); 143 gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor);
169 if (label) { 144 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor);
170 gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor); 145 gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor);
171 gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor);
172 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor);
173 gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor);
174 }
175 } 146 }
176 147
177 // DnD-related ----------------------------------------------------------------- 148 // DnD-related -----------------------------------------------------------------
178 149
179 void WriteBookmarkToSelection(const BookmarkNode* node, 150 void WriteBookmarkToSelection(const BookmarkNode* node,
180 GtkSelectionData* selection_data, 151 GtkSelectionData* selection_data,
181 guint target_type, 152 guint target_type,
182 Profile* profile) { 153 Profile* profile) {
183 DCHECK(node); 154 DCHECK(node);
184 std::vector<const BookmarkNode*> nodes; 155 std::vector<const BookmarkNode*> nodes;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 default: { 206 default: {
236 DLOG(ERROR) << "Unsupported drag received type: " << target_type; 207 DLOG(ERROR) << "Unsupported drag received type: " << target_type;
237 } 208 }
238 } 209 }
239 } 210 }
240 211
241 return std::vector<const BookmarkNode*>(); 212 return std::vector<const BookmarkNode*>();
242 } 213 }
243 214
244 } // namespace bookmark_utils 215 } // namespace bookmark_utils
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_utils_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698