Fix very obscure bug that corrupted the input of non-ascii characters.
This is caused by calling QFileInfo::canonicalFilePath() before creating the QApplication object. So now the first thing we do is creating the QApplication object. This breaks the kde plugin, which we are not using anyway. git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@275 b624d157-de02-0410-bad0-e51aec6abb33
This commit is contained in:
		
							parent
							
								
									d569b51e6c
								
							
						
					
					
						commit
						e531a8a7ff
					
				| 
						 | 
					@ -131,13 +131,13 @@ set(keepassx_TRANSLATIONS
 | 
				
			||||||
	translations/keepassx-tr_TR.ts
 | 
						translations/keepassx-tr_TR.ts
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IF( MINGW )
 | 
					#IF( MINGW )
 | 
				
			||||||
	SET(keepassx_SOURCES ${keepassx_SOURCES} main_win32.cpp)
 | 
					#	SET(keepassx_SOURCES ${keepassx_SOURCES} main_win32.cpp)
 | 
				
			||||||
ELSEIF( APPLE )
 | 
					#ELSEIF( APPLE )
 | 
				
			||||||
	SET(keepassx_SOURCES ${keepassx_SOURCES} main_macx.cpp)
 | 
					#	SET(keepassx_SOURCES ${keepassx_SOURCES} main_macx.cpp)
 | 
				
			||||||
ELSE( MINGW )
 | 
					#ELSE( MINGW )
 | 
				
			||||||
	SET(keepassx_SOURCES ${keepassx_SOURCES} main_unix.cpp)
 | 
					#	SET(keepassx_SOURCES ${keepassx_SOURCES} main_unix.cpp)
 | 
				
			||||||
ENDIF( MINGW )
 | 
					#ENDIF( MINGW )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IF( AUTOTYPE )
 | 
					IF( AUTOTYPE )
 | 
				
			||||||
	SET(keepassx_HEADERS ${keepassx_HEADERS}
 | 
						SET(keepassx_HEADERS ${keepassx_HEADERS}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										81
									
								
								src/main.cpp
								
								
								
								
							
							
						
						
									
										81
									
								
								src/main.cpp
								
								
								
								
							| 
						 | 
					@ -48,14 +48,42 @@ IIconTheme* IconLoader=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char **argv)
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	QApplication* app=NULL;
 | 
					#if defined(Q_WS_X11) && defined(GLOBAL_AUTOTYPE)
 | 
				
			||||||
	initAppPaths(argc,argv);
 | 
						QApplication* app = new KeepassApplication(argc,argv);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						QApplication* app = new QApplication(argc,argv);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						AppDir = QApplication::applicationFilePath();
 | 
				
			||||||
 | 
						AppDir.truncate(AppDir.lastIndexOf("/"));
 | 
				
			||||||
 | 
					#if defined(Q_WS_X11)
 | 
				
			||||||
 | 
						DataDir=AppDir+"/../share/keepassx";
 | 
				
			||||||
 | 
						if (!QFile::exists(DataDir) && QFile::exists(AppDir+"/share"))
 | 
				
			||||||
 | 
							DataDir=AppDir+"/share";
 | 
				
			||||||
 | 
						HomeDir = QDir::homePath()+"/.keepassx";
 | 
				
			||||||
 | 
					#elif defined(Q_WS_MAC)
 | 
				
			||||||
 | 
						HomeDir = QDir::homePath()+"/.keepassx";
 | 
				
			||||||
 | 
						DataDir=AppDir+"/../Resources/keepassx";	
 | 
				
			||||||
 | 
					#else //Q_WS_WIN
 | 
				
			||||||
 | 
						HomeDir = QString::fromLocal8Bit(qgetenv("APPDATA").constData());
 | 
				
			||||||
 | 
						if(!HomeDir.isEmpty() && QFile::exists(HomeDir))
 | 
				
			||||||
 | 
							HomeDir = QDir::fromNativeSeparators(HomeDir)+"/KeePassX";
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							HomeDir = QDir::homePath()+"/KeePassX";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						DataDir=AppDir+"/share";
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	CmdLineArgs args;
 | 
						CmdLineArgs args;
 | 
				
			||||||
	if(!args.preparse(argc,argv)){ // searches only for the -cfg parameter
 | 
						if ( !args.parse(QApplication::arguments()) ){
 | 
				
			||||||
		qCritical("%s\n", CSTR( args.error() ));
 | 
							qCritical("%s\n", CSTR( args.error() ));
 | 
				
			||||||
		args.printHelp();
 | 
							args.printHelp();
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (args.help()){
 | 
				
			||||||
 | 
							args.printHelp();
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//Load Config
 | 
						//Load Config
 | 
				
			||||||
	QString IniFilename;
 | 
						QString IniFilename;
 | 
				
			||||||
| 
						 | 
					@ -120,22 +148,6 @@ int main(int argc, char **argv)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
	if(!app){
 | 
					 | 
				
			||||||
		#if defined(Q_WS_X11) && defined(GLOBAL_AUTOTYPE)
 | 
					 | 
				
			||||||
			app = new KeepassApplication(argc,argv);
 | 
					 | 
				
			||||||
		#else
 | 
					 | 
				
			||||||
			app = new QApplication(argc,argv);
 | 
					 | 
				
			||||||
		#endif	
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if ( !args.parse(QApplication::arguments()) ){
 | 
					 | 
				
			||||||
		qCritical("%s\n", CSTR( args.error() ));
 | 
					 | 
				
			||||||
		args.printHelp();
 | 
					 | 
				
			||||||
		return 1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (args.help()){
 | 
					 | 
				
			||||||
		args.printHelp();
 | 
					 | 
				
			||||||
		return 1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	DetailViewTemplate=config->detailViewTemplate();
 | 
						DetailViewTemplate=config->detailViewTemplate();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -190,7 +202,16 @@ bool CmdLineArgs::parse(const QStringList& argv){
 | 
				
			||||||
			break; // break, because other arguments will be ignored anyway
 | 
								break; // break, because other arguments will be ignored anyway
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(argv[i]=="-cfg"){
 | 
							if(argv[i]=="-cfg"){
 | 
				
			||||||
			//already done in preparse() -> skip
 | 
								if(argv.size() == i+1){
 | 
				
			||||||
 | 
									Error="Missing argument for '-cfg'.";
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if(argv[i+1].left(1)=="-"){
 | 
				
			||||||
 | 
									Error=QString("Expected a path as argument for '-cfg' but got '%1.'").arg(argv[i+1]);
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								QFileInfo file(argv[i+1]);
 | 
				
			||||||
 | 
								ConfigLocation=file.absoluteFilePath();
 | 
				
			||||||
			i++;
 | 
								i++;
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -212,26 +233,6 @@ bool CmdLineArgs::parse(const QStringList& argv){
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CmdLineArgs::preparse(int argc,char** argv){
 | 
					 | 
				
			||||||
	for(int i=1;i<argc;i++){
 | 
					 | 
				
			||||||
		if(QString(argv[i])=="-cfg"){
 | 
					 | 
				
			||||||
			if(argc==i+1){
 | 
					 | 
				
			||||||
				Error="Missing argument for '-cfg'.";
 | 
					 | 
				
			||||||
				return false;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			if(QString(argv[i+1]).left(1)=="-"){
 | 
					 | 
				
			||||||
				Error=QString("Expected a path as argument for '-cfg' but got '%1.'").arg(argv[i+1]);
 | 
					 | 
				
			||||||
				return false;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			QFileInfo file(argv[i+1]);
 | 
					 | 
				
			||||||
			ConfigLocation=file.absoluteFilePath();
 | 
					 | 
				
			||||||
			i++;
 | 
					 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void CmdLineArgs::printHelp(){
 | 
					void CmdLineArgs::printHelp(){
 | 
				
			||||||
	cerr << "KeePassX " << APP_VERSION << endl;
 | 
						cerr << "KeePassX " << APP_VERSION << endl;
 | 
				
			||||||
	cerr << "Usage: keepassx [filename] [options]" << endl;
 | 
						cerr << "Usage: keepassx [filename] [options]" << endl;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ unix : !macx : !isEqual(QMAKE_WIN32,1){
 | 
				
			||||||
		SOURCES += Application_X11.cpp lib/AutoTypeGlobalX11.cpp
 | 
							SOURCES += Application_X11.cpp lib/AutoTypeGlobalX11.cpp
 | 
				
			||||||
		HEADERS += Application_X11.h lib/AutoTypeGlobalX11.h
 | 
							HEADERS += Application_X11.h lib/AutoTypeGlobalX11.h
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	SOURCES += main_unix.cpp
 | 
					#	SOURCES += main_unix.cpp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ macx {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	isEqual(ARCH,INTEL): CONFIG += x86
 | 
						isEqual(ARCH,INTEL): CONFIG += x86
 | 
				
			||||||
	isEqual(ARCH,PPC): CONFIG += ppc
 | 
						isEqual(ARCH,PPC): CONFIG += ppc
 | 
				
			||||||
	SOURCES += main_macx.cpp
 | 
					#	SOURCES += main_macx.cpp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#-------------------------------------------------------------------------------
 | 
					#-------------------------------------------------------------------------------
 | 
				
			||||||
| 
						 | 
					@ -110,7 +110,7 @@ isEqual(QMAKE_WIN32,1){
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	RC_FILE = ../share/win_ico/keepassx.rc
 | 
						RC_FILE = ../share/win_ico/keepassx.rc
 | 
				
			||||||
	QMAKE_LINK_OBJECT_SCRIPT = $${OBJECTS_DIR}/$${QMAKE_LINK_OBJECT_SCRIPT}
 | 
						QMAKE_LINK_OBJECT_SCRIPT = $${OBJECTS_DIR}/$${QMAKE_LINK_OBJECT_SCRIPT}
 | 
				
			||||||
	SOURCES += main_win32.cpp
 | 
					#	SOURCES += main_win32.cpp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue