[rkward-cvs] [rkward] /: QFileDialog::getExistingDirectory() is also affected by Windows bug.

Thomas Friedrichsmeier thomas.friedrichsmeier at ruhr-uni-bochum.de
Mon Feb 2 20:01:19 UTC 2015


Git commit bb70214974f73ab03b6075a0d7a0da5f02cec44c by Thomas Friedrichsmeier.
Committed on 02/02/2015 at 19:59.
Pushed by tfry into branch 'master'.

QFileDialog::getExistingDirectory() is also affected by Windows bug.
Fix this, by forcing Qt to always use a non-native dialog.
See also: http://www.qtcentre.org/threads/37350-QFileDialog-getExistingDirectory-locks-up-the-application

M  +1    -1    ChangeLog
M  +7    -3    rkward/misc/getfilenamewidget.cpp
M  +11   -2    rkward/settings/rksettingsmoduler.cpp

http://commits.kde.org/rkward/bb70214974f73ab03b6075a0d7a0da5f02cec44c

diff --git a/ChangeLog b/ChangeLog
index 3464850..1f33ced 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,6 @@
 TODO 0.6.3:
-  - dirselectors on Windows
   - talk to kde-18n-doc
+- Fixed: Hang when trying to select existing directories in file selectors on Windows
 - New element <i18n> for use in plugins' logic section: Provides a translatable string property
 - New element <label> for use in plugin help pages: Copies the label-attribute of the given element into the text
 - New string property modifier "quoted" to make it easier to quote dynamic strings inside plugins
diff --git a/rkward/misc/getfilenamewidget.cpp b/rkward/misc/getfilenamewidget.cpp
index efba428..44be15e 100644
--- a/rkward/misc/getfilenamewidget.cpp
+++ b/rkward/misc/getfilenamewidget.cpp
@@ -83,9 +83,13 @@ void GetFileNameWidget::setLocation (const QString &new_location) {
 #ifdef Q_WS_WIN
 void GetFileNameWidget::hackOverrideDirDialog () {
 	RK_TRACE (MISC);
-	QUrl res = QFileDialog::getExistingDirectory (this, edit->windowTitle (), edit->startDir ().toLocalFile ());
-	if (res.isValid ()) {
-		edit->setUrl (res);
+
+	// TODO: Hang on Windows when trying to select any dir using (K|Q)FileDialog::getExistingDirectory (). KDE 4.10
+	QFileDialog dummy (this, edit->windowTitle (), edit->startDir ().toLocalFile ());
+	dummy.setFileMode (QFileDialog::Directory);
+	dummy.setOptions (QFileDialog::ShowDirsOnly);
+	if (dummy.exec ()) {
+		edit->setUrl (dummy.selectedFiles ().value (0));
 		emit (locationChanged ());
 	}
 }
diff --git a/rkward/settings/rksettingsmoduler.cpp b/rkward/settings/rksettingsmoduler.cpp
index 729fa0d..af9b75e 100644
--- a/rkward/settings/rksettingsmoduler.cpp
+++ b/rkward/settings/rksettingsmoduler.cpp
@@ -31,6 +31,9 @@
 #include <QGridLayout>
 #include <QPushButton>
 #include <QTextEdit>
+#ifdef Q_WS_WIN
+#	include <QFileDialog>
+#endif
 
 #include "rksettingsmodulegeneral.h"
 #include "../core/robject.h"
@@ -417,8 +420,14 @@ void RKSettingsModuleRPackages::settingChanged () {
 void RKSettingsModuleRPackages::addLibLoc (QStringList *string_list) {
 	RK_TRACE (SETTINGS);
 #ifdef Q_WS_WIN
-	// TODO: Hang on Windows when trying to select any dir using KFileDialog::getExistingDirectory (). KDE 4.10
-	QString new_string = QFileDialog::getExistingDirectory (this, i18n ("Add R Library Directory"));
+	// TODO: Hang on Windows when trying to select any dir using (K|Q)FileDialog::getExistingDirectory (). KDE 4.10
+	QFileDialog dummy (this, i18n ("Add R Library Directory"));
+	dummy.setFileMode (QFileDialog::Directory);
+	dummy.setOptions (QFileDialog::ShowDirsOnly);
+	QString new_string;
+	if (dummy.exec ()) {
+		new_string = dummy.selectedFiles ().value (0);
+	}
 #else
 	QString new_string = KFileDialog::getExistingDirectory (KUrl (), this, i18n ("Add R Library Directory"));
 #endif


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
rkward-cvs mailing list
rkward-cvs at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rkward-cvs


More information about the rkward-tracker mailing list