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 | |
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')
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.cc | 17 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.cc | 67 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.h | 7 |
3 files changed, 34 insertions, 57 deletions
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc index 1965a1b..dd06d05 100644 --- a/chrome/browser/gtk/bookmark_bar_gtk.cc +++ b/chrome/browser/gtk/bookmark_bar_gtk.cc @@ -150,15 +150,20 @@ void BookmarkBarGtk::Init(Profile* profile) { gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), gtk_vseparator_new(), FALSE, FALSE, 0); + // We pack the button manually (rather than using gtk_button_set_*) so that + // we can have finer control over its label. other_bookmarks_button_ = gtk_chrome_button_new(); ConnectFolderButtonEvents(other_bookmarks_button_); - gtk_button_set_label( - GTK_BUTTON(other_bookmarks_button_), + + GtkWidget* image = gtk_image_new_from_pixbuf(folder_icon); + GtkWidget* label = gtk_label_new( l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_BOOKMARKED).c_str()); - gtk_button_set_image(GTK_BUTTON(other_bookmarks_button_), - gtk_image_new_from_pixbuf(folder_icon)); - // Set the proper text colors. - bookmark_utils::SetButtonTextColors(other_bookmarks_button_); + bookmark_utils::SetButtonTextColors(label); + + GtkWidget* box = gtk_hbox_new(FALSE, bookmark_utils::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(other_bookmarks_button_), box); gtk_box_pack_start(GTK_BOX(bookmark_hbox_.get()), other_bookmarks_button_, FALSE, FALSE, 0); 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 ----------------------------------------------------------------- diff --git a/chrome/browser/gtk/bookmark_utils_gtk.h b/chrome/browser/gtk/bookmark_utils_gtk.h index 79083f0..72ea24e 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.h +++ b/chrome/browser/gtk/bookmark_utils_gtk.h @@ -17,6 +17,9 @@ namespace bookmark_utils { extern const char kBookmarkNode[]; +// Padding between the image and the label of a bookmark bar button. +extern const int kBarButtonPadding; + // These functions do not add a ref to the returned pixbuf, and it should not be // unreffed. GdkPixbuf* GetFolderIcon(); @@ -43,10 +46,8 @@ std::string BuildTooltipFor(const BookmarkNode* node); const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget); // This function is a temporary hack to fix fonts on dark system themes. -// NOTE: this makes assumptions about GtkButton internals. Also, it only works -// if you call it after the last time you edit the button. // TODO(estade): remove this function. -void SetButtonTextColors(GtkWidget* button); +void SetButtonTextColors(GtkWidget* label); // Drag and drop. -------------------------------------------------------------- |