Skip to content

Commit 556cddd

Browse files
authored
Fix #19465 - Don't delete expression when pressing enter in combo (#8134)
1 parent 4da2b80 commit 556cddd

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

python/gui/auto_generated/qgsfieldexpressionwidget.sip.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ updateLineEditStyle will re-style (color/font) the line edit depending on conten
224224
virtual void changeEvent( QEvent *event );
225225

226226

227+
virtual bool eventFilter( QObject *watched, QEvent *event );
228+
229+
227230
};
228231

229232
/************************************************************************

src/gui/qgsfieldexpressionwidget.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
***************************************************************************/
1616

1717
#include <QHBoxLayout>
18+
#include <QObject>
19+
#include <QKeyEvent>
1820

1921
#include "qgsapplication.h"
2022
#include "qgsfieldexpressionwidget.h"
@@ -62,12 +64,12 @@ QgsFieldExpressionWidget::QgsFieldExpressionWidget( QWidget *parent )
6264
connect( mButton, &QAbstractButton::clicked, this, &QgsFieldExpressionWidget::editExpression );
6365
connect( mFieldProxyModel, &QAbstractItemModel::modelAboutToBeReset, this, &QgsFieldExpressionWidget::beforeResetModel );
6466
connect( mFieldProxyModel, &QAbstractItemModel::modelReset, this, &QgsFieldExpressionWidget::afterResetModel );
65-
// NW TODO - Fix in 2.6
66-
// connect( mCombo->lineEdit(), SIGNAL( returnPressed() ), this, SIGNAL( returnPressed() ) );
6767

6868
mExpressionContext = QgsExpressionContext();
6969
mExpressionContext << QgsExpressionContextUtils::globalScope()
7070
<< QgsExpressionContextUtils::projectScope( QgsProject::instance() );
71+
72+
mCombo->installEventFilter( this );
7173
}
7274

7375
void QgsFieldExpressionWidget::setExpressionDialogTitle( const QString &title )
@@ -269,6 +271,20 @@ void QgsFieldExpressionWidget::afterResetModel()
269271
mCombo->lineEdit()->setText( mBackupExpression );
270272
}
271273

274+
bool QgsFieldExpressionWidget::eventFilter( QObject *watched, QEvent *event )
275+
{
276+
if ( watched == mCombo && event->type() == QEvent::KeyPress )
277+
{
278+
QKeyEvent *keyEvent = static_cast<QKeyEvent *>( event );
279+
if ( keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return )
280+
{
281+
expressionEditingFinished();
282+
return true;
283+
}
284+
}
285+
return QObject::eventFilter( watched, event );
286+
}
287+
272288
bool QgsFieldExpressionWidget::allowEvalErrors() const
273289
{
274290
return mAllowEvalErrors;

src/gui/qgsfieldexpressionwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,8 @@ class GUI_EXPORT QgsFieldExpressionWidget : public QWidget
216216
protected:
217217
void changeEvent( QEvent *event ) override;
218218

219+
bool eventFilter( QObject *watched, QEvent *event ) override;
220+
219221
private slots:
220222
void reloadLayer();
221223

0 commit comments

Comments
 (0)