Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4732)

Unified Diff: chrome/browser/gtk/location_bar_view_gtk.cc

Issue 151209: Initial work on Linux tab to search. (Closed)
Patch Set: Dan's comments. Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/location_bar_view_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/location_bar_view_gtk.cc
diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc
index b10712adaef089dd6ad7ff8764b6d53be2c09946..49f799b524cd4bfa9491e37948aec8f3a52fcb99 100644
--- a/chrome/browser/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/gtk/location_bar_view_gtk.cc
@@ -6,6 +6,7 @@
#include <string>
+#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/basictypes.h"
#include "base/gfx/gtk_util.h"
@@ -16,9 +17,13 @@
#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
#include "chrome/browser/command_updater.h"
#include "chrome/browser/gtk/gtk_theme_provider.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/search_engines/template_url.h"
+#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/gtk_util.h"
#include "chrome/common/page_transition_types.h"
+#include "grit/generated_resources.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "webkit/glue/window_open_disposition.h"
@@ -48,11 +53,28 @@ const int kSecurityIconPaddingRight = 6;
const int kEvTextPaddingRight = 4;
+const int kKeywordTopBottomPadding = 4;
+const int kKeywordLeftRightPadding = 4;
+
// TODO(deanm): Eventually this should be painted with the background png
// image, but for now we get pretty close by just drawing a solid border.
const GdkColor kBorderColor = GDK_COLOR_RGB(0xbe, 0xc8, 0xd4);
-
const GdkColor kEvTextColor = GDK_COLOR_RGB(0x00, 0x96, 0x14); // Green.
+const GdkColor kKeywordBackgroundColor = GDK_COLOR_RGB(0xf0, 0xf4, 0xfa);
+const GdkColor kKeywordBorderColor = GDK_COLOR_RGB(0xcb, 0xde, 0xf7);
+
+// Returns the short name for a keyword.
+std::wstring GetKeywordName(Profile* profile,
+ const std::wstring& keyword) {
+ // Make sure the TemplateURL still exists.
+ // TODO(sky): Once LocationBarView adds a listener to the TemplateURLModel
+ // to track changes to the model, this should become a DCHECK.
+ const TemplateURL* template_url =
+ profile->GetTemplateURLModel()->GetTemplateURLForKeyword(keyword);
+ if (template_url)
+ return template_url->AdjustedShortNameForLocaleDirection();
+ return std::wstring();
+}
} // namespace
@@ -70,6 +92,12 @@ LocationBarViewGtk::LocationBarViewGtk(CommandUpdater* command_updater,
security_warning_icon_image_(NULL),
info_label_align_(NULL),
info_label_(NULL),
+ tab_to_search_(NULL),
+ tab_to_search_label_(NULL),
+ tab_to_search_hint_(NULL),
+ tab_to_search_hint_leading_label_(NULL),
+ tab_to_search_hint_icon_(NULL),
+ tab_to_search_hint_trailing_label_(NULL),
profile_(NULL),
command_updater_(command_updater),
toolbar_model_(toolbar_model),
@@ -116,6 +144,24 @@ void LocationBarViewGtk::Init() {
g_signal_connect(hbox_.get(), "expose-event",
G_CALLBACK(&HandleExposeThunk), this);
+ // Tab to search (the keyword box on the left hand side).
+ tab_to_search_label_ = gtk_label_new(NULL);
+ // We need an alignment to pad our box inside the edit area.
+ tab_to_search_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(tab_to_search_),
+ kKeywordTopBottomPadding, kKeywordTopBottomPadding,
+ kKeywordLeftRightPadding, kKeywordLeftRightPadding);
+
+ // This crazy stack of alignments and event boxes creates a box around the
+ // keyword text with a border, background color, and padding around the text.
+ gtk_container_add(GTK_CONTAINER(tab_to_search_),
+ gtk_util::CreateGtkBorderBin(
+ gtk_util::CreateGtkBorderBin(
+ tab_to_search_label_, &kKeywordBackgroundColor, 1, 1, 2, 2),
+ &kKeywordBorderColor, 1, 1, 1, 1));
+
+ gtk_box_pack_start(GTK_BOX(hbox_.get()), tab_to_search_, FALSE, FALSE, 0);
+
GtkWidget* align = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
// TODO(erg): Redo this so that it adjusts during theme changes.
if (GtkThemeProvider::UseSystemThemeGraphics(profile_)) {
@@ -131,6 +177,25 @@ void LocationBarViewGtk::Init() {
gtk_container_add(GTK_CONTAINER(align), location_entry_->widget());
gtk_box_pack_start(GTK_BOX(hbox_.get()), align, TRUE, TRUE, 0);
+ // Tab to search notification (the hint on the right hand side).
+ tab_to_search_hint_ = gtk_hbox_new(FALSE, 0);
+ tab_to_search_hint_leading_label_ = gtk_label_new(NULL);
+ tab_to_search_hint_icon_ = gtk_image_new_from_pixbuf(
+ rb.GetPixbufNamed(IDR_LOCATION_BAR_KEYWORD_HINT_TAB));
+ tab_to_search_hint_trailing_label_ = gtk_label_new(NULL);
+ gtk_box_pack_start(GTK_BOX(tab_to_search_hint_),
+ tab_to_search_hint_leading_label_,
+ FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(tab_to_search_hint_),
+ tab_to_search_hint_icon_,
+ FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(tab_to_search_hint_),
+ tab_to_search_hint_trailing_label_,
+ FALSE, FALSE, 0);
+ // tab_to_search_hint_ gets hidden initially in OnChanged. Hiding it here
+ // doesn't work, someone is probably calling show_all on our parent box.
+ gtk_box_pack_end(GTK_BOX(hbox_.get()), tab_to_search_hint_, FALSE, FALSE, 4);
+
// Pack info_label_ and security icons in hbox. We hide/show them
// by SetSecurityIcon() and SetInfoText().
info_label_align_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
@@ -205,8 +270,24 @@ void LocationBarViewGtk::OnAutocompleteAccept(const GURL& url,
}
void LocationBarViewGtk::OnChanged() {
- // TODO(deanm): Here is where we would do layout when we have things like
- // the keyword display, ssl icons, etc.
+ const std::wstring keyword(location_entry_->model()->keyword());
+ const bool is_keyword_hint = location_entry_->model()->is_keyword_hint();
+ const bool show_selected_keyword = !keyword.empty() && !is_keyword_hint;
+ const bool show_keyword_hint = !keyword.empty() && is_keyword_hint;
+
+ if (show_selected_keyword) {
+ SetKeywordLabel(keyword);
+ gtk_widget_show_all(tab_to_search_);
+ } else {
+ gtk_widget_hide_all(tab_to_search_);
+ }
+
+ if (show_keyword_hint) {
+ SetKeywordHintLabel(keyword);
+ gtk_widget_show_all(tab_to_search_hint_);
+ } else {
+ gtk_widget_hide_all(tab_to_search_hint_);
+ }
}
void LocationBarViewGtk::OnInputInProgress(bool in_progress) {
@@ -362,3 +443,49 @@ void LocationBarViewGtk::SetInfoText() {
gtk_widget_set_tooltip_text(GTK_WIDGET(info_label_),
WideToUTF8(info_tooltip).c_str());
}
+
+void LocationBarViewGtk::SetKeywordLabel(const std::wstring& keyword) {
+ if (keyword.empty())
+ return;
+
+ DCHECK(profile_);
+ if (!profile_->GetTemplateURLModel())
+ return;
+
+ const std::wstring short_name = GetKeywordName(profile_, keyword);
+ // TODO(deanm): Windows does some measuring of the text here and truncates
+ // it if it's too long?
+ std::wstring full_name(l10n_util::GetStringF(IDS_OMNIBOX_KEYWORD_TEXT,
+ short_name));
+ gtk_label_set_text(GTK_LABEL(tab_to_search_label_),
+ WideToUTF8(full_name).c_str());
+}
+
+void LocationBarViewGtk::SetKeywordHintLabel(const std::wstring& keyword) {
+ if (keyword.empty())
+ return;
+
+ DCHECK(profile_);
+ if (!profile_->GetTemplateURLModel())
+ return;
+
+ std::vector<size_t> content_param_offsets;
+ const std::wstring keyword_hint(l10n_util::GetStringF(
+ IDS_OMNIBOX_KEYWORD_HINT, std::wstring(),
+ GetKeywordName(profile_, keyword), &content_param_offsets));
+
+ if (content_param_offsets.size() != 2) {
+ // See comments on an identical NOTREACHED() in search_provider.cc.
+ NOTREACHED();
+ return;
+ }
+
+ std::string leading(WideToUTF8(
+ keyword_hint.substr(0, content_param_offsets.front())));
+ std::string trailing(WideToUTF8(
+ keyword_hint.substr(content_param_offsets.front())));
+ gtk_label_set_text(GTK_LABEL(tab_to_search_hint_leading_label_),
+ leading.c_str());
+ gtk_label_set_text(GTK_LABEL(tab_to_search_hint_trailing_label_),
+ trailing.c_str());
+}
« no previous file with comments | « chrome/browser/gtk/location_bar_view_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698