summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-02 18:55:59 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-02 18:55:59 +0000
commit0d0f98accbb35d600280d8b10428e63cd7a6b3f9 (patch)
tree895424ca6d4ac013ffdf90770280479018a50576 /chrome/browser/gtk
parente74a2a1c35e3ea3a759359cb30ac3b0e38f836f4 (diff)
downloadchromium_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.cc17
-rw-r--r--chrome/browser/gtk/bookmark_utils_gtk.cc67
-rw-r--r--chrome/browser/gtk/bookmark_utils_gtk.h7
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. --------------------------------------------------------------