Skip to content

Commit b09cdc4

Browse files
authoredMay 24, 2020
Merge pull request #35806 from uclaros/snapping-fixes
Snapping type menu fixes
2 parents 0ddb530 + 85d0956 commit b09cdc4

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed
 

‎src/app/qgssnappinglayertreemodel.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,30 @@
2929
#include "qgsapplication.h"
3030
#include "qgsscalewidget.h"
3131

32+
class SnapTypeMenu: public QMenu
33+
{
34+
public:
35+
SnapTypeMenu( const QString &title, QWidget *parent = nullptr )
36+
: QMenu( title, parent ) {}
37+
38+
void mouseReleaseEvent( QMouseEvent *e )
39+
{
40+
QAction *action = activeAction();
41+
if ( action )
42+
action->trigger();
43+
else
44+
QMenu::mouseReleaseEvent( e );
45+
}
46+
47+
// set focus to parent so that mTypeButton is not displayed
48+
void hideEvent( QHideEvent *e )
49+
{
50+
qobject_cast<QWidget *>( parent() )->setFocus();
51+
QMenu::hideEvent( e );
52+
}
53+
};
54+
55+
3256
QgsSnappingLayerDelegate::QgsSnappingLayerDelegate( QgsMapCanvas *canvas, QObject *parent )
3357
: QItemDelegate( parent )
3458
, mCanvas( canvas )
@@ -46,7 +70,7 @@ QWidget *QgsSnappingLayerDelegate::createEditor( QWidget *parent, const QStyleOp
4670
QToolButton *mTypeButton = new QToolButton( parent );
4771
mTypeButton->setToolTip( tr( "Snapping Type" ) );
4872
mTypeButton->setPopupMode( QToolButton::InstantPopup );
49-
QMenu *typeMenu = new QMenu( tr( "Set Snapping Mode" ), parent );
73+
SnapTypeMenu *typeMenu = new SnapTypeMenu( tr( "Set Snapping Mode" ), parent );
5074
QAction *mVertexAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingVertex.svg" ) ), tr( "Vertex" ), typeMenu );
5175
QAction *mSegmentAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingSegment.svg" ) ), tr( "Segment" ), typeMenu );
5276
QAction *mAreaAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingArea.svg" ) ), tr( "Area" ), typeMenu );

‎src/app/qgssnappingwidget.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,22 @@
4444
#include "qgsscalewidget.h"
4545

4646

47+
class SnapTypeMenu: public QMenu
48+
{
49+
public:
50+
SnapTypeMenu( const QString &title, QWidget *parent = nullptr )
51+
: QMenu( title, parent ) {}
52+
53+
void mouseReleaseEvent( QMouseEvent *e )
54+
{
55+
QAction *action = activeAction();
56+
if ( action )
57+
action->trigger();
58+
else
59+
QMenu::mouseReleaseEvent( e );
60+
}
61+
};
62+
4763
QgsSnappingWidget::QgsSnappingWidget( QgsProject *project, QgsMapCanvas *canvas, QWidget *parent )
4864
: QWidget( parent )
4965
, mProject( project )
@@ -162,7 +178,7 @@ QgsSnappingWidget::QgsSnappingWidget( QgsProject *project, QgsMapCanvas *canvas,
162178
mTypeButton = new QToolButton();
163179
mTypeButton->setToolTip( tr( "Snapping Type" ) );
164180
mTypeButton->setPopupMode( QToolButton::InstantPopup );
165-
QMenu *typeMenu = new QMenu( tr( "Set Snapping Mode" ), this );
181+
SnapTypeMenu *typeMenu = new SnapTypeMenu( tr( "Set Snapping Mode" ), this );
166182
mVertexAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingVertex.svg" ) ), tr( "Vertex" ), typeMenu );
167183
mSegmentAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingSegment.svg" ) ), tr( "Segment" ), typeMenu );
168184
mAreaAction = new QAction( QIcon( QgsApplication::getThemeIcon( "/mIconSnappingArea.svg" ) ), tr( "Area" ), typeMenu );

0 commit comments

Comments
 (0)
Please sign in to comment.