fix (mostly) measure lines and click box text and meter markings
[ardour.git] / gtk2_ardour / editor_mouse.cc
index c92eadc284b8b099ed4cb4e7d956a3b30dd5f79b..75a026f92bd455d2dbb20878a2f54edddf11e14c 100644 (file)
@@ -94,6 +94,11 @@ Editor::event_frame (GdkEvent* event, double* pcx, double* pcy)
        case GDK_LEAVE_NOTIFY:
                track_canvas.w2c(event->crossing.x, event->crossing.y, *pcx, *pcy);
                break;
+       case GDK_KEY_PRESS:
+       case GDK_KEY_RELEASE:
+               cerr << "here\n";
+               // track_canvas.w2c(event->key.x, event->key.y, *pcx, *pcy);
+               break;
        default:
                warning << string_compose (_("Editor::event_frame() used on unhandled event type %1"), event->type) << endmsg;
                break;
@@ -2533,6 +2538,9 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
 
        vector<AudioRegionView*> new_regionviews;
 
+       set<Playlist*> affected_playlists;
+       pair<set<Playlist*>::iterator,bool> insert_result;
+       
        for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i) {
                AudioRegionView* rv;
 
@@ -2540,8 +2548,12 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
 
                Playlist* to_playlist = rv->region.playlist();
                AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(&rv->get_time_axis_view());
+
+               insert_result = affected_playlists.insert (to_playlist);
+               if (insert_result.second) {
+                       session->add_undo (to_playlist->get_memento ());
+               }
                
-               session->add_undo (to_playlist->get_memento ());
                latest_regionview = 0;
 
                sigc::connection c = atv->view->AudioRegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
@@ -2597,7 +2609,7 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
 
        show_verbose_time_cursor (drag_info.last_frame_position, 10);
 
-       begin_reversible_command (_("copy region(s)"));
+       //begin_reversible_command (_("copy region(s)"));
 }
 
 void
@@ -3213,7 +3225,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
        } else {
 
                /* motion within a single track */
-
+               
                for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i) {
 
                        rv = (*i);
@@ -3713,6 +3725,8 @@ Editor::start_trim (ArdourCanvas::Item* item, GdkEvent* event)
        jack_nframes_t region_start = (jack_nframes_t) (clicked_regionview->region.position() / speed);
        jack_nframes_t region_end = (jack_nframes_t) (clicked_regionview->region.last_frame() / speed);
        jack_nframes_t region_length = (jack_nframes_t) (clicked_regionview->region.length() / speed);
+
+       motion_frozen_playlists.clear();
        
        //drag_info.item = clicked_regionview->get_name_highlight();
        drag_info.item = item;
@@ -3763,6 +3777,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
        double speed = 1.0;
        TimeAxisView* tvp = clicked_trackview;
        AudioTimeAxisView* tv = dynamic_cast<AudioTimeAxisView*>(tvp);
+       pair<set<Playlist*>::iterator,bool> insert_result;
 
        if (tv && tv->is_audio_track()) {
                speed = tv->get_diskstream()->speed();
@@ -3803,7 +3818,12 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
                for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i) {
                        (*i)->region.freeze ();
                        (*i)->temporarily_hide_envelope ();
-                       session->add_undo ((*i)->region.playlist()->get_memento());
+
+                       Playlist * pl = (*i)->region.playlist();
+                       insert_result = motion_frozen_playlists.insert (pl);
+                       if (insert_result.second) {
+                               session->add_undo (pl->get_memento());
+                       }
                }
        }
 
@@ -3989,6 +4009,14 @@ Editor::trim_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
                                thaw_region_after_trim (**i);
                        }
                }
+               
+               for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
+                       //(*p)->thaw ();
+                       session->add_redo_no_execute ((*p)->get_memento());
+               }
+               
+               motion_frozen_playlists.clear ();
+
                commit_reversible_command();
        } else {
                /* no mouse movement */
@@ -4465,11 +4493,10 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
        prompter.show_all ();
        switch (prompter.run ()) {
        case Gtk::RESPONSE_ACCEPT:
-               string str;
+        string str;
                prompter.get_result(str);
                if (str.length()) {
-       
-                       clicked_regionview->region.set_name (str);
+               clicked_regionview->region.set_name (str);
                }
                break;
        }