summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-10 00:29:28 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-10 00:29:28 +0000
commit889e50af8cba9b18642aad3f035e152725043247 (patch)
tree36282c8e059c433a9dee8c8c62ce4f94931297f0 /chrome/browser
parent33ca0b9040641b81c5fa160ac61fda56ca412ad9 (diff)
downloadchromium_src-889e50af8cba9b18642aad3f035e152725043247.zip
chromium_src-889e50af8cba9b18642aad3f035e152725043247.tar.gz
chromium_src-889e50af8cba9b18642aad3f035e152725043247.tar.bz2
Fix a linux bug in the find bar where we keep re-selecting text
on the page after closing the find bar. This happens because gtk_entry_set_text triggers a "changed" event in gtk. This doesn't happen in on the windows side. BUG=13344 Review URL: http://codereview.chromium.org/118457 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18006 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/gtk/find_bar_gtk.cc10
-rw-r--r--chrome/browser/gtk/find_bar_gtk.h4
2 files changed, 12 insertions, 2 deletions
diff --git a/chrome/browser/gtk/find_bar_gtk.cc b/chrome/browser/gtk/find_bar_gtk.cc
index ae285cb..95b33005 100644
--- a/chrome/browser/gtk/find_bar_gtk.cc
+++ b/chrome/browser/gtk/find_bar_gtk.cc
@@ -76,8 +76,8 @@ 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(text_entry_, "changed",
- G_CALLBACK(OnChanged), this);
+ changed_handler_id_ = g_signal_connect(text_entry_, "changed",
+ G_CALLBACK(OnChanged), this);
g_signal_connect(text_entry_, "key-press-event",
G_CALLBACK(OnKeyPressEvent), this);
// When the user tabs to us or clicks on us, save where the focus used to
@@ -229,7 +229,13 @@ void FindBarGtk::MoveWindowIfNecessary(const gfx::Rect& selection_rect,
void FindBarGtk::SetFindText(const string16& find_text) {
std::string text_entry_utf8 = UTF16ToUTF8(find_text);
+
+ // Unhook the "changed" signal handler because programatically setting the
+ // text should not fire a "changed" event.
+ g_signal_handler_disconnect(text_entry_, changed_handler_id_);
gtk_entry_set_text(GTK_ENTRY(text_entry_), text_entry_utf8.c_str());
+ changed_handler_id_ = g_signal_connect(text_entry_, "changed",
+ G_CALLBACK(OnChanged), this);
}
void FindBarGtk::UpdateUIForFindResult(const FindNotificationDetails& result,
diff --git a/chrome/browser/gtk/find_bar_gtk.h b/chrome/browser/gtk/find_bar_gtk.h
index 07171ed..6fab781 100644
--- a/chrome/browser/gtk/find_bar_gtk.h
+++ b/chrome/browser/gtk/find_bar_gtk.h
@@ -139,6 +139,10 @@ class FindBarGtk : public FindBar,
// Saves where the focus used to be whenever we get it.
FocusStoreGtk focus_store_;
+ // Keep track of the "changed" signal handler so we can unhook it when we
+ // don't need it.
+ unsigned int changed_handler_id_;
+
DISALLOW_COPY_AND_ASSIGN(FindBarGtk);
};