diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2014-10-27 14:32:19 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@digia.com> | 2014-10-29 21:11:37 +0100 |
commit | 67609e43e19338be9bd57217ca7e0a08be319fc1 (patch) | |
tree | 773afee6efa2f54734ca72fe2f3c47d36ef6c2df /src/dialogs | |
parent | ed4d0a3dea2d769ec1b2febd59deae4d231ea104 (diff) | |
download | qtquickcontrols-67609e43e19338be9bd57217ca7e0a08be319fc1.tar.gz |
FileDialog: several logic corrections in handling the enter key
A "save as" dialog does not need to validate existence of the file.
When the user presses enter in the text field at the top, and the
text field contains a path to a directory, it usually means enter
the directory; but if the dialog is for choosing a directory, then
pressing enter will mean enter the directory if the dialog is not already
viewing that one, or else accept the current directory as the choice if
the table view does not have focus on some other row.
When the user presses enter in table view, go down into a directory
only if a directory is selected; otherwise accept the current selection.
When the user clicks a row in the table, copy the path of that row
into the text field so that it is possible to edit the path before
pressing Enter or OK (behavior similar to a native dialog that has
an editable path, such as GTK).
Task-number: QTBUG-39435
Change-Id: Ibd5e988624c5b1072a12239d681cbdc812e0a697
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'src/dialogs')
-rw-r--r-- | src/dialogs/DefaultFileDialog.qml | 10 | ||||
-rw-r--r-- | src/dialogs/qquickfiledialog.cpp | 17 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/dialogs/DefaultFileDialog.qml b/src/dialogs/DefaultFileDialog.qml index 99623d62..7cd87bc9 100644 --- a/src/dialogs/DefaultFileDialog.qml +++ b/src/dialogs/DefaultFileDialog.qml @@ -316,13 +316,14 @@ AbstractFileDialog { sortReversed: view.sortIndicatorOrder === Qt.DescendingOrder } - onActivated: { - if (view.model.isFolder(row)) { + onActivated: if (view.focus) { + if (view.selection.count > 0 && view.model.isFolder(row)) { dirDown(view.model.get(row, "filePath")) } else { root.acceptSelection() } } + onClicked: currentPathField.text = view.model.get(row, "filePath") TableViewColumn { @@ -398,13 +399,14 @@ AbstractFileDialog { TextField { id: currentPathField Layout.fillWidth: true - onAccepted: { + function doAccept() { root.clearSelection() if (root.addSelection(root.pathToUrl(text))) root.accept() else root.folder = root.pathFolder(text) } + onAccepted: doAccept() } } } @@ -454,6 +456,8 @@ AbstractFileDialog { onClicked: { if (view.model.isFolder(view.currentIndex) && !selectFolder) dirDown(view.model.get(view.currentIndex, "filePath")) + else if (!(root.selectExisting)) + currentPathField.doAccept() else root.acceptSelection() } diff --git a/src/dialogs/qquickfiledialog.cpp b/src/dialogs/qquickfiledialog.cpp index 576778e1..8a7c3e5f 100644 --- a/src/dialogs/qquickfiledialog.cpp +++ b/src/dialogs/qquickfiledialog.cpp @@ -176,14 +176,15 @@ void QQuickFileDialog::clearSelection() bool QQuickFileDialog::addSelection(const QUrl &path) { QFileInfo info(path.toLocalFile()); - if (info.exists() && ((info.isDir() && m_selectFolder) || !info.isDir())) { - if (m_selectFolder) - m_selections.append(pathFolder(path.toLocalFile())); - else - m_selections.append(path); - return true; - } - return false; + if (selectExisting() && !info.exists()) + return false; + if (selectFolder() != info.isDir()) + return false; + if (selectFolder()) + m_selections.append(pathFolder(path.toLocalFile())); + else + m_selections.append(path); + return true; } /*! |