aboutsummaryrefslogtreecommitdiff
path: root/libs/uibase
diff options
context:
space:
mode:
Diffstat (limited to 'libs/uibase')
-rw-r--r--libs/uibase/include/uibase/filterwidget.h6
-rw-r--r--libs/uibase/src/utility.cpp18
2 files changed, 20 insertions, 4 deletions
diff --git a/libs/uibase/include/uibase/filterwidget.h b/libs/uibase/include/uibase/filterwidget.h
index b6f09cd..eb1d00f 100644
--- a/libs/uibase/include/uibase/filterwidget.h
+++ b/libs/uibase/include/uibase/filterwidget.h
@@ -24,10 +24,12 @@ class QDLLEXPORT FilterWidgetProxyModel : public QSortFilterProxyModel
public:
FilterWidgetProxyModel(FilterWidget& fw, QWidget* parent = nullptr);
void refreshFilter() {
-#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0)
+#if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0)
beginFilterChange();
-#endif
+ endFilterChange(QSortFilterProxyModel::Direction::Rows);
+#else
invalidateFilter();
+#endif
}
protected:
diff --git a/libs/uibase/src/utility.cpp b/libs/uibase/src/utility.cpp
index 0ad64ad..e6f53b8 100644
--- a/libs/uibase/src/utility.cpp
+++ b/libs/uibase/src/utility.cpp
@@ -64,7 +64,17 @@ bool removeDir(const QString& dirName)
dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden |
QDir::AllDirs | QDir::Files,
QDir::DirsFirst)) {
- if (info.isDir()) {
+ // Never recurse into symlinked directories: in Flatpak they can point to
+ // read-only runtime locations (e.g. /app), and we only want to remove the link.
+ if (info.isSymLink()) {
+ QFile file(info.absoluteFilePath());
+ if (!file.remove()) {
+ reportError(QObject::tr("removal of \"%1\" failed: %2")
+ .arg(info.absoluteFilePath())
+ .arg(file.errorString()));
+ return false;
+ }
+ } else if (info.isDir()) {
if (!removeDir(info.absoluteFilePath())) {
return false;
}
@@ -209,7 +219,11 @@ static bool shellOpDelete(const QStringList& fileNames, bool recycle)
// On Linux, "recycle" moves to trash using Qt; otherwise just delete
for (const auto& fileName : fileNames) {
QFileInfo fi(fileName);
- if (fi.isDir()) {
+ if (fi.isSymLink()) {
+ if (!QFile::remove(fileName)) {
+ return false;
+ }
+ } else if (fi.isDir()) {
if (!removeDir(fileName)) {
return false;
}