fix crashing bug caused by recursive set_state() nonsense; sync snap_type, snap_mode...
[ardour.git] / gtk2_ardour / editor.cc
index 994275468a9f116a83d991352dac2eb4edac830e..c0fd7b0a20b8dfb85ee709059382240edff4ecc9 100644 (file)
@@ -97,7 +97,7 @@ const double Editor::timebar_height = 15.0;
 
 #include "editor_xpms"
 
-static const gchar *snap_type_strings[] = {
+static const gchar *_snap_type_strings[] = {
        N_("None"),
        N_("CD Frames"),
        N_("SMPTE Frames"),
@@ -121,13 +121,13 @@ static const gchar *snap_type_strings[] = {
        0
 };
 
-static const gchar *snap_mode_strings[] = {
-       N_("Normal Snap"),
-       N_("Magnetic Snap"),
+static const gchar *_snap_mode_strings[] = {
+       N_("Normal"),
+       N_("Magnetic"),
        0
 };
 
-static const gchar *zoom_focus_strings[] = {
+static const gchar *_zoom_focus_strings[] = {
        N_("Left"),
        N_("Right"),
        N_("Center"),
@@ -239,6 +239,10 @@ Editor::Editor (AudioEngine& eng)
        current_mixer_strip = 0;
        current_bbt_points = 0;
 
+       snap_type_strings = I18N (_snap_type_strings);
+       snap_mode_strings = I18N (_snap_mode_strings);
+       zoom_focus_strings = I18N(_zoom_focus_strings);
+
        snap_type = SnapToFrame;
        set_snap_to (snap_type);
        snap_mode = SnapNormal;
@@ -1996,8 +2000,11 @@ void
 Editor::set_snap_to (SnapType st)
 {
        snap_type = st;
-       vector<string> txt = I18N (snap_type_strings);
-       snap_type_selector.set_active_text (txt[(int)st]);
+       string str = snap_type_strings[(int) st];
+
+       if (str != snap_type_selector.get_active_text()) {
+               snap_type_selector.set_active_text (str);
+       }
 
        instant_save ();
 
@@ -2018,8 +2025,11 @@ void
 Editor::set_snap_mode (SnapMode mode)
 {
        snap_mode = mode;
-       vector<string> txt = I18N (snap_mode_strings);
-       snap_mode_selector.set_active_text (txt[(int)mode]);
+       string str = snap_mode_strings[(int)mode];
+
+       if (str != snap_mode_selector.get_active_text ()) {
+               snap_mode_selector.set_active_text (str);
+       }
 
        instant_save ();
 }
@@ -2583,10 +2593,10 @@ Editor::setup_toolbar ()
        zoom_box.pack_start (zoom_out_full_button, false, false);
        
        ARDOUR_UI::instance()->tooltips().set_tip (zoom_range_clock, _("Current Zoom Range\n(Width of visible area)"));
-       
+
        zoom_focus_selector.set_name ("ZoomFocusSelector");
        Gtkmm2ext::set_size_request_to_display_given_text (zoom_focus_selector, "Focus Center", 2+FUDGE, 0);
-       set_popdown_strings (zoom_focus_selector, I18N (zoom_focus_strings));
+       set_popdown_strings (zoom_focus_selector, zoom_focus_strings);
        zoom_focus_selector.signal_changed().connect (mem_fun(*this, &Editor::zoom_focus_selection_done));
        ARDOUR_UI::instance()->tooltips().set_tip (zoom_focus_selector, _("Zoom focus"));
 
@@ -2600,13 +2610,13 @@ Editor::setup_toolbar ()
 
        snap_type_selector.set_name ("SnapTypeSelector");
        Gtkmm2ext::set_size_request_to_display_given_text (snap_type_selector, "SMPTE Seconds", 2+FUDGE, 10);
-       set_popdown_strings (snap_type_selector, I18N (snap_type_strings));
+       set_popdown_strings (snap_type_selector, snap_type_strings);
        snap_type_selector.signal_changed().connect (mem_fun(*this, &Editor::snap_type_selection_done));
        ARDOUR_UI::instance()->tooltips().set_tip (snap_type_selector, _("Unit to snap cursors and ranges to"));
 
        snap_mode_selector.set_name ("SnapModeSelector");
        Gtkmm2ext::set_size_request_to_display_given_text (snap_mode_selector, "Magnetic Snap", 2+FUDGE, 10);
-       set_popdown_strings (snap_mode_selector, I18N (snap_mode_strings));
+       set_popdown_strings (snap_mode_selector, snap_mode_strings);
        snap_mode_selector.signal_changed().connect (mem_fun(*this, &Editor::snap_mode_selection_done));
 
        snap_box.pack_start (edit_cursor_clock, false, false);
@@ -3448,10 +3458,6 @@ Editor::edit_mode_selection_done ()
 void
 Editor::snap_type_selection_done ()
 {
-       if (session == 0) {
-               return;
-       }
-
        string choice = snap_type_selector.get_active_text();
        SnapType snaptype = SnapToFrame;
 
@@ -3497,35 +3503,34 @@ Editor::snap_type_selection_done ()
                snaptype = SnapToFrame;
        }
 
-       set_snap_to (snaptype);
+       RefPtr<RadioAction> ract = snap_type_action (snaptype);
+       if (ract) {
+               ract->set_active ();
+       }
 }      
 
 void
 Editor::snap_mode_selection_done ()
 {
-       if(session == 0) {
-               return;
-       }
-
        string choice = snap_mode_selector.get_active_text();
        SnapMode mode = SnapNormal;
 
-       if (choice == _("Normal Snap")) {
+       if (choice == _("Normal")) {
                mode = SnapNormal;
-       } else if (choice == _("Magnetic Snap")) {
+       } else if (choice == _("Magnetic")) {
                mode = SnapMagnetic;
        }
 
-       set_snap_mode (mode);
+       RefPtr<RadioAction> ract = snap_mode_action (mode);
+
+       if (ract) {
+               ract->set_active (true);
+       }
 }
 
 void
 Editor::zoom_focus_selection_done ()
 {
-       if (session == 0) {
-               return;
-       }
-
        string choice = zoom_focus_selector.get_active_text();
        ZoomFocus focus_type = ZoomFocusLeft;
 
@@ -3540,8 +3545,12 @@ Editor::zoom_focus_selection_done ()
        } else if (choice == _("Edit Cursor")) {
                focus_type = ZoomFocusEdit;
        } 
+       
+       RefPtr<RadioAction> ract = zoom_focus_action (focus_type);
 
-       set_zoom_focus (focus_type);
+       if (ract) {
+               ract->set_active ();
+       }
 }      
 
 gint
@@ -3672,8 +3681,11 @@ Editor::get_valid_views (TimeAxisView* track, RouteGroup* group)
 void
 Editor::set_zoom_focus (ZoomFocus f)
 {
-       vector<string> txt = I18N (zoom_focus_strings);
-       zoom_focus_selector.set_active_text (txt[(int)f]);
+       string str = zoom_focus_strings[(int)f];
+
+       if (str != zoom_focus_selector.get_active_text()) {
+               zoom_focus_selector.set_active_text (str);
+       }
        
        if (zoom_focus != f) {
                zoom_focus = f;