summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-05 00:17:44 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-05 00:17:44 +0000
commita5bdb0b3f5dc0c7676d32e6a2043b5a68584a833 (patch)
treec1933a5d4c66d1ca61e6013c92fc287c9a2c1e32 /chrome/browser/gtk
parented4bf2dbceed9daaf6401e6e65701d4e51798953 (diff)
downloadchromium_src-a5bdb0b3f5dc0c7676d32e6a2043b5a68584a833.zip
chromium_src-a5bdb0b3f5dc0c7676d32e6a2043b5a68584a833.tar.gz
chromium_src-a5bdb0b3f5dc0c7676d32e6a2043b5a68584a833.tar.bz2
Highlight the next find result when the return key is pressed in the Linux find bar.
Review URL: http://codereview.chromium.org/99376 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15255 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/find_bar_gtk.cc46
-rw-r--r--chrome/browser/gtk/find_bar_gtk.h19
2 files changed, 34 insertions, 31 deletions
diff --git a/chrome/browser/gtk/find_bar_gtk.cc b/chrome/browser/gtk/find_bar_gtk.cc
index 8eb8f2e..f3e0b05 100644
--- a/chrome/browser/gtk/find_bar_gtk.cc
+++ b/chrome/browser/gtk/find_bar_gtk.cc
@@ -36,20 +36,6 @@ const int kBarPaddingRight = 4;
// images.
const int kFindBarHeight = 32;
-gboolean EntryContentsChanged(GtkWindow* window, FindBarGtk* find_bar) {
- find_bar->ContentsChanged();
- return FALSE;
-}
-
-gboolean KeyPressEvent(GtkWindow* window, GdkEventKey* event,
- FindBarGtk* find_bar) {
- if (GDK_Escape == event->keyval) {
- find_bar->EscapePressed();
- return TRUE;
- }
- return FALSE;
-}
-
// Get the ninebox that draws the background of |container_|. It is also used
// to change the shape of |container_|. The pointer is shared by all instances
// of FindBarGtk.
@@ -88,9 +74,9 @@ FindBarGtk::FindBarGtk(BrowserWindowGtk* browser)
// Hook up signals after the widget has been added to the hierarchy so the
// widget will be realized.
g_signal_connect(find_text_, "changed",
- G_CALLBACK(EntryContentsChanged), this);
+ G_CALLBACK(OnChanged), this);
g_signal_connect(find_text_, "key-press-event",
- G_CALLBACK(KeyPressEvent), this);
+ G_CALLBACK(OnKeyPressEvent), this);
g_signal_connect(widget(), "size-allocate",
G_CALLBACK(OnFixedSizeAllocate), this);
// We can't call ContourWidget() until after |container_| has been
@@ -255,7 +241,7 @@ bool FindBarGtk::GetFindBarWindowInfo(gfx::Point* position,
return false;
}
-void FindBarGtk::ContentsChanged() {
+void FindBarGtk::FindEntryTextInContents(bool forward_search) {
TabContents* tab_contents = find_bar_controller_->tab_contents();
if (!tab_contents)
return;
@@ -263,15 +249,30 @@ void FindBarGtk::ContentsChanged() {
std::string new_contents(gtk_entry_get_text(GTK_ENTRY(find_text_)));
if (new_contents.length() > 0) {
- tab_contents->StartFinding(UTF8ToUTF16(new_contents), true);
+ tab_contents->StartFinding(UTF8ToUTF16(new_contents), forward_search);
} else {
// The textbox is empty so we reset.
tab_contents->StopFinding(true); // true = clear selection on page.
}
}
-void FindBarGtk::EscapePressed() {
- find_bar_controller_->EndFindSession();
+// static
+gboolean FindBarGtk::OnChanged(GtkWindow* window, FindBarGtk* find_bar) {
+ find_bar->FindEntryTextInContents(true);
+ return FALSE;
+}
+
+// static
+gboolean FindBarGtk::OnKeyPressEvent(GtkWindow* window, GdkEventKey* event,
+ FindBarGtk* find_bar) {
+ if (GDK_Escape == event->keyval) {
+ find_bar->find_bar_controller_->EndFindSession();
+ return TRUE;
+ } else if (GDK_Return == event->keyval) {
+ find_bar->FindEntryTextInContents(true);
+ return TRUE;
+ }
+ return FALSE;
}
// static
@@ -280,10 +281,7 @@ void FindBarGtk::OnButtonPressed(GtkWidget* button, FindBarGtk* find_bar) {
find_bar->find_bar_controller_->EndFindSession();
} else if (button == find_bar->find_previous_button_->widget() ||
button == find_bar->find_next_button_->widget()) {
- std::string find_text_utf8(
- gtk_entry_get_text(GTK_ENTRY(find_bar->find_text_)));
- find_bar->find_bar_controller_->tab_contents()->StartFinding(
- UTF8ToUTF16(find_text_utf8),
+ find_bar->FindEntryTextInContents(
button == find_bar->find_next_button_->widget());
} else {
NOTREACHED();
diff --git a/chrome/browser/gtk/find_bar_gtk.h b/chrome/browser/gtk/find_bar_gtk.h
index 6143e6c..721df0a 100644
--- a/chrome/browser/gtk/find_bar_gtk.h
+++ b/chrome/browser/gtk/find_bar_gtk.h
@@ -23,15 +23,9 @@ class TabContentsContainerGtk;
class FindBarGtk : public FindBar,
public FindBarTesting {
public:
- FindBarGtk(BrowserWindowGtk* browser);
+ explicit FindBarGtk(BrowserWindowGtk* browser);
virtual ~FindBarGtk();
- // Callback when the text in the find box changes.
- void ContentsChanged();
-
- // Callback when Escape is pressed.
- void EscapePressed();
-
GtkWidget* widget() const { return fixed_.get(); }
// Methods from FindBar.
@@ -68,6 +62,17 @@ class FindBarGtk : public FindBar,
// findbar.
GtkWidget* slide_widget();
+ // Searches for another occurrence of the entry text, moving forward if
+ // |forward_search| is true.
+ void FindEntryTextInContents(bool forward_search);
+
+ // Callback when the entry text changes.
+ static gboolean OnChanged(GtkWindow* window, FindBarGtk* find_bar);
+
+ // Callback for key presses.
+ static gboolean OnKeyPressEvent(GtkWindow* window, GdkEventKey* event,
+ FindBarGtk* find_bar);
+
// Callback for previous, next, and close button.
static void OnButtonPressed(GtkWidget* button, FindBarGtk* find_bar);