From 5bbd4ef34eb79e9138977f7b1c91d35560eaf519 Mon Sep 17 00:00:00 2001 From: xdustinface Date: Thu, 4 Jun 2020 21:08:02 +0200 Subject: [PATCH 1/2] qt: Disable macOS system focus rectangles for dash themes The focus rects drawn by macOS are in the color the user selected in the OS settings as selection color. This just doesn't always fit into the coloring of the dash specific themes. --- src/qt/askpassphrasedialog.cpp | 2 ++ src/qt/coincontroldialog.cpp | 2 ++ src/qt/editaddressdialog.cpp | 2 ++ src/qt/guiutil.cpp | 13 +++++++++++++ src/qt/guiutil.h | 4 ++++ src/qt/intro.cpp | 1 + src/qt/openuridialog.cpp | 1 + src/qt/optionsdialog.cpp | 2 ++ src/qt/rpcconsole.cpp | 2 ++ src/qt/sendcoinsentry.cpp | 2 ++ src/qt/signverifymessagedialog.cpp | 2 ++ src/qt/walletview.cpp | 2 ++ 12 files changed, 35 insertions(+) diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index c0dcfb63e8c0..74066b8b0c7c 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -33,6 +33,8 @@ AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent) : GUIUtil::updateFonts(); + GUIUtil::disableMacFocusRect(this); + ui->passEdit1->setMinimumSize(ui->passEdit1->sizeHint()); ui->passEdit2->setMinimumSize(ui->passEdit2->sizeHint()); ui->passEdit3->setMinimumSize(ui->passEdit3->sizeHint()); diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index 69e4e6ffa095..9d73c36d2d7a 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -65,6 +65,8 @@ CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidge GUIUtil::updateFonts(); + GUIUtil::disableMacFocusRect(this); + // context menu actions QAction *copyAddressAction = new QAction(tr("Copy address"), this); QAction *copyLabelAction = new QAction(tr("Copy label"), this); diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 2f49a13aadaa..4528adc1c915 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -21,6 +21,8 @@ EditAddressDialog::EditAddressDialog(Mode _mode, QWidget *parent) : { ui->setupUi(this); + GUIUtil::disableMacFocusRect(this); + GUIUtil::setupAddressWidget(ui->addressEdit, this); switch(mode) diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 6d75c56c52a6..b77cd1ea9016 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1410,6 +1410,19 @@ bool dashThemeActive() return theme != traditionalTheme; } +void disableMacFocusRect(const QWidget* w) +{ +#ifdef Q_OS_MAC + for (const auto& c : w->findChildren()) { + if (c->testAttribute(Qt::WA_MacShowFocusRect)) { + c->setAttribute(Qt::WA_MacShowFocusRect, !dashThemeActive()); + } + } +#else + return; +#endif +} + void setClipboard(const QString& str) { QApplication::clipboard()->setText(str, QClipboard::Clipboard); diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 6c917a9c0307..59fd9dde1a12 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -307,6 +307,10 @@ namespace GUIUtil /** Check if a dash specific theme is activated (light/dark) */ bool dashThemeActive(); + /** Disable the OS default focus rect for macOS because we have custom focus rects + * set in the css files */ + void disableMacFocusRect(const QWidget* w); + /* Convert QString to OS specific boost path through UTF-8 */ fs::path qstringToBoostPath(const QString &path); diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp index 9129c8d6af8e..7d866e50cbcc 100644 --- a/src/qt/intro.cpp +++ b/src/qt/intro.cpp @@ -205,6 +205,7 @@ bool Intro::pickDataDirectory() { /* Let the user choose one */ Intro intro; + GUIUtil::disableMacFocusRect(&intro); intro.setDataDirectory(dataDirDefaultCurrent); intro.setWindowIcon(QIcon(":icons/bitcoin")); diff --git a/src/qt/openuridialog.cpp b/src/qt/openuridialog.cpp index 626489cd6fef..2dc8da898ff6 100644 --- a/src/qt/openuridialog.cpp +++ b/src/qt/openuridialog.cpp @@ -17,6 +17,7 @@ OpenURIDialog::OpenURIDialog(QWidget *parent) : { ui->setupUi(this); GUIUtil::updateFonts(); + GUIUtil::disableMacFocusRect(this); ui->uriEdit->setPlaceholderText("dash:"); } diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index bb8a72ffbc29..01a5fa3b5698 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -40,6 +40,8 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) : GUIUtil::updateFonts(); + GUIUtil::disableMacFocusRect(this); + /* Main elements init */ ui->databaseCache->setMinimum(nMinDbCache); ui->databaseCache->setMaximum(nMaxDbCache); diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 41eb324246b6..d44ad33b621d 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -473,6 +473,8 @@ RPCConsole::RPCConsole(const PlatformStyle *_platformStyle, QWidget *parent) : ui->banHeading }, GUIUtil::FontWeight::Bold, 16); + GUIUtil::disableMacFocusRect(this); + QSettings settings; if (!restoreGeometry(settings.value("RPCConsoleWindowGeometry").toByteArray())) { // Restore failed (perhaps missing setting), center the window diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index e376f6b09137..7bb20568917d 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -23,6 +23,8 @@ SendCoinsEntry::SendCoinsEntry(const PlatformStyle *_platformStyle, QWidget *par { ui->setupUi(this); + GUIUtil::disableMacFocusRect(this); + setCurrentWidget(ui->SendCoins); if (platformStyle->getUseExtraSpacing()) diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 69693c922c86..346d619566ca 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -67,6 +67,8 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(const PlatformStyle *_platformS GUIUtil::setFont({ui->statusLabel_SM, ui->statusLabel_VM}, GUIUtil::FontWeight::Bold); GUIUtil::updateFonts(); + + GUIUtil::disableMacFocusRect(this); } SignVerifyMessageDialog::~SignVerifyMessageDialog() diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index 81ca49f0856a..16a264bb5df6 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -112,6 +112,8 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent): // Pass through messages from transactionView connect(transactionView, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); + + GUIUtil::disableMacFocusRect(this); } WalletView::~WalletView() From 7e62556b9160f5f7fdf24e040d787a8152df5cad Mon Sep 17 00:00:00 2001 From: dustinface <35775977+xdustinface@users.noreply.github.com> Date: Wed, 8 Jul 2020 12:35:45 +0200 Subject: [PATCH 2/2] Apply review suggestion Co-authored-by: UdjinM6 --- src/qt/guiutil.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index b77cd1ea9016..dac9607daa3e 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1418,8 +1418,6 @@ void disableMacFocusRect(const QWidget* w) c->setAttribute(Qt::WA_MacShowFocusRect, !dashThemeActive()); } } -#else - return; #endif }