summaryrefslogtreecommitdiffstats
path: root/src/iconview/qiconview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/iconview/qiconview.cpp')
-rw-r--r--src/iconview/qiconview.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/src/iconview/qiconview.cpp b/src/iconview/qiconview.cpp
index f7b4439..d4e027b 100644
--- a/src/iconview/qiconview.cpp
+++ b/src/iconview/qiconview.cpp
@@ -240,6 +240,7 @@ public:
QPoint dragStartPos;
QFontMetrics *fm;
int minLeftBearing, minRightBearing;
+ int rubberStartX, rubberStartY;
uint mousePressed :1;
uint cleared :1;
@@ -259,6 +260,7 @@ public:
uint firstSizeHint : 1;
uint showTips :1;
uint pressedSelected :1;
+ uint canStartRubber :1;
uint dragging :1;
uint drawActiveSelection :1;
uint inMenuMode :1;
@@ -2801,6 +2803,7 @@ QIconView::QIconView( QWidget *parent, const char *name, WFlags f )
d->currentItem = 0;
d->highlightedItem = 0;
d->rubber = 0;
+ d->canStartRubber = FALSE;
d->backBuffer = 0;
d->scrollTimer = 0;
d->startDragItem = 0;
@@ -4642,29 +4645,19 @@ void QIconView::contentsMousePressEventEx( QMouseEvent *e )
setCurrentItem( item );
+ d->canStartRubber = FALSE;
if ( e->button() == LeftButton ) {
- if ( !item && ( d->selectionMode == Multi ||
- d->selectionMode == Extended ) ) {
- d->tmpCurrentItem = d->currentItem;
- d->currentItem = 0;
- repaintItem( d->tmpCurrentItem );
- if ( d->rubber )
- delete d->rubber;
- d->rubber = 0;
- d->rubber = new QRect( e->x(), e->y(), 0, 0 );
- d->selectedItems.clear();
- if ( ( e->state() & ControlButton ) == ControlButton ) {
- for ( QIconViewItem *i = firstItem(); i; i = i->nextItem() )
- if ( i->isSelected() )
- d->selectedItems.insert( i, i );
- }
+ if ( !item && ( d->selectionMode == Multi || d->selectionMode == Extended ) ) {
+ d->canStartRubber = TRUE;
+ d->rubberStartX = e->x();
+ d->rubberStartY = e->y();
}
d->mousePressed = TRUE;
}
emit_signals:
- if ( !d->rubber ) {
+ if ( !d->canStartRubber ) {
emit mouseButtonPressed( e->button(), item, e->globalPos() );
emit pressed( item );
emit pressed( item, e->globalPos() );
@@ -4708,6 +4701,7 @@ void QIconView::contentsMouseReleaseEvent( QMouseEvent *e )
d->mousePressed = FALSE;
d->startDragItem = 0;
+ d->canStartRubber = FALSE;
if ( d->rubber ) {
QRect r(d->rubber->normalize());
@@ -4793,7 +4787,22 @@ void QIconView::contentsMouseMoveEvent( QMouseEvent *e )
if ( d->tmpCurrentItem )
repaintItem( d->tmpCurrentItem );
}
- } else if ( d->mousePressed && !d->currentItem && d->rubber ) {
+ } else if ( d->mousePressed && ((!d->currentItem && d->rubber) || d->canStartRubber) ) {
+ if ( d->canStartRubber ) {
+ d->canStartRubber = FALSE;
+ d->tmpCurrentItem = d->currentItem;
+ d->currentItem = 0;
+ repaintItem( d->tmpCurrentItem );
+ delete d->rubber;
+ d->rubber = new QRect( d->rubberStartX, d->rubberStartY, 0, 0 );
+ d->selectedItems.clear();
+ if ( ( e->state() & ControlButton ) == ControlButton ||
+ ( e->state() & ShiftButton ) == ShiftButton ) {
+ for ( QIconViewItem *i = firstItem(); i; i = i->nextItem() )
+ if ( i->isSelected() )
+ d->selectedItems.insert( i, i );
+ }
+ }
doAutoScroll();
}
}