diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-02 22:05:03 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-02 22:05:03 +0000 |
commit | 516650c2b70d0e2e14fcf0c284e22bc57ad53179 (patch) | |
tree | 93ca58e1ef54665509e57971d31e84ac80b4a1d3 | |
parent | ff309b3ff56471cf49b9a95378078ed37437192f (diff) | |
download | chromium_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.cc | 12 | ||||
-rw-r--r-- | chrome/browser/gtk/gtk_util.cc | 22 | ||||
-rw-r--r-- | chrome/browser/gtk/gtk_util.h | 4 | ||||
-rw-r--r-- | chrome/browser/gtk/keyword_editor_view.cc | 6 |
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_); |