Index: src/gui/symbology-ng/qgssymbollayerv2widget.cpp =================================================================== --- src/gui/symbology-ng/qgssymbollayerv2widget.cpp (revision 12278) +++ src/gui/symbology-ng/qgssymbollayerv2widget.cpp (working copy) @@ -372,29 +372,34 @@ QStandardItemModel* m = new QStandardItemModel( viewImages ); viewImages->setModel( m ); + QStringList svgPaths = QgsApplication::svgPaths(); QString svgPath = QgsApplication::svgPath(); + QDir svgBaseDir( svgPath ); QSvgRenderer renderer; QPainter painter; - QDir dir( svgPath ); - QStringList dl = dir.entryList( QDir::Dirs ); - - for ( QStringList::iterator it = dl.begin(); it != dl.end(); ++it ) + for ( int i = 0; i < svgPaths.size(); i++ ) { - if ( *it == "." || *it == ".." ) continue; + QDir dir( svgPaths[i] ); + QString path( svgPaths[i] ); - QDir dir2( svgPath + *it ); + foreach( QString item, dir.entryList( QDir::Dirs | QDir::NoDotAndDotDot ) ) + { + svgPaths.insert( i + 1, dir.path() + "/" + item ); + } - QStringList dl2 = dir2.entryList( QStringList( "*.svg" ), QDir::Files ); + if (svgPaths[i].startsWith(svgPath)) + { + path = svgBaseDir.relativeFilePath( svgPaths[i] ); + } - for ( QStringList::iterator it2 = dl2.begin(); it2 != dl2.end(); ++it2 ) + foreach( QString entry, dir.entryList( QStringList( "*.svg" ), QDir::Files ) ) { // TODO test if it is correct SVG - QString entry = *it2; // render SVG file - renderer.load( dir2.filePath( *it2 ) ); + renderer.load( dir.filePath( entry ) ); QPixmap pixmap( renderer.defaultSize() ); pixmap.fill(); painter.begin( &pixmap ); @@ -402,7 +407,7 @@ painter.end(); // add item - QStandardItem* item = new QStandardItem( QIcon( pixmap ), *it + "/" + entry ); + QStandardItem* item = new QStandardItem( QIcon( pixmap ), path + "/" + entry ); m->appendRow( item ); } } Index: src/core/symbology-ng/qgsmarkersymbollayerv2.cpp =================================================================== --- src/core/symbology-ng/qgsmarkersymbollayerv2.cpp (revision 12278) +++ src/core/symbology-ng/qgsmarkersymbollayerv2.cpp (working copy) @@ -8,6 +8,7 @@ #include #include +#include #include @@ -283,8 +284,13 @@ void QgsSvgMarkerSymbolLayerV2::startRender( QgsRenderContext& context ) { QString svgPath = QgsApplication::svgPath(); - QString file = svgPath + "/" + mName; + QString file = mName; + if ( QDir::isRelativePath( file ) ) + { + file = svgPath + "/" + file; + } + QRectF rect( QPointF( -mSize / 2.0, -mSize / 2.0 ), QSizeF( mSize, mSize ) ); QSvgRenderer renderer( file ); QPainter painter( &mPicture );