aboutsummaryrefslogtreecommitdiff
path: root/libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch')
-rw-r--r--libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch b/libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch
new file mode 100644
index 0000000000000..a980e81668a4c
--- /dev/null
+++ b/libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch
@@ -0,0 +1,57 @@
+From 690e15ba4367784f3ac2134c5e68d52ee05e6cbb Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Thu, 15 Nov 2012 21:08:51 +0200
+Subject: [PATCH 11/22] smb:// symlinked locations cannot be launched from
+ folder view.
+
+This is because we don't assume each symlink is a folder anymore
+(that assuming was stupid anyway) so we check how to handle the
+symlink target. We have to get info on the target. If target isn't
+mounted we cannot retrieve info on it and FmFileInfoJob fails.
+Therefore we cannot launch the location.
+The commit adds creation of simplest file info which contains only
+name and type (directory) for not mounted location.
+---
+ src/job/fm-file-info-job.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/src/job/fm-file-info-job.c b/src/job/fm-file-info-job.c
+index 19acb1b..69eb37d 100644
+--- a/src/job/fm-file-info-job.c
++++ b/src/job/fm-file-info-job.c
+@@ -165,6 +165,24 @@ static gboolean fm_file_info_job_run(FmJob* fmjob)
+ gf = fm_path_to_gfile(path);
+ if(!_fm_file_info_job_get_info_for_gfile(fmjob, fi, gf, &err))
+ {
++ if(err->domain == G_IO_ERROR && err->code == G_IO_ERROR_NOT_MOUNTED)
++ {
++ GFileInfo *inf;
++ /* location by link isn't mounted; unfortunately we cannot
++ launch a target if we don't know what kind of target we
++ have; lets make a simplest directory-kind GFIleInfo */
++ /* FIXME: this may be dirty a bit */
++ g_error_free(err);
++ err = NULL;
++ inf = g_file_info_new();
++ g_file_info_set_file_type(inf, G_FILE_TYPE_DIRECTORY);
++ g_file_info_set_name(inf, fm_path_get_basename(path));
++ g_file_info_set_display_name(inf, fm_path_get_basename(path));
++ fm_file_info_set_from_gfileinfo(fi, inf);
++ g_object_unref(inf);
++ }
++ else
++ {
+ FmJobErrorAction act = fm_job_emit_error(fmjob, err, FM_JOB_ERROR_MILD);
+ g_error_free(err);
+ err = NULL;
+@@ -175,6 +193,7 @@ static gboolean fm_file_info_job_run(FmJob* fmjob)
+ }
+
+ fm_file_info_list_delete_link(job->file_infos, l); /* also calls unref */
++ }
+ }
+ g_object_unref(gf);
+ }
+--
+1.8.0.1
+