Index: chrome/browser/platform_util_common_linux.cc |
=================================================================== |
--- chrome/browser/platform_util_common_linux.cc (revision 50758) |
+++ chrome/browser/platform_util_common_linux.cc (working copy) |
@@ -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 @@ |
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. |
+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); |
- // 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) |
+ 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); |
Evan Stade
2010/06/25 01:02:35
nit: no ()
|
} |
/* Warning: this may be either Linux or ChromeOS */ |