Index: chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc |
diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc |
index f3e6249be2acdbb616fab1f1414a32826c25be95..377bbd2adfe503a3ffc7a355df6eaa2fc672f584 100644 |
--- a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc |
+++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc |
@@ -4,6 +4,7 @@ |
#include "chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h" |
+#include <gdk/gdkx.h> |
#include <gtk/gtk.h> |
#include <sys/stat.h> |
#include <sys/types.h> |
@@ -31,6 +32,7 @@ |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/shell_dialogs/select_file_dialog.h" |
#include "ui/strings/grit/ui_strings.h" |
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" |
#include "ui/views/widget/desktop_aura/x11_desktop_handler.h" |
namespace { |
@@ -163,9 +165,11 @@ void SelectFileDialogImplGTK::SelectFileImpl( |
params_map_[dialog] = params; |
- // TODO(erg): Figure out how to fake GTK window-to-parent modality without |
- // having the parent be a real GtkWindow. |
- gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); |
+ // Disable input events handling in the host window to make this dialog modal. |
+ views::DesktopWindowTreeHostX11* host = |
+ views::DesktopWindowTreeHostX11::GetHostForXID( |
+ owning_window->GetHost()->GetAcceleratedWidget()); |
+ host->DisableEventListening(GDK_WINDOW_XID(gtk_widget_get_window(dialog))); |
gtk_widget_show_all(dialog); |
@@ -424,6 +428,12 @@ void SelectFileDialogImplGTK::FileDialogDestroyed(GtkWidget* dialog) { |
aura::Window* parent = GetAuraTransientParent(dialog); |
if (!parent) |
return; |
+ |
+ views::DesktopWindowTreeHostX11* host = |
+ views::DesktopWindowTreeHostX11::GetHostForXID( |
+ parent->GetHost()->GetAcceleratedWidget()); |
+ host->EnableEventListening(); |
+ |
std::set<aura::Window*>::iterator iter = parents_.find(parent); |
if (iter != parents_.end()) { |
(*iter)->RemoveObserver(this); |