diff --git a/src/lib/FileDialogs.cpp b/src/lib/FileDialogs.cpp index b681261..677cce9 100644 --- a/src/lib/FileDialogs.cpp +++ b/src/lib/FileDialogs.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include "FileDialogs.h" +#include IFileDialog* KpxFileDialogs::iFileDialog=NULL; QtStandardFileDialogs DefaultQtDlgs; @@ -31,7 +32,7 @@ QString KpxFileDialogs::openExistingFile(QWidget* Parent, const QString& Name, c { if(iFileDialog==NULL)iFileDialog=dynamic_cast(&DefaultQtDlgs); //Load History here! - return iFileDialog->openExistingFileDialog(Parent,Title,QString(),Filters); + return iFileDialog->openExistingFileDialog(Parent,Title,QDir::homePath(),Filters); } diff --git a/src/main.cpp b/src/main.cpp index b24d7d3..be67d33 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,6 +34,7 @@ #include "plugins/interfaces/IFileDialog.h" #include "plugins/interfaces/IKdeInit.h" +#include "plugins/interfaces/IGnomeInit.h" #include "lib/FileDialogs.h" #include "main.h" @@ -124,7 +125,12 @@ int main(int argc, char **argv) if(config.IntegrPlugin==CConfig::KDE){ IKdeInit* kdeinit=qobject_cast(plugin.instance()); app=kdeinit->getMainAppObject(argc,argv); - } + } + if(config.IntegrPlugin==CConfig::GNOME){ + IGnomeInit* ginit=qobject_cast(plugin.instance()); + if(!ginit->init(argc,argv)) + KpxFileDialogs::setPlugin(NULL); + } } } if(!app) QApplication* app=new QApplication(argc,argv); diff --git a/src/plugins/gnome/keepassx-gnome.cpp b/src/plugins/gnome/keepassx-gnome.cpp index 917c73b..5b30280 100644 --- a/src/plugins/gnome/keepassx-gnome.cpp +++ b/src/plugins/gnome/keepassx-gnome.cpp @@ -23,12 +23,17 @@ #define CSTR(x)(x.toUtf8().data()) Q_EXPORT_PLUGIN2(keepassx_gnome, GnomePlugin) + +bool GnomePlugin::init(int argc, char** argv){ + int t_argc=argc; + char** t_argv=argv; + return gtk_init_check(&t_argc,&t_argv); +} QString GnomePlugin::openExistingFileDialog(QWidget* parent,QString title,QString dir,QStringList Filters){ unsigned int NumFilters=Filters.size(); GtkWidget *FileDlg; QString filename; - gtk_init(0,0); FileDlg=gtk_file_chooser_dialog_new(CSTR(title),NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, @@ -68,7 +73,6 @@ GtkFileFilter** GnomePlugin::parseFilterStrings(const QStringList& filters){ for(p;p #include #include "../interfaces/IFileDialog.h" +#include "../interfaces/IGnomeInit.h" - -class GnomePlugin:public QObject,public IFileDialog{ +class GnomePlugin:public QObject,public IFileDialog,public IGnomeInit{ Q_OBJECT Q_INTERFACES(IFileDialog) + Q_INTERFACES(IGnomeInit) public: virtual QString openExistingFileDialog(QWidget* parent,QString title,QString dir, QStringList Filters); @@ -35,6 +36,7 @@ class GnomePlugin:public QObject,public IFileDialog{ QStringList Filters); virtual QString saveFileDialog(QWidget* parent,QString title,QString dir, QStringList Filters,bool ShowOverwriteWarning=true); + virtual bool init(int argc, char** argv); private: GtkFileFilter** parseFilterStrings(const QStringList &Filters); -}; +}; \ No newline at end of file diff --git a/src/plugins/interfaces/IGnomeInit.h b/src/plugins/interfaces/IGnomeInit.h new file mode 100644 index 0000000..a16ea1a --- /dev/null +++ b/src/plugins/interfaces/IGnomeInit.h @@ -0,0 +1,34 @@ +/*************************************************************************** + * Copyright (C) 2005-2006 by Tarek Saidi * + * tarek.saidi@arcor.de * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include +#include +#include + +#ifndef _I_GNOME_INIT_H_ +#define _I_GNOME_INIT_H_ + +class IGnomeInit{ + public: + virtual ~IGnomeInit(){} + virtual bool init(int argc, char** argv)=0; +}; +Q_DECLARE_INTERFACE(IGnomeInit,"org.KeePassX.GnomeInitInterface/1.0") + +#endif diff --git a/src/src.pro b/src/src.pro index eef19bd..c075737 100755 --- a/src/src.pro +++ b/src/src.pro @@ -90,7 +90,9 @@ HEADERS += lib/IniReader.h \ crypto/sha256.h \ crypto/yarrow.h \ lib/WaitAnimationWidget.h \ - plugins/interfaces/IFileDialog.h + plugins/interfaces/IFileDialog.h \ + plugins/interfaces/IKdeInit.h \ + plugins/interfaces/IGnomeInit.h SOURCES += lib/IniReader.cpp \ lib/UrlLabel.cpp \ main.cpp \