Subject: The X2Go client does not like some special character in password like £

From: "Sebastien" <[email-masked]>
Date: Fri, 21 Aug 2015 14:54:00 +0200 (CEST)

Package: x2goclient
Version: 4.0.5.0
When I try to connect to a remore session where the password contains some
rare special characters (like £). The server reject the password (even if
it is the correct one).

I've looked at the code and it seems that the problem is the usage of
QString::toAsci. I attach a patch where I convert all of them to
QString::toUtf8, it seems that it solves the problem.

I've managed to build the client with Qt 5.4.2 on Centos 7.1 so the patch
also contains some changes that get rid of the obsolete Qt methods and
replace them with the new advised ones. This patch is against a snapshot
of the master branch of the 12th of August 2015.

Best regards,
Sebastien

diff --git a/x2goclient-HEAD-9dea920/src/SVGFrame.cpp b/x2goclient-HEAD-9dea920-rev1/src/SVGFrame.cpp
index 0f78163..796e669 100644
--- a/x2goclient-HEAD-9dea920/src/SVGFrame.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/SVGFrame.cpp
@@ -26,7 +26,7 @@

 SVGFrame::SVGFrame ( QString fname,bool st,QWidget* parent,
-                     Qt::WFlags f ) :QFrame ( parent,f )
+                     Qt::WindowFlags f ) :QFrame ( parent,f )
 {
 	empty=false;
 #ifdef Q_OS_WIN
@@ -66,7 +66,7 @@ SVGFrame::SVGFrame ( QString fname,bool st,QWidget* parent,
 }
 
 SVGFrame::SVGFrame ( QWidget* parent,
-                     Qt::WFlags f ) :QFrame ( parent,f )
+                     Qt::WindowFlags f ) :QFrame ( parent,f )
 {
 	repaint=false;
 	empty=true;
diff --git a/x2goclient-HEAD-9dea920/src/SVGFrame.h b/x2goclient-HEAD-9dea920-rev1/src/SVGFrame.h
index 93bac7e..38f3b87 100644
--- a/x2goclient-HEAD-9dea920/src/SVGFrame.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/SVGFrame.h
@@ -28,8 +28,8 @@ class SVGFrame: public QFrame
 
 		Q_OBJECT
 	public:
-		SVGFrame ( QString fname, bool st, QWidget* parent=0, Qt::WFlags f=0 );
-		SVGFrame ( QWidget* parent=0, Qt::WFlags f=0 );
+		SVGFrame ( QString fname, bool st, QWidget* parent=0, Qt::WindowFlags f=0 );
+		SVGFrame ( QWidget* parent=0, Qt::WindowFlags f=0 );
 		void setRepaintable ( bool val )
 		{
 			repaint=val;
diff --git a/x2goclient-HEAD-9dea920/src/configdialog.cpp b/x2goclient-HEAD-9dea920-rev1/src/configdialog.cpp
index c0b2285..1910e41 100644
--- a/x2goclient-HEAD-9dea920/src/configdialog.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/configdialog.cpp
@@ -46,7 +46,7 @@
 #endif

-ConfigDialog::ConfigDialog ( QWidget * parent,  Qt::WFlags f )
+ConfigDialog::ConfigDialog ( QWidget * parent,  Qt::WindowFlags f )
     : QDialog ( parent,f )
 {
 
diff --git a/x2goclient-HEAD-9dea920/src/configdialog.h b/x2goclient-HEAD-9dea920-rev1/src/configdialog.h
index 3e1d9a4..ff2f1d6 100644
--- a/x2goclient-HEAD-9dea920/src/configdialog.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/configdialog.h
@@ -44,7 +44,7 @@ class ConfigDialog : public QDialog
     Q_OBJECT
 public:
     ConfigDialog ( QWidget * parent,
-                   Qt::WFlags f = 0 );
+                   Qt::WindowFlags f = 0 );
     ~ConfigDialog();
 #ifdef Q_OS_DARWIN
     static    QString findXDarwin ( QString& version,
diff --git a/x2goclient-HEAD-9dea920/src/cupsprint.cpp b/x2goclient-HEAD-9dea920-rev1/src/cupsprint.cpp
index 5a14b11..e4ec34e 100644
--- a/x2goclient-HEAD-9dea920/src/cupsprint.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/cupsprint.cpp
@@ -53,7 +53,7 @@ QString CUPSPrint::getDefaultUserPrinter()
 	                     "CUPS/defaultprinter","" ). toString();
 	if ( defPrint.length() >0 )
 	{
-		cups_dest_t *dest = cupsGetDest ( defPrint.toAscii(),
+        cups_dest_t *dest = cupsGetDest ( defPrint.toUtf8(),
 		                                  0l, num_dests, dests );
 		if ( dest )
 			return defPrint;
@@ -77,7 +77,7 @@ bool CUPSPrint::getPrinterInfo ( const QString& printerName, QString& info,
                                  QString& model, printState& state,
                                  QString& stateReason )
 {
-	cups_dest_t *dest = cupsGetDest ( printerName.toAscii(), 0l,
+    cups_dest_t *dest = cupsGetDest ( printerName.toUtf8(), 0l,
 	                                  num_dests,
 	                                  dests );
 	if ( !dest )
@@ -114,15 +114,15 @@ bool CUPSPrint::getPrinterInfo ( const QString& printerName, QString& info,
 bool CUPSPrint::setCurrentPrinter ( QString prn )
 {
 	currentPrinter=prn;
-	QString fl=cupsGetPPD ( prn.toAscii() );
+    QString fl=cupsGetPPD ( prn.toUtf8() );
 	if ( fl.length() <=0 )
 		return false;
 
 	if ( ppd )
 		ppdClose ( ppd );
 	ppd=0l;
-	ppd=ppdOpenFile ( fl.toAscii() );
-	unlink ( fl.toAscii() );
+    ppd=ppdOpenFile ( fl.toUtf8() );
+    unlink ( fl.toUtf8() );
 	if ( ppd==0l )
 		return false;
 	ppdMarkDefaults ( ppd );
@@ -141,10 +141,10 @@ bool CUPSPrint::getOptionValue ( const QString& option,
 {
 	if ( !ppd )
 		return false;
-	ppd_choice_t* choice=ppdFindMarkedChoice ( ppd,option.toAscii() );
+    ppd_choice_t* choice=ppdFindMarkedChoice ( ppd,option.toUtf8() );
 	if ( !choice )
 	{
-		ppd_option_t* opt=ppdFindOption ( ppd,option.toAscii() );
+        ppd_option_t* opt=ppdFindOption ( ppd,option.toUtf8() );
 		if ( !opt )
 			return false;
 		choice=ppdFindChoice ( opt,opt->defchoice );
@@ -168,7 +168,7 @@ int CUPSPrint::getOptionValues ( const QString& option,
 	int cur_val=-1;
 	values.clear();
 	descriptions.clear();
-	ppd_option_t* opt=ppdFindOption ( ppd,option.toAscii() );
+    ppd_option_t* opt=ppdFindOption ( ppd,option.toUtf8() );
 	if ( !opt )
 		return -1;
 	for ( int k=0;k<opt->num_choices;++k )
@@ -241,7 +241,7 @@ bool CUPSPrint::setValue ( const QString& option, const QString& value,
 	QString valueBefore, textBefore;
 	if ( !getOptionValue ( option,valueBefore,textBefore ) )
 		return false;
-	ppdMarkOption ( ppd,option.toAscii(),value.toAscii() );
+    ppdMarkOption ( ppd,option.toUtf8(),value.toUtf8() );
 
 	if ( conflictsBefore==ppdConflicts ( ppd ) )
 	{
@@ -281,7 +281,7 @@ bool CUPSPrint::setValue ( const QString& option, const QString& value,

 	//set previous value
-	ppdMarkOption ( ppd,option.toAscii(),valueBefore.toAscii() );
+    ppdMarkOption ( ppd,option.toUtf8(),valueBefore.toUtf8() );
 	return false;
 }
 
@@ -290,7 +290,7 @@ bool CUPSPrint::getOptionText ( const QString& option, QString& text )
 {
 	if ( !ppd )
 		return false;
-	ppd_option_t* opt=ppdFindOption ( ppd,option .toAscii() );
+    ppd_option_t* opt=ppdFindOption ( ppd,option .toUtf8() );
 	if ( !opt )
 		return false;
 	text=QString::fromLocal8Bit ( opt->text );
@@ -355,7 +355,7 @@ void CUPSPrint::loadUserOptions()
 	for ( int i=0;i<options.size();++i )
 	{
 		QStringList opt=options[i].split ( "=" );
-		ppdMarkOption ( ppd,opt[0].toAscii(),opt[1].toAscii() );
+        ppdMarkOption ( ppd,opt[0].toUtf8(),opt[1].toUtf8() );
 	}
 }
 
@@ -381,14 +381,14 @@ void CUPSPrint::print ( const QString& file, QString title )
 			if ( val!=option->defchoice )
 			{
 				num_options = cupsAddOption ( option->keyword,
-				                              val.toAscii(),
+                                              val.toUtf8(),
 				                              num_options,
 				                              &options );
 			}
 		}
 	}
-	cupsPrintFile ( currentPrinter.toAscii(),file.toAscii(),
-	                title.toAscii(), num_options,options );
+    cupsPrintFile ( currentPrinter.toUtf8(),file.toUtf8(),
+                    title.toUtf8(), num_options,options );
 	cupsFreeOptions ( num_options, options );
 }
 #endif
diff --git a/x2goclient-HEAD-9dea920/src/cupsprintersettingsdialog.cpp b/x2goclient-HEAD-9dea920-rev1/src/cupsprintersettingsdialog.cpp
index 2489364..588bc07 100644
--- a/x2goclient-HEAD-9dea920/src/cupsprintersettingsdialog.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/cupsprintersettingsdialog.cpp
@@ -27,7 +27,7 @@ CUPSPrinterSettingsDialog::CUPSPrinterSettingsDialog (
     QString prnName,
     CUPSPrint*  cupsObject,
     QWidget * parent,
-    Qt::WFlags flags
+    Qt::WindowFlags flags
 ) :QDialog ( parent, flags )
 {
 	m_cups=cupsObject;
diff --git a/x2goclient-HEAD-9dea920/src/cupsprintersettingsdialog.h b/x2goclient-HEAD-9dea920-rev1/src/cupsprintersettingsdialog.h
index 8b821d7..3bcc74d 100644
--- a/x2goclient-HEAD-9dea920/src/cupsprintersettingsdialog.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/cupsprintersettingsdialog.h
@@ -34,7 +34,7 @@ class CUPSPrinterSettingsDialog : public QDialog
 		CUPSPrinterSettingsDialog ( QString prnName,
 		                            CUPSPrint*  cupsObject,
 		                            QWidget * parent=0l,
-		                            Qt::WFlags flags =0 );
+		                            Qt::WindowFlags flags =0 );
 		~CUPSPrinterSettingsDialog();
 	private:
 		CUPSPrint* m_cups;
diff --git a/x2goclient-HEAD-9dea920/src/editconnectiondialog.cpp b/x2goclient-HEAD-9dea920-rev1/src/editconnectiondialog.cpp
index a672936..68b8570 100644
--- a/x2goclient-HEAD-9dea920/src/editconnectiondialog.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/editconnectiondialog.cpp
@@ -30,7 +30,7 @@
 #include "mediawidget.h"
 
 EditConnectionDialog::EditConnectionDialog ( bool newSession, QString id, QWidget * par,
-        int ind,Qt::WFlags f )
+        int ind,Qt::WindowFlags f )
         : QDialog ( par,f )
 {
     QVBoxLayout* ml=new QVBoxLayout ( this );
diff --git a/x2goclient-HEAD-9dea920/src/editconnectiondialog.h b/x2goclient-HEAD-9dea920-rev1/src/editconnectiondialog.h
index 8fd92ba..508fd76 100644
--- a/x2goclient-HEAD-9dea920/src/editconnectiondialog.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/editconnectiondialog.h
@@ -49,7 +49,7 @@ class EditConnectionDialog : public QDialog
     Q_OBJECT
 public:
     EditConnectionDialog ( bool newSession, QString id, QWidget * par,  int ind=0,
-                           Qt::WFlags f = 0 );
+                           Qt::WindowFlags f = 0 );
     ~EditConnectionDialog();
 private:
     QTabWidget *fr;
diff --git a/x2goclient-HEAD-9dea920/src/exportdialog.cpp b/x2goclient-HEAD-9dea920-rev1/src/exportdialog.cpp
index 6d4495c..c5e1db8 100644
--- a/x2goclient-HEAD-9dea920/src/exportdialog.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/exportdialog.cpp
@@ -32,7 +32,7 @@
 #include <QFileDialog>
 #include "sessionexplorer.h"
 
-ExportDialog::ExportDialog ( QString sid,QWidget * par, Qt::WFlags f )
+ExportDialog::ExportDialog ( QString sid,QWidget * par, Qt::WindowFlags f )
     : QDialog ( par,f )
 {
     sessionId=sid;
diff --git a/x2goclient-HEAD-9dea920/src/exportdialog.h b/x2goclient-HEAD-9dea920-rev1/src/exportdialog.h
index f645bfd..bf9c726 100644
--- a/x2goclient-HEAD-9dea920/src/exportdialog.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/exportdialog.h
@@ -33,7 +33,7 @@ class ExportDialog : public QDialog
 {
     Q_OBJECT
 public:
-    ExportDialog(QString sid,QWidget * par, Qt::WFlags f = 0);
+    ExportDialog(QString sid,QWidget * par, Qt::WindowFlags f = 0);
 
     ~ExportDialog();
     QString getExport(){return directory;}
diff --git a/x2goclient-HEAD-9dea920/src/httpbrokerclient.cpp b/x2goclient-HEAD-9dea920-rev1/src/httpbrokerclient.cpp
index 4f40191..af5091b 100644
--- a/x2goclient-HEAD-9dea920/src/httpbrokerclient.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/httpbrokerclient.cpp
@@ -596,25 +596,25 @@ void HttpBrokerClient::slotSslErrors ( QNetworkReply* netReply, const QList<QSsl
                           "------------\n"<<
                           tr ( "Issued to:\n" ) <<
                           tr ( "Common Name(CN)\t" ) <<
-                          cert.issuerInfo ( QSslCertificate::CommonName )
+                          cert.issuerInfo ( QSslCertificate::CommonName ).join("")
                           <<endl<<
                           tr ( "Organization(O)\t" ) <<
-                          cert.issuerInfo ( QSslCertificate::Organization )
+                          cert.issuerInfo ( QSslCertificate::Organization ).join("")
                           <<endl<<
                           tr ( "Organizational Unit(OU)\t" ) <<
-                          cert.issuerInfo ( QSslCertificate::OrganizationalUnitName )
+                          cert.issuerInfo ( QSslCertificate::OrganizationalUnitName ).join("")
                           <<endl<<
                           tr ( "Serial Number\t" ) <<getHexVal ( cert.serialNumber() )
                           <<endl<<endl<<
                           tr ( "Issued by:\n" ) <<
                           tr ( "Common Name(CN)\t" ) <<
-                          cert.subjectInfo ( QSslCertificate::CommonName )
+                          cert.subjectInfo ( QSslCertificate::CommonName ).join("")
                           <<endl<<
                           tr ( "Organization(O)\t" ) <<
-                          cert.subjectInfo ( QSslCertificate::Organization )
+                          cert.subjectInfo ( QSslCertificate::Organization ).join("")
                           <<endl<<
                           tr ( "Organizational Unit(OU)\t" ) <<
-                          cert.subjectInfo ( QSslCertificate::OrganizationalUnitName )
+                          cert.subjectInfo ( QSslCertificate::OrganizationalUnitName ).join("")
                           <<endl<<endl<<
 
                           tr ( "Validity:\n" ) <<
diff --git a/x2goclient-HEAD-9dea920/src/imgframe.cpp b/x2goclient-HEAD-9dea920-rev1/src/imgframe.cpp
index 71a695e..9379555 100644
--- a/x2goclient-HEAD-9dea920/src/imgframe.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/imgframe.cpp
@@ -20,7 +20,7 @@
 #include "x2goclientconfig.h"
 #include <QResizeEvent>
 
-IMGFrame::IMGFrame(QImage* ,QWidget* parent, Qt::WFlags f) :QFrame(parent,f)
+IMGFrame::IMGFrame(QImage* ,QWidget* parent, Qt::WindowFlags f) :QFrame(parent,f)
 {
 	//setBg(img);
 }
diff --git a/x2goclient-HEAD-9dea920/src/imgframe.h b/x2goclient-HEAD-9dea920-rev1/src/imgframe.h
index 7ac700e..5966b8f 100644
--- a/x2goclient-HEAD-9dea920/src/imgframe.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/imgframe.h
@@ -31,7 +31,7 @@ class IMGFrame : public QFrame
 {
 	Q_OBJECT
 public:
-	IMGFrame(QImage* img,QWidget* parent=0, Qt::WFlags f=0);
+	IMGFrame(QImage* img,QWidget* parent=0, Qt::WindowFlags f=0);
     ~IMGFrame();
     void setBg(QImage* img);
     virtual void resizeEvent(QResizeEvent* event);
diff --git a/x2goclient-HEAD-9dea920/src/ongetpass.cpp b/x2goclient-HEAD-9dea920-rev1/src/ongetpass.cpp
index cb1912e..d2b89ac 100644
--- a/x2goclient-HEAD-9dea920/src/ongetpass.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/ongetpass.cpp
@@ -35,7 +35,6 @@
 #include <signal.h>
 #endif
 
-#include <QPlastiqueStyle>
 #include <QMessageBox>
 #include <iostream>
 #include <QFile>
@@ -50,9 +49,6 @@ int x2goMain ( int argc, char *argv[] )
     QApplication app ( argc,argv );
 
 #ifndef Q_WS_HILDON
-#ifdef Q_OS_LINUX
-    app.setStyle ( new QPlastiqueStyle() );
-#endif
 #endif
     QStringList args;
     if ( argc > 1 )
diff --git a/x2goclient-HEAD-9dea920/src/onmainwindow.cpp b/x2goclient-HEAD-9dea920-rev1/src/onmainwindow.cpp
index 35faced..1435dba 100644
--- a/x2goclient-HEAD-9dea920/src/onmainwindow.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/onmainwindow.cpp
@@ -493,7 +493,7 @@ ONMainWindow::ONMainWindow ( QWidget *parent ) :QMainWindow ( parent )
     connect( xineramaTimer, SIGNAL(timeout()), this, SLOT(slotConfigXinerama()));
 
     x2goInfof(3)<<tr("Started X2Go Client.");
-    x2goDebug<<"$HOME=" + homeDir.toAscii();
+    x2goDebug<<"$HOME=" + homeDir.toUtf8();
     if (thinMode)
     {
         x2goDebug<<"Thin Mode is active.";
@@ -600,13 +600,13 @@ bool ONMainWindow::get_translator (QString file_name_start, QTranslator **transl
 
             if (tmp_translator->load (load_filename)) {
                 /* Some translation successfully loaded. That's good enough. */
-                x2goInfof (4) << tr ("Translator: ") + load_filename.toAscii () + tr (" found.");
+                x2goInfof (4) << tr ("Translator: ") + load_filename.toUtf8() + tr (" found.");
                 translator_found = true;
                 *translator = tmp_translator;
                 break;
             }
             else {
-                x2goWarningf (1) << tr ("Non-fatal: can't load translator: ") + load_filename.toAscii ();
+                x2goWarningf (1) << tr ("Non-fatal: can't load translator: ") + load_filename.toUtf8();
                 x2goWarningf (1) << tr ("Trying to load language with lower preference, if existent.");
             }
         }
@@ -2762,7 +2762,7 @@ SshMasterConnection* ONMainWindow::startSshConnection ( QString host, QString po
 #ifndef Q_OS_WIN
         QStringList args=sshEnv[i].split ( "=" );
         x2goDebug<<"Setting ENV " + args[0] + tr(" to ") + args[1];
-        setenv ( args[0].toAscii(),args[1].toAscii(),1 );
+        setenv ( args[0].toUtf8(),args[1].toUtf8(),1 );
 #else
         x2goDebug<<"Set ENV: "<<sshEnv[i];
 
@@ -3506,7 +3506,7 @@ void ONMainWindow::slotListSessions ( bool result,QString output,
         }
         else
         {
-            QString printout = tr( "Connection failed: ")  + output.toAscii();
+            QString printout = tr( "Connection failed: ")  + output.toUtf8();
 
             if ( output.indexOf ( "publickey,password" ) !=-1 )
                 x2goErrorf(4)<< tr( "Connection failed: ")  + output + tr(" - Wrong password.");
@@ -6512,7 +6512,7 @@ void ONMainWindow::slotReadApplications(bool result, QString output,
             QString line=lines[i];
             if (line.indexOf("Name["+localshort+"]=")!=-1  || line.indexOf("Name["+locallong+"]=")!=-1)
             {
-                app.name=QString::fromUtf8(line.split("=")[1].toAscii());
+                app.name=QString::fromUtf8(line.split("=")[1].toUtf8());
 
                 //                 x2goDebug<<"local name: "<<app.name<<endl;
 
@@ -6520,7 +6520,7 @@ void ONMainWindow::slotReadApplications(bool result, QString output,
             }
             if (line.indexOf("Comment["+localshort+"]=")!=-1 || line.indexOf("Comment["+locallong+"]=")!=-1)
             {
-                app.comment=QString::fromUtf8(line.split("=")[1].toAscii());
+                app.comment=QString::fromUtf8(line.split("=")[1].toUtf8());
                 //                 x2goDebug<<"local comment: "<<app.comment<<endl;
                 localcomment=true;
             }
@@ -6583,9 +6583,9 @@ void ONMainWindow::slotReadApplications(bool result, QString output,
                 QByteArray pic;
                 while (line.indexOf("</icon>")==-1)
                 {
-                    pic+=QByteArray::fromBase64(line.toAscii());
+                    pic+=QByteArray::fromBase64(line.toUtf8());
                     line=lines[++i];
-                    if (QString(QByteArray::fromBase64(line.toAscii())).indexOf("</svg>",Qt::CaseInsensitive)!=-1)
+                    if (QString(QByteArray::fromBase64(line.toUtf8())).indexOf("</svg>",Qt::CaseInsensitive)!=-1)
                     {
                         isSvg=true;
                     }
@@ -7872,7 +7872,7 @@ void ONMainWindow::slotCopyKey ( bool result, QString output, int pid)
         }
         else
         {
-            QString printout = tr( "Connection failed: ")  + output.toAscii();
+            QString printout = tr( "Connection failed: ")  + output.toUtf8();
 
             if ( output.indexOf ( "publickey,password" ) !=-1 )
                 x2goErrorf(11)<< tr( "Connection failed: ")  + output + tr(" - Wrong password.");
diff --git a/x2goclient-HEAD-9dea920/src/onmainwindow_privat.h b/x2goclient-HEAD-9dea920-rev1/src/onmainwindow_privat.h
index c5f5840..eca0cd5 100644
--- a/x2goclient-HEAD-9dea920/src/onmainwindow_privat.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/onmainwindow_privat.h
@@ -67,10 +67,8 @@
 #include <QCheckBox>
 #include <QTemporaryFile>
 #include <QFileDialog>
-#include <QHttp>
 #include <QUrl>
 #include <QLocalSocket>
-#include <QPlastiqueStyle>
 #include "imgframe.h"
 #include <QToolTip>
 #include "clicklineedit.h"
diff --git a/x2goclient-HEAD-9dea920/src/sessionbutton.cpp b/x2goclient-HEAD-9dea920-rev1/src/sessionbutton.cpp
index 2d51a23..a75efa7 100644
--- a/x2goclient-HEAD-9dea920/src/sessionbutton.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/sessionbutton.cpp
@@ -316,13 +316,13 @@ void SessionButton::redraw()
     sessIcon = expandHome(sessIcon);
     QPixmap* pix;
 
-    x2goDebug << "Creating QPixmap with session icon: " << sessIcon.toAscii () << ".";
+    x2goDebug << "Creating QPixmap with session icon: " << sessIcon.toUtf8() << ".";
     if (!par->brokerMode || sessIcon == ":/img/icons/128x128/x2gosession.png")
         pix=new QPixmap( sessIcon );
     else
     {
         pix=new QPixmap;
-        pix->loadFromData(QByteArray::fromBase64(sessIcon.toAscii()));
+        pix->loadFromData(QByteArray::fromBase64(sessIcon.toUtf8()));
     }
     if ( !par->retMiniMode() )
         icon->setPixmap ( pix->scaled ( 64,64,Qt::IgnoreAspectRatio,
diff --git a/x2goclient-HEAD-9dea920/src/sessionexplorer.cpp b/x2goclient-HEAD-9dea920-rev1/src/sessionexplorer.cpp
index 02c5f7e..92ce661 100644
--- a/x2goclient-HEAD-9dea920/src/sessionexplorer.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/sessionexplorer.cpp
@@ -189,8 +189,8 @@ void SessionExplorer::slotCreateDesktopIcon ( SessionButton* bt )
 
 #ifndef Q_OS_WIN
     QFile file (
-        QDesktopServices::storageLocation (
-            QDesktopServices::DesktopLocation ) +"/"+name+".desktop" );
+        QStandardPaths::writableLocation (
+            QStandardPaths::DesktopLocation ) +"/"+name+".desktop" );
     if ( !file.open ( QIODevice::WriteOnly | QIODevice::Text ) )
         return;
 
diff --git a/x2goclient-HEAD-9dea920/src/sessionmanagedialog.cpp b/x2goclient-HEAD-9dea920-rev1/src/sessionmanagedialog.cpp
index 5ec0331..aa2255b 100644
--- a/x2goclient-HEAD-9dea920/src/sessionmanagedialog.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/sessionmanagedialog.cpp
@@ -35,7 +35,7 @@
 #define SESSIONIDROLE Qt::UserRole+2
 
 SessionManageDialog::SessionManageDialog ( QWidget * parent,
-        bool onlyCreateIcon, Qt::WFlags f )
+        bool onlyCreateIcon, Qt::WindowFlags f )
     : QDialog ( parent, f )
 {
     QVBoxLayout* ml=new QVBoxLayout ( this );
diff --git a/x2goclient-HEAD-9dea920/src/sessionmanagedialog.h b/x2goclient-HEAD-9dea920-rev1/src/sessionmanagedialog.h
index 84f2992..6052c9f 100644
--- a/x2goclient-HEAD-9dea920/src/sessionmanagedialog.h
+++ b/x2goclient-HEAD-9dea920-rev1/src/sessionmanagedialog.h
@@ -35,7 +35,7 @@ class SessionManageDialog : public QDialog
 public:
     SessionManageDialog ( QWidget * parent,
                           bool onlyCreateIcon=false,
-                          Qt::WFlags f=0 );
+                          Qt::WindowFlags f=0 );
     ~SessionManageDialog();
     void loadSessions();
 private:
diff --git a/x2goclient-HEAD-9dea920/src/sshmasterconnection.cpp b/x2goclient-HEAD-9dea920-rev1/src/sshmasterconnection.cpp
index 78d4564..e1ea95b 100644
--- a/x2goclient-HEAD-9dea920/src/sshmasterconnection.cpp
+++ b/x2goclient-HEAD-9dea920-rev1/src/sshmasterconnection.cpp
@@ -327,7 +327,7 @@ void SshMasterConnection::checkReverseTunnelConnections()
                 x2goDebug<<"Connecting to "<<req.localHost<<":"<<req.localPort<<endl;
 #endif
 #ifndef Q_OS_WIN
-                inet_aton ( req.localHost.toAscii(), &address.sin_addr );
+                inet_aton ( req.localHost.toUtf8(), &address.sin_addr );
 #else
                 address.sin_addr.s_addr=inet_addr (
                                             req.localHost.toAscii() );
@@ -634,7 +634,7 @@ void SshMasterConnection::run()
 #ifdef Q_OS_WIN
     ssh_options_set ( my_ssh_session, SSH_OPTIONS_USER, user.toLocal8Bit() );
 #else
-    ssh_options_set ( my_ssh_session, SSH_OPTIONS_USER, user.toAscii() );
+    ssh_options_set ( my_ssh_session, SSH_OPTIONS_USER, user.toUtf8() );
 #endif
 
 #ifdef Q_OS_WIN
@@ -871,7 +871,7 @@ bool SshMasterConnection::userChallengeAuth()
 #ifdef DEBUG
                 x2goDebug<<"Password request"<<endl;
 #endif
-                ssh_userauth_kbdint_setanswer(my_ssh_session,0,pass.toAscii());
+                ssh_userauth_kbdint_setanswer(my_ssh_session,0,pass.toUtf8());
                 return userChallengeAuth();
             }
             if(pr=="Verification code: ")
@@ -903,7 +903,7 @@ bool SshMasterConnection::userChallengeAuth()
                         return false;
                     }
                 }
-                ssh_userauth_kbdint_setanswer(my_ssh_session,0,challengeAuthVerificationCode.toAscii());
+                ssh_userauth_kbdint_setanswer(my_ssh_session,0,challengeAuthVerificationCode.toUtf8());
                 return userChallengeAuth();
             }
             QString err=ssh_get_error ( my_ssh_session );
@@ -965,7 +965,7 @@ bool SshMasterConnection::userAuthWithPass()
 #ifdef DEBUG
         x2goDebug<<"Password authentication requested."<<endl;
 #endif
-        int rc = ssh_userauth_password ( my_ssh_session, NULL, pass.toAscii() );
+        int rc = ssh_userauth_password ( my_ssh_session, NULL, pass.toUtf8() );
         if ( rc != SSH_AUTH_SUCCESS )
         {
             QString err=ssh_get_error ( my_ssh_session );
@@ -1003,7 +1003,7 @@ bool SshMasterConnection::userAuthAuto()
         }
         if(keyPhrase==QString::null)
             break;
-        rc = ssh_userauth_autopubkey ( my_ssh_session, keyPhrase.toAscii() );
+        rc = ssh_userauth_autopubkey ( my_ssh_session, keyPhrase.toUtf8() );
         if(i++==2)
         {
             break;
@@ -1056,7 +1056,7 @@ bool SshMasterConnection::userAuthWithKey()
 #endif
     }
 
-    ssh_private_key prkey=privatekey_from_file(my_ssh_session, keyName.toAscii(), 0,"");
+    ssh_private_key prkey=privatekey_from_file(my_ssh_session, keyName.toUtf8(), 0,"");
     int i=0;
     while(!prkey)
     {
@@ -1075,7 +1075,7 @@ bool SshMasterConnection::userAuthWithKey()
         }
         if(keyPhrase==QString::null)
             break;
-        prkey=privatekey_from_file(my_ssh_session, keyName.toAscii(), 0,keyPhrase.toAscii());
+        prkey=privatekey_from_file(my_ssh_session, keyName.toUtf8(), 0,keyPhrase.toUtf8());
         if(i++==2)
         {
             break;
@@ -1314,7 +1314,7 @@ void SshMasterConnection::copy()
 #ifdef DEBUG
         x2goDebug<<"SSH Master Connection copy - dst path:"<<dstPath<<" file:"<<dstFile<<endl;
 #endif
-        ssh_scp scp=ssh_scp_new ( my_ssh_session, SSH_SCP_WRITE|SSH_SCP_RECURSIVE, dstPath.toAscii() );
+        ssh_scp scp=ssh_scp_new ( my_ssh_session, SSH_SCP_WRITE|SSH_SCP_RECURSIVE, dstPath.toUtf8() );
         if ( scp == NULL )
         {
 #ifdef DEBUG
@@ -1343,7 +1343,7 @@ void SshMasterConnection::copy()
         }
         QByteArray arr=file.readAll();
         file.close();
-        rc=ssh_scp_push_file ( scp,dstFile.toAscii(),arr.size(), 0600 );
+        rc=ssh_scp_push_file ( scp,dstFile.toUtf8(),arr.size(), 0600 );
         if ( rc != SSH_OK )
         {
             QString errMsg=tr ( "Cannot create remote file " ) +copyRequests[i].dst;
@@ -1486,9 +1486,9 @@ void SshMasterConnection::channelLoop()
                     x2goDebug<<"Forwarding new channel, local port: "<<channelConnections.at ( i ).localPort<<endl;
 #endif
                     if ( channel_open_forward ( channel,
-                                                channelConnections.at ( i ).forwardHost.toAscii(),
+                                                channelConnections.at ( i ).forwardHost.toUtf8(),
                                                 channelConnections.at ( i ).forwardPort,
-                                                channelConnections.at ( i ).localHost.toAscii(),
+                                                channelConnections.at ( i ).localHost.toUtf8(),
                                                 channelConnections.at ( i ).localPort ) != SSH_OK )
                     {
                         QString err=ssh_get_error ( my_ssh_session );
@@ -1519,7 +1519,7 @@ void SshMasterConnection::channelLoop()
                         x2goDebug<<errorMsg<<": "<<err<<endl;
 #endif
                     }
-                    else if ( channel_request_exec ( channel, channelConnections[i].command.toAscii() ) != SSH_OK )
+                    else if ( channel_request_exec ( channel, channelConnections[i].command.toUtf8() ) != SSH_OK )
                     {
                         QString err=ssh_get_error ( my_ssh_session );
                         QString errorMsg=tr ( "channel_request_exec failed" );
diff --git a/x2goclient-HEAD-9dea920/x2goclient.pro b/x2goclient-HEAD-9dea920-rev1/x2goclient.pro
index 97e8bdd..699df94 100644
--- a/x2goclient-HEAD-9dea920/x2goclient.pro
+++ b/x2goclient-HEAD-9dea920-rev1/x2goclient.pro
@@ -183,11 +183,13 @@ linux-g++ {
   message("building $$TARGET with ldap and cups")
   LIBS += -lldap -lcups -lX11 -lXpm
   DEFINES += __linux__
+  QT += x11extras
 }
 linux-g++-64 {
   message("building $$TARGET with ldap and cups")
   LIBS += -lldap -lcups -lX11 -lXpm
   DEFINES += __linux__
+  QT += x11extras
 }
 x2go_linux_static {
   message("linking all libs statically")