| Index: chrome/browser/gtk/bookmark_utils_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/bookmark_utils_gtk.cc (revision 19793)
|
| +++ chrome/browser/gtk/bookmark_utils_gtk.cc (working copy)
|
| @@ -37,30 +37,6 @@
|
| // kEnabledColor.
|
| const GdkColor kHighlightColor = GDK_COLOR_RGB(56, 95, 167);
|
|
|
| -std::string DoubleUnderscores(const std::string& text) {
|
| - std::string ret;
|
| - ret.reserve(text.length() * 2);
|
| - for (size_t i = 0; i < text.length(); ++i) {
|
| - if ('_' == text[i]) {
|
| - ret.push_back('_');
|
| - ret.push_back('_');
|
| - } else {
|
| - ret.push_back(text[i]);
|
| - }
|
| - }
|
| -
|
| - return ret;
|
| -}
|
| -
|
| -// Recursively search for label among the children of |widget|.
|
| -void SearchForLabel(GtkWidget* widget, gpointer data) {
|
| - if (GTK_IS_LABEL(widget)) {
|
| - *reinterpret_cast<GtkWidget**>(data) = widget;
|
| - } else if (GTK_IS_CONTAINER(widget)) {
|
| - gtk_container_foreach(GTK_CONTAINER(widget), SearchForLabel, data);
|
| - }
|
| -}
|
| -
|
| void* AsVoid(const BookmarkNode* node) {
|
| return const_cast<BookmarkNode*>(node);
|
| }
|
| @@ -71,6 +47,8 @@
|
|
|
| const char kBookmarkNode[] = "bookmark-node";
|
|
|
| +const int kBarButtonPadding = 2;
|
| +
|
| GdkPixbuf* GetFolderIcon() {
|
| ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed(
|
| @@ -129,25 +107,22 @@
|
| if (!tooltip.empty())
|
| gtk_widget_set_tooltip_text(button, tooltip.c_str());
|
|
|
| + // We pack the button manually (rather than using gtk_button_set_*) so that
|
| + // we can have finer control over its label.
|
| GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model);
|
| - gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_pixbuf(pixbuf));
|
| + GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
|
| g_object_unref(pixbuf);
|
|
|
| - // TODO(erg): Consider a soft maximum instead of this hard 15.
|
| - std::wstring title = node->GetTitle();
|
| - // Don't treat underscores as mnemonics.
|
| - // O, that we could just use gtk_button_set_use_underline()!
|
| - // See http://bugzilla.gnome.org/show_bug.cgi?id=586330
|
| - std::string text = DoubleUnderscores(WideToUTF8(title));
|
| - gtk_button_set_label(GTK_BUTTON(button), text.c_str());
|
| - GtkWidget* label = NULL;
|
| - gtk_container_foreach(GTK_CONTAINER(button), SearchForLabel, &label);
|
| - if (label) {
|
| - gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton);
|
| - gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
|
| - }
|
| + GtkWidget* label = gtk_label_new(WideToUTF8(node->GetTitle()).c_str());
|
| + gtk_label_set_max_width_chars(GTK_LABEL(label), kMaxCharsOnAButton);
|
| + gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
|
|
|
| - SetButtonTextColors(button);
|
| + GtkWidget* box = gtk_hbox_new(FALSE, kBarButtonPadding);
|
| + gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0);
|
| + gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
|
| + gtk_container_add(GTK_CONTAINER(button), box);
|
| +
|
| + SetButtonTextColors(label);
|
| g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode,
|
| AsVoid(node));
|
| }
|
| @@ -163,15 +138,11 @@
|
| g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode));
|
| }
|
|
|
| -void SetButtonTextColors(GtkWidget* button) {
|
| - GtkWidget* label = NULL;
|
| - gtk_container_foreach(GTK_CONTAINER(button), SearchForLabel, &label);
|
| - if (label) {
|
| - gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor);
|
| - gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor);
|
| - gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor);
|
| - gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor);
|
| - }
|
| +void SetButtonTextColors(GtkWidget* label) {
|
| + gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &kEnabledColor);
|
| + gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &kEnabledColor);
|
| + gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &kHighlightColor);
|
| + gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &kDisabledColor);
|
| }
|
|
|
| // DnD-related -----------------------------------------------------------------
|
|
|