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

Unified Diff: chrome/browser/autocomplete/autocomplete_popup_view_gtk.cc

Issue 40013: Implement a GTK LocationBarView and Autocomplete. (Closed)
Patch Set: Feedback Created 11 years, 9 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/autocomplete/autocomplete_popup_view_gtk.h ('k') | chrome/browser/browser.scons » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autocomplete/autocomplete_popup_view_gtk.cc
diff --git a/chrome/browser/autocomplete/autocomplete_popup_view_gtk.cc b/chrome/browser/autocomplete/autocomplete_popup_view_gtk.cc
new file mode 100755
index 0000000000000000000000000000000000000000..8f1b586dd95d3585efbc76d699acee8d853ad9da
--- /dev/null
+++ b/chrome/browser/autocomplete/autocomplete_popup_view_gtk.cc
@@ -0,0 +1,115 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/autocomplete/autocomplete_popup_view_gtk.h"
+
+#include "base/logging.h"
+#include "base/scoped_ptr.h"
+#include "base/string_util.h"
+#include "chrome/browser/autocomplete/autocomplete.h"
+#include "chrome/browser/autocomplete/autocomplete_edit.h"
+#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
+#include "chrome/browser/autocomplete/autocomplete_popup_model.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/common/notification_service.h"
+
+namespace {
+
+const GdkColor kPopupBorderColor = {0, 51143, 51914, 52942}; // #c7cace
+const GdkColor kPopupBackground = {0, 65535, 65535, 65535}; // #ffffff
+const GdkColor kHighlightColor = {0, 49601, 51400, 55769}; // #c1c8d9
+
+} // namespace
+
+AutocompletePopupViewGtk::AutocompletePopupViewGtk(
+ AutocompleteEditViewGtk* edit_view,
+ AutocompleteEditModel* edit_model,
+ Profile* profile)
+ : model_(new AutocompletePopupModel(this, edit_model, profile)),
+ edit_view_(edit_view),
+ window_(gtk_window_new(GTK_WINDOW_POPUP)),
+ vbox_(NULL),
+ opened_(false) {
+ GTK_WIDGET_UNSET_FLAGS(window_, GTK_CAN_FOCUS);
+ // Don't allow the window to be resized. This also forces the window to
+ // shrink down to the size of its child contents.
+ gtk_window_set_resizable(GTK_WINDOW(window_), FALSE);
+ // Set up a 1 pixel border around the popup.
+ gtk_container_set_border_width(GTK_CONTAINER(window_), 1);
+ gtk_widget_modify_bg(window_, GTK_STATE_NORMAL, &kPopupBorderColor);
+ gtk_widget_modify_base(window_, GTK_STATE_NORMAL, &kPopupBorderColor);
+}
+
+AutocompletePopupViewGtk::~AutocompletePopupViewGtk() {
+ if (vbox_)
+ gtk_widget_destroy(vbox_);
+ gtk_widget_destroy(window_);
+}
+
+void AutocompletePopupViewGtk::InvalidateLine(size_t line) {
+ UpdatePopupAppearance();
+}
+
+void AutocompletePopupViewGtk::UpdatePopupAppearance() {
+ const AutocompleteResult& result = model_->result();
+ if (result.empty()) {
+ Hide();
+ return;
+ }
+
+ // TODO(deanm): This could be done better, but the code is temporary
+ // and will need to be replaced with custom drawing and not widgets.
+ if (vbox_)
+ gtk_widget_destroy(vbox_);
+
+ vbox_ = gtk_vbox_new(FALSE, 0);
+
+ for (size_t i = 0; i < result.size(); ++i) {
+ std::string utf8;
+ utf8.append(WideToUTF8(result.match_at(i).contents));
+ utf8.append(" - ");
+ utf8.append(WideToUTF8(result.match_at(i).description));
+ GtkWidget* label = gtk_label_new(utf8.c_str());
+ // We need to put the labels in an event box for background painting.
+ GtkWidget* ebox = gtk_event_box_new();
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
+ gtk_container_add(GTK_CONTAINER(ebox), label);
+ gtk_box_pack_start(GTK_BOX(vbox_), ebox, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+ gtk_widget_show(ebox);
+ if (i == model_->selected_line()) {
+ gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &kHighlightColor);
+ } else {
+ gtk_widget_modify_bg(ebox, GTK_STATE_NORMAL, &kPopupBackground);
+ }
+ }
+
+ gtk_widget_show(vbox_);
+ gtk_container_add(GTK_CONTAINER(window_), vbox_);
+ Show();
+}
+
+void AutocompletePopupViewGtk::OnHoverEnabledOrDisabled(bool disabled) {
+ NOTIMPLEMENTED();
+}
+
+void AutocompletePopupViewGtk::PaintUpdatesNow() {
+ UpdatePopupAppearance();
+}
+
+void AutocompletePopupViewGtk::Show() {
+ gint x, y, width;
+ edit_view_->BottomLeftPosWidth(&x, &y, &width);
+ gtk_window_move(GTK_WINDOW(window_), x, y);
+ gtk_widget_set_size_request(window_, width, -1);
+ gtk_widget_show(window_);
+ opened_ = true;
+}
+
+void AutocompletePopupViewGtk::Hide() {
+ gtk_widget_hide(window_);
+ opened_ = false;
+}
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_popup_view_gtk.h ('k') | chrome/browser/browser.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698