Skip to content

Commit bd315eb

Browse files
committed
qt: Get rid of cursor in out-of-focus labels
This change is a temporary fix of QTBUG-59514.
1 parent 374fd6f commit bd315eb

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

src/qt/bitcoin.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,8 @@ int GuiMain(int argc, char* argv[])
556556
/// 9. Main GUI initialization
557557
// Install global event filter that makes sure that long tooltips can be word-wrapped
558558
app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app));
559+
// Install global event filter that makes sure that out-of-focus labels do not contain text cursor.
560+
app.installEventFilter(new GUIUtil::LabelOutOfFocusEventFilter(&app));
559561
#if defined(Q_OS_WIN)
560562
// Install global event filter for processing Windows session related Windows messages (WM_QUERYENDSESSION and WM_ENDSESSION)
561563
qApp->installNativeEventFilter(new WinShutdownMonitor());

src/qt/guiutil.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,28 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt)
450450
return QObject::eventFilter(obj, evt);
451451
}
452452

453+
LabelOutOfFocusEventFilter::LabelOutOfFocusEventFilter(QObject* parent)
454+
: QObject(parent)
455+
{
456+
}
457+
458+
bool LabelOutOfFocusEventFilter::eventFilter(QObject* watched, QEvent* event)
459+
{
460+
if (event->type() == QEvent::FocusOut) {
461+
auto focus_out = static_cast<QFocusEvent*>(event);
462+
if (focus_out->reason() != Qt::PopupFocusReason) {
463+
auto label = qobject_cast<QLabel*>(watched);
464+
if (label) {
465+
auto flags = label->textInteractionFlags();
466+
label->setTextInteractionFlags(Qt::NoTextInteraction);
467+
label->setTextInteractionFlags(flags);
468+
}
469+
}
470+
}
471+
472+
return QObject::eventFilter(watched, event);
473+
}
474+
453475
void TableViewLastColumnResizingFixer::connectViewHeadersSignals()
454476
{
455477
connect(tableView->horizontalHeader(), &QHeaderView::sectionResized, this, &TableViewLastColumnResizingFixer::on_sectionResized);

src/qt/guiutil.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,21 @@ namespace GUIUtil
161161
int size_threshold;
162162
};
163163

164+
/**
165+
* Qt event filter that intercepts QEvent::FocusOut events for QLabel objects, and
166+
* resets their `textInteractionFlags' property to get rid of the visible cursor.
167+
*
168+
* This is a temporary fix of QTBUG-59514.
169+
*/
170+
class LabelOutOfFocusEventFilter : public QObject
171+
{
172+
Q_OBJECT
173+
174+
public:
175+
explicit LabelOutOfFocusEventFilter(QObject* parent);
176+
bool eventFilter(QObject* watched, QEvent* event) override;
177+
};
178+
164179
/**
165180
* Makes a QTableView last column feel as if it was being resized from its left border.
166181
* Also makes sure the column widths are never larger than the table's viewport.

0 commit comments

Comments
 (0)