From 777f946ee725ef3d77d031f97426cdedd425ed67 Mon Sep 17 00:00:00 2001 From: "avayvod@chromium.org" Date: Tue, 29 Jun 2010 16:12:12 +0000 Subject: Show tooltips only for users with identical display names. Tooltip text is changed from email to " ()". BUG=cros:2318 TEST=Verify that tooltips are shown only for users with equal display names. Tooltips show display name and domain. Review URL: http://codereview.chromium.org/2877002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51129 0039d316-1c4b-4281-b951-d872f2087c98 --- .../chromeos/login/existing_user_controller.cc | 22 ++++++++++------------ chrome/browser/chromeos/login/user_controller.cc | 20 +++++++++++++++++++- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index 39a0067..ea9057c 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc @@ -6,7 +6,7 @@ #include #include -#include +#include #include "app/l10n_util.h" #include "app/resource_bundle.h" @@ -58,20 +58,18 @@ const char kCaptchaUrlPrefix[] = "http://www.google.com/accounts/"; // tooltips with full emails to let users distinguish their accounts. // Otherwise, disables the tooltips. void EnableTooltipsIfNeeded(const std::vector& controllers) { - bool show_name_tooltips = false; - std::set visible_display_names; - for (size_t i = 0; i < controllers.size(); ++i) { + std::map visible_display_names; + for (size_t i = 0; i + 1 < controllers.size(); ++i) { const std::string& display_name = controllers[i]->user().GetDisplayName(); - if (visible_display_names.count(display_name) > 0) { - show_name_tooltips = true; - break; - } - visible_display_names.insert(display_name); + ++visible_display_names[display_name]; + } + for (size_t i = 0; i + 1 < controllers.size(); ++i) { + const std::string& display_name = + controllers[i]->user().GetDisplayName(); + bool show_tooltip = visible_display_names[display_name] > 1; + controllers[i]->EnableNameTooltip(show_tooltip); } - for (size_t i = 0; i < controllers.size(); ++i) - if (!controllers[i]->is_guest()) - controllers[i]->EnableNameTooltip(show_name_tooltips); } } // namespace diff --git a/chrome/browser/chromeos/login/user_controller.cc b/chrome/browser/chromeos/login/user_controller.cc index 85015a1..a576f59 100644 --- a/chrome/browser/chromeos/login/user_controller.cc +++ b/chrome/browser/chromeos/login/user_controller.cc @@ -64,6 +64,24 @@ class ClickNotifyingWidget : public views::WidgetGtk { DISALLOW_COPY_AND_ASSIGN(ClickNotifyingWidget); }; +// Returns tooltip text for user name. Tooltip contains user's display name +// and his email domain to distinguish this user from the other one with the +// same display name. +std::string GetNameTooltip(const UserManager::User& user) { + const std::string& email = user.email(); + size_t at_pos = email.rfind('@'); + if (at_pos == std::string::npos) { + NOTREACHED(); + return std::string(); + } + size_t domain_start = at_pos + 1; + std::string domain = email.substr(domain_start, + email.length() - domain_start); + return StringPrintf("%s (%s)", + user.GetDisplayName().c_str(), + domain.c_str()); +} + // NativeButton that will always return focus to password field. class UserEntryNativeButton : public views::NativeButton { public: @@ -225,7 +243,7 @@ void UserController::EnableNameTooltip(bool enable) { std::wstring tooltip_text; if (enable) - tooltip_text = UTF8ToWide(user_.email()); + tooltip_text = UTF8ToWide(GetNameTooltip(user_)); if (user_view_) user_view_->SetTooltipText(tooltip_text); -- cgit v1.1