X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Finterthread_progress_window.cc;h=c74f12914f3d37a62720e16edee0f44d6af56d09;hb=41bd6d3721f20e5c7a668c4566cef65a06a95c7f;hp=5067b769c545644655cded006744760adfa99255;hpb=18f2af10ae766bc2e90cc6064728c4d3f77fc7f5;p=ardour.git diff --git a/gtk2_ardour/interthread_progress_window.cc b/gtk2_ardour/interthread_progress_window.cc index 5067b769c5..c74f12914f 100644 --- a/gtk2_ardour/interthread_progress_window.cc +++ b/gtk2_ardour/interthread_progress_window.cc @@ -19,9 +19,10 @@ #include #include +#include "gtkmm2ext/utils.h" #include "ardour/import_status.h" #include "interthread_progress_window.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace Gtk; @@ -49,10 +50,21 @@ InterthreadProgressWindow::InterthreadProgressWindow (ARDOUR::InterThreadInfo* i set_default_size (200, 100); show_all (); + hide (); + _interthread_info->cancel = false; // override on_hide Glib::signal_timeout().connect (sigc::mem_fun (*this, &InterthreadProgressWindow::update), 100); } +void +InterthreadProgressWindow::on_hide () +{ + if (_interthread_info && !_interthread_info->done) { + //catch user pressing 'esc' or WM close + _interthread_info->cancel = true; + } +} + void InterthreadProgressWindow::cancel_clicked () { @@ -86,12 +98,20 @@ bool ImportProgressWindow::update () { _cancel_button.set_sensitive (!_import_status->freeze); - _label.set_markup ("" + _import_status->doing_what + ""); + _label.set_markup ("" + Gtkmm2ext::markup_escape_text (_import_status->doing_what) + ""); /* use overall progress for the bar, rather than that for individual files */ _bar.set_fraction ((_import_status->current - 1 + _import_status->progress) / _import_status->total); - _bar.set_text (string_compose (_("Importing file: %1 of %2"), _import_status->current, _import_status->total)); - - return !(_import_status->done || _import_status->cancel); + /* some of the code which sets up _import_status->current may briefly increment it too far + at the end of an import, so check for that to avoid a visual glitch + */ + uint32_t c = _import_status->current; + if (c > _import_status->total) { + c = _import_status->total; + } + + _bar.set_text (string_compose (_("Importing file: %1 of %2"), c, _import_status->total)); + + return !(_import_status->all_done || _import_status->cancel); }