diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-03-11 08:32:07 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-03-11 17:04:58 +0100 |
commit | 17d955fef562a8be0c97c7ae1bdc6d8fc17d3938 (patch) | |
tree | 1e96608136733d8d38bfe0ddae2cedd3597214fb /src/qt/bitcoin.cpp | |
parent | 1eedbbb3a6bbb0070cf7f11929ea261a8d6c0b11 (diff) | |
download | bitcoin-17d955fef562a8be0c97c7ae1bdc6d8fc17d3938.tar.xz |
qt: Make it possible again to specify -testnet in config file
Changes for the datadir chooser have made it impossible to specify
the network (testnet/regtest) in the configuration file for the GUI.
Reorganize the initialization sequence to make this possible again.
- Moves the "datadir" QSetting so that is no longer dependent on the
network-specific application name (doing otherwise would create a
chicken-and-egg problem).
- Re-initialize translations after choosing network. There may be a
different language configured in network-specific settings
(slim chance, but handle it for sanity).
Fixes point 1 of #3840.
Rebased-From: c52c4e5
Diffstat (limited to 'src/qt/bitcoin.cpp')
-rw-r--r-- | src/qt/bitcoin.cpp | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 162009f5de..d8e21c4aa6 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -78,6 +78,12 @@ static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTrans { QSettings settings; + // Remove old translators + QApplication::removeTranslator(&qtTranslatorBase); + QApplication::removeTranslator(&qtTranslator); + QApplication::removeTranslator(&translatorBase); + QApplication::removeTranslator(&translator); + // Get desired locale (e.g. "de_DE") // 1) System default language QString lang_territory = QLocale::system().name(); @@ -439,21 +445,9 @@ void BitcoinApplication::handleRunawayException(const QString &message) #ifndef BITCOIN_QT_TEST int main(int argc, char *argv[]) { - bool fSelParFromCLFailed = false; /// 1. Parse command-line options. These take precedence over anything else. // Command-line options take precedence: ParseParameters(argc, argv); - // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause) - if (!SelectParamsFromCommandLine()) { - fSelParFromCLFailed = true; - } -#ifdef ENABLE_WALLET - // Parse URIs on command line -- this can affect TestNet() / RegTest() mode - if (!PaymentServer::ipcParseCommandLine(argc, argv)) - exit(0); -#endif - - bool isaTestNet = TestNet() || RegTest(); // Do not refer to data directory yet, this can be overridden by Intro::pickDataDirectory @@ -480,12 +474,9 @@ int main(int argc, char *argv[]) /// 3. Application identification // must be set before OptionsModel is initialized or translations are loaded, // as it is used to locate QSettings - QApplication::setOrganizationName("Bitcoin"); - QApplication::setOrganizationDomain("bitcoin.org"); - if (isaTestNet) // Separate UI settings for testnets - QApplication::setApplicationName("Bitcoin-Qt-testnet"); - else - QApplication::setApplicationName("Bitcoin-Qt"); + QApplication::setOrganizationName(QAPP_ORG_NAME); + QApplication::setOrganizationDomain(QAPP_ORG_DOMAIN); + QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); /// 4. Initialization of translations, so that intro dialog is in user's language // Now that QSettings are accessible, initialize translations @@ -501,17 +492,13 @@ int main(int argc, char *argv[]) help.showOrPrint(); return 1; } - // Now that translations are initialized, check for earlier errors and show a translatable error message - if (fSelParFromCLFailed) { - QMessageBox::critical(0, QObject::tr("Bitcoin"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); - return 1; - } /// 5. Now that settings and translations are available, ask user for data directory // User language is set up: pick a data directory - Intro::pickDataDirectory(isaTestNet); + Intro::pickDataDirectory(); /// 6. Determine availability of data directory and parse bitcoin.conf + /// - Do not call GetDataDir(true) before this step finishes if (!boost::filesystem::is_directory(GetDataDir(false))) { QMessageBox::critical(0, QObject::tr("Bitcoin"), @@ -520,8 +507,33 @@ int main(int argc, char *argv[]) } ReadConfigFile(mapArgs, mapMultiArgs); + /// 7. Determine network (and switch to network specific options) + // - Do not call Params() before this step + // - Do this after parsing the configuration file, as the network can be switched there + // - QSettings() will use the new application name after this, resulting in network-specific settings + // - Needs to be done before createOptionsModel + + // Check for -testnet or -regtest parameter (Params() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + QMessageBox::critical(0, QObject::tr("Bitcoin"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); + return 1; + } +#ifdef ENABLE_WALLET + // Parse URIs on command line -- this can affect Params() + if (!PaymentServer::ipcParseCommandLine(argc, argv)) + exit(0); +#endif + bool isaTestNet = Params().NetworkID() != CChainParams::MAIN; + // Allow for separate UI settings for testnets + if (isaTestNet) + QApplication::setApplicationName(QAPP_APP_NAME_TESTNET); + else + QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); + // Re-initialize translations after changing application name (language in network-specific settings can be different) + initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); + #ifdef ENABLE_WALLET - /// 7. URI IPC sending + /// 8. URI IPC sending // - Do this early as we don't want to bother initializing if we are just calling IPC // - Do this *after* setting up the data directory, as the data directory hash is used in the name // of the server. @@ -535,7 +547,7 @@ int main(int argc, char *argv[]) app.createPaymentServer(); #endif - /// 8. Main GUI initialization + /// 9. Main GUI initialization // Install global event filter that makes sure that long tooltips can be word-wrapped app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); // Install qDebug() message handler to route to debug.log |