diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-25 21:29:10 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-25 21:29:10 +0000 |
commit | e313f3b11360902a3da9b3b1cc0df2a4792d0867 (patch) | |
tree | 609e260af0138ff982d26f80c22f5beec7e3efc2 /chrome/browser/platform_util_common_linux.cc | |
parent | d5c7934b36545f324df7d2f47527c41653b26771 (diff) | |
download | chromium_src-e313f3b11360902a3da9b3b1cc0df2a4792d0867.zip chromium_src-e313f3b11360902a3da9b3b1cc0df2a4792d0867.tar.gz chromium_src-e313f3b11360902a3da9b3b1cc0df2a4792d0867.tar.bz2 |
Make a new yes/no messagebox wrapper function, use it in the bookmark alert.
Recommitting of r46101.
BUG=http://crbug.com/34481; http://crbug.com/40011
TEST=on Mac/ChromeOS, have at least 15 bookmarks on bookmarks bar or other bookmarks,
right click on one of those and click on Open all bookmarks. A confirmation
dialog box should be shown. No other visible change.
Review URL: http://codereview.chromium.org/1745024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50894 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/platform_util_common_linux.cc')
-rw-r--r-- | chrome/browser/platform_util_common_linux.cc | 77 |
1 files changed, 58 insertions, 19 deletions
diff --git a/chrome/browser/platform_util_common_linux.cc b/chrome/browser/platform_util_common_linux.cc index 88e9048..40edb70 100644 --- a/chrome/browser/platform_util_common_linux.cc +++ b/chrome/browser/platform_util_common_linux.cc @@ -8,6 +8,7 @@ #include "app/gtk_util.h" #include "base/file_util.h" +#include "base/message_loop.h" #include "base/process_util.h" #include "base/utf_string_conversions.h" #include "chrome/common/process_watcher.h" @@ -15,6 +16,45 @@ #include "gfx/native_widget_types.h" #include "googleurl/src/gurl.h" +namespace { + +void SetDialogTitle(GtkWidget* dialog, const string16& title) { + gtk_window_set_title(GTK_WINDOW(dialog), UTF16ToUTF8(title).c_str()); + +#if !defined(OS_CHROMEOS) + // The following code requires the dialog to be realized. However, we host + // dialog's content in a Chrome window without really realize the dialog + // on ChromeOS. Thus, skip the following code for ChromeOS. + gtk_widget_realize(dialog); + + // Make sure it's big enough to show the title. + GtkRequisition req; + gtk_widget_size_request(dialog, &req); + int width; + gtk_util::GetWidgetSizeFromCharacters(dialog, title.length(), 0, + &width, NULL); + // The fudge factor accounts for extra space needed by the frame + // decorations as well as width differences between average text and the + // actual title text. + width = width * 1.2 + 50; + + if (width > req.width) + gtk_widget_set_size_request(dialog, width, -1); +#endif // !defined(OS_CHROMEOS) +} + +int g_dialog_response; + +void HandleOnResponseDialog(GtkWidget* widget, + int response, + void* user_data) { + g_dialog_response = response; + gtk_widget_destroy(widget); + MessageLoop::current()->QuitNow(); +} + +} // namespace + namespace platform_util { gfx::NativeWindow GetTopLevel(gfx::NativeView view) { @@ -42,30 +82,29 @@ void SimpleErrorBox(gfx::NativeWindow parent, GtkWidget* dialog = gtk_message_dialog_new(parent, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", UTF16ToUTF8(message).c_str()); gtk_util::ApplyMessageDialogQuirks(dialog); - gtk_window_set_title(GTK_WINDOW(dialog), UTF16ToUTF8(title).c_str()); + SetDialogTitle(dialog, title); g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_util::ShowDialog(dialog); +} -#if !defined(OS_CHROMEOS) - // The following code requires the dialog to be realized. However, we host - // dialog's content in a Chrome window without really realize the dialog - // on ChromeOS. Thus, skip the following code for ChromeOS. - - // Make sure it's big enough to show the title. - GtkRequisition req; - gtk_widget_size_request(dialog, &req); - int width; - gtk_util::GetWidgetSizeFromCharacters(dialog, title.length(), 0, - &width, NULL); - // The fudge factor accounts for extra space needed by the frame - // decorations as well as width differences between average text and the - // actual title text. - width = width * 1.2 + 50; +bool SimpleYesNoBox(gfx::NativeWindow parent, + const string16& title, + const string16& message) { + GtkWidget* dialog = gtk_message_dialog_new(parent, GTK_DIALOG_MODAL, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", + UTF16ToUTF8(message).c_str()); + gtk_util::ApplyMessageDialogQuirks(dialog); + SetDialogTitle(dialog, title); - if (width > req.width) - gtk_widget_set_size_request(dialog, width, -1); -#endif // !defined(OS_CHROMEOS) + g_signal_connect(dialog, + "response", + G_CALLBACK(HandleOnResponseDialog), + NULL); + gtk_util::ShowDialog(dialog); + // Not gtk_dialog_run as it prevents timers from running in the unit tests. + MessageLoop::current()->Run(); + return g_dialog_response == GTK_RESPONSE_YES; } /* Warning: this may be either Linux or ChromeOS */ |