a) fix special button press handling for solo+mute buttons
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 29 Mar 2006 18:52:55 +0000 (18:52 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 29 Mar 2006 18:52:55 +0000 (18:52 +0000)
b) buttons for "restore pending state" dialog had reversed semantics
c) logic for checking a pending source file header was wrong
d) fixed file unlink from within real-time context

git-svn-id: svn://localhost/trunk/ardour2@424 d708f5d6-7413-0410-9779-e7cbd77b26cf

13 files changed:
gtk2_ardour/ardour_ui.cc
gtk2_ardour/audio_time_axis.cc
gtk2_ardour/mixer_strip.cc
gtk2_ardour/route_ui.cc
libs/ardour/ardour/session.h
libs/ardour/diskstream.cc
libs/ardour/filesource.cc
libs/ardour/session.cc
libs/ardour/session_butler.cc
libs/ardour/session_export.cc
libs/ardour/session_midi.cc
libs/ardour/session_state.cc
libs/ardour/session_transport.cc

index 3c01e73514d5155a11c38c1850485991e9c961fb..23074fa827d33041eb6a91dcfc07aa9851b55a42 100644 (file)
@@ -2269,15 +2269,12 @@ what you would like to do.\n"));
        
        switch (dialog.run ()) {
        case RESPONSE_ACCEPT:
-               break;
-       default:
                return 1;
+       default:
+               return 0;
        }
-
-       return 0;
 }
        
-       
 void
 ARDOUR_UI::disconnect_from_jack ()
 {
index ecdf4d67dd0a096e80df080a1a2b69606b747f5a..b4a5413d04f6153148fbb184875445fb0c7d08dc 100644 (file)
@@ -141,10 +141,10 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, Route& rt
 
        _route.panner().Changed.connect (mem_fun(*this, &AudioTimeAxisView::update_pans));
 
-       solo_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::solo_press));
-       solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release));
-       mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press));
-       mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release));
+       solo_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::solo_press), false);
+       solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release), false);
+       mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press), false);
+       mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release), false);
        rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press));
        edit_group_button.signal_button_release_event().connect (mem_fun(*this, &AudioTimeAxisView::edit_click), false);
        playlist_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::playlist_click));
index a82baa2daeff32f9e0d907c20f6d88e1d371488d..d69bfe43d384930c96c890aac3e98691e732a612 100644 (file)
@@ -313,10 +313,10 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, Route& rt, bool in_mixer)
        output_button.signal_button_release_event().connect (mem_fun(*this, &MixerStrip::output_press), false);
 
        rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press));
-       solo_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::solo_press));
-       solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release));
-       mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press));
-       mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release));
+       solo_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::solo_press), false);
+       solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release), false);
+       mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press), false);
+       mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release), false);
 
        gain_automation_style_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::gain_automation_style_button_event), false);
        gain_automation_style_button.signal_button_release_event().connect (mem_fun(*this, &MixerStrip::gain_automation_style_button_event), false);
index a96ca820098c7e10c62e85ef93be3d5a0a28e16d..8ed4bcd1c8cd537e8203781ad684131c6b98347d 100644 (file)
@@ -249,24 +249,23 @@ RouteUI::solo_press(GdkEventButton* ev)
                }
        }
 
