Commit bddd0bd5 authored by erg@google.com's avatar erg@google.com

GTK: Refinements to the global menu.

1) When a bookmark has no title, use the truncated URL.
2) Force the rest of the icons to display in gnome. (We only forced it on
   recently closed tabs, not bookmarks or most visited).

BUG=83646
TEST=Invariants 1 and 2 above are true on Natty.

Review URL: http://codereview.chromium.org/6990049

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86445 0039d316-1c4b-4281-b951-d872f2087c98
parent 97b438ba
......@@ -153,12 +153,8 @@ void BookmarkMenuController::BuildMenu(const BookmarkNode* parent,
for (int i = start_child_index; i < parent->child_count(); ++i) {
const BookmarkNode* node = parent->GetChild(i);
// This breaks on word boundaries. Ideally we would break on character
// boundaries.
string16 elided_name = l10n_util::TruncateString(node->GetTitle(),
kMaxChars);
GtkWidget* menu_item =
gtk_image_menu_item_new_with_label(UTF16ToUTF8(elided_name).c_str());
GtkWidget* menu_item = gtk_image_menu_item_new_with_label(
bookmark_utils::BuildMenuLabelFor(node).c_str());
g_object_set_data(G_OBJECT(menu_item), "bookmark-node", AsVoid(node));
SetImageMenuItem(menu_item, node, profile_->GetBookmarkModel());
gtk_util::SetAlwaysShowImage(menu_item);
......
......@@ -34,6 +34,9 @@ const int kBitsInAByte = 8;
// Maximum number of characters on a bookmark button.
const size_t kMaxCharsOnAButton = 15;
// Maximum number of characters on a menu label.
const int kMaxCharsOnAMenuLabel = 50;
// Padding between the chrome button highlight border and the contents (favicon,
// text).
const int kButtonPaddingTop = 0;
......@@ -245,6 +248,21 @@ std::string BuildTooltipFor(const BookmarkNode* node) {
return gtk_util::BuildTooltipTitleFor(node->GetTitle(), node->GetURL());
}
std::string BuildMenuLabelFor(const BookmarkNode* node) {
// This breaks on word boundaries. Ideally we would break on character
// boundaries.
std::string elided_name = UTF16ToUTF8(
l10n_util::TruncateString(node->GetTitle(), kMaxCharsOnAMenuLabel));
if (elided_name.empty()) {
elided_name = UTF16ToUTF8(l10n_util::TruncateString(
UTF8ToUTF16(node->GetURL().possibly_invalid_spec()),
kMaxCharsOnAMenuLabel));
}
return elided_name;
}
const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget) {
return reinterpret_cast<const BookmarkNode*>(
g_object_get_data(G_OBJECT(widget), bookmark_utils::kBookmarkNode));
......
......@@ -48,6 +48,9 @@ void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model,
// Returns the tooltip.
std::string BuildTooltipFor(const BookmarkNode* node);
// Returns the label that should be in pull down menus.
std::string BuildMenuLabelFor(const BookmarkNode* node);
// Returns the "bookmark-node" property of |widget| casted to the correct type.
const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget);
......
......@@ -12,6 +12,7 @@
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h"
#include "chrome/browser/ui/gtk/global_bookmark_menu.h"
#include "chrome/browser/ui/gtk/global_menu_bar.h"
#include "chrome/browser/ui/gtk/gtk_theme_service.h"
......@@ -23,8 +24,6 @@
namespace {
const int kMaxChars = 50;
// We need to know whether we're using a newer GTK at run time because we need
// to prevent.
//
......@@ -111,6 +110,7 @@ void GlobalBookmarkMenu::RebuildMenu() {
GtkWidget* menu_item = gtk_image_menu_item_new_with_label(
l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_FOLDER_NAME).c_str());
gtk_util::SetAlwaysShowImage(menu_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
gtk_image_menu_item_set_image(
GTK_IMAGE_MENU_ITEM(menu_item),
......@@ -140,6 +140,7 @@ void GlobalBookmarkMenu::AddNodeToMenu(const BookmarkNode* node,
for (int i = 0; i < child_count; i++) {
const BookmarkNode* child = node->GetChild(i);
GtkWidget* item = gtk_image_menu_item_new();
gtk_util::SetAlwaysShowImage(item);
ConfigureMenuItem(child, item);
bookmark_nodes_[child] = item;
......@@ -165,16 +166,15 @@ void GlobalBookmarkMenu::ConfigureMenuItem(const BookmarkNode* node,
// display any visible widgets in older systems that don't have a global menu
// bar.
if (gtk_menu_item_set_label_sym) {
string16 elided_name =
l10n_util::TruncateString(node->GetTitle(), kMaxChars);
gtk_menu_item_set_label_sym(GTK_MENU_ITEM(menu_item),
UTF16ToUTF8(elided_name).c_str());
gtk_menu_item_set_label_sym(
GTK_MENU_ITEM(menu_item),
bookmark_utils::BuildMenuLabelFor(node).c_str());
}
if (node->is_url()) {
std::string tooltip = gtk_util::BuildTooltipTitleFor(node->GetTitle(),
node->GetURL());
gtk_widget_set_tooltip_markup(menu_item, tooltip.c_str());
gtk_widget_set_tooltip_markup(
menu_item,
bookmark_utils::BuildTooltipFor(node).c_str());
}
const SkBitmap& bitmap = profile_->GetBookmarkModel()->GetFavicon(node);
......
......@@ -469,6 +469,7 @@ void GlobalHistoryMenu::TabRestoreServiceChanged(TabRestoreService* service) {
// Create the menu item parent. Unlike mac, it's can't be activated.
GtkWidget* parent_item = gtk_image_menu_item_new_with_label(
title.c_str());
gtk_util::SetAlwaysShowImage(parent_item);
gtk_widget_show(parent_item);
g_object_set_data(G_OBJECT(parent_item), "type-tag",
GINT_TO_POINTER(GlobalMenuBar::TAG_RECENTLY_CLOSED));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment