Index: src/app/legend/qgslegend.cpp =================================================================== --- src/app/legend/qgslegend.cpp (revision 13575) +++ src/app/legend/qgslegend.cpp (working copy) @@ -363,13 +363,16 @@ hideLine(); - QTreeWidgetItem *destItem = mDropTarget; - QgsLegendItem* origin = dynamic_cast( mItemBeingMoved ); mItemBeingMoved = NULL; QModelIndex oldIndex = indexFromItem( origin ); - QgsLegendItem* dest = dynamic_cast( destItem ); + // check if the drop place is valid + QgsLegendItem* dest = NULL; + if ( mDropTarget ) + { + dest = dynamic_cast( mDropTarget ); + } // no change? if ( !dest || !origin || ( dest == origin ) ) @@ -377,6 +380,15 @@ checkLayerOrderUpdate(); return; } + + // make sure you are able to drag the item + // to fix #2711, #2528, #2018 + QgsLegendItem::DRAG_ACTION action = dest->accept( origin ); + if ( action == QgsLegendItem::NO_ACTION && mDropAction != NO_ACTION ) + { + QgsDebugMsg( "Drag NO_ACTION" ); + return; + } { // Do the actual move here.