diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-02 18:55:59 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-02 18:55:59 +0000 |
commit | 0d0f98accbb35d600280d8b10428e63cd7a6b3f9 (patch) | |
tree | 895424ca6d4ac013ffdf90770280479018a50576 /chrome/browser/gtk/bookmark_utils_gtk.cc | |
parent | e74a2a1c35e3ea3a759359cb30ac3b0e38f836f4 (diff) | |
download | chromium_src-0d0f98accbb35d600280d8b10428e63cd7a6b3f9.zip chromium_src-0d0f98accbb35d600280d8b10428e63cd7a6b3f9.tar.gz chromium_src-0d0f98accbb35d600280d8b10428e63cd7a6b3f9.tar.bz2 |
GTK: Clean up some bookmark related UI hacks.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/150203
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19827 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/bookmark_utils_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.cc | 67 |
1 files changed, 19 insertions, 48 deletions
diff --git a/chrome/browser/gtk/bookmark_utils_gtk.cc b/chrome/browser/gtk/bookmark_utils_gtk.cc index 982e044..c78ade7 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.cc +++ b/chrome/browser/gtk/bookmark_utils_gtk.cc @@ -37,30 +37,6 @@ const GdkColor kDisabledColor = GDK_COLOR_RGB(161, 161, 146); // 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 @@ namespace bookmark_utils { 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 @@ void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model, 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); + + 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(button); + SetButtonTextColors(label); g_object_set_data(G_OBJECT(button), bookmark_utils::kBookmarkNode, AsVoid(node)); } @@ -163,15 +138,11 @@ const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) { 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 ----------------------------------------------------------------- |