Skip to content

Commit fb5caa7

Browse files
committed
Fix weird line edit styling error on Ubuntu
Ubuntu theme is incorrectly showing hidden actions in line edits. Fixes #18537
1 parent 8b59bdc commit fb5caa7

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

src/gui/qgsfilterlineedit.cpp

+27-17
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,8 @@ QgsFilterLineEdit::QgsFilterLineEdit( QWidget *parent, const QString &nullValue
3232
// icon size is about 2/3 height of text, but minimum size of 16
3333
int iconSize = std::floor( std::max( Qgis::UI_SCALE_FACTOR * fontMetrics().height() * 0.75, 16.0 ) );
3434

35-
QIcon clearIcon;
36-
clearIcon.addPixmap( QgsApplication::getThemeIcon( "/mIconClearText.svg" ).pixmap( QSize( iconSize, iconSize ) ), QIcon::Normal, QIcon::On );
37-
clearIcon.addPixmap( QgsApplication::getThemeIcon( "/mIconClearTextHover.svg" ).pixmap( QSize( iconSize, iconSize ) ), QIcon::Selected, QIcon::On );
38-
mClearAction = new QAction( clearIcon, QString(), this );
39-
mClearAction->setCheckable( false );
40-
addAction( mClearAction, QLineEdit::TrailingPosition );
41-
connect( mClearAction, &QAction::triggered, this, &QgsFilterLineEdit::clearValue );
42-
mClearAction->setVisible( false );
43-
44-
QIcon searchIcon = QgsApplication::getThemeIcon( "/search.svg" );
45-
mSearchAction = new QAction( searchIcon, QString(), this );
46-
mSearchAction->setCheckable( false );
47-
addAction( mSearchAction, QLineEdit::LeadingPosition );
48-
mSearchAction->setVisible( false );
35+
mClearIcon.addPixmap( QgsApplication::getThemeIcon( "/mIconClearText.svg" ).pixmap( QSize( iconSize, iconSize ) ), QIcon::Normal, QIcon::On );
36+
mClearIcon.addPixmap( QgsApplication::getThemeIcon( "/mIconClearTextHover.svg" ).pixmap( QSize( iconSize, iconSize ) ), QIcon::Selected, QIcon::On );
4937

5038
connect( this, &QLineEdit::textChanged, this,
5139
&QgsFilterLineEdit::onTextChanged );
@@ -59,13 +47,35 @@ void QgsFilterLineEdit::setShowClearButton( bool visible )
5947

6048
void QgsFilterLineEdit::setShowSearchIcon( bool visible )
6149
{
62-
mSearchIconVisible = visible;
63-
mSearchAction->setVisible( visible );
50+
if ( visible && !mSearchAction )
51+
{
52+
QIcon searchIcon = QgsApplication::getThemeIcon( "/search.svg" );
53+
mSearchAction = new QAction( searchIcon, QString(), this );
54+
mSearchAction->setCheckable( false );
55+
addAction( mSearchAction, QLineEdit::LeadingPosition );
56+
}
57+
else if ( !visible && mSearchAction )
58+
{
59+
mSearchAction->deleteLater();
60+
mSearchAction = nullptr;
61+
}
6462
}
6563

6664
void QgsFilterLineEdit::updateClearIcon()
6765
{
68-
mClearAction->setVisible( shouldShowClear() );
66+
bool showClear = shouldShowClear();
67+
if ( showClear && !mClearAction )
68+
{
69+
mClearAction = new QAction( mClearIcon, QString(), this );
70+
mClearAction->setCheckable( false );
71+
addAction( mClearAction, QLineEdit::TrailingPosition );
72+
connect( mClearAction, &QAction::triggered, this, &QgsFilterLineEdit::clearValue );
73+
}
74+
else if ( !showClear && mClearAction )
75+
{
76+
mClearAction->deleteLater();
77+
mClearAction = nullptr;
78+
}
6979
}
7080

7181
void QgsFilterLineEdit::focusInEvent( QFocusEvent *e )

src/gui/qgsfilterlineedit.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define QGSFILTERLINEEDIT_H
2020

2121
#include <QLineEdit>
22+
#include <QIcon>
2223
#include "qgis.h"
2324
#include "qgis_gui.h"
2425

@@ -64,7 +65,7 @@ class GUI_EXPORT QgsFilterLineEdit : public QLineEdit
6465
ClearToNull = 0, //!< Reset value to null
6566
ClearToDefault, //!< Reset value to default value (see defaultValue() )
6667
};
67-
Q_ENUM( ClearMode );
68+
Q_ENUM( ClearMode )
6869

6970
/**
7071
* Constructor for QgsFilterLineEdit.
@@ -133,7 +134,7 @@ class GUI_EXPORT QgsFilterLineEdit : public QLineEdit
133134
* when no text is entered
134135
* \since QGIS 3.0
135136
*/
136-
bool showSearchIcon() const { return mSearchIconVisible; }
137+
bool showSearchIcon() const { return static_cast< bool >( mSearchAction ); }
137138

138139
/**
139140
* Sets the default value for the widget. The default value is a value
@@ -271,12 +272,12 @@ class GUI_EXPORT QgsFilterLineEdit : public QLineEdit
271272
void updateClearIcon();
272273

273274
private:
275+
QIcon mClearIcon;
274276
QAction *mClearAction = nullptr;
275277
QAction *mSearchAction = nullptr;
276278
QAction *mBusySpinnerAction = nullptr;
277279

278280
bool mClearButtonVisible = true;
279-
bool mSearchIconVisible = false;
280281
bool mShowSpinner = false;
281282

282283
ClearMode mClearMode = ClearToNull;

0 commit comments

Comments
 (0)