-//printf("TimeBar::cursor_motion_event %d %p %d\n", __LINE__, this, current_operation);
- switch( current_operation )
- {
- case TIMEBAR_DRAG_LEFT:
- case TIMEBAR_DRAG_RIGHT:
- case TIMEBAR_DRAG_CENTER:
- if( has_preview() )
- result = move_preview(redraw);
- break;
-
- case TIMEBAR_DRAG_LABEL:
- if( drag_label ) {
- int pixel = get_relative_cursor_x();
- double position = pixel_to_position(pixel);
- if( drag_label->label )
- drag_label->label->position = position;
- else if( drag_label == in_point ) {
- EDL *edl = get_edl();
- edl->local_session->set_inpoint(position);
- }
- else if( drag_label == out_point ) {
- EDL *edl = get_edl();
- edl->local_session->set_outpoint(position);
+ switch( current_operation ) {
+ case TIMEBAR_DRAG_LEFT:
+ case TIMEBAR_DRAG_RIGHT:
+ case TIMEBAR_DRAG_CENTER:
+ if( has_preview() )
+ result = move_preview(redraw);
+ break;
+
+ case TIMEBAR_DRAG_LABEL:
+ if( drag_label ) {
+ EDL *edl = get_edl();
+ int pixel = get_relative_cursor_x();
+ double position = pixel_to_position(pixel);
+ if( drag_label->label )
+ drag_label->label->position = position;
+ else if( drag_label == in_point ) {
+ if( out_point && edl->local_session->outpoint_valid() ) {
+ double out_pos = edl->local_session->get_outpoint();
+ if( position > out_pos ) {
+ edl->local_session->set_outpoint(position);
+ drag_label = out_point;
+ position = out_pos;
+ }