aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorubbo <ubbo@34ebc366-c3a9-4b3c-9f84-69acf7962910>2012-01-15 18:04:37 +0000
committerubbo <ubbo@34ebc366-c3a9-4b3c-9f84-69acf7962910>2012-01-15 18:04:37 +0000
commita959b0b945d8a01f62544bfb73f03ad6f900a38d (patch)
tree0c2ea13635b636a79bef8bc6b8c73018033047ed
parenthint to possibly fix newer gpgme for win (diff)
downloadgpg4usb-a959b0b945d8a01f62544bfb73f03ad6f900a38d.tar.gz
gpg4usb-a959b0b945d8a01f62544bfb73f03ad6f900a38d.zip
mainwindow reloadable, e.g. when translation changes
git-svn-id: http://cpunk.de/svn/src/gpg4usb/trunk@741 34ebc366-c3a9-4b3c-9f84-69acf7962910
-rw-r--r--main.cpp63
-rw-r--r--mainwindow.cpp11
-rw-r--r--mainwindow.h1
-rw-r--r--wizard.cpp17
-rw-r--r--wizard.h2
5 files changed, 68 insertions, 26 deletions
diff --git a/main.cpp b/main.cpp
index 6321e02..d170967 100644
--- a/main.cpp
+++ b/main.cpp
@@ -68,29 +68,6 @@ int main(int argc, char *argv[])
qDebug() << "gpg4usb non portable build";
#endif
- QSettings::setDefaultFormat(QSettings::IniFormat);
-
- QSettings settings;
- QString lang = settings.value("int/lang", QLocale::system().name()).toString();
- if (lang.isEmpty()) {
- lang = QLocale::system().name();
- }
-
- //internationalize
- QTranslator translator;
- translator.load("ts/gpg4usb_" + lang,
- appPath);
- app.installTranslator(&translator);
-
- // make shortcuts system and language independent
- QTranslator translator2;
-#ifdef _WIN32
- translator2.load("ts/qt_windows_" + lang, appPath);
-#else
- translator2.load("ts/qt_linux_" + lang, appPath);
-#endif
- app.installTranslator(&translator2);
-
/*QLocale ql(lang);
foreach(QLocale l , QLocale::matchingLocales(ql.language(), ql.script(), ql.country())) {
qDebug() << "l: " << l.bcp47Name();
@@ -102,10 +79,44 @@ int main(int argc, char *argv[])
QString styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
- MainWindow *window = new MainWindow();
- window->show();
- return app.exec();
+ /**
+ * internationalisation. loop to restart mainwindow
+ * with changed translation when settings change.
+ */
+ QSettings::setDefaultFormat(QSettings::IniFormat);
+ QSettings settings;
+ QTranslator translator, translator2;
+ int return_from_event_loop_code;
+
+#ifdef _WIN32
+ QString qtTransPrefix = "ts/qt_windows_";
+#else
+ QString qtTransPrefix = "ts/qt_linux_";
+#endif
+
+ do {
+ app.removeTranslator(&translator);
+ app.removeTranslator(&translator2);
+
+ QString lang = settings.value("int/lang", QLocale::system().name()).toString();
+ if (lang.isEmpty()) {
+ lang = QLocale::system().name();
+ }
+
+ translator.load("ts/gpg4usb_" + lang, appPath);
+ app.installTranslator(&translator);
+
+ // make shortcuts system and language independent
+ translator2.load(qtTransPrefix + lang, appPath);
+ app.installTranslator(&translator2);
+
+ MainWindow window;
+ return_from_event_loop_code = app.exec();
+
+ } while( return_from_event_loop_code == RESTART_CODE);
+
+ return return_from_event_loop_code;
}
diff --git a/mainwindow.cpp b/mainwindow.cpp
index e247d19..1813bdc 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -873,6 +873,9 @@ void MainWindow::fileDecrypt()
void MainWindow::openSettingsDialog()
{
+
+ QString preLang = settings.value("int/lang").toString();
+
new SettingsDialog(this);
// Iconsize
QSize iconSize = settings.value("toolbar/iconsize", QSize(32, 32)).toSize();
@@ -888,6 +891,14 @@ void MainWindow::openSettingsDialog()
closeAttachmentDock();
}
+ // restart mainwindow if langugage changed
+ if(preLang != settings.value("int/lang").toString()) {
+ if(edit->maybeSaveAnyTab()) {
+ saveSettings();
+ qApp->exit(RESTART_CODE);
+ }
+ }
+
}
void MainWindow::cleanDoubleLinebreaks()
diff --git a/mainwindow.h b/mainwindow.h
index 692c0e2..5c972e3 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -56,6 +56,7 @@ class QApplication;
class QDockWidget;
QT_END_NAMESPACE
+const int RESTART_CODE = 1000;
/**
* @brief
diff --git a/wizard.cpp b/wizard.cpp
index 4b64a7d..cf1a47b 100644
--- a/wizard.cpp
+++ b/wizard.cpp
@@ -27,6 +27,7 @@ Wizard::Wizard(GpgME::GpgContext *ctx, KeyMgmt *keyMgmt, QWidget *parent)
{
mCtx=ctx;
mKeyMgmt=keyMgmt;
+ mParent=parent;
IntroPage *introPage = new IntroPage();
KeyGenPage *keyGenPage = new KeyGenPage(mCtx);
ImportPage *importPage = new ImportPage(mCtx,mKeyMgmt);
@@ -186,6 +187,8 @@ bool ImportPage::importKeysFromGpg4usb()
return false;
}
+ importConfFromGpg4usb(dir);
+
QFile secRing(dir+"/keydb/secring.gpg");
QFile pubRing(dir+"/keydb/pubring.gpg");
@@ -213,9 +216,23 @@ bool ImportPage::importKeysFromGpg4usb()
QByteArray inBuffer = secRing.readAll();
mKeyMgmt->importKeys(inBuffer);
}
+
+ qApp->exit();
return true;
}
+bool ImportPage::importConfFromGpg4usb(QString dir) {
+ QString path = dir+"/conf/gpg4usb.ini";
+ qDebug() << "import old conf from: " << path;
+ QSettings oldconf(path, QSettings::IniFormat, this);
+ QSettings actualConf;
+ foreach(QString key, oldconf.allKeys()) {
+ qDebug() << key << ": " << oldconf.value(key);
+ actualConf.setValue(key, oldconf.value(key));
+ }
+
+}
+
bool ImportPage::importKeysFromGnupg()
{
// first get gnupghomedir and check, if it exists
diff --git a/wizard.h b/wizard.h
index 702e3c8..e451a28 100644
--- a/wizard.h
+++ b/wizard.h
@@ -42,6 +42,7 @@ public:
private:
GpgME::GpgContext *mCtx;
KeyMgmt *mKeyMgmt;
+ QWidget *mParent;
};
class IntroPage : public QWizardPage
@@ -87,6 +88,7 @@ private slots:
*/
bool importKeysFromGnupg();
bool importKeysFromGpg4usb();
+ bool importConfFromGpg4usb(QString dir);
private:
KeyMgmt *mKeyMgmt;