Add locking. Don't call handle_widget_change often while dragging.
This commit is contained in:
parent
9f567c6966
commit
9b38190211
|
@ -124,12 +124,12 @@ Sequence::draw ( void )
|
||||||
|
|
||||||
fl_clip_box( x(), y(), w(), h(), X, Y, W, H );
|
fl_clip_box( x(), y(), w(), h(), X, Y, W, H );
|
||||||
|
|
||||||
if ( Sequence_Widget::pushed() && Sequence_Widget::pushed()->sequence() == this )
|
/* if ( Sequence_Widget::pushed() && Sequence_Widget::pushed()->sequence() == this ) */
|
||||||
{
|
/* { */
|
||||||
/* make sure the Sequence_Widget::pushed widget is above all others */
|
/* /\* make sure the Sequence_Widget::pushed widget is above all others *\/ */
|
||||||
remove( Sequence_Widget::pushed() );
|
/* remove( Sequence_Widget::pushed() ); */
|
||||||
add( Sequence_Widget::pushed() );
|
/* add( Sequence_Widget::pushed() ); */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
// printf( "track::draw %d,%d %dx%d\n", X,Y,W,H );
|
// printf( "track::draw %d,%d %dx%d\n", X,Y,W,H );
|
||||||
|
|
||||||
|
@ -149,8 +149,12 @@ Sequence::draw ( void )
|
||||||
void
|
void
|
||||||
Sequence::remove ( Sequence_Widget *r )
|
Sequence::remove ( Sequence_Widget *r )
|
||||||
{
|
{
|
||||||
|
timeline->wrlock();
|
||||||
|
|
||||||
_widgets.remove( r );
|
_widgets.remove( r );
|
||||||
|
|
||||||
|
timeline->unlock();
|
||||||
|
|
||||||
handle_widget_change( r->start(), r->length() );
|
handle_widget_change( r->start(), r->length() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,11 +213,15 @@ Sequence::add ( Sequence_Widget *r )
|
||||||
// r->track()->redraw();
|
// r->track()->redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeline->wrlock();
|
||||||
|
|
||||||
r->sequence( this );
|
r->sequence( this );
|
||||||
_widgets.push_back( r );
|
_widgets.push_back( r );
|
||||||
|
|
||||||
sort();
|
sort();
|
||||||
|
|
||||||
|
timeline->unlock();
|
||||||
|
|
||||||
handle_widget_change( r->start(), r->length() );
|
handle_widget_change( r->start(), r->length() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,12 @@ void
|
||||||
Sequence_Widget::begin_drag ( const Drag &d )
|
Sequence_Widget::begin_drag ( const Drag &d )
|
||||||
{
|
{
|
||||||
_drag = new Drag( d );
|
_drag = new Drag( d );
|
||||||
|
|
||||||
|
timeline->rdlock();
|
||||||
|
|
||||||
_r = new Range( _range );
|
_r = new Range( _range );
|
||||||
|
|
||||||
|
timeline->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -106,6 +111,8 @@ Sequence_Widget::end_drag ( void )
|
||||||
|
|
||||||
delete _drag;
|
delete _drag;
|
||||||
_drag = NULL;
|
_drag = NULL;
|
||||||
|
|
||||||
|
sequence()->handle_widget_change( _r->start, _r->length );
|
||||||
}
|
}
|
||||||
|
|
||||||
/** set position of widget on the timeline. */
|
/** set position of widget on the timeline. */
|
||||||
|
@ -313,8 +320,6 @@ Sequence_Widget::handle ( int m )
|
||||||
_log.release();
|
_log.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
sequence()->handle_widget_change( _r->start, _r->length );
|
|
||||||
|
|
||||||
fl_cursor( FL_CURSOR_HAND );
|
fl_cursor( FL_CURSOR_HAND );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue