4040#if BOOST_FILESYSTEM_VERSION >= 3
4141#include < boost/filesystem/detail/utf8_codecvt_facet.hpp>
4242#endif
43+ #include < boost/scoped_array.hpp>
4344
4445#include < QAbstractItemView>
4546#include < QApplication>
@@ -567,12 +568,17 @@ TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* t
567568#ifdef WIN32
568569boost::filesystem::path static StartupShortcutPath ()
569570{
571+ if (GetBoolArg (" -testnet" , false ))
572+ return GetSpecialFolderPath (CSIDL_STARTUP) / " Bitcoin (testnet).lnk" ;
573+ else if (GetBoolArg (" -regtest" , false ))
574+ return GetSpecialFolderPath (CSIDL_STARTUP) / " Bitcoin (regtest).lnk" ;
575+
570576 return GetSpecialFolderPath (CSIDL_STARTUP) / " Bitcoin.lnk" ;
571577}
572578
573579bool GetStartOnSystemStartup ()
574580{
575- // check for Bitcoin.lnk
581+ // check for Bitcoin* .lnk
576582 return boost::filesystem::exists (StartupShortcutPath ());
577583}
578584
@@ -588,29 +594,43 @@ bool SetStartOnSystemStartup(bool fAutoStart)
588594 // Get a pointer to the IShellLink interface.
589595 IShellLink* psl = NULL ;
590596 HRESULT hres = CoCreateInstance (CLSID_ShellLink, NULL ,
591- CLSCTX_INPROC_SERVER, IID_IShellLink,
592- reinterpret_cast <void **>(&psl));
597+ CLSCTX_INPROC_SERVER, IID_IShellLink,
598+ reinterpret_cast <void **>(&psl));
593599
594600 if (SUCCEEDED (hres))
595601 {
596602 // Get the current executable path
597603 TCHAR pszExePath[MAX_PATH];
598604 GetModuleFileName (NULL , pszExePath, sizeof (pszExePath));
599605
600- TCHAR pszArgs[5 ] = TEXT (" -min" );
606+ // Start client minimized
607+ QString strArgs = " -min" ;
608+ // Set -testnet /-regtest options
609+ strArgs += QString::fromStdString (strprintf (" -testnet=%d -regtest=%d" , GetBoolArg (" -testnet" , false ), GetBoolArg (" -regtest" , false )));
610+
611+ #ifdef UNICODE
612+ boost::scoped_array<TCHAR> args (new TCHAR[strArgs.length () + 1 ]);
613+ // Convert the QString to TCHAR*
614+ strArgs.toWCharArray (args.get ());
615+ // Add missing '\0'-termination to string
616+ args[strArgs.length ()] = ' \0 ' ;
617+ #endif
601618
602619 // Set the path to the shortcut target
603620 psl->SetPath (pszExePath);
604621 PathRemoveFileSpec (pszExePath);
605622 psl->SetWorkingDirectory (pszExePath);
606623 psl->SetShowCmd (SW_SHOWMINNOACTIVE);
607- psl->SetArguments (pszArgs);
624+ #ifndef UNICODE
625+ psl->SetArguments (strArgs.toStdString ().c_str ());
626+ #else
627+ psl->SetArguments (args.get ());
628+ #endif
608629
609630 // Query IShellLink for the IPersistFile interface for
610631 // saving the shortcut in persistent storage.
611632 IPersistFile* ppf = NULL ;
612- hres = psl->QueryInterface (IID_IPersistFile,
613- reinterpret_cast <void **>(&ppf));
633+ hres = psl->QueryInterface (IID_IPersistFile, reinterpret_cast <void **>(&ppf));
614634 if (SUCCEEDED (hres))
615635 {
616636 WCHAR pwsz[MAX_PATH];
@@ -630,11 +650,10 @@ bool SetStartOnSystemStartup(bool fAutoStart)
630650 }
631651 return true ;
632652}
633-
634653#elif defined(Q_OS_LINUX)
635654
636655// Follow the Desktop Application Autostart Spec:
637- // http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
656+ // http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
638657
639658boost::filesystem::path static GetAutostartDir ()
640659{
@@ -690,8 +709,13 @@ bool SetStartOnSystemStartup(bool fAutoStart)
690709 // Write a bitcoin.desktop file to the autostart directory:
691710 optionFile << " [Desktop Entry]\n " ;
692711 optionFile << " Type=Application\n " ;
693- optionFile << " Name=Bitcoin\n " ;
694- optionFile << " Exec=" << pszExePath << " -min\n " ;
712+ if (GetBoolArg (" -testnet" , false ))
713+ optionFile << " Name=Bitcoin (testnet)\n " ;
714+ else if (GetBoolArg (" -regtest" , false ))
715+ optionFile << " Name=Bitcoin (regtest)\n " ;
716+ else
717+ optionFile << " Name=Bitcoin\n " ;
718+ optionFile << " Exec=" << pszExePath << strprintf (" -min -testnet=%d -regtest=%d\n " , GetBoolArg (" -testnet" , false ), GetBoolArg (" -regtest" , false ));
695719 optionFile << " Terminal=false\n " ;
696720 optionFile << " Hidden=false\n " ;
697721 optionFile.close ();
0 commit comments