Fix 6609: Right-click in active track name box crashes
authorJulien ROGER <gulien.roger@gmail.com>
Wed, 10 Feb 2016 22:52:03 +0000 (23:52 +0100)
committerTim Mayberry <mojofunk@gmail.com>
Sat, 13 Feb 2016 02:30:31 +0000 (12:30 +1000)
When right-clicking in the text entry, popup menu grabs focus. Consequently, the "focus out" handler is called, destroys the text entry and replaces it by the label name of the track.
When menu pops up, it tries to access to a widget no longer available.

gtk2_ardour/time_axis_view.cc
gtk2_ardour/time_axis_view.h

index 4ad476b73442c775e6018862c8f7adb60664aed6..27db10c99b51b5149a4d22432f7309687b8d0051 100644 (file)
@@ -104,6 +104,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session* sess, PublicEditor& ed, TimeAxisVie
        , _editor (ed)
        , name_entry (0)
        , ending_name_edit (false)
+       , by_popup_menu (false)
        , control_parent (0)
        , _order (0)
        , _effective_height (0)
@@ -652,10 +653,20 @@ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
 bool
 TimeAxisView::name_entry_focus_out (GdkEventFocus*)
 {
+       if (by_popup_menu) {
+               by_popup_menu = false;
+               return false;
+       }
        end_name_edit (RESPONSE_OK);
        return false;
 }
 
+void
+TimeAxisView::name_entry_populate_popup (Gtk::Menu *)
+{
+       by_popup_menu = true;
+}
+
 void
 TimeAxisView::begin_name_edit ()
 {
@@ -675,6 +686,7 @@ TimeAxisView::begin_name_edit ()
                name_entry->signal_focus_out_event().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_focus_out));
                name_entry->set_text (name_label.get_text());
                name_entry->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &TimeAxisView::end_name_edit), RESPONSE_OK));
+               name_entry->signal_populate_popup().connect (sigc::mem_fun (*this, &TimeAxisView::name_entry_populate_popup));
 
                if (name_label.is_ancestor (name_hbox)) {
                        name_hbox.remove (name_label);
index 1eb193590c9d63f9e775e2b43672c11f899b292d..4be23803efe424608df596633ac3f3ee3e6ebe2d 100644 (file)
@@ -257,9 +257,11 @@ class TimeAxisView : public virtual AxisView
        bool name_entry_key_release (GdkEventKey *ev);
        bool name_entry_key_press (GdkEventKey *ev);
        bool name_entry_focus_out (GdkEventFocus *ev);
+       void name_entry_populate_popup (Gtk::Menu *);
 
        Gtk::Entry* name_entry;
        bool ending_name_edit;
+       bool by_popup_menu;
        void begin_name_edit ();
        void end_name_edit (int);