diff --git a/lib/func.cpp b/lib/func.cpp index 98cab96a..2dbbc561 100644 --- a/lib/func.cpp +++ b/lib/func.cpp @@ -51,7 +51,7 @@ QPixmap *loadImg(const char *name ) QStringList getLibExtensions() { QStringList l; -#if defined(_WIN32) || defined(USE_CYGWIN) +#if defined(Q_OS_WIN32) l << QString("*.dll") << QString("*.DLL"); #elif defined(Q_OS_MAC) l << QString("*.dylib") << QString("*.so"); @@ -61,6 +61,22 @@ QStringList getLibExtensions() return l; } +int portable_app() +{ + static int portable = -1; + if (portable == -1) { +#if defined(Q_OS_WIN32) + HKEY hKey; + portable = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\xca", + 0, KEY_READ, &hKey) != ERROR_SUCCESS; +#else + const char *p = getenv("XCA_PORTABLE"); + portable = p && *p; +#endif + } + return portable; +} + /* returns e.g. /usr/local/share/xca for unix systems * or HKEY_LOCAL_MACHINE->Software->xca for WIN32 * (e.g. c:\Program Files\xca ) @@ -86,6 +102,8 @@ QString getPrefix() *p = '\0'; return QString(inst_dir); } + if (portable_app()) + return QString(inst_dir); p = inst_dir; *p = '\0'; lRc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\xca", 0, KEY_READ, &hKey); @@ -150,7 +168,7 @@ QString getLibDir() QString getDocDir() { -#if defined(WIN32) || defined (Q_OS_MAC) +#if defined(Q_OS_WIN32) || defined (Q_OS_MAC) return getPrefix(); #else return QString(DOCDIR); diff --git a/lib/func.h b/lib/func.h index 35e679e9..34b29f8f 100644 --- a/lib/func.h +++ b/lib/func.h @@ -21,6 +21,7 @@ class Validity; extern QString currentDB; QPixmap *loadImg(const char *name); +int portable_app(); QString getPrefix(); QString getHomeDir(); QString getLibDir(); diff --git a/lib/main.cpp b/lib/main.cpp index 45b92938..7e32c58b 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -135,6 +135,9 @@ void XCA_application::switchLanguage(QAction* a) QLocale lang = a->data().toLocale(); setupLanguage(lang); + if (portable_app()) + return; + QFile file(defaultlang()); if (lang == QLocale::system()) { diff --git a/lib/pki_temp.cpp b/lib/pki_temp.cpp index 7c7d9eb4..71164050 100644 --- a/lib/pki_temp.cpp +++ b/lib/pki_temp.cpp @@ -462,7 +462,7 @@ void pki_temp::fload(QString fname) try { try_fload(fname, "rb"); } catch (errorEx &err) { -#if defined(_WIN32) +#if defined(Q_OS_WIN32) /* Try again in ascii mode on Windows * to support pre 1.1.0 template exports */ try_fload(fname, "r"); diff --git a/lib/settings.cpp b/lib/settings.cpp index 38f700af..fa1473d0 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -4,6 +4,7 @@ #include "widgets/hashBox.h" #include "widgets/NewKey.h" #include +#include #include settings Settings; @@ -69,6 +70,9 @@ void settings::setAction(const QString &key, const QString &value) } TransCommit(); return; + } else if (key == "workingdir") { + if (!QFile::exists(value)) + return; } values[key] = value; } @@ -103,9 +107,11 @@ void settings::set(QString key, QString value) XSqlQuery q; load_settings(); - if (key == "workingdir") + if (key == "workingdir") { + if (portable_app()) + return; value = QDir::toNativeSeparators(value); - + } if (db_keys.contains(key) && values[key] == value) return; diff --git a/widgets/MW_database.cpp b/widgets/MW_database.cpp index 11d2f8b3..cf0b5ff1 100644 --- a/widgets/MW_database.cpp +++ b/widgets/MW_database.cpp @@ -422,6 +422,9 @@ int MainWindow::open_default_db() void MainWindow::default_database() { + if (portable_app()) + return; + QFile file(defaultdb()); QFileInfo fi(currentDB); @@ -558,6 +561,11 @@ void MainWindow::update_history(QString fname) while (history.size() > 10) history.removeLast(); + update_history_menu(); + + if (portable_app()) + return; + file.setFileName(dbhistory()); if (!file.open(QIODevice::ReadWrite)) return; @@ -569,5 +577,4 @@ void MainWindow::update_history(QString fname) break; } file.close(); - update_history_menu(); } diff --git a/widgets/MW_help.cpp b/widgets/MW_help.cpp index 9e2d8664..4c69712d 100644 --- a/widgets/MW_help.cpp +++ b/widgets/MW_help.cpp @@ -84,7 +84,7 @@ void MainWindow::about() } Entropy::seed_rng(); cont = QString( - "

XCA

" + "

XCA%8

" "

Copyright 2001 - 2018 by Christian Hohnstädt\n" "

Version: %4

%1

%2" /* commithash, Brainpool, OpenSSL & Qt Version */ "

http://hohnstaedt.de/xca" @@ -106,12 +106,13 @@ void MainWindow::about() "CroatianNevenko Bartolincic <nevenko.bartolincic@gmail.com>" "SlovakSlavko <linux@slavino.sk>" "PolishJacek Tyborowski <jacek@tyborowski.pl>" - "Portugese (Brazil)Vinicius Ocker <viniciusockerfagundes@yandex.com>" + "Portuguese (Brazil)Vinicius Ocker <viniciusockerfagundes@yandex.com>" "SpanishMiguel Romera <mrmsoftdonation@gmail.com>" "").arg(brainpool).arg(version).arg(Entropy::strength()) .arg(version_str(true)).arg(getPrefix()) .arg(getUserSettingsDir()) - .arg(QString(Settings["workingdir"])); + .arg(QString(Settings["workingdir"])) + .arg(portable_app() ? " (Portable)" : ""); textbox->setHtml(cont); textbox->setReadOnly(true); diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp index 637a20c5..3b18ef3c 100644 --- a/widgets/MW_menu.cpp +++ b/widgets/MW_menu.cpp @@ -101,8 +101,10 @@ void MainWindow::init_menu() this, SLOT(openRemoteSqlDB())) ->setEnabled(OpenDb::hasRemoteDrivers()); file->addMenu(historyMenu); - file->addAction(tr("Set as default DataBase"), this, + if (!portable_app()) { + file->addAction(tr("Set as default DataBase"), this, SLOT(default_database())); + } acList += file->addAction(tr("&Close DataBase"), this, SLOT(close_database()), QKeySequence(QKeySequence::Close));