Index: chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc |
diff --git a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc |
index 23ab592f21028d2cebd792d253dace6104bddc8c..6d9b3a0858e6992755f2d5984856a22f01858283 100644 |
--- a/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc |
+++ b/chrome/browser/ui/gtk/omnibox/omnibox_popup_view_gtk.cc |
@@ -347,18 +347,20 @@ void OmniboxPopupViewGtk::InvalidateLine(size_t line) { |
// of having to query the width of the window? |
GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window_)); |
GdkRectangle line_rect = GetRectForLine( |
- line, GetWindowRect(gdk_window).width()).ToGdkRectangle(); |
+ line - GetHiddenMatchCount(), |
+ GetWindowRect(gdk_window).width()).ToGdkRectangle(); |
gdk_window_invalidate_rect(gdk_window, &line_rect, FALSE); |
} |
void OmniboxPopupViewGtk::UpdatePopupAppearance() { |
const AutocompleteResult& result = model_->result(); |
- if (result.empty()) { |
+ const size_t hidden_matches = GetHiddenMatchCount(); |
+ if (result.size() <= hidden_matches) { |
Hide(); |
return; |
} |
- Show(result.size()); |
+ Show(result.size() - hidden_matches); |
gtk_widget_queue_draw(window_); |
} |
@@ -468,7 +470,7 @@ void OmniboxPopupViewGtk::StackWindow() { |
size_t OmniboxPopupViewGtk::LineFromY(int y) { |
size_t line = std::max(y - kBorderThickness, 0) / kHeightPerResult; |
- return std::min(line, model_->result().size() - 1); |
+ return std::min(line + GetHiddenMatchCount(), model_->result().size() - 1); |
} |
void OmniboxPopupViewGtk::AcceptLine(size_t line, |
@@ -540,6 +542,10 @@ void OmniboxPopupViewGtk::GetVisibleMatchForInput( |
*is_selected_keyword = false; |
} |
+size_t OmniboxPopupViewGtk::GetHiddenMatchCount() { |
+ return model_->result().ShouldHideTopMatch() ? 1 : 0; |
+} |
+ |
gboolean OmniboxPopupViewGtk::HandleMotion(GtkWidget* widget, |
GdkEventMotion* event) { |
// TODO(deanm): Windows has a bunch of complicated logic here. |
@@ -617,8 +623,10 @@ gboolean OmniboxPopupViewGtk::HandleExpose(GtkWidget* widget, |
pango_layout_set_height(layout_, kHeightPerResult * PANGO_SCALE); |
- for (size_t i = 0; i < result.size(); ++i) { |
- gfx::Rect line_rect = GetRectForLine(i, window_rect.width()); |
+ const size_t hidden_matches = GetHiddenMatchCount(); |
+ for (size_t i = hidden_matches; i < result.size(); ++i) { |
+ gfx::Rect line_rect = GetRectForLine(i - hidden_matches, |
+ window_rect.width()); |
// Only repaint and layout damaged lines. |
if (!line_rect.Intersects(damage_rect)) |
continue; |