summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-05-27 19:34:04 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-05-27 19:34:11 -0400
commit9c6a821c67139a32b531501e0fd000ec19c89faf (patch)
tree97928ee3adf381d7a2ba8a8a5a32c23399b2053e
parent2d311979e34df75ad048f0f7d25b1698e21b11bc (diff)
prevent crash when using WM close button on "new route name contains bad chars" dialog.
The dialog would be created twice, once because the user hit enter etc. to indicate they were done editing, and once because focus left the name text entry, also indicate the end of editing. We now note that we're already processing the end of a name edit, and do nothing in that case
-rw-r--r--gtk2_ardour/time_axis_view.cc11
-rw-r--r--gtk2_ardour/time_axis_view.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index e3695fb411..9deb7eb3e8 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -27,6 +27,7 @@
#include "pbd/error.h"
#include "pbd/convert.h"
#include "pbd/stacktrace.h"
+#include "pbd/unwind.h"
#include <gtkmm2ext/doi.h>
#include <gtkmm2ext/utils.h>
@@ -102,6 +103,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
, _y_position (0)
, _editor (ed)
, name_entry (0)
+ , ending_name_edit (false)
, control_parent (0)
, _order (0)
, _effective_height (0)
@@ -696,6 +698,15 @@ TimeAxisView::end_name_edit (int response)
if (!name_entry) {
return;
}
+
+ if (ending_name_edit) {
+ /* already doing this, and focus out or other event has caused
+ us to re-enter this code.
+ */
+ return;
+ }
+
+ PBD::Unwinder<bool> uw (ending_name_edit, true);
bool edit_next = false;
bool edit_prev = false;
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index baeeb2a92a..1eb193590c 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -259,6 +259,7 @@ class TimeAxisView : public virtual AxisView
bool name_entry_focus_out (GdkEventFocus *ev);
Gtk::Entry* name_entry;
+ bool ending_name_edit;
void begin_name_edit ();
void end_name_edit (int);