From 9fcc20ea9ef556ceee74240264cd314eacb43af3 Mon Sep 17 00:00:00 2001 From: "xiyuan@chromium.org" Date: Mon, 7 Mar 2011 20:36:11 +0000 Subject: [ChromeOS] Fix the unclickable "OpenAll" confirmation dialog problem. - Get modal flag from native dialog so that gtk_util::ShowDialog shows modal dialog correctly; - Wire HandleGrabBroke instead of OnGrabBrokeEvent in MenuHostGtk so that the menu cancels itself when a modal dialog shows up; BUG=chromium-os:12032 TEST=Verify fix for chromium-os:12032 Review URL: http://codereview.chromium.org/6623056 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77174 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/ui/gtk/gtk_util.cc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'chrome/browser/ui/gtk/gtk_util.cc') diff --git a/chrome/browser/ui/gtk/gtk_util.cc b/chrome/browser/ui/gtk/gtk_util.cc index e2f0df1..a1e338c 100644 --- a/chrome/browser/ui/gtk/gtk_util.cc +++ b/chrome/browser/ui/gtk/gtk_util.cc @@ -1039,6 +1039,17 @@ GtkWindow* GetLastActiveBrowserWindow() { return NULL; } +int GetNativeDialogFlags(GtkWindow* dialog) { + int flags = chromeos::DIALOG_FLAG_DEFAULT; + + if (gtk_window_get_resizable(dialog)) + flags |= chromeos::DIALOG_FLAG_RESIZEABLE; + if (gtk_window_get_modal(dialog)) + flags |= chromeos::DIALOG_FLAG_MODAL; + + return flags; +} + GtkWindow* GetDialogTransientParent(GtkWindow* dialog) { GtkWindow* parent = gtk_window_get_transient_for(dialog); if (!parent) @@ -1058,9 +1069,7 @@ void ShowDialog(GtkWidget* dialog) { chromeos::ShowNativeDialog(GetDialogTransientParent(GTK_WINDOW(dialog)), dialog, - gtk_window_get_resizable(GTK_WINDOW(dialog)) ? - chromeos::DIALOG_FLAG_RESIZEABLE : - chromeos::DIALOG_FLAG_DEFAULT, + GetNativeDialogFlags(GTK_WINDOW(dialog)), gfx::Size(width, height), gfx::Size()); } @@ -1082,14 +1091,14 @@ void ShowDialogWithLocalizedSize(GtkWidget* dialog, gfx::Size()); } -void ShowModalDialogWithMinLocalizedWidth(GtkWidget* dialog, - int width_id) { +void ShowDialogWithMinLocalizedWidth(GtkWidget* dialog, + int width_id) { int width = (width_id == -1) ? 0 : views::Window::GetLocalizedContentsWidth(width_id); chromeos::ShowNativeDialog(GetDialogTransientParent(GTK_WINDOW(dialog)), dialog, - chromeos::DIALOG_FLAG_MODAL, + GetNativeDialogFlags(GTK_WINDOW(dialog)), gfx::Size(), gfx::Size(width, 0)); } @@ -1130,8 +1139,8 @@ void ShowDialogWithLocalizedSize(GtkWidget* dialog, gtk_widget_show_all(dialog); } -void ShowModalDialogWithMinLocalizedWidth(GtkWidget* dialog, - int width_id) { +void ShowDialogWithMinLocalizedWidth(GtkWidget* dialog, + int width_id) { gtk_widget_show_all(dialog); // Suggest a minimum size. -- cgit v1.1