Index: plugins/qt-gui/src/filedlg.cpp
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/filedlg.cpp,v
retrieving revision 1.52
diff -u -d -p -r1.52 filedlg.cpp
--- plugins/qt-gui/src/filedlg.cpp	5 Feb 2003 21:26:52 -0000	1.52
+++ plugins/qt-gui/src/filedlg.cpp	4 Mar 2003 05:30:46 -0000
@@ -43,12 +43,14 @@
 #include "mledit.h"
 #include "licq_icqd.h"
 #include "usercodec.h"
-
+#include "mainwin.h"
 
 //-----Constructor------------------------------------------------------------
-CFileDlg::CFileDlg(unsigned long _nUin, CICQDaemon *daemon, QWidget* parent)
+CFileDlg::CFileDlg(unsigned long _nUin, CICQDaemon *daemon,
+                   CMainWindow *_mainwin, QWidget* parent)
   : QWidget(parent, "FileDialog", WDestructiveClose)
 {
+  mainwin = _mainwin;
   // If we are the server, then we are receiving a file
   m_nUin = _nUin;
   licqDaemon = daemon;
@@ -193,18 +195,36 @@ void CFileDlg::slot_update()
 }
 
 
+static bool isAutoAcceptUser( unsigned long nUin )
+{ bool bRet;
 
+  ICQUser *u = gUserManager.FetchUser(nUin, LOCK_R);
+  bRet = u->AutoFileAccept();
+  gUserManager.DropUser(u);
+
+  return bRet;
+}
 
 //-----ReceiveFiles----------------------------------------------------------
 bool CFileDlg::ReceiveFiles()
 {
-  // Get the local directory to save to
   QString d;
+  bool bAutoAccept=false;
+
+  bAutoAccept = (mainwin->m_bAlwaysFileLocation || isAutoAcceptUser(m_nUin)) && 
+                !mainwin->m_FileLocation.isEmpty() && 
+                access(mainwin->m_FileLocation.ascii(),W_OK)==0; 
+
+  if( bAutoAccept )
+    d = mainwin->m_FileLocation;
+  else
+  {
 #ifdef USE_KDE
-  d = KFileDialog::getExistingDirectory(QString(QDir::homeDirPath()), this);
+    d = KFileDialog::getExistingDirectory(QString(QDir::homeDirPath()), this);
 #else
-  d = QFileDialog::getExistingDirectory(QString(QDir::homeDirPath()), this);
+    d = QFileDialog::getExistingDirectory(QString(QDir::homeDirPath()), this);
 #endif
+  }
   if (d.isNull()) return false;
 
   // Cut trailing slash
Index: plugins/qt-gui/src/filedlg.h
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/filedlg.h,v
retrieving revision 1.12
diff -u -d -p -r1.12 filedlg.h
--- plugins/qt-gui/src/filedlg.h	21 Jan 2003 02:00:36 -0000	1.12
+++ plugins/qt-gui/src/filedlg.h	4 Mar 2003 05:30:46 -0000
@@ -6,6 +6,7 @@
 
 #include "ewidgets.h"
 #include "licq_filetransfer.h"
+#include "mainwin.h"
 
 class QPushButton;
 class QProgressBar;
@@ -19,7 +20,8 @@ class CFileDlg : public QWidget
 {
    Q_OBJECT
 public:
-  CFileDlg(unsigned long _nUin, CICQDaemon *daemon, QWidget* parent = 0);
+  CFileDlg(unsigned long _nUin, CICQDaemon *daemon, CMainWindow *_mainwin,
+          QWidget* parent = 0);
   virtual ~CFileDlg();
 
   bool SendFiles(ConstFileList filelist, unsigned short nPort);
@@ -29,6 +31,7 @@ public:
   unsigned long Uin()  { return m_nUin; };
 
 protected:
+   CMainWindow *mainwin;
    QLabel *lblTransferFileName, *lblLocalFileName, *lblFileSize,
 	  *lblTrans, *lblBatch, *lblTime, *lblBPS, *lblETA;
    CInfoField *nfoFileSize,
Index: plugins/qt-gui/src/mainwin.cpp
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/mainwin.cpp,v
retrieving revision 1.271
diff -u -d -p -r1.271 mainwin.cpp
--- plugins/qt-gui/src/mainwin.cpp	24 Feb 2003 01:02:16 -0000	1.271
+++ plugins/qt-gui/src/mainwin.cpp	4 Mar 2003 05:30:48 -0000
@@ -386,6 +386,11 @@ CMainWindow::CMainWindow(CICQDaemon *the
   licqConf.ReadNum("AutoAwayMess", autoAwayMess, 0);
   licqConf.ReadNum("AutoNAMess", autoNAMess, 0);
 
+  licqConf.SetSection("files");
+  licqConf.ReadStr("FileLocation",szTemp,"");
+  m_FileLocation = szTemp;
+  licqConf.ReadBool("AlwaysFileLocation", m_bAlwaysFileLocation,false);
+
   licqConf.SetSection("functions");
   licqConf.ReadBool("AutoClose", m_bAutoClose, true);
   licqConf.ReadBool("AutoPopup", m_bAutoPopup, false);
@@ -2545,6 +2550,10 @@ void CMainWindow::saveOptions()
   licqConf.WriteBool("AutoClose", m_bAutoClose);
   licqConf.WriteBool("AutoPopup", m_bAutoPopup);
   licqConf.WriteStr("MsgPopupKey", m_MsgAutopopupKey.isEmpty() ? "none" : m_MsgAutopopupKey.latin1());
+
+  licqConf.SetSection("files");
+  licqConf.WriteStr("FileLocation", m_FileLocation);
+  licqConf.WriteBool("AlwaysFileLocation", m_bAlwaysFileLocation);
 
   licqConf.SetSection("appearance");
   licqConf.WriteStr("Skin", skin->szSkinName);
Index: plugins/qt-gui/src/mainwin.h
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/mainwin.h,v
retrieving revision 1.99
diff -u -d -p -r1.99 mainwin.h
--- plugins/qt-gui/src/mainwin.h	24 Feb 2003 01:02:16 -0000	1.99
+++ plugins/qt-gui/src/mainwin.h	4 Mar 2003 05:30:48 -0000
@@ -123,6 +123,8 @@ public:
 
   QString m_MsgAutopopupKey;
   QString m_DefaultEncoding;
+  QString m_FileLocation;
+  bool m_bAlwaysFileLocation;
 
   ColumnInfos colInfo;
   FlashType m_nFlash;
Index: plugins/qt-gui/src/optionsdlg.cpp
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/optionsdlg.cpp,v
retrieving revision 1.129
diff -u -d -p -r1.129 optionsdlg.cpp
--- plugins/qt-gui/src/optionsdlg.cpp	7 Jan 2003 05:20:37 -0000	1.129
+++ plugins/qt-gui/src/optionsdlg.cpp	4 Mar 2003 05:30:49 -0000
@@ -39,9 +39,11 @@
 #include <kapp.h>
 #include <kfontdialog.h>
 #include <kurlrequester.h>
+#include <kfiledialog.h>
 #else
 #include <qapplication.h>
 #include <qfontdialog.h>
+#include <qfiledialog.h>
 #endif
 
 #include "optionsdlg.h"
@@ -321,11 +323,15 @@ void OptionsDlg::SetupOptions()
   chkIgnoreWebPanel->setChecked(mainwin->licqDaemon->Ignore(IGNORE_WEBPANEL));
   chkIgnoreEmailPager->setChecked(mainwin->licqDaemon->Ignore(IGNORE_EMAILPAGER));
 
+  
   // plugins tab
   edtUrlViewer->setText(mainwin->licqDaemon->getUrlViewer() == NULL ?
                         tr("none") : QString(mainwin->licqDaemon->getUrlViewer()));
   edtTerminal->setText(mainwin->licqDaemon->Terminal() == NULL ?
                        tr("none") : QString(mainwin->licqDaemon->Terminal()));
+
+  edtFileLocation->setText(mainwin->m_FileLocation);
+  chkAlwaysFileLocation->setChecked(mainwin->m_bAlwaysFileLocation);
   
   cmbDefaultEncoding->setCurrentItem(0);
   // first combo box item is the locale encoding, so we skip it
@@ -548,6 +554,9 @@ void OptionsDlg::ApplyOptions()
   mainwin->autoAwayMess = cmbAutoAwayMess->currentItem();
   mainwin->autoNAMess = cmbAutoNAMess->currentItem();
 
+  mainwin->m_FileLocation = edtFileLocation->text();
+  mainwin->m_bAlwaysFileLocation = chkAlwaysFileLocation->isChecked();
+  
   // set up the columns stuff
   unsigned short i, j = mainwin->colInfo.size();
   for (i = 0; i < j; i++) delete mainwin->colInfo[i];  // erase the old array
@@ -1305,12 +1314,38 @@ QWidget* OptionsDlg::new_misc_options()
 
   buildAutoStatusCombos(1);
 
+  // Incoming File Location
+  boxFileLocation = new QGroupBox(3, Horizontal,tr("Incoming File Location"),w);
+  lblFileLocation = new QLabel(tr("Location:"), boxFileLocation);
+  edtFileLocation = new QLineEdit(boxFileLocation);
+  btnFileLocation = new QPushButton("...", boxFileLocation);
+  btnFileLocation->setFixedWidth(20);
+  connect (btnFileLocation, SIGNAL(clicked()), this, SLOT(slot_fileLocation()));
+  chkAlwaysFileLocation = new QCheckBox(tr("Always use incoming path"),
+                                        boxFileLocation);
+  QWhatsThis::add(lblFileLocation,tr("Default path for incoming files"));
+  QWhatsThis::add(edtFileLocation,tr("Default path for incoming files"));
+  QWhatsThis::add(chkAlwaysFileLocation,tr("Determines if we use the incoming"
+                      "file location setting for all the incoming transfers?"));
+  lay->addWidget(boxFileLocation);
   lay->addStretch(1);
   lay->activate();
 
   return w;
 }
 
+
+void OptionsDlg::slot_fileLocation()
+{
+  QString d;
+  #ifdef USE_KDE
+    d = KFileDialog::getExistingDirectory(QString(QDir::homeDirPath()), this);
+  #else
+    d = QFileDialog::getExistingDirectory(QString(QDir::homeDirPath()),this);
+  #endif
+  if ( !d.isEmpty() )
+    edtFileLocation->setText( d );
+}
 
 // -----------------------------------------------------------------------------
 QWidget* OptionsDlg::new_phone_options()
Index: plugins/qt-gui/src/optionsdlg.h
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/optionsdlg.h,v
retrieving revision 1.60
diff -u -d -p -r1.60 optionsdlg.h
--- plugins/qt-gui/src/optionsdlg.h	7 Jan 2003 08:00:53 -0000	1.60
+++ plugins/qt-gui/src/optionsdlg.h	4 Mar 2003 05:30:49 -0000
@@ -99,7 +99,7 @@ protected:
 
    // misc tab
    QWidget* new_misc_options();
-   QGroupBox *boxParanoia, *boxExtensions;
+   QGroupBox *boxParanoia, *boxExtensions,*boxFileLocation;
    QLabel *lblUrlViewer, *lblDefaultEncoding;
    QLineEdit *edtUrlViewer;
    QComboBox *cmbDefaultEncoding;
@@ -107,6 +107,10 @@ protected:
    QLineEdit *edtTerminal;
    QCheckBox *chkWebPresence, *chkHideIp, *chkIgnoreNewUsers,
              *chkIgnoreWebPanel, *chkIgnoreMassMsg, *chkIgnoreEmailPager, *chkShowAllEncodings;
+   QLineEdit *edtFileLocation;
+   QLabel *lblFileLocation;
+   QPushButton *btnFileLocation;
+   QCheckBox *chkAlwaysFileLocation;
 
    // status tab
    QWidget* new_status_options();
@@ -146,6 +150,7 @@ protected slots:
   void slot_useFirewall(bool);
   void slot_usePortRange(bool b);
   void slot_ok();
+  void slot_fileLocation();
 };
 
 
Index: plugins/qt-gui/src/usereventdlg.cpp
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/usereventdlg.cpp,v
retrieving revision 1.103
diff -u -d -p -r1.103 usereventdlg.cpp
--- plugins/qt-gui/src/usereventdlg.cpp	25 Feb 2003 08:38:51 -0000	1.103
+++ plugins/qt-gui/src/usereventdlg.cpp	4 Mar 2003 05:30:51 -0000
@@ -761,7 +761,7 @@ void UserViewEvent::slot_btnRead2()
       btnRead2->setEnabled(false);
       btnRead3->setEnabled(false);
       CEventFile *f = (CEventFile *)m_xCurrentReadEvent;
-      CFileDlg *fileDlg = new CFileDlg(m_nUin, server);
+      CFileDlg *fileDlg = new CFileDlg(m_nUin, server, mainwin);
       if (fileDlg->ReceiveFiles())
         server->icqFileTransferAccept(m_nUin, fileDlg->LocalPort(), f->Sequence(), f->MessageID(), f->IsDirect());
       break;
@@ -1878,7 +1878,7 @@ bool UserSendFileEvent::sendDone(ICQEven
   else
   {
     CEventFile *f = (CEventFile *)e->UserEvent();
-    CFileDlg *fileDlg = new CFileDlg(m_nUin, server);
+    CFileDlg *fileDlg = new CFileDlg(m_nUin, server, mainwin);
     fileDlg->SendFiles(f->FileList(), e->ExtendedAck()->Port());
   }
 

