summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/gtk/back_forward_menu_model_gtk.cc10
-rw-r--r--chrome/browser/gtk/bookmark_menu_controller_gtk.cc11
-rw-r--r--chrome/browser/gtk/bookmark_utils_gtk.cc33
-rw-r--r--chrome/browser/gtk/go_button_gtk.cc7
-rw-r--r--chrome/browser/gtk/menu_gtk.cc6
5 files changed, 58 insertions, 9 deletions
diff --git a/chrome/browser/gtk/back_forward_menu_model_gtk.cc b/chrome/browser/gtk/back_forward_menu_model_gtk.cc
index 6747b98..ff31cf4 100644
--- a/chrome/browser/gtk/back_forward_menu_model_gtk.cc
+++ b/chrome/browser/gtk/back_forward_menu_model_gtk.cc
@@ -4,9 +4,13 @@
#include "chrome/browser/gtk/back_forward_menu_model_gtk.h"
+#include "app/l10n_util.h"
#include "base/string_util.h"
#include "chrome/browser/gtk/back_forward_button_gtk.h"
+// Might want to vary this by locale.
+static const size_t kMaxChars = 50;
+
BackForwardMenuModelGtk::BackForwardMenuModelGtk(Browser* browser,
ModelType model_type,
BackForwardButtonGtk* button)
@@ -23,7 +27,11 @@ bool BackForwardMenuModelGtk::IsItemSeparator(int command_id) const {
}
std::string BackForwardMenuModelGtk::GetLabel(int command_id) const {
- return UTF16ToUTF8(GetItemLabel(command_id));
+ std::wstring item_label_wstr = UTF16ToWideHack(GetItemLabel(command_id));
+ // This breaks on word boundaries. Ideally we would break on character
+ // boundaries.
+ item_label_wstr = l10n_util::TruncateString(item_label_wstr, kMaxChars);
+ return WideToUTF8(item_label_wstr);
}
bool BackForwardMenuModelGtk::HasIcon(int command_id) const {
diff --git a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
index b059fc8..de4b885 100644
--- a/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
+++ b/chrome/browser/gtk/bookmark_menu_controller_gtk.cc
@@ -27,6 +27,9 @@
namespace {
+// TODO(estade): It might be a good idea to vary this by locale.
+const int kMaxChars = 50;
+
void SetImageMenuItem(GtkWidget* menu_item, const SkBitmap& bitmap) {
GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item),
@@ -150,8 +153,12 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent,
for (int i = start_child_index; i < parent->GetChildCount(); ++i) {
const BookmarkNode* node = parent->GetChild(i);
- GtkWidget* menu_item = gtk_image_menu_item_new_with_label(
- WideToUTF8(node->GetTitle()).c_str());
+ // This breaks on word boundaries. Ideally we would break on character
+ // boundaries.
+ std::wstring elided_name =
+ l10n_util::TruncateString(node->GetTitle(), kMaxChars);
+ GtkWidget* menu_item =
+ gtk_image_menu_item_new_with_label(WideToUTF8(elided_name).c_str());
g_object_set_data(G_OBJECT(menu_item), "bookmark-node", AsVoid(node));
if (node->is_url()) {
diff --git a/chrome/browser/gtk/bookmark_utils_gtk.cc b/chrome/browser/gtk/bookmark_utils_gtk.cc
index aec8fa6..12f27eb 100644
--- a/chrome/browser/gtk/bookmark_utils_gtk.cc
+++ b/chrome/browser/gtk/bookmark_utils_gtk.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/gtk/bookmark_utils_gtk.h"
#include "app/gtk_dnd_util.h"
+#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/gfx/gtk_util.h"
#include "base/pickle.h"
@@ -29,6 +30,10 @@ const int kBitsInAByte = 8;
// Maximum number of characters on a bookmark button.
const size_t kMaxCharsOnAButton = 15;
+// Max size of each component of the button tooltips.
+const size_t kMaxTooltipTitleLength = 100;
+const size_t kMaxTooltipURLLength = 400;
+
// Only used for the background of the drag widget.
const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xe6, 0xed, 0xf4);
@@ -147,7 +152,7 @@ void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model,
std::string tooltip = BuildTooltipFor(node);
if (!tooltip.empty())
- gtk_widget_set_tooltip_text(button, tooltip.c_str());
+ gtk_widget_set_tooltip_markup(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.
@@ -186,9 +191,29 @@ void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model,
}
std::string BuildTooltipFor(const BookmarkNode* node) {
- // TODO(erg): Actually build the tooltip. For now, we punt and just return
- // the URL.
- return node->GetURL().possibly_invalid_spec();
+ const std::string& url = node->GetURL().possibly_invalid_spec();
+ const std::string& title = WideToUTF8(node->GetTitle());
+
+ std::string truncated_url = WideToUTF8(l10n_util::TruncateString(
+ UTF8ToWide(url), kMaxTooltipURLLength));
+ gchar* escaped_url_cstr = g_markup_escape_text(truncated_url.c_str(),
+ truncated_url.size());
+ std::string escaped_url(escaped_url_cstr);
+ g_free(escaped_url_cstr);
+
+ std::string tooltip;
+ if (url == title) {
+ return escaped_url;
+ } else {
+ std::string truncated_title = WideToUTF8(l10n_util::TruncateString(
+ node->GetTitle(), kMaxTooltipTitleLength));
+ gchar* escaped_title_cstr = g_markup_escape_text(truncated_title.c_str(),
+ truncated_title.size());
+ std::string escaped_title(escaped_title_cstr);
+ g_free(escaped_title_cstr);
+
+ return std::string("<b>") + escaped_title + "</b>\n" + escaped_url;
+ }
}
const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) {
diff --git a/chrome/browser/gtk/go_button_gtk.cc b/chrome/browser/gtk/go_button_gtk.cc
index 81b8e52..e4606bb 100644
--- a/chrome/browser/gtk/go_button_gtk.cc
+++ b/chrome/browser/gtk/go_button_gtk.cc
@@ -19,6 +19,10 @@
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
+// Limit the length of the tooltip text. This applies only to the text in the
+// omnibox (e.g. X in "Go to X");
+const size_t kMaxTooltipTextLength = 400;
+
GoButtonGtk::GoButtonGtk(LocationBarViewGtk* location_bar, Browser* browser)
: location_bar_(location_bar),
browser_(browser),
@@ -193,7 +197,8 @@ gboolean GoButtonGtk::OnQueryTooltip(GtkTooltip* tooltip) {
std::wstring current_text_wstr(location_bar_->location_entry()->GetText());
if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT)
l10n_util::WrapStringWithLTRFormatting(&current_text_wstr);
- string16 current_text = WideToUTF16Hack(current_text_wstr);
+ string16 current_text = WideToUTF16Hack(
+ l10n_util::TruncateString(current_text_wstr, kMaxTooltipTextLength));
AutocompleteEditModel* edit_model =
location_bar_->location_entry()->model();
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
index 73a3296..8cfe7f8 100644
--- a/chrome/browser/gtk/menu_gtk.cc
+++ b/chrome/browser/gtk/menu_gtk.cc
@@ -292,8 +292,12 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu,
if (!start_align)
*x += widget->allocation.width - menu_req.width;
- if (*y + menu_req.height >= screen_rect.height)
+ // If the menu would run off the bottom of the screen, and there is more
+ // screen space up than down, then pop upwards.
+ if (*y + menu_req.height >= screen_rect.height &&
+ *y > screen_rect.height / 2) {
*y -= menu_req.height;
+ }
*push_in = FALSE;
}