summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-02 22:05:03 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-02 22:05:03 +0000
commit516650c2b70d0e2e14fcf0c284e22bc57ad53179 (patch)
tree93ca58e1ef54665509e57971d31e84ac80b4a1d3
parentff309b3ff56471cf49b9a95378078ed37437192f (diff)
downloadchromium_src-516650c2b70d0e2e14fcf0c284e22bc57ad53179.zip
chromium_src-516650c2b70d0e2e14fcf0c284e22bc57ad53179.tar.gz
chromium_src-516650c2b70d0e2e14fcf0c284e22bc57ad53179.tar.bz2
Update dialog parent handling logic.
- Use real transient parent for hosted native dialogs since window manager supports transient of transient now; - Use last active normal browser window as parent for option dialogs since we don't want to use panel popups as parent; BUG=chromium-os:3708 TEST=none. This CL gives real transent parent for dialogs but we still need to way to show the dialogs, either exit fullscreen or put them on top of fullscreen. Review URL: http://codereview.chromium.org/2501001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48773 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/options/options_window_view.cc12
-rw-r--r--chrome/browser/gtk/gtk_util.cc22
-rw-r--r--chrome/browser/gtk/gtk_util.h4
-rw-r--r--chrome/browser/gtk/keyword_editor_view.cc6
4 files changed, 37 insertions, 7 deletions
diff --git a/chrome/browser/chromeos/options/options_window_view.cc b/chrome/browser/chromeos/options/options_window_view.cc
index c072787..d284ce3 100644
--- a/chrome/browser/chromeos/options/options_window_view.cc
+++ b/chrome/browser/chromeos/options/options_window_view.cc
@@ -307,8 +307,16 @@ void CloseOptionsWindow() {
}
gfx::NativeWindow GetOptionsViewParent() {
- if (Browser* b = BrowserList::GetLastActive())
- return b->window()->GetNativeHandle();
+ if (Browser* b = BrowserList::GetLastActive()) {
+ if (b->type() != Browser::TYPE_NORMAL) {
+ b = BrowserList::FindBrowserWithType(b->profile(),
+ Browser::TYPE_NORMAL,
+ true);
+ }
+
+ if (b)
+ return b->window()->GetNativeHandle();
+ }
return NULL;
}
diff --git a/chrome/browser/gtk/gtk_util.cc b/chrome/browser/gtk/gtk_util.cc
index c4b1ab0..2cab85e 100644
--- a/chrome/browser/gtk/gtk_util.cc
+++ b/chrome/browser/gtk/gtk_util.cc
@@ -925,8 +925,16 @@ bool AddWindowAlphaChannel(GtkWidget* window) {
#if defined(OS_CHROMEOS)
+GtkWindow* GetDialogTransientParent(GtkWindow* dialog) {
+ GtkWindow* parent = gtk_window_get_transient_for(dialog);
+ if (!parent)
+ parent = chromeos::GetOptionsViewParent();
+
+ return parent;
+}
+
void ShowDialog(GtkWidget* dialog) {
- chromeos::ShowNativeDialog(chromeos::GetOptionsViewParent(),
+ chromeos::ShowNativeDialog(GetDialogTransientParent(GTK_WINDOW(dialog)),
dialog, chromeos::DIALOG_FLAG_DEFAULT, gfx::Size(), gfx::Size());
}
@@ -939,7 +947,7 @@ void ShowDialogWithLocalizedSize(GtkWidget* dialog,
int height = (height_id == -1) ? 0 :
views::Window::GetLocalizedContentsHeight(height_id);
- chromeos::ShowNativeDialog(chromeos::GetOptionsViewParent(),
+ chromeos::ShowNativeDialog(GetDialogTransientParent(GTK_WINDOW(dialog)),
dialog,
resizeable ? chromeos::DIALOG_FLAG_RESIZEABLE :
chromeos::DIALOG_FLAG_DEFAULT,
@@ -952,7 +960,7 @@ void ShowModalDialogWithMinLocalizedWidth(GtkWidget* dialog,
int width = (width_id == -1) ? 0 :
views::Window::GetLocalizedContentsWidth(width_id);
- chromeos::ShowNativeDialog(chromeos::GetOptionsViewParent(),
+ chromeos::ShowNativeDialog(GetDialogTransientParent(GTK_WINDOW(dialog)),
dialog,
chromeos::DIALOG_FLAG_MODAL,
gfx::Size(),
@@ -969,6 +977,10 @@ void PresentWindow(GtkWidget* window, int timestamp) {
gtk_window_present(host_window);
}
+GtkWindow* GetDialogWindow(GtkWidget* dialog) {
+ return chromeos::GetNativeDialogWindow(dialog);
+}
+
#else
void ShowDialog(GtkWidget* dialog) {
@@ -1007,6 +1019,10 @@ void PresentWindow(GtkWidget* window, int timestamp) {
gtk_window_present(GTK_WINDOW(window));
}
+GtkWindow* GetDialogWindow(GtkWidget* dialog) {
+ return GTK_WINDOW(dialog);
+}
+
#endif
} // namespace gtk_util
diff --git a/chrome/browser/gtk/gtk_util.h b/chrome/browser/gtk/gtk_util.h
index 5b15380..dc26b52 100644
--- a/chrome/browser/gtk/gtk_util.h
+++ b/chrome/browser/gtk/gtk_util.h
@@ -300,6 +300,10 @@ void ShowModalDialogWithMinLocalizedWidth(GtkWidget* dialog,
// finds the host window of the dialog contents and then present it.
void PresentWindow(GtkWidget* window, int timestamp);
+// Get real window for given dialog. On ChromeOS, this gives the native dialog
+// host window. On Linux, it merely returns the passed in dialog.
+GtkWindow* GetDialogWindow(GtkWidget* dialog);
+
} // namespace gtk_util
#endif // CHROME_BROWSER_GTK_GTK_UTIL_H_
diff --git a/chrome/browser/gtk/keyword_editor_view.cc b/chrome/browser/gtk/keyword_editor_view.cc
index fc597de..199c624 100644
--- a/chrome/browser/gtk/keyword_editor_view.cc
+++ b/chrome/browser/gtk/keyword_editor_view.cc
@@ -449,7 +449,8 @@ void KeywordEditorView::OnRowActivated(GtkTreeView* tree_view,
void KeywordEditorView::OnAddButtonClicked(GtkButton* button,
KeywordEditorView* editor) {
new EditSearchEngineDialog(
- GTK_WINDOW(gtk_widget_get_toplevel(editor->dialog_)),
+ GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(
+ gtk_util::GetDialogWindow(editor->dialog_)))),
NULL,
editor,
editor->profile_);
@@ -463,7 +464,8 @@ void KeywordEditorView::OnEditButtonClicked(GtkButton* button,
return;
new EditSearchEngineDialog(
- GTK_WINDOW(gtk_widget_get_toplevel(editor->dialog_)),
+ GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(
+ gtk_util::GetDialogWindow(editor->dialog_)))),
editor->controller_->GetTemplateURL(model_row),
editor,
editor->profile_);