Index: chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc |
diff --git a/chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc b/chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc |
index ad36c46261f889400477759b877ce3026c6e1e4f..422c9cfeedee2ad12c601f7692a9bcd3af472eb0 100644 |
--- a/chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc |
+++ b/chrome/browser/ui/libgtk2ui/print_dialog_gtk2.cc |
@@ -17,10 +17,12 @@ |
#include "base/message_loop/message_loop_proxy.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
+#include "chrome/browser/ui/libgtk2ui/gtk2_util.h" |
#include "chrome/browser/ui/libgtk2ui/printing_gtk2_util.h" |
#include "printing/metafile.h" |
#include "printing/print_job_constants.h" |
#include "printing/print_settings.h" |
+#include "ui/aura/window.h" |
using content::BrowserThread; |
using printing::PageRanges; |
@@ -136,6 +138,11 @@ PrintDialogGtk2::~PrintDialogGtk2() { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (dialog_) { |
+ aura::Window* parent = libgtk2ui::GetAuraTransientParent(dialog_); |
+ if (parent) { |
+ parent->RemoveObserver(this); |
+ libgtk2ui::ClearAuraTransientParent(dialog_); |
+ } |
gtk_widget_destroy(dialog_); |
dialog_ = NULL; |
} |
@@ -234,6 +241,8 @@ void PrintDialogGtk2::ShowDialog( |
// TODO(mukai): take care of parent as select_file_dialog_impl_gtk2. |
dialog_ = gtk_print_unix_dialog_new(NULL, NULL); |
+ libgtk2ui::SetGtkTransientForAura(dialog_, parent_view); |
+ parent_view->AddObserver(this); |
g_signal_connect(dialog_, "delete-event", |
G_CALLBACK(gtk_widget_hide_on_delete), NULL); |
@@ -432,3 +441,11 @@ void PrintDialogGtk2::InitPrintSettings(PrintSettings* settings) { |
InitPrintSettingsGtk(gtk_settings_, page_setup_, settings); |
context_->InitWithSettings(*settings); |
} |
+ |
+void PrintDialogGtk2::OnWindowDestroying(aura::Window* window) { |
+ DCHECK_EQ(libgtk2ui::GetAuraTransientParent(dialog_), window); |
+ |
+ libgtk2ui::ClearAuraTransientParent(dialog_); |
+ window->RemoveObserver(this); |
+ Release(); |
+} |