diff --git a/src/app/legend/qgslegend.cpp b/src/app/legend/qgslegend.cpp index 207c0ef3ba3..ed9b992de65 100755 --- a/src/app/legend/qgslegend.cpp +++ b/src/app/legend/qgslegend.cpp @@ -233,12 +233,12 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e ) if ( item && ( item != mItemBeingMoved ) ) { QgsLegendItem::DRAG_ACTION action = dest->accept( origin ); - if ( action == QgsLegendItem::REORDER ) + if ( yCoordAboveCenter( dest, e->y() ) ) //over center of item { - QgsDebugMsg( "mouseMoveEvent::REORDER" ); - if ( !yCoordAboveCenter( dest, e->y() ) ) //over bottom of item + if ( action == QgsLegendItem::REORDER || action == QgsLegendItem::INSERT ) { + QgsDebugMsg( "mouseMoveEvent::REORDER/INSERT top half" ); if ( origin->nextSibling() != dest ) { if ( origin->parent() != dest->parent() ) @@ -251,37 +251,53 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e ) moveItem( dest, origin ); } } + setCurrentItem( origin ); } - else //over top of item + else { + QgsDebugMsg( "mouseMoveEvent::NO_ACTION" ); + + if ( origin->type() == QgsLegendItem::LEGEND_LAYER_FILE && mItemBeingMovedOrigPos != getItemPos( mItemBeingMoved ) ) + { + resetToInitialPosition( mItemBeingMoved ); + } + setCursor( QCursor( Qt::ForbiddenCursor ) ); + } + } + else // below center of item + { + + if ( action == QgsLegendItem::REORDER ) + { + QgsDebugMsg( "mouseMoveEvent::REORDER bottom half" ); if ( mItemBeingMoved != dest->nextSibling() ) { //origin->moveItem(dest); moveItem( origin, dest ); } - } - setCurrentItem( origin ); - } - else if ( action == QgsLegendItem::INSERT ) - { - QgsDebugMsg( "mouseMoveEvent::INSERT" ); - - setCursor( QCursor( Qt::PointingHandCursor ) ); - if ( origin->parent() != dest ) - { - insertItem( origin, dest ); setCurrentItem( origin ); } - } - else//no action - { - QgsDebugMsg( "mouseMoveEvent::NO_ACTION" ); - - if ( origin->type() == QgsLegendItem::LEGEND_LAYER_FILE && mItemBeingMovedOrigPos != getItemPos( mItemBeingMoved ) ) + else if ( action == QgsLegendItem::INSERT ) { - resetToInitialPosition( mItemBeingMoved ); + QgsDebugMsg( "mouseMoveEvent::INSERT" ); + + setCursor( QCursor( Qt::PointingHandCursor ) ); + if ( origin->parent() != dest ) + { + insertItem( origin, dest ); + setCurrentItem( origin ); + } + } + else//no action + { + QgsDebugMsg( "mouseMoveEvent::NO_ACTION" ); + + if ( origin->type() == QgsLegendItem::LEGEND_LAYER_FILE && mItemBeingMovedOrigPos != getItemPos( mItemBeingMoved ) ) + { + resetToInitialPosition( mItemBeingMoved ); + } + setCursor( QCursor( Qt::ForbiddenCursor ) ); } - setCursor( QCursor( Qt::ForbiddenCursor ) ); } } } diff --git a/src/app/legend/qgslegendgroup.cpp b/src/app/legend/qgslegendgroup.cpp index 527826c30a6..63575700ba7 100644 --- a/src/app/legend/qgslegendgroup.cpp +++ b/src/app/legend/qgslegendgroup.cpp @@ -100,7 +100,8 @@ bool QgsLegendGroup::insert( QgsLegendItem* theItem ) { if ( theItem->type() == LEGEND_LAYER ) { - addChild( theItem ); + // Always insert at top of list + insertChild( 0, theItem ); } // XXX - mloskot - I don't know what to return // but this function must return a value