diff options
Diffstat (limited to 'x11-libs/libfm-qt/files')
3 files changed, 0 insertions, 404 deletions
diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch deleted file mode 100644 index 92b45be4..00000000 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-check-if-app-exists-before-opening.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 4923f860094787d14052e9dc416c9388ff1bb53b Mon Sep 17 00:00:00 2001 -From: Tsu Jan <tsujan2000@gmail.com> -Date: Thu, 7 Jun 2018 06:10:37 +0430 -Subject: [PATCH] Check if the opening app exists before using it - -Also, show an error message if there's no app. ---- - src/core/basicfilelauncher.cpp | 17 ++++++++++++----- - 1 file changed, 12 insertions(+), 5 deletions(-) - -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp -index 8390531..2c7f00e 100644 ---- a/src/core/basicfilelauncher.cpp -+++ b/src/core/basicfilelauncher.cpp -@@ -256,18 +256,25 @@ FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaun - || strcmp(scheme.get(), "trash") == 0 - || strcmp(scheme.get(), "network") == 0 - || strcmp(scheme.get(), "computer") == 0) { -- return FilePath::fromUri(fileInfo->target().c_str()); -+ return FilePath::fromUri(target.c_str()); - } - else { - // ask gio to launch the default handler for the uri scheme -- GAppInfoPtr app{g_app_info_get_default_for_uri_scheme(scheme.get()), false}; -- FilePathList uris{FilePath::fromUri(fileInfo->target().c_str())}; -- launchWithApp(app.get(), uris, ctx); -+ if(GAppInfoPtr app{g_app_info_get_default_for_uri_scheme(scheme.get()), false}) { -+ FilePathList uris{FilePath::fromUri(target.c_str())}; -+ launchWithApp(app.get(), uris, ctx); -+ } -+ else { -+ GErrorPtr err{G_IO_ERROR, G_IO_ERROR_FAILED, -+ QObject::tr("No default application is set to launch '%1'") -+ .arg(target.c_str())}; -+ showError(nullptr, err); -+ } - } - } - else { - // see it as a local path -- return FilePath::fromLocalPath(fileInfo->target().c_str()); -+ return FilePath::fromLocalPath(target.c_str()); - } - return FilePath(); - } diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch deleted file mode 100644 index adaed387..00000000 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-correctly-handle-mountable-types.patch +++ /dev/null @@ -1,80 +0,0 @@ -From dc7a5753b934e323d4d8d13f3253cbe7ae55a111 Mon Sep 17 00:00:00 2001 -From: "Hong Jen Yee (PCMan)" <pcman.tw@gmail.com> -Date: Sun, 10 Jun 2018 00:07:31 +0800 -Subject: [PATCH] Correctly handle mountable types. - ---- - src/core/basicfilelauncher.cpp | 6 +++--- - src/core/fileinfo.cpp | 4 ++-- - src/core/fileinfo.h | 3 ++- - 3 files changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp -index 0dc8208..0ae1177 100644 ---- a/src/core/basicfilelauncher.cpp -+++ b/src/core/basicfilelauncher.cpp -@@ -30,11 +30,10 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon - // classify files according to different mimetypes - for(auto& fileInfo : fileInfos) { - /* -- qDebug("path: %s, type: %s, target: %s, isDir: %i, isDesktopEntry: %i", -+ qDebug("path: %s, type: %s, target: %s, isDir: %i, isShortcut: %i, isMountable: %i, isDesktopEntry: %i", - fileInfo->path().toString().get(), fileInfo->mimeType()->name(), fileInfo->target().c_str(), -- fileInfo->isDir(), fileInfo->isDesktopEntry()); -+ fileInfo->isDir(), fileInfo->isShortcut(), fileInfo->isMountable(), fileInfo->isDesktopEntry()); - */ -- - if(fileInfo->isMountable()) { - if(fileInfo->target().empty()) { - // the mountable is not yet mounted so we have no target URI. -@@ -269,6 +268,7 @@ FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaun - // if we know the target is a dir, we are not going to open it using other apps - // for example: `network:///smb-root' is a shortcut targeting `smb:///' and it's also a dir - if(fileInfo->isDir()) { -+ qDebug("shortcut is dir: %s", target.c_str()); - return FilePath::fromPathStr(target.c_str()); - } - -diff --git a/src/core/fileinfo.cpp b/src/core/fileinfo.cpp -index b19a751..5838fe5 100644 ---- a/src/core/fileinfo.cpp -+++ b/src/core/fileinfo.cpp -@@ -118,7 +118,8 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath - isDeletable_ = true; - } - -- isShortcut_ = false; -+ isShortcut_ = (type == G_FILE_TYPE_SHORTCUT); -+ isMountable_ = (type == G_FILE_TYPE_MOUNTABLE); - - /* special handling for symlinks */ - if(g_file_info_get_is_symlink(inf.get())) { -@@ -129,7 +130,6 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath - - switch(type) { - case G_FILE_TYPE_SHORTCUT: -- isShortcut_ = true; - /* Falls through. */ - case G_FILE_TYPE_MOUNTABLE: - uri = g_file_info_get_attribute_string(inf.get(), G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); -diff --git a/src/core/fileinfo.h b/src/core/fileinfo.h -index 8437d92..27f7508 100644 ---- a/src/core/fileinfo.h -+++ b/src/core/fileinfo.h -@@ -150,7 +150,7 @@ class LIBFM_QT_API FileInfo { - } - - bool isMountable() const { -- return mimeType_->isMountable(); -+ return isMountable_; - } - - bool isShortcut() const { -@@ -238,6 +238,7 @@ class LIBFM_QT_API FileInfo { - std::string target_; /* target of shortcut or mountable. */ - - bool isShortcut_ : 1; /* TRUE if file is shortcut type */ -+ bool isMountable_ : 1; /* TRUE if file is mountable type */ - bool isAccessible_ : 1; /* TRUE if can be read by user */ - bool isWritable_ : 1; /* TRUE if can be written to by user */ - bool isDeletable_ : 1; /* TRUE if can be deleted by user */ diff --git a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch b/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch deleted file mode 100644 index 12611650..00000000 --- a/x11-libs/libfm-qt/files/libfm-qt-0.13.1-fix-smb-error.patch +++ /dev/null @@ -1,279 +0,0 @@ -From 1a6fa2632388ffcc57ce723501a588c90b940f93 Mon Sep 17 00:00:00 2001 -From: "Hong Jen Yee (PCMan)" <pcman.tw@gmail.com> -Date: Sat, 9 Jun 2018 21:04:19 +0800 -Subject: [PATCH] Fix failure to open smb:// caused by incorrect file info - handling. - ---- - src/core/basicfilelauncher.cpp | 40 ++++++++++++++++++++++++------- - src/core/basicfilelauncher.h | 2 +- - src/core/fileinfo.cpp | 9 ++++--- - src/core/fileinfojob.cpp | 44 +++++++++++++++++++++------------- - src/core/fileinfojob.h | 5 ++++ - src/core/gioptrs.h | 4 ++++ - src/filelauncher.cpp | 2 +- - src/filelauncher.h | 2 +- - 8 files changed, 77 insertions(+), 31 deletions(-) - -diff --git a/src/core/basicfilelauncher.cpp b/src/core/basicfilelauncher.cpp -index 2c7f00e..0dc8208 100644 ---- a/src/core/basicfilelauncher.cpp -+++ b/src/core/basicfilelauncher.cpp -@@ -29,11 +29,13 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon - FilePathList pathsToLaunch; - // classify files according to different mimetypes - for(auto& fileInfo : fileInfos) { -- // qDebug("path: %s, target: %s", fileInfo->path().toString().get(), fileInfo->target().c_str()); -- if(fileInfo->isDir()) { -- folderInfos.emplace_back(fileInfo); -- } -- else if(fileInfo->isMountable()) { -+ /* -+ qDebug("path: %s, type: %s, target: %s, isDir: %i, isDesktopEntry: %i", -+ fileInfo->path().toString().get(), fileInfo->mimeType()->name(), fileInfo->target().c_str(), -+ fileInfo->isDir(), fileInfo->isDesktopEntry()); -+ */ -+ -+ if(fileInfo->isMountable()) { - if(fileInfo->target().empty()) { - // the mountable is not yet mounted so we have no target URI. - GErrorPtr err{G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED, -@@ -67,6 +69,9 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon - pathsToLaunch.emplace_back(path); - } - } -+ else if(fileInfo->isDir()) { -+ folderInfos.emplace_back(fileInfo); -+ } - else { - auto& mimeType = fileInfo->mimeType(); - mimeTypeToFiles[mimeType->name()].emplace_back(fileInfo); -@@ -103,16 +108,27 @@ bool BasicFileLauncher::launchFiles(const FileInfoList& fileInfos, GAppLaunchCon - bool BasicFileLauncher::launchPaths(FilePathList paths, GAppLaunchContext* ctx) { - // FIXME: blocking with an event loop is not a good design :-( - QEventLoop eventLoop; -- - auto job = new FileInfoJob{paths}; - job->setAutoDelete(false); // do not automatically delete the job since we want its results later. - - GObjectPtr<GAppLaunchContext> ctxPtr{ctx}; -+ -+ // error handling (for example: handle path not mounted error) -+ QObject::connect(job, &FileInfoJob::error, -+ &eventLoop, [this, job, ctx](const GErrorPtr & err, Job::ErrorSeverity /* severity */ , Job::ErrorAction &act) { -+ auto path = job->currentPath(); -+ if(showError(ctx, err, path, nullptr)) { -+ // the user handled the error and ask for retry -+ act = Job::ErrorAction::RETRY; -+ } -+ }, Qt::BlockingQueuedConnection); // BlockingQueuedConnection is required here to pause the job and wait for user response -+ - QObject::connect(job, &FileInfoJob::finished, - [&eventLoop]() { - // exit the event loop when the job is done - eventLoop.exit(); - }); -+ - // run the job in another thread to not block the UI - job->runAsync(); - -@@ -145,7 +161,7 @@ BasicFileLauncher::ExecAction BasicFileLauncher::askExecFile(const FileInfoPtr & - return ExecAction::DIRECT_EXEC; - } - --bool BasicFileLauncher::showError(GAppLaunchContext* /* ctx */, GErrorPtr& /* err */, const FilePath& /* path */, const FileInfoPtr& /* info */) { -+bool BasicFileLauncher::showError(GAppLaunchContext* /* ctx */, const GErrorPtr & /* err */, const FilePath& /* path */, const FileInfoPtr& /* info */) { - return false; - } - -@@ -249,13 +265,21 @@ bool BasicFileLauncher::launchDesktopEntry(const char *desktopEntryName, const F - - FilePath BasicFileLauncher::handleShortcut(const FileInfoPtr& fileInfo, GAppLaunchContext* ctx) { - auto target = fileInfo->target(); -+ -+ // if we know the target is a dir, we are not going to open it using other apps -+ // for example: `network:///smb-root' is a shortcut targeting `smb:///' and it's also a dir -+ if(fileInfo->isDir()) { -+ return FilePath::fromPathStr(target.c_str()); -+ } -+ - auto scheme = CStrPtr{g_uri_parse_scheme(target.c_str())}; - if(scheme) { - // collect the uri schemes we support - if(strcmp(scheme.get(), "file") == 0 - || strcmp(scheme.get(), "trash") == 0 - || strcmp(scheme.get(), "network") == 0 -- || strcmp(scheme.get(), "computer") == 0) { -+ || strcmp(scheme.get(), "computer") == 0 -+ || strcmp(scheme.get(), "menu") == 0) { - return FilePath::fromUri(target.c_str()); - } - else { -diff --git a/src/core/basicfilelauncher.h b/src/core/basicfilelauncher.h -index a28aa75..3b1545d 100644 ---- a/src/core/basicfilelauncher.h -+++ b/src/core/basicfilelauncher.h -@@ -53,7 +53,7 @@ class LIBFM_QT_API BasicFileLauncher { - - virtual bool openFolder(GAppLaunchContext* ctx, const FileInfoList& folderInfos, GErrorPtr& err); - -- virtual bool showError(GAppLaunchContext* ctx, GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}); -+ virtual bool showError(GAppLaunchContext* ctx, const GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}); - - virtual ExecAction askExecFile(const FileInfoPtr& file); - -diff --git a/src/core/fileinfo.cpp b/src/core/fileinfo.cpp -index 8e86f8d..b19a751 100644 ---- a/src/core/fileinfo.cpp -+++ b/src/core/fileinfo.cpp -@@ -36,10 +36,9 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath - size_ = g_file_info_get_size(inf.get()); - - tmp = g_file_info_get_content_type(inf.get()); -- if(!tmp) { -- tmp = "application/octet-stream"; -+ if(tmp) { -+ mimeType_ = MimeType::fromName(tmp); - } -- mimeType_ = MimeType::fromName(tmp); - - mode_ = g_file_info_get_attribute_uint32(inf.get(), G_FILE_ATTRIBUTE_UNIX_MODE); - -@@ -196,6 +195,10 @@ void FileInfo::setFromGFileInfo(const GObjectPtr<GFileInfo>& inf, const FilePath - } - } - -+ if(!mimeType_) { -+ mimeType_ = MimeType::fromName("application/octet-stream"); -+ } -+ - /* if there is a custom folder icon, use it */ - if(isNative() && type == G_FILE_TYPE_DIRECTORY) { - auto local_path = path().localPath(); -diff --git a/src/core/fileinfojob.cpp b/src/core/fileinfojob.cpp -index 3c222af..7bf8bb3 100644 ---- a/src/core/fileinfojob.cpp -+++ b/src/core/fileinfojob.cpp -@@ -13,31 +13,41 @@ FileInfoJob::FileInfoJob(FilePathList paths, FilePathList deletionPaths, FilePat - - void FileInfoJob::exec() { - for(const auto& path: paths_) { -- if(!isCancelled()) { -+ if(isCancelled()) { -+ break; -+ } -+ currentPath_ = path; -+ -+ bool retry; -+ do { -+ retry = false; - GErrorPtr err; - GFileInfoPtr inf{ - g_file_query_info(path.gfile().get(), defaultGFileInfoQueryAttribs, - G_FILE_QUERY_INFO_NONE, cancellable().get(), &err), - false - }; -- if(!inf) { -- continue; -+ if(inf) { -+ // Reuse the same dirPath object when the path remains the same (optimize for files in the same dir) -+ auto dirPath = commonDirPath_.isValid() ? commonDirPath_ : path.parent(); -+ auto fileInfoPtr = std::make_shared<FileInfo>(inf, dirPath); -+ -+ // FIXME: this is not elegant -+ if(cutFilesHashSet_ -+ && cutFilesHashSet_->count(path.hash())) { -+ fileInfoPtr->bindCutFiles(cutFilesHashSet_); -+ } -+ -+ results_.push_back(fileInfoPtr); -+ Q_EMIT gotInfo(path, results_.back()); - } -- -- // Reuse the same dirPath object when the path remains the same (optimize for files in the same dir) -- auto dirPath = commonDirPath_.isValid() ? commonDirPath_ : path.parent(); -- FileInfo fileInfo(inf, dirPath); -- -- if(cutFilesHashSet_ -- && cutFilesHashSet_->count(fileInfo.path().hash())) { -- fileInfo.bindCutFiles(cutFilesHashSet_); -+ else { -+ auto act = emitError(err); -+ if(act == Job::ErrorAction::RETRY) { -+ retry = true; -+ } - } -- -- auto fileInfoPtr = std::make_shared<const FileInfo>(fileInfo); -- -- results_.push_back(fileInfoPtr); -- Q_EMIT gotInfo(path, fileInfoPtr); -- } -+ } while(retry && !isCancelled()); - } - } - -diff --git a/src/core/fileinfojob.h b/src/core/fileinfojob.h -index 53a03c5..d75e88f 100644 ---- a/src/core/fileinfojob.h -+++ b/src/core/fileinfojob.h -@@ -27,6 +27,10 @@ class LIBFM_QT_API FileInfoJob : public Job { - return results_; - } - -+ const FilePath& currentPath() const { -+ return currentPath_; -+ } -+ - Q_SIGNALS: - void gotInfo(const FilePath& path, std::shared_ptr<const FileInfo>& info); - -@@ -39,6 +43,7 @@ class LIBFM_QT_API FileInfoJob : public Job { - FileInfoList results_; - FilePath commonDirPath_; - const std::shared_ptr<const HashSet> cutFilesHashSet_; -+ FilePath currentPath_; - }; - - } // namespace Fm -diff --git a/src/core/gioptrs.h b/src/core/gioptrs.h -index 401424b..ae22602 100644 ---- a/src/core/gioptrs.h -+++ b/src/core/gioptrs.h -@@ -112,6 +112,10 @@ class GErrorPtr { - return err_; - } - -+ const GError* operator->() const { -+ return err_; -+ } -+ - bool operator == (const GErrorPtr& other) const { - return err_ == other.err_; - } -diff --git a/src/filelauncher.cpp b/src/filelauncher.cpp -index 5f667fc..ff14533 100644 ---- a/src/filelauncher.cpp -+++ b/src/filelauncher.cpp -@@ -76,7 +76,7 @@ bool FileLauncher::openFolder(GAppLaunchContext *ctx, const FileInfoList &folder - return BasicFileLauncher::openFolder(ctx, folderInfos, err); - } - --bool FileLauncher::showError(GAppLaunchContext* /*ctx*/, GErrorPtr &err, const FilePath &path, const FileInfoPtr &info) { -+bool FileLauncher::showError(GAppLaunchContext* /*ctx*/, const GErrorPtr &err, const FilePath &path, const FileInfoPtr &info) { - /* ask for mount if trying to launch unmounted path */ - if(err->domain == G_IO_ERROR) { - if(path && err->code == G_IO_ERROR_NOT_MOUNTED) { -diff --git a/src/filelauncher.h b/src/filelauncher.h -index be5be5a..991a00a 100644 ---- a/src/filelauncher.h -+++ b/src/filelauncher.h -@@ -43,7 +43,7 @@ class LIBFM_QT_API FileLauncher: public BasicFileLauncher { - - bool openFolder(GAppLaunchContext* ctx, const FileInfoList& folderInfos, GErrorPtr& err) override; - -- bool showError(GAppLaunchContext* ctx, GErrorPtr& err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}) override; -+ bool showError(GAppLaunchContext* ctx, const GErrorPtr &err, const FilePath& path = FilePath{}, const FileInfoPtr& info = FileInfoPtr{}) override; - - ExecAction askExecFile(const FileInfoPtr& file) override; - |