summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-01 22:30:23 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-01 22:30:23 +0000
commit41903593b4f2ce48b65c60d752e5cd87c013c466 (patch)
tree8ef1d0130f47b20e1ac9a282555fc516e5d52324
parent08d0dfad3f9a7ba326a274704fa7e95165c9dca1 (diff)
downloadchromium_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.cc6
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();
}