summaryrefslogtreecommitdiffstats
path: root/chrome/browser/platform_util_common_linux.cc
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-25 21:29:10 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-25 21:29:10 +0000
commite313f3b11360902a3da9b3b1cc0df2a4792d0867 (patch)
tree609e260af0138ff982d26f80c22f5beec7e3efc2 /chrome/browser/platform_util_common_linux.cc
parentd5c7934b36545f324df7d2f47527c41653b26771 (diff)
downloadchromium_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.cc77
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 */