Index: chrome/browser/gtk/task_manager_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/task_manager_gtk.cc (revision 30657) |
+++ chrome/browser/gtk/task_manager_gtk.cc (working copy) |
@@ -13,9 +13,7 @@ |
#include "app/l10n_util.h" |
#include "app/resource_bundle.h" |
#include "base/logging.h" |
-#include "chrome/browser/browser_list.h" |
#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/browser_window.h" |
#include "chrome/browser/gtk/gtk_chrome_link_button.h" |
#include "chrome/browser/gtk/gtk_theme_provider.h" |
#include "chrome/browser/gtk/menu_gtk.h" |
@@ -267,6 +265,8 @@ |
g_object_unref(accel_group_); |
accel_group_ = NULL; |
+ // Disconnect the destroy signal so it doesn't delete |this|. |
+ g_signal_handler_disconnect(G_OBJECT(dialog_), destroy_handler_id_); |
gtk_widget_destroy(dialog_); |
} |
@@ -375,6 +375,8 @@ |
gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), |
gtk_util::kContentAreaSpacing); |
+ destroy_handler_id_ = g_signal_connect(G_OBJECT(dialog_), "destroy", |
+ G_CALLBACK(OnDestroy), this); |
g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this); |
g_signal_connect(G_OBJECT(dialog_), "button-release-event", |
G_CALLBACK(OnButtonReleaseEvent), this); |
@@ -672,6 +674,13 @@ |
} |
// static |
+void TaskManagerGtk::OnDestroy(GtkDialog* dialog, |
+ TaskManagerGtk* task_manager) { |
+ instance_ = NULL; |
+ delete task_manager; |
+} |
+ |
+// static |
void TaskManagerGtk::OnResponse(GtkDialog* dialog, gint response_id, |
TaskManagerGtk* task_manager) { |
if (response_id == GTK_RESPONSE_DELETE_EVENT) { |