29
29
#include " qgsapplication.h"
30
30
#include " qgsscalewidget.h"
31
31
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
+
32
56
QgsSnappingLayerDelegate::QgsSnappingLayerDelegate ( QgsMapCanvas *canvas, QObject *parent )
33
57
: QItemDelegate( parent )
34
58
, mCanvas( canvas )
@@ -46,7 +70,7 @@ QWidget *QgsSnappingLayerDelegate::createEditor( QWidget *parent, const QStyleOp
46
70
QToolButton *mTypeButton = new QToolButton ( parent );
47
71
mTypeButton ->setToolTip ( tr ( " Snapping Type" ) );
48
72
mTypeButton ->setPopupMode ( QToolButton::InstantPopup );
49
- QMenu *typeMenu = new QMenu ( tr ( " Set Snapping Mode" ), parent );
73
+ SnapTypeMenu *typeMenu = new SnapTypeMenu ( tr ( " Set Snapping Mode" ), parent );
50
74
QAction *mVertexAction = new QAction ( QIcon ( QgsApplication::getThemeIcon ( " /mIconSnappingVertex.svg" ) ), tr ( " Vertex" ), typeMenu );
51
75
QAction *mSegmentAction = new QAction ( QIcon ( QgsApplication::getThemeIcon ( " /mIconSnappingSegment.svg" ) ), tr ( " Segment" ), typeMenu );
52
76
QAction *mAreaAction = new QAction ( QIcon ( QgsApplication::getThemeIcon ( " /mIconSnappingArea.svg" ) ), tr ( " Area" ), typeMenu );
0 commit comments