diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-10 00:29:28 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-10 00:29:28 +0000 |
commit | 889e50af8cba9b18642aad3f035e152725043247 (patch) | |
tree | 36282c8e059c433a9dee8c8c62ce4f94931297f0 /chrome/browser | |
parent | 33ca0b9040641b81c5fa160ac61fda56ca412ad9 (diff) | |
download | chromium_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.cc | 10 | ||||
-rw-r--r-- | chrome/browser/gtk/find_bar_gtk.h | 4 |
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); }; |