*************** *** 19,25 **** public: Private() {} - QString bin; int op; GPGProc *proc; bool tryAgent; --- 19,25 ---- public: Private() {} + QString bin, home; int op; GPGProc *proc; bool tryAgent; *************** *** 38,48 **** QByteArray dec; }; - GpgOp::GpgOp(const QString &bin, QObject *parent) :QObject(parent) { d = new Private; d->bin = bin; d->proc = 0; d->op = -1; d->tryAgent = true; --- 38,49 ---- QByteArray dec; }; + GpgOp::GpgOp(const QString &bin, const QString &home, QObject *parent) :QObject(parent) { d = new Private; d->bin = bin; + d->home = home; d->proc = 0; d->op = -1; d->tryAgent = true; *************** *** 323,328 **** bool GpgOp::launchGPG(const QStringList &args, bool useExtra) { d->proc = new GPGProc; connect(d->proc, SIGNAL(readyReadStdout()), SLOT(proc_readyReadStdout())); connect(d->proc, SIGNAL(readyReadStderr()), SLOT(proc_readyReadStderr())); --- 324,336 ---- bool GpgOp::launchGPG(const QStringList &args, bool useExtra) { + QStringList localargs(args); // can't add extra strings in a QStringList&; this solution works + if (!(d->home.isEmpty())) + { + //GnuPG homedir specified + localargs += "--homedir"; + localargs += d->home; + } d->proc = new GPGProc; connect(d->proc, SIGNAL(readyReadStdout()), SLOT(proc_readyReadStdout())); connect(d->proc, SIGNAL(readyReadStderr()), SLOT(proc_readyReadStderr())); *************** *** 330,336 **** connect(d->proc, SIGNAL(wroteToStdin()), SLOT(proc_wroteToStdin())); connect(d->proc, SIGNAL(statusLine(const QString &)), SLOT(proc_statusLine(const QString &))); - if(!d->proc->start(d->bin, args, useExtra)) { d->proc->disconnect(this); d->proc->deleteLater(); d->proc = 0; --- 338,344 ---- connect(d->proc, SIGNAL(wroteToStdin()), SLOT(proc_wroteToStdin())); connect(d->proc, SIGNAL(statusLine(const QString &)), SLOT(proc_statusLine(const QString &))); + if(!d->proc->start(d->bin, localargs, useExtra)) { d->proc->disconnect(this); d->proc->deleteLater(); d->proc = 0;