summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-07 20:36:11 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-07 20:36:11 +0000
commit9fcc20ea9ef556ceee74240264cd314eacb43af3 (patch)
treebca177709d567e1b4f2fd63132c8f2938e8750bb
parent31e02fae24a1e499773ee23126a5ce66daf94b15 (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/browser/ui/gtk/gtk_util.cc25
-rw-r--r--chrome/browser/ui/gtk/gtk_util.h4
-rw-r--r--chrome/browser/ui/gtk/js_modal_dialog_gtk.cc2
-rw-r--r--views/controls/menu/menu_host_gtk.cc7
-rw-r--r--views/controls/menu/menu_host_gtk.h2
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();