summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2014-10-27 14:32:19 +0100
committerShawn Rutledge <shawn.rutledge@digia.com>2014-10-29 21:11:37 +0100
commit67609e43e19338be9bd57217ca7e0a08be319fc1 (patch)
tree773afee6efa2f54734ca72fe2f3c47d36ef6c2df
parented4d0a3dea2d769ec1b2febd59deae4d231ea104 (diff)
downloadqtquickcontrols-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>
-rw-r--r--src/dialogs/DefaultFileDialog.qml10
-rw-r--r--src/dialogs/qquickfiledialog.cpp17
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;
}
/*!