Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/qt/bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,7 @@ static void SetupUIArgs(ArgsManager& argsman)
argsman.AddArg("-font-weight-normal", QObject::tr("Set the font weight for normal texts. Possible range %1 to %2 (default: %3)").arg(0).arg(8).arg(GUIUtil::weightToArg(GUIUtil::FontRegistry::TARGET_WEIGHT_NORMAL)).toStdString(), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-lang=<lang>", QObject::tr("Set language, for example \"de_DE\" (default: system locale)").toStdString(), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-min", QObject::tr("Start minimized").toStdString(), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-nativefiledialogs", strprintf(QObject::tr("Use system native file dialogs; set to 0 to force Qt file dialogs if native dialogs freeze or crash on some desktop environments (default: %u)").toStdString(), true), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-resetguisettings", QObject::tr("Reset all settings changed in the GUI").toStdString(), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-splash", strprintf(QObject::tr("Show splash screen on startup (default: %u)").toStdString(), DEFAULT_SPLASHSCREEN), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);
argsman.AddArg("-uiplatform", strprintf("Select platform to customize UI for (one of windows, macosx, other; default: %s)", BitcoinGUI::DEFAULT_UIPLATFORM), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::GUI);
Expand Down
16 changes: 14 additions & 2 deletions src/qt/guiutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,13 @@ QString ExtractFirstSuffixFromFilter(const QString& filter)
return suffix;
}

static QFileDialog::Options GetFileDialogOptions()
{
return gArgs.GetBoolArg("-nativefiledialogs", /*fDefault=*/true)
? QFileDialog::Options()
: QFileDialog::Options(QFileDialog::DontUseNativeDialog);
}
Comment on lines +500 to +505
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Default value for -nativefiledialogs is duplicated

The default true is hardcoded in two places: in SetupUIArgs at src/qt/bitcoin.cpp:509 (the help text uses strprintf(... %u, true)) and in GetFileDialogOptions() at src/qt/guiutil.cpp:502 (gArgs.GetBoolArg("-nativefiledialogs", /*fDefault=*/true)). If the default ever changes, both sites must be updated in lock-step. Hoisting a static constexpr bool DEFAULT_NATIVE_FILE_DIALOGS = true; (alongside DEFAULT_SPLASHSCREEN / similar) and reusing it in both locations would single-source the value. Not a correctness issue — the surrounding code (e.g. -splash two lines below) follows the same %u + bool pattern, so this is consistent with existing style.

source: ['claude']


QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir,
const QString &filter,
QString *selectedSuffixOut)
Expand All @@ -512,7 +519,7 @@ QString getSaveFileName(QWidget *parent, const QString &caption, const QString &
myDir = dir;
}
/* Directly convert path to native OS path separators */
QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter));
QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter, GetFileDialogOptions()));

QString selectedSuffix = ExtractFirstSuffixFromFilter(selectedFilter);

Expand Down Expand Up @@ -552,7 +559,7 @@ QString getOpenFileName(QWidget *parent, const QString &caption, const QString &
myDir = dir;
}
/* Directly convert path to native OS path separators */
QString result = QDir::toNativeSeparators(QFileDialog::getOpenFileName(parent, caption, myDir, filter, &selectedFilter));
QString result = QDir::toNativeSeparators(QFileDialog::getOpenFileName(parent, caption, myDir, filter, &selectedFilter, GetFileDialogOptions()));

if(selectedSuffixOut)
{
Expand All @@ -562,6 +569,11 @@ QString getOpenFileName(QWidget *parent, const QString &caption, const QString &
return result;
}

QString getExistingDirectory(QWidget* parent, const QString& caption, const QString& dir)
{
return QDir::toNativeSeparators(QFileDialog::getExistingDirectory(parent, caption, dir, QFileDialog::ShowDirsOnly | GetFileDialogOptions()));
}

Qt::ConnectionType blockingGUIThreadConnection()
{
if(QThread::currentThread() != qApp->thread())
Expand Down
3 changes: 3 additions & 0 deletions src/qt/guiutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,9 @@ namespace GUIUtil
const QString &filter,
QString *selectedSuffixOut);

/** Get existing directory, convenience wrapper for QFileDialog::getExistingDirectory. */
QString getExistingDirectory(QWidget* parent, const QString& caption, const QString& dir);

/** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking.

@returns If called from the GUI thread, return a Qt::DirectConnection.
Expand Down
4 changes: 2 additions & 2 deletions src/qt/intro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include <util/system.h>
#include <validation.h>

#include <QFileDialog>
#include <QDir>
#include <QSettings>
#include <QMessageBox>

Expand Down Expand Up @@ -326,7 +326,7 @@ void Intro::on_dataDirectory_textChanged(const QString &dataDirStr)

void Intro::on_ellipsisButton_clicked()
{
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(nullptr, "Choose data directory", ui->dataDirectory->text()));
QString dir = GUIUtil::getExistingDirectory(this, tr("Choose data directory"), ui->dataDirectory->text());
if(!dir.isEmpty())
ui->dataDirectory->setText(dir);
}
Expand Down
Loading