diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-28 22:57:10 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-28 22:57:10 +0000 |
commit | d35aea25a87c33247ebe8bbc06f0f1771cce2be8 (patch) | |
tree | a4f9732c672ac4f5dd7817b884bb525494a8e9ea /chrome/browser | |
parent | 07fb7781cf16e2be1915037b8d8446879720eb01 (diff) | |
download | chromium_src-d35aea25a87c33247ebe8bbc06f0f1771cce2be8.zip chromium_src-d35aea25a87c33247ebe8bbc06f0f1771cce2be8.tar.gz chromium_src-d35aea25a87c33247ebe8bbc06f0f1771cce2be8.tar.bz2 |
Implement a couple more methods for dialog boxes including the prompt box.
BUG=9623
Review URL: http://codereview.chromium.org/100124
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14791 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/app_modal_dialog_gtk.cc | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/chrome/browser/app_modal_dialog_gtk.cc b/chrome/browser/app_modal_dialog_gtk.cc index 2f9337d..02ce7c3 100644 --- a/chrome/browser/app_modal_dialog_gtk.cc +++ b/chrome/browser/app_modal_dialog_gtk.cc @@ -16,13 +16,27 @@ namespace { +// If there's a text entry in the dialog, get the text from the first one and +// return it. +std::wstring GetPromptText(GtkDialog* dialog) { + // TODO(tc): Replace with gtk_dialog_get_content_area() when using GTK 2.14+ + GtkWidget* contents_vbox = dialog->vbox; + GList* first_child = gtk_container_get_children(GTK_CONTAINER(contents_vbox)); + for (GList* item = first_child; item; g_list_next(item)) { + if (GTK_IS_ENTRY(item->data)) { + return UTF8ToWide(gtk_entry_get_text(GTK_ENTRY(item->data))); + } + } + return std::wstring(); +} + void OnDialogResponse(GtkDialog* dialog, gint response_id, AppModalDialog* app_modal_dialog) { switch (response_id) { case GTK_RESPONSE_OK: // The first arg is the prompt text and the second is true if we want to // suppress additional popups from the page. - app_modal_dialog->OnAccept(std::wstring(), false); + app_modal_dialog->OnAccept(GetPromptText(dialog), false); break; case GTK_RESPONSE_CANCEL: @@ -63,13 +77,7 @@ void AppModalDialog::CreateAndShowDialog() { break; case MessageBoxFlags::kIsJavascriptPrompt: - // We need to make a custom message box for javascript prompts. For now - // just have an OK button and send back an empty string. Maybe we can - // cram a GtkEntry into the content area of the message box via - // gtk_dialog_get_content_area. - // http://crbug.com/9623 - NOTIMPLEMENTED(); - buttons = GTK_BUTTONS_OK; + buttons = GTK_BUTTONS_OK_CANCEL; message_type = GTK_MESSAGE_QUESTION; break; @@ -92,6 +100,14 @@ void AppModalDialog::CreateAndShowDialog() { IDS_BEFOREUNLOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL); gtk_dialog_add_button(GTK_DIALOG(dialog_), button_text.c_str(), GTK_RESPONSE_CANCEL); + } else if (MessageBoxFlags::kIsJavascriptPrompt == dialog_flags_) { + // TODO(tc): Replace with gtk_dialog_get_content_area() when using GTK 2.14+ + GtkWidget* contents_vbox = GTK_DIALOG(dialog_)->vbox; + GtkWidget* text_box = gtk_entry_new(); + gtk_entry_set_text(GTK_ENTRY(text_box), + WideToUTF8(default_prompt_text_).c_str()); + gtk_widget_show(text_box); + gtk_box_pack_start(GTK_BOX(contents_vbox), text_box, TRUE, TRUE, 0); } g_signal_connect(dialog_, "response", G_CALLBACK(OnDialogResponse), this); @@ -99,11 +115,11 @@ void AppModalDialog::CreateAndShowDialog() { } void AppModalDialog::ActivateModalDialog() { - NOTIMPLEMENTED(); + gtk_window_present(GTK_WINDOW(dialog_)); } void AppModalDialog::CloseModalDialog() { - NOTIMPLEMENTED(); + OnDialogResponse(GTK_DIALOG(dialog_), GTK_RESPONSE_DELETE_EVENT, this); } int AppModalDialog::GetDialogButtons() { |