X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fgtkmm2ext%2Fprompter.cc;h=0ff97103380becd0b74a9191a55425b71fc6bbb5;hb=0c3f01e54074a9b47dcab9b3ec0ed8a9729dbc87;hp=5dd3367380dd3dcfd17a99964520aad49991581e;hpb=79650335d11f2b3c0a0ae51ad971a36cdb28c108;p=ardour.git diff --git a/libs/gtkmm2ext/prompter.cc b/libs/gtkmm2ext/prompter.cc index 5dd3367380..0ff9710338 100644 --- a/libs/gtkmm2ext/prompter.cc +++ b/libs/gtkmm2ext/prompter.cc @@ -20,6 +20,8 @@ #include +#include + #include #include @@ -43,13 +45,19 @@ Prompter::Prompter (bool modal) void Prompter::init () { + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); set_position (Gtk::WIN_POS_MOUSE); set_name ("Prompter"); - - set_default_response (Gtk::RESPONSE_ACCEPT); add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - add_button (Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); + + /* + Alas a generic 'affirmative' button seems a bit useless sometimes. + You will have to add your own. + After adding, use : + set_response_sensitive (Gtk::RESPONSE_ACCEPT, false) + to prevent the RESPONSE_ACCEPT button from permitting blank strings. + */ entryLabel.set_line_wrap (true); entryLabel.set_name ("PrompterLabel"); @@ -62,7 +70,7 @@ Prompter::init () get_vbox()->pack_start (entryBox); show_all_children(); - + entry.signal_changed().connect (mem_fun (*this, &Prompter::on_entry_changed)); entry.signal_activate().connect (bind (mem_fun (*this, &Prompter::response), Gtk::RESPONSE_ACCEPT)); } @@ -74,8 +82,28 @@ Prompter::change_labels (string okstr, string cancelstr) } void -Prompter::get_result (string &str) - +Prompter::get_result (string &str, bool strip) { str = entry.get_text (); + if (strip) { + PBD::strip_whitespace_edges (str); + } +} + +void +Prompter::on_entry_changed () +{ + /* + This is set up so that entering text in the entry + field makes the RESPONSE_ACCEPT button active. + Of course if you haven't added a RESPONSE_ACCEPT + button, nothing will happen at all. + */ + + if (entry.get_text() != "") { + set_response_sensitive (Gtk::RESPONSE_ACCEPT, true); + set_default_response (Gtk::RESPONSE_ACCEPT); + } else { + set_response_sensitive (Gtk::RESPONSE_ACCEPT, false); + } }