Skip to content

Commit

Permalink
Fix canvas cursor gets stuck when combining pan via middle mouse
Browse files Browse the repository at this point in the history
button and space bar

Fixes #46233
  • Loading branch information
nyalldawson committed Nov 29, 2021
1 parent 251ba5a commit eb871be
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
24 changes: 16 additions & 8 deletions src/gui/qgsmapcanvas.cpp
Expand Up @@ -1870,7 +1870,7 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent *e )
//mCanvasProperties->dragging = true;
if ( ! e->isAutoRepeat() )
{
QApplication::setOverrideCursor( Qt::ClosedHandCursor );
mTemporaryCursorOverride.reset( new QgsTemporaryCursorOverride( Qt::ClosedHandCursor ) );
mCanvasProperties->panSelectorDown = true;
panActionStart( mCanvasProperties->mouseLastXY );
}
Expand Down Expand Up @@ -1921,7 +1921,7 @@ void QgsMapCanvas::keyReleaseEvent( QKeyEvent *e )
if ( !e->isAutoRepeat() && mCanvasProperties->panSelectorDown )
{
QgsDebugMsgLevel( QStringLiteral( "Releasing pan selector" ), 2 );
QApplication::restoreOverrideCursor();
mTemporaryCursorOverride.reset();
mCanvasProperties->panSelectorDown = false;
panActionEnd( mCanvasProperties->mouseLastXY );
}
Expand Down Expand Up @@ -1957,7 +1957,7 @@ void QgsMapCanvas::mouseDoubleClickEvent( QMouseEvent *e )
void QgsMapCanvas::beginZoomRect( QPoint pos )
{
mZoomRect.setRect( 0, 0, 0, 0 );
QApplication::setOverrideCursor( mZoomCursor );
mTemporaryCursorOverride.reset( new QgsTemporaryCursorOverride( mZoomCursor ) );
mZoomDragging = true;
mZoomRubberBand.reset( new QgsRubberBand( this, QgsWkbTypes::PolygonGeometry ) );
QColor color( Qt::blue );
Expand All @@ -1970,7 +1970,7 @@ void QgsMapCanvas::endZoomRect( QPoint pos )
{
mZoomDragging = false;
mZoomRubberBand.reset( nullptr );
QApplication::restoreOverrideCursor();
mTemporaryCursorOverride.reset();

// store the rectangle
mZoomRect.setRight( pos.x() );
Expand Down Expand Up @@ -2010,8 +2010,12 @@ void QgsMapCanvas::mousePressEvent( QMouseEvent *e )
//use middle mouse button for panning, map tools won't receive any events in that case
else if ( e->button() == Qt::MiddleButton )
{
mCanvasProperties->panSelectorDown = true;
panActionStart( mCanvasProperties->mouseLastXY );
if ( !mCanvasProperties->panSelectorDown )
{
mCanvasProperties->panSelectorDown = true;
mTemporaryCursorOverride.reset( new QgsTemporaryCursorOverride( Qt::ClosedHandCursor ) );
panActionStart( mCanvasProperties->mouseLastXY );
}
}
else
{
Expand Down Expand Up @@ -2059,8 +2063,12 @@ void QgsMapCanvas::mouseReleaseEvent( QMouseEvent *e )
//use middle mouse button for panning, map tools won't receive any events in that case
else if ( e->button() == Qt::MiddleButton )
{
mCanvasProperties->panSelectorDown = false;
panActionEnd( mCanvasProperties->mouseLastXY );
if ( mCanvasProperties->panSelectorDown )
{
mCanvasProperties->panSelectorDown = false;
mTemporaryCursorOverride.reset();
panActionEnd( mCanvasProperties->mouseLastXY );
}
}
else if ( e->button() == Qt::BackButton )
{
Expand Down
3 changes: 3 additions & 0 deletions src/gui/qgsmapcanvas.h
Expand Up @@ -72,6 +72,7 @@ class QgsRubberBand;
class QgsMapCanvasAnnotationItem;
class QgsReferencedRectangle;
class QgsRenderedItemResults;
class QgsTemporaryCursorOverride;

class QgsTemporalController;

Expand Down Expand Up @@ -1419,6 +1420,8 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView, public QgsExpressionContex

QMetaObject::Connection mScreenDpiChangedConnection;

std::unique_ptr< QgsTemporaryCursorOverride > mTemporaryCursorOverride;

/**
* Returns the last cursor position on the canvas in geographical coordinates
* \since QGIS 3.4
Expand Down

0 comments on commit eb871be

Please sign in to comment.