diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-07 20:36:11 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-07 20:36:11 +0000 |
commit | 9fcc20ea9ef556ceee74240264cd314eacb43af3 (patch) | |
tree | bca177709d567e1b4f2fd63132c8f2938e8750bb | |
parent | 31e02fae24a1e499773ee23126a5ce66daf94b15 (diff) | |
download | chromium_src-9fcc20ea9ef556ceee74240264cd314eacb43af3.zip chromium_src-9fcc20ea9ef556ceee74240264cd314eacb43af3.tar.gz chromium_src-9fcc20ea9ef556ceee74240264cd314eacb43af3.tar.bz2 |
[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
-rw-r--r-- | chrome/browser/ui/gtk/clear_browsing_data_dialog_gtk.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/gtk_util.cc | 25 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/gtk_util.h | 4 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/js_modal_dialog_gtk.cc | 2 | ||||
-rw-r--r-- | views/controls/menu/menu_host_gtk.cc | 7 | ||||
-rw-r--r-- | views/controls/menu/menu_host_gtk.h | 2 |
6 files changed, 26 insertions, 16 deletions
diff --git a/chrome/browser/ui/gtk/clear_browsing_data_dialog_gtk.cc b/chrome/browser/ui/gtk/clear_browsing_data_dialog_gtk.cc index 16f546c..992db45 100644 --- a/chrome/browser/ui/gtk/clear_browsing_data_dialog_gtk.cc +++ b/chrome/browser/ui/gtk/clear_browsing_data_dialog_gtk.cc @@ -174,7 +174,7 @@ ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent, UpdateDialogButtons(); - gtk_util::ShowModalDialogWithMinLocalizedWidth(dialog_, + gtk_util::ShowDialogWithMinLocalizedWidth(dialog_, IDS_CLEARDATA_DIALOG_WIDTH_CHARS); } 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. diff --git a/chrome/browser/ui/gtk/gtk_util.h b/chrome/browser/ui/gtk/gtk_util.h index 02c36e5..c0113c3 100644 --- a/chrome/browser/ui/gtk/gtk_util.h +++ b/chrome/browser/ui/gtk/gtk_util.h @@ -323,8 +323,8 @@ void ShowDialogWithLocalizedSize(GtkWidget* dialog, int width_id, int height_id, bool resizeable); -void ShowModalDialogWithMinLocalizedWidth(GtkWidget* dialog, - int width_id); +void ShowDialogWithMinLocalizedWidth(GtkWidget* dialog, + int width_id); // Wrapper to present a window. On Linux, it just calls gtk_window_present or // gtk_window_present_with_time for non-zero timestamp. For ChromeOS, it first diff --git a/chrome/browser/ui/gtk/js_modal_dialog_gtk.cc b/chrome/browser/ui/gtk/js_modal_dialog_gtk.cc index 8d577bc..33c05e6 100644 --- a/chrome/browser/ui/gtk/js_modal_dialog_gtk.cc +++ b/chrome/browser/ui/gtk/js_modal_dialog_gtk.cc @@ -163,7 +163,7 @@ int JSModalDialogGtk::GetAppModalDialogButtons() const { } void JSModalDialogGtk::ShowAppModalDialog() { - gtk_util::ShowModalDialogWithMinLocalizedWidth(GTK_WIDGET(gtk_dialog_), + gtk_util::ShowDialogWithMinLocalizedWidth(GTK_WIDGET(gtk_dialog_), IDS_ALERT_DIALOG_WIDTH_CHARS); } diff --git a/views/controls/menu/menu_host_gtk.cc b/views/controls/menu/menu_host_gtk.cc index 12008c5..9615e54 100644 --- a/views/controls/menu/menu_host_gtk.cc +++ b/views/controls/menu/menu_host_gtk.cc @@ -130,14 +130,15 @@ void MenuHostGtk::OnDestroy(GtkWidget* object) { WidgetGtk::OnDestroy(object); } -gboolean MenuHostGtk::OnGrabBrokeEvent(GtkWidget* widget, GdkEvent* event) { +void MenuHostGtk::HandleGrabBroke() { did_input_grab_ = false; // Grab can be broken by drag & drop, other menu or screen locker. MenuController* menu_controller = submenu_->GetMenuItem()->GetMenuController(); - if (!menu_controller->drag_in_progress()) + if (menu_controller && !menu_controller->drag_in_progress()) menu_controller->CancelAll(); - return WidgetGtk::OnGrabBrokeEvent(widget, event); + + WidgetGtk::HandleGrabBroke(); } void MenuHostGtk::DoCapture() { diff --git a/views/controls/menu/menu_host_gtk.h b/views/controls/menu/menu_host_gtk.h index 2d4884f..36a3737 100644 --- a/views/controls/menu/menu_host_gtk.h +++ b/views/controls/menu/menu_host_gtk.h @@ -44,7 +44,7 @@ class MenuHostGtk : public WidgetGtk, public MenuHost { virtual void ReleaseGrab(); virtual void OnDestroy(GtkWidget* object); - virtual gboolean OnGrabBrokeEvent(GtkWidget* widget, GdkEvent* event); + virtual void HandleGrabBroke(); private: void DoCapture(); |