From c8ff908d9e929d1099cec67c4b5a2330a9b57023 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sat, 1 Oct 2016 22:22:03 +0900 Subject: [PATCH] Fixed two issues with KFileDialog: - if the user types a new path manually, the new location was not used. Instead the older path was taken. In case the typed path does not exists, an error message is displayed - if the user selected a path from the autocompletion lists using the mouse, the new selected location was not used when slotOK was invoked. This resolves bug 2654. Signed-off-by: Michele Calgaro (cherry picked from commit 53e36f6db011540746db8f91cf717ab1d8d912b4) --- tdeio/tdefile/tdefiledialog.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tdeio/tdefile/tdefiledialog.cpp b/tdeio/tdefile/tdefiledialog.cpp index a004ae177..24d9f8e06 100644 --- a/tdeio/tdefile/tdefiledialog.cpp +++ b/tdeio/tdefile/tdefiledialog.cpp @@ -334,6 +334,20 @@ void KFileDialog::slotOk() { kdDebug(tdefile_area) << "slotOK\n"; + // If the user typed in the path field without confirming it with ENTER, + // "ops" will most likely point do a different folder. Make sure the folder exists, + // then update "ops" accordingly and only if necessary + TQDir savedir = TQDir(d->pathCombo->lineEdit()->text()); + if (!savedir.exists()) + { + KMessageBox::information(this, i18n("The selected folder does not exists. Please select an existing one.")); + return; + } + if (ops->url().path(1) != KURL(savedir.absPath()).path(1)) + { + setURL(savedir.absPath()); + } + // a list of all selected files/directories (if any) // can only be used if the user didn't type any filenames/urls himself const KFileItemList *items = ops->selectedItems(); @@ -981,9 +995,11 @@ void KFileDialog::init(const TQString& startDir, const TQString& filter, TQWidge d->pathCombo->setCompletionObject( pathCompletionObj ); d->pathCombo->setAutoDeleteCompletionObject( true ); - connect( d->pathCombo, TQT_SIGNAL( urlActivated( const KURL& )), + connect( d->pathCombo, TQT_SIGNAL( urlActivated( const KURL& )), this, TQT_SLOT( enterURL( const KURL& ) )); - connect( d->pathCombo, TQT_SIGNAL( returnPressed( const TQString& )), + connect( d->pathCombo, TQT_SIGNAL( returnPressed( const TQString& )), + this, TQT_SLOT( enterURL( const TQString& ) )); + connect( d->pathCombo, TQT_SIGNAL( activated( const TQString& )), this, TQT_SLOT( enterURL( const TQString& ) )); TQString whatsThisText;