Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2435)

Unified Diff: chrome/browser/platform_util_common_linux.cc

Issue 1745024: Make a new yes/no messagebox wrapper function, use it in the bookmark alert.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/platform_util.h ('k') | chrome/browser/platform_util_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 */
« no previous file with comments | « chrome/browser/platform_util.h ('k') | chrome/browser/platform_util_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698