-       return stop_signal (*solo_button, "button-press-event");
+       return true;
 }
 
 gint
 RouteUI::solo_release(GdkEventButton* ev)
 {
-       if(!ignore_toggle){
-               if (wait_for_release){
+       if (!ignore_toggle) {
+               if (wait_for_release) {
                        wait_for_release = false;
                        // undo the last op
                        // because the press was the last undoable thing we did
 
                        _session.undo (1U);
-
-                       stop_signal (*solo_button, "button-release-event");
                }
        }
-       return TRUE;
+
+       return true;
 }
 
 gint
index a422e52d3d091de8670f4d9a670e3989e98516d4..1e25c5f38bdf66d0f3c1cfc4de7892eb6bd68670 100644 (file)
@@ -320,7 +320,7 @@ class Session : public sigc::trackable, public Stateful
 
        bool record_enabling_legal () const;
        void maybe_enable_record ();
-       void disable_record (bool force = false);
+       void disable_record (bool rt_context, bool force = false);
        void step_back_from_record ();
        
        sigc::signal<void> going_away;
index b5bb83ee7825a486762782899c90caf184236fc6..5e1f8251c7976c707fe610d3e79c086413dbb38b 100644 (file)
@@ -452,8 +452,6 @@ DiskStream::setup_destructive_playlist ()
 {
        AudioRegion::SourceList srcs;
 
-       cerr << "setting up destructive playlist with " << channels.size() << " channels\n";
-
        for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
                srcs.push_back ((*chan).write_source);
        }
index bb14d3175795eb96bc54132bfbaa3ad80ea47f56..d4f728c13b8c9482854dbcc6d4d2532462a9e1d6 100644 (file)
@@ -1417,7 +1417,7 @@ FileSource::repair (string path, jack_nframes_t rate)
                goto out;
        }
        
-       if (memcmp (&buf[0], "RIFF", 4) || memcmp (&buf[8], "WAVE", 4) || memcmp (&buf[0], "RIFX", 4)) {
+       if ((memcmp (&buf[0], "RIFF", 4) && memcmp (&buf[0], "RIFX", 4)) || memcmp (&buf[8], "WAVE", 4)) {
                /* no header. too dangerous to proceed */
                goto out;
        } 
index 9b581ce79077df0b9f275a87cc25a5eab61254f1..71270f5e35136045bcf097680891b4b4ef0128a5 100644 (file)
@@ -1268,7 +1268,7 @@ Session::enable_record ()
 }
 
 void
-Session::disable_record (bool force)
+Session::disable_record (bool rt_context, bool force)
 {
        RecordState rs;
 
@@ -1299,7 +1299,10 @@ Session::disable_record (bool force)
                }
                
                RecordStateChanged (); /* emit signal */
-               remove_pending_capture_state ();
+
+               if (!rt_context) {
+                       remove_pending_capture_state ();
+               }
        }
 }
 
index cf97e478030625ebd0c9a53490b9c8ed5c6d5546..ec543f8fa126660c91641c1474c399881eba1302 100644 (file)
@@ -214,6 +214,7 @@ Session::butler_thread_work ()
                                                
                                        case ButlerRequest::Wake:
                                                break;
+
                                        case ButlerRequest::Run:
                                                butler_should_run = true;
                                                break;
index 0ccea59b81ccc66845bda18d4c342c3dcecc3882..677b2c12589f728f445a70595514ea3cb6d70560 100644 (file)
@@ -508,7 +508,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
        /* make sure we are actually rolling */
 
        if (get_record_enabled()) {
-               disable_record ();
+               disable_record (false);
        }
 
        _exporting = true;
index b2b1d263a7666c2d4c72478168dad4b4ec91bce8..1ac7d9e300e2b3c57043c7e2c533781b21ed6207 100644 (file)
@@ -637,7 +637,7 @@ void
 Session::mmc_record_exit (MIDI::MachineControl &mmc)
 {
        if (mmc_control) {
-               disable_record ();
+               disable_record (false);
        }
 }
 
index 6a42c0e4d1bff7e78869736007c18b163ed2b5a8..58f1d7c0a0aa68703d208c23fb915bceedd4de06 100644 (file)
@@ -765,8 +765,11 @@ Session::load_state (string snapshot_name)
                /* there is pending state from a crashed capture attempt */
 
                if (AskAboutPendingState()) {
+                       cerr << "use pending state\n";
                        state_was_pending = true;
-               } 
+               } else {
+                       cerr << "do not use pending state\n";
+               }
        } 
 
        if (!state_was_pending) {
@@ -1270,7 +1273,7 @@ Session::get_template()
           sources in their state node. 
        */
        
-       disable_record ();
+       disable_record (false);
 
        return state(false);
 }
index e2a9f2389009f5a30e512211cff6cd1c9e6c2983..2f9f8257f9344d3d8e3f2e38515861ec6e18cfa7 100644 (file)
@@ -189,7 +189,7 @@ Session::realtime_stop (bool abort)
        _clear_event_type (Event::RangeStop);
        _clear_event_type (Event::RangeLocate);
 
-       disable_record ();
+       disable_record (true);
 
        reset_slave_state ();
                
@@ -282,9 +282,9 @@ Session::non_realtime_stop (bool abort)
        struct tm* now;
        time_t     xnow;
        bool       did_record;
-
+       
        did_record = false;
-
+       
        for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
                if ((*i)->get_captured_frames () != 0) {
                        did_record = true;
@@ -405,8 +405,12 @@ Session::non_realtime_stop (bool abort)
                save_state ("", true);
        }
 
-       /* save the current state of things if appropriate */
+        /* always try to get rid of this */
+
+        remove_pending_capture_state ();
        
+       /* save the current state of things if appropriate */
+
        if (did_record) {
                save_state (_current_snapshot_name);
        }
@@ -835,7 +839,7 @@ Session::start_transport ()
                break;
 
        case Recording:
-               disable_record ();
+               disable_record (false);
                break;
 
        default: