Index: ui/thumbnaillist.cpp
===================================================================
--- ui/thumbnaillist.cpp	(revision 1035412)
+++ ui/thumbnaillist.cpp	(working copy)
@@ -57,8 +57,6 @@
         void viewportResizeEvent( QResizeEvent * );
         // called by ThumbnailWidgets to get the overlay bookmark pixmap
         const QPixmap * getBookmarkOverlay() const;
-        // called by ThumbnailWidgets to send (forward) the mouse move signals
-        void forwardTrack( const Okular::Page *, const QPoint &, const QSize & );
 
         ThumbnailWidget* itemFor( const QPoint & p ) const;
         void delayedRequestVisiblePixmaps( int delayMs = 0 );
@@ -396,38 +394,6 @@
     }
 }
 
-void ThumbnailListPrivate::forwardTrack( const Okular::Page * p, const QPoint &point, const QSize &s )
-{
-    Okular::DocumentViewport vp=m_document->viewport();
-
-    QVector< Okular::VisiblePageRect * > vVpr = m_document->visiblePageRects();
-
-    QVector< Okular::VisiblePageRect * >::const_iterator vIt = vVpr.constBegin();
-    QVector< Okular::VisiblePageRect * >::const_iterator vEnd = vVpr.constEnd();
-    for ( ; vIt != vEnd; ++vIt )
-    {
-        Okular::VisiblePageRect *vpr = ( *vIt );
-        if( vpr->pageNumber == p->number() )
-        {
-            double w = vpr->rect.right - vpr->rect.left,
-            h = vpr->rect.bottom - vpr->rect.top,
-            deltaX = (double)point.x() / s.width(),
-            deltaY = (double)point.y() / s.height();
-
-            vp.rePos.normalizedX -= deltaX;
-            vp.rePos.normalizedY -= deltaY;
-
-            if( !vp.rePos.enabled )
-            {
-                vp.rePos.enabled = true;
-                vp.rePos.normalizedY += h/2;
-            }
-            m_document->setViewport( vp );
-            break;
-        }
-    }
-}
-
 const QPixmap * ThumbnailListPrivate::getBookmarkOverlay() const
 {
     return m_bookmarkOverlay;
@@ -662,93 +628,51 @@
 
 void ThumbnailListPrivate::mousePressEvent( QMouseEvent * e )
 {
-    ThumbnailWidget* item = itemFor( e->pos() );
-    if ( !item ) // mouse on the spacing between items
-        return e->ignore();
-
-    QRect r = item->visibleRect();
-    int margin = ThumbnailWidget::margin();
-    QPoint p = e->pos() - item->pos();
-
-    if ( e->button() != Qt::RightButton && r.contains( p - QPoint( margin / 2, margin / 2 ) ) )
-    {
-        mouseGrabPos = e->pos();
-        mouseGrabItem = item;
-    }
-    else
-    {
-        mouseGrabPos.setX( 0 );
-        mouseGrabPos.setY( 0 );
-        mouseGrabItem = 0;
-    }
+    return mouseMoveEvent(e);
 }
 
 void ThumbnailListPrivate::mouseReleaseEvent( QMouseEvent * e )
 {
-    ThumbnailWidget* item = itemFor( e->pos() );
-    mouseGrabItem = item;
-    if ( !item ) // mouse on the spacing between items
-        return e->ignore();
-
-    QRect r = item->visibleRect();
-    int margin = ThumbnailWidget::margin();
-    QPoint p = e->pos() - item->pos();
-
-    if ( r.contains( p - QPoint( margin / 2, margin / 2 ) ) )
-    {
-        setCursor( Qt::OpenHandCursor );
-    }
-    else
-    {
-        setCursor( Qt::ArrowCursor );
-        if ( mouseGrabPos.isNull() )
-        {
-            if ( m_document->viewport().pageNumber != item->pageNumber() )
-                m_document->setViewportPage( item->pageNumber() );
-        }
-    }
-    mouseGrabPos.setX( 0 );
-    mouseGrabPos.setY( 0 );
+    setCursor( Qt::ArrowCursor );
 }
 
 void ThumbnailListPrivate::mouseMoveEvent( QMouseEvent * e )
 {
+    int margin = ThumbnailWidget::margin();
     ThumbnailWidget* item = itemFor( e->pos() );
+    if ( !item ) {
+        //printf("pressed outside a widget\n");
+        QPoint e2 = e->pos() + QPoint(margin, margin);
+        item = itemFor( e2 );
+        if ( !item ) {
+            //printf("really no thumbnail under cursor");
+            return e->ignore();
+        }
+    }
     if ( e->buttons() == Qt::NoButton )
         return e->ignore();
 
-    ThumbnailWidget* theItem = item ? item : mouseGrabItem;
-    // no item under the mouse or previously selected
-    if ( !theItem )
+    ThumbnailWidget* theItem = item;
+    if ( !theItem ) {
+        //printf("!!! SHOULD NOT HAPPEN\n");
         return e->ignore();
-    QRect r = theItem->rect();
-    int margin = ThumbnailWidget::margin();
-    QPoint p = e->pos() - theItem->pos();
-
-    if ( true /*r.contains( p - QPoint( margin / 2, margin / 2 ) )*/ )
-    {
-        if ( !mouseGrabPos.isNull() )
-        {
-            setCursor( Qt::ClosedHandCursor );
-            QPoint mousePos = e->pos();
-            QPoint delta = mouseGrabPos - mousePos;
-            mouseGrabPos = e->pos();
-            if ( item )
-                mouseGrabItem = item;
-            // don't handle the mouse move, forward it to the thumbnail list
-            forwardTrack( mouseGrabItem->page(), delta, r.size() );
-        }
-        else
-        {
-            mouseGrabPos = QPoint();
-            mouseGrabItem = 0;
-            setCursor( Qt::OpenHandCursor );
-        }
     }
-    else
-    {
-        setCursor( Qt::ArrowCursor );
-    }
+    setCursor( Qt::ClosedHandCursor );
+
+    Okular::DocumentViewport vp=m_document->viewport();
+    const Okular::Page * p = item->page();
+    const QPoint point = e->pos() - item->pos();
+    const QSize s = item->rect().size();
+
+    double deltaX = (double)point.x() / s.width();
+    double deltaY = (double)point.y() / s.height();
+
+    vp.rePos.normalizedX = deltaX;
+    vp.rePos.normalizedY = deltaY;
+    vp.rePos.enabled = true;
+
+    vp.pageNumber = p->number();
+    m_document->setViewport( vp );
 }
 
 void ThumbnailListPrivate::wheelEvent( QWheelEvent * e )
