diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 22:30:23 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 22:30:23 +0000 |
commit | 41903593b4f2ce48b65c60d752e5cd87c013c466 (patch) | |
tree | 8ef1d0130f47b20e1ac9a282555fc516e5d52324 | |
parent | 08d0dfad3f9a7ba326a274704fa7e95165c9dca1 (diff) | |
download | chromium_src-41903593b4f2ce48b65c60d752e5cd87c013c466.zip chromium_src-41903593b4f2ce48b65c60d752e5cd87c013c466.tar.gz chromium_src-41903593b4f2ce48b65c60d752e5cd87c013c466.tar.bz2 |
Fixes bug in test_shell on linux. When closing the window we can get
notification of focus changes after the WebWidgetHost has been
deleted, resulting in a crash.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/255046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27778 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/tools/test_shell/webwidget_host_gtk.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/webkit/tools/test_shell/webwidget_host_gtk.cc b/webkit/tools/test_shell/webwidget_host_gtk.cc index 405dc87..97dd3f8 100644 --- a/webkit/tools/test_shell/webwidget_host_gtk.cc +++ b/webkit/tools/test_shell/webwidget_host_gtk.cc @@ -86,7 +86,7 @@ class WebWidgetHostGtkWidget { g_signal_connect(widget, "expose-event", G_CALLBACK(&HandleExpose), host); g_signal_connect(widget, "destroy", - G_CALLBACK(&HandleDestroy), NULL); + G_CALLBACK(&HandleDestroy), host); g_signal_connect(widget, "key-press-event", G_CALLBACK(&HandleKeyPress), host); g_signal_connect(widget, "key-release-event", @@ -315,7 +315,11 @@ WebWidgetHost::WebWidgetHost() } WebWidgetHost::~WebWidgetHost() { + // We may be deleted before the view_. Clear out the signals so that we don't + // attempt to invoke something on a deleted object. g_object_set_data(G_OBJECT(view_), kWebWidgetHostKey, NULL); + g_signal_handlers_disconnect_matched(view_, + G_SIGNAL_MATCH_DATA, 0, NULL, NULL, NULL, this); webwidget_->close(); } |