diff --git a/Timeline/Audio_Region.C b/Timeline/Audio_Region.C index 8cc0ac7..582ac2f 100644 --- a/Timeline/Audio_Region.C +++ b/Timeline/Audio_Region.C @@ -304,11 +304,6 @@ Audio_Region::handle ( int m ) redraw(); return 1; } - else if ( Fl::event_button1() && Fl::event_ctrl() ) - { - /* duplication */ - return 1; - } else if ( Fl::test_shortcut( FL_BUTTON3 ) && ! Fl::event_shift() ) { /* context menu */ @@ -350,13 +345,13 @@ Audio_Region::handle ( int m ) return 0; } else - return Sequence_Widget::handle( m ); + return Sequence_Region::handle( m ); } break; } case FL_RELEASE: { - Sequence_Widget::handle( m ); + Sequence_Region::handle( m ); copied = false; @@ -369,38 +364,28 @@ Audio_Region::handle ( int m ) begin_drag( Drag( x() - X, y() - Y, x_to_offset( X ) ) ); _log.hold(); } - - /* panning */ - if ( Fl::event_state() & FL_SHIFT && - Fl::event_state() & FL_CTRL ) + if ( Fl::event_button1() ) { - int d = (ox + X) - x(); - long td = timeline->x_to_ts( d ); - - if ( td > 0 && os < (nframes_t)td ) - _r->offset = 0; - else - _r->offset = os - td; + if ( Fl::event_state() & ( FL_SHIFT | FL_CTRL ) ) + { + /* panning */ + int d = (ox + X) - x(); + long td = timeline->x_to_ts( d ); - sequence()->redraw(); - return 1; - } + if ( td > 0 && os < (nframes_t)td ) + _r->offset = 0; + else + _r->offset = os - td; - /* duplication */ - if ( Fl::event_state() & FL_CTRL ) - { - if ( _drag->state == 0 ) - { - sequence()->add( new Audio_Region( *this ) ); - _drag->state = 1; + sequence()->redraw(); return 1; } } - ret = Sequence_Widget::handle( m ); + ret = Sequence_Region::handle( m ); return ret | 1; default: - return Sequence_Widget::handle( m ); + return Sequence_Region::handle( m ); break; } diff --git a/Timeline/Loggable.H b/Timeline/Loggable.H index c6e8fee..f6e77b6 100644 --- a/Timeline/Loggable.H +++ b/Timeline/Loggable.H @@ -135,6 +135,23 @@ private: static bool snapshot( FILE * fp ); + void init ( bool loggable=true ) + { + if ( loggable ) + { + _id = ++_log_id; + _old_state = NULL; + _nest = 0; + + ensure_size( _id ); + + _loggables[ _id - 1 ] = this; + } + else + _id = 0; + + } + public: static const char *escape ( const char *s ); @@ -176,19 +193,7 @@ public: Loggable ( bool loggable=true ) { - if ( loggable ) - { - _id = ++_log_id; - _old_state = NULL; - _nest = 0; - - ensure_size( _id ); - - _loggables[ _id - 1 ] = this; - } - else - _id = 0; - + init( loggable ); } void update_id ( int id ); @@ -226,8 +231,9 @@ protected: /* leaf subclasses *must* call log_create() at the end of their copy contructors */ Loggable ( const Loggable &rhs ) { + init( true ); /* FIXME: get a real id here!!! */ - _id = 0; +// _id = 0; } public: diff --git a/Timeline/Sequence_Region.C b/Timeline/Sequence_Region.C index 339c9c6..0a9a09e 100644 --- a/Timeline/Sequence_Region.C +++ b/Timeline/Sequence_Region.C @@ -215,22 +215,36 @@ Sequence_Region::handle ( int m ) } else return 0; - - /* track jumping */ - if ( ! selected() ) + else if ( Fl::event_button1() ) { - if ( Y > y() + h() || Y < y() ) + if ( Fl::event_state() & FL_CTRL ) + { + /* duplication */ + if ( _drag->state == 0 ) + { +// sequence()->add( new Audio_Region( *this ) ); + sequence()->add( this->clone() ); + + _drag->state = 1; + return 1; + } + } + else if ( ! selected() ) { - printf( "wants to jump tracks\n" ); + /* track jumping */ + if ( Y > y() + h() || Y < y() ) + { + printf( "wants to jump tracks\n" ); - Track *t = timeline->track_under( Y ); + Track *t = timeline->track_under( Y ); - fl_cursor( (Fl_Cursor)1 ); + fl_cursor( (Fl_Cursor)1 ); - if ( t ) - t->handle( FL_ENTER ); + if ( t ) + t->handle( FL_ENTER ); - return 0; + return 0; + } } }