qt-bugs@ issue: N46490 bugs.kde.org number: 69589 applied: no author: Benoit Walter Remove unnecessary scrollbar that may appear. Test case (using konqueror icon view): - The first icons are being shown (no scrollbar yet) - When there is no space left, a vertical scrollbar is needed - The vertical scrollbar may cover the right edge of the icons (in the last column) => an horizontal scrollbar is needed :-( Solution: When using ScrollBarMode::Auto, prevent Qt from drawing icons on the scrollbar area (before the scrollbar is shown). Related to KDE bug #69589 Index: qiconview.cpp =================================================================== RCS file: /home/kde/qt-copy/src/iconview/qiconview.cpp,v retrieving revision 1.54 diff -u -3 -p -r1.54 qiconview.cpp --- work/qt-x11-free-3.3.8/src/iconview/qiconview.cpp 2 Mar 2004 12:50:31 -0000 1.54 +++ work/qt-x11-free-3.3.8/src/iconview/qiconview.cpp 12 Apr 2004 10:07:28 -0000 @@ -1060,7 +1060,7 @@ void QIconViewItem::setText( const QStri if ( view ) { if ( QRect( view->contentsX(), view->contentsY(), - view->visibleWidth(), view->visibleHeight() ). + view->visibleWidthSB(), view->visibleHeightSB() ). intersects( oR ) ) view->repaintContents( oR.x() - 1, oR.y() - 1, oR.width() + 2, oR.height() + 2, FALSE ); @@ -1104,7 +1104,7 @@ void QIconViewItem::setPixmap( const QPi if ( view ) { if ( QRect( view->contentsX(), view->contentsY(), - view->visibleWidth(), view->visibleHeight() ). + view->visibleWidthSB(), view->visibleHeightSB() ). intersects( oR ) ) view->repaintContents( oR.x() - 1, oR.y() - 1, oR.width() + 2, oR.height() + 2, FALSE ); @@ -1140,7 +1140,7 @@ void QIconViewItem::setPicture( const QP if ( view ) { if ( QRect( view->contentsX(), view->contentsY(), - view->visibleWidth(), view->visibleHeight() ). + view->visibleWidthSB(), view->visibleHeightSB() ). intersects( oR ) ) view->repaintContents( oR.x() - 1, oR.y() - 1, oR.width() + 2, oR.height() + 2, FALSE ); @@ -1200,7 +1200,7 @@ void QIconViewItem::setPixmap( const QPi if ( view ) { if ( QRect( view->contentsX(), view->contentsY(), - view->visibleWidth(), view->visibleHeight() ). + view->visibleWidthSB(), view->visibleHeightSB() ). intersects( oR ) ) view->repaintContents( oR.x() - 1, oR.y() - 1, oR.width() + 2, oR.height() + 2, FALSE ); @@ -5448,8 +5448,8 @@ void QIconView::insertInGrid( QIconViewI } item->dirty = FALSE; } else { - QRegion r( QRect( 0, 0, TQMAX( contentsWidth(), visibleWidth() ), - TQMAX( contentsHeight(), visibleHeight() ) ) ); + QRegion r( QRect( 0, 0, TQMAX( contentsWidth(), visibleWidthSB() ), + TQMAX( contentsHeight(), visibleHeightSB() ) ) ); QIconViewItem *i = d->firstItem; int y = -1; @@ -5707,7 +5707,7 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *item = begin; for (;;) { x += d->spacing + item->width(); - if ( x > visibleWidth() && item != begin ) { + if ( x > visibleWidthSB() && item != begin ) { item = item->prev; break; } @@ -5732,7 +5732,7 @@ QIconViewItem *QIconView::makeRowLayout( int x; if ( item == begin ) { if ( reverse ) - x = visibleWidth() - d->spacing - item->width(); + x = visibleWidthSB() - d->spacing - item->width(); else x = d->spacing; } else { @@ -5768,7 +5768,7 @@ QIconViewItem *QIconView::makeRowLayout( i += r; x = i * d->rastX + sp * d->spacing; } - if ( x > visibleWidth() && item != begin ) { + if ( x > visibleWidthSB() && item != begin ) { item = item->prev; break; } @@ -5831,7 +5831,7 @@ QIconViewItem *QIconView::makeRowLayout( QIconViewItem *item = begin; for (;;) { y += d->spacing + item->height(); - if ( y > visibleHeight() && item != begin ) { + if ( y > visibleHeightSB() && item != begin ) { item = item->prev; break; } @@ -6378,4 +6378,24 @@ bool QIconView::isRenaming() const #endif } +int QIconView::visibleWidthSB() const +{ + if ( vScrollBarMode() != Auto ) + return visibleWidth(); + + int offset = verticalScrollBar()->isVisible() ? 0 + : style().pixelMetric( QStyle::PM_ScrollBarExtent, verticalScrollBar() ); + return TQMAX( 0, visibleWidth() - offset ); +} + +int QIconView::visibleHeightSB() const +{ + if ( hScrollBarMode() != Auto ) + return visibleHeight(); + + int offset = horizontalScrollBar()->isVisible() ? 0 + : style().pixelMetric( QStyle::PM_ScrollBarExtent, horizontalScrollBar() ); + return TQMAX( 0, visibleHeight() - offset ); +} + #endif // QT_NO_ICONVIEW Index: qiconview.h =================================================================== RCS file: /home/kde/qt-copy/src/iconview/qiconview.h,v retrieving revision 1.35 diff -u -3 -p -r1.35 qiconview.h --- work/qt-x11-free-3.3.8/src/iconview/qiconview.h 16 May 2003 13:02:38 -0000 1.35 +++ work/qt-x11-free-3.3.8/src/iconview/qiconview.h 12 Apr 2004 10:07:58 -0000 @@ -496,6 +496,8 @@ private: const QPoint &relativeTo, const QIconViewItem *item ) const; QBitmap mask( QPixmap *pix ) const; + int visibleWidthSB() const; + int visibleHeightSB() const; QIconViewPrivate *d;