summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/libfm/libfm.SlackBuild10
-rw-r--r--libraries/libfm/patches/0001-3583229-Fix-for-broken-DnD-in-ExoTreeView.patch26
-rw-r--r--libraries/libfm/patches/0002-3582816-If-no-region-is-selected-in-editable-then-ap.patch33
-rw-r--r--libraries/libfm/patches/0003-3584608-Fix-for-rarely-broken-DnD-due-to-FmDndDest-s.patch139
-rw-r--r--libraries/libfm/patches/0004-3582493-Fix-for-SIGSEGV-in-fm_path_new_child-with-pa.patch86
-rw-r--r--libraries/libfm/patches/0005-3582493-Fixing-test-fm-path-two-tests.patch39
-rw-r--r--libraries/libfm/patches/0006-3586178-doc-build-wasn-t-updated-for-with-gtk-3-case.patch26
-rw-r--r--libraries/libfm/patches/0007-3586178-gtk3-css-strings-have-significantly-differen.patch44
-rw-r--r--libraries/libfm/patches/0008-3586178-Comparison-is-wrong-bug-6421-in-libexo.patch26
-rw-r--r--libraries/libfm/patches/0009-Another-fix-for-possible-SIGSEGV-in-src-base-fm-path.patch34
-rw-r--r--libraries/libfm/patches/0010-3584798-We-shouldn-t-disable-DnD-on-non-native-targe.patch37
-rw-r--r--libraries/libfm/patches/0011-smb-symlinked-locations-cannot-be-launched-from-fold.patch57
-rw-r--r--libraries/libfm/patches/0012-Fix-for-localizations-of-Detailed-List-View-headers.patch26
-rw-r--r--libraries/libfm/patches/0013-3587571-Ctrl-A-should-select-all-depending-on-focus.patch36
-rw-r--r--libraries/libfm/patches/0014-Disabling-input-for-file-name-in-properties-dialog-w.patch28
-rw-r--r--libraries/libfm/patches/0015-Adding-tooltips-for-file-name-and-location-in-file-p.patch39
-rw-r--r--libraries/libfm/patches/0016-Fix-file-owner-group-should-be-properly-disabled-in-.patch34
-rw-r--r--libraries/libfm/patches/0017-Fix-disabled-name-cannot-be-copied-to-clipboard-make.patch29
-rw-r--r--libraries/libfm/patches/0018-Change-FM_CONFIG_DEFAULT_NO_USB_TRASH-to-more-expect.patch34
-rw-r--r--libraries/libfm/patches/0019-3589259-Fix-for-dropping-files-onto-Trash-in-Places-.patch34
-rw-r--r--libraries/libfm/patches/0020-Fix-after-changing-the-folder-selection-isn-t-reset.patch31
-rw-r--r--libraries/libfm/patches/0021-Fix-over-previous-commit-it-leaded-to-crash.patch46
-rw-r--r--libraries/libfm/patches/0022-3590304-Fallback-themed-icon-folder-video-to-folder-.patch50
23 files changed, 942 insertions, 2 deletions
diff --git a/libraries/libfm/libfm.SlackBuild b/libraries/libfm/libfm.SlackBuild
index 66affb1bce..2f14c4d849 100644
--- a/libraries/libfm/libfm.SlackBuild
+++ b/libraries/libfm/libfm.SlackBuild
@@ -26,7 +26,7 @@
PRGNAM=libfm
VERSION=${VERSION:-1.1.0}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@@ -74,7 +74,10 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
-sh autogen.sh || true
+# Apply patches from upstream
+for i in $CWD/patches/* ; do patch -p1 < $i ; done
+
+autoreconf -fi
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
@@ -92,6 +95,9 @@ CXXFLAGS="$SLKCFLAGS" \
make
make install-strip DESTDIR=$PKG
+# Fix include folders
+( cd $PKG/usr/include ; rm -fr libfm ; ln -s libfm-1.0 libfm )
+
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
diff --git a/libraries/libfm/patches/0001-3583229-Fix-for-broken-DnD-in-ExoTreeView.patch b/libraries/libfm/patches/0001-3583229-Fix-for-broken-DnD-in-ExoTreeView.patch
new file mode 100644
index 0000000000..465fd8d0eb
--- /dev/null
+++ b/libraries/libfm/patches/0001-3583229-Fix-for-broken-DnD-in-ExoTreeView.patch
@@ -0,0 +1,26 @@
+From 224d38249a449557714aedc2695d1a14279f5510 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sun, 4 Nov 2012 20:28:21 +0200
+Subject: [PATCH 01/22] [#3583229]Fix for broken DnD in ExoTreeView.
+
+The commit 441db508ebf12b6cb1849ad1a244dcd668cccf82 added the call to
+gtk_tree_view_set_reorderable() which happened to be incompatible with DnD.
+---
+ src/gtk/fm-standard-view.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/gtk/fm-standard-view.c b/src/gtk/fm-standard-view.c
+index f0f791c..175cced 100644
+--- a/src/gtk/fm-standard-view.c
++++ b/src/gtk/fm-standard-view.c
+@@ -687,7 +687,6 @@ static inline void create_list_view(FmStandardView* fv, GList* sels)
+ FM_FOLDER_MODEL_COL_NAME);
+ }
+
+- gtk_tree_view_set_reorderable(GTK_TREE_VIEW(fv->view), TRUE);
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(fv->view), TRUE);
+ gtk_tree_view_set_rubber_banding(GTK_TREE_VIEW(fv->view), TRUE);
+ exo_tree_view_set_single_click((ExoTreeView*)fv->view, fm_config->single_click);
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0002-3582816-If-no-region-is-selected-in-editable-then-ap.patch b/libraries/libfm/patches/0002-3582816-If-no-region-is-selected-in-editable-then-ap.patch
new file mode 100644
index 0000000000..ce7eb20b08
--- /dev/null
+++ b/libraries/libfm/patches/0002-3582816-If-no-region-is-selected-in-editable-then-ap.patch
@@ -0,0 +1,33 @@
+From 74901d717fefaf239bf7d8b6f5b14ea146170663 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 3 Nov 2012 16:05:31 +0200
+Subject: [PATCH 02/22] [#3582816]If no region is selected in editable then
+ apply 'Delete' to char next to cursor.
+
+---
+ src/gtk/fm-folder-view.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/gtk/fm-folder-view.c b/src/gtk/fm-folder-view.c
+index 153ed48..fe65e9f 100644
+--- a/src/gtk/fm-folder-view.c
++++ b/src/gtk/fm-folder-view.c
+@@ -1001,7 +1001,15 @@ static void on_trash(GtkAction* act, FmFolderView* fv)
+ }
+ }
+ else if(GTK_IS_EDITABLE(focus)) /* fallback for editables */
++ {
++ if(!gtk_editable_get_selection_bounds((GtkEditable*)focus, NULL, NULL))
++ {
++ gint pos = gtk_editable_get_position((GtkEditable*)focus);
++ /* if no text selected then delete character next to cursor */
++ gtk_editable_select_region((GtkEditable*)focus, pos, pos + 1);
++ }
+ gtk_editable_delete_selection((GtkEditable*)focus);
++ }
+ }
+
+ static void on_rm(GtkAction* act, FmFolderView* fv)
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0003-3584608-Fix-for-rarely-broken-DnD-due-to-FmDndDest-s.patch b/libraries/libfm/patches/0003-3584608-Fix-for-rarely-broken-DnD-due-to-FmDndDest-s.patch
new file mode 100644
index 0000000000..3837ed62a0
--- /dev/null
+++ b/libraries/libfm/patches/0003-3584608-Fix-for-rarely-broken-DnD-due-to-FmDndDest-s.patch
@@ -0,0 +1,139 @@
+From e098be34aa96bbcddb786a09b13da877d2d709ad Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Tue, 6 Nov 2012 05:49:19 +0200
+Subject: [PATCH 03/22] [#3584608]Fix for rarely broken DnD due to FmDndDest
+ source caching.
+
+The previous behavior was to cache data and reset cache when drag leaves
+widget. This is completely wrong - we never get informed if we refuse drop
+(for example, on wrong target) therefore drag source kept the same while
+it was already changed. The only valid behavior is to keep drag context
+referenced and compare it with one we get in handler and if it's changed
+then reset our cache. This way we don't have to requery data again when
+pointer leaves widget but still inside of application window - the drag
+context is still the same, i.e. we get some optimization as a side effect.
+---
+ src/gtk/fm-dnd-dest.c | 44 ++++++++++++++------------------------------
+ 1 file changed, 14 insertions(+), 30 deletions(-)
+
+diff --git a/src/gtk/fm-dnd-dest.c b/src/gtk/fm-dnd-dest.c
+index 37686ce..21cf2c0 100644
+--- a/src/gtk/fm-dnd-dest.c
++++ b/src/gtk/fm-dnd-dest.c
+@@ -108,10 +108,10 @@ struct _FmDndDest
+
+ int info_type; /* type of src_files */
+ FmPathList* src_files;
++ GdkDragContext* context;
+ guint32 src_dev; /* UNIX dev of source fs */
+ const char* src_fs_id; /* filesystem id of source fs */
+ FmFileInfo* dest_file;
+- guint idle; /* idle handler */
+
+ gboolean waiting_data;
+ gboolean has_handlers;
+@@ -211,11 +211,6 @@ static void fm_dnd_dest_dispose(GObject *object)
+
+ fm_dnd_dest_set_widget(dd, NULL);
+
+- if(dd->idle)
+- {
+- g_source_remove(dd->idle);
+- dd->idle = 0;
+- }
+ clear_src_cache(dd);
+
+ G_OBJECT_CLASS(fm_dnd_dest_parent_class)->dispose(object);
+@@ -388,6 +383,11 @@ static gboolean fm_dnd_dest_files_dropped(FmDndDest* dd, int x, int y,
+ static void clear_src_cache(FmDndDest* dd)
+ {
+ /* free cached source files */
++ if(dd->context)
++ {
++ g_object_unref(dd->context);
++ dd->context = NULL;
++ }
+ if(dd->src_files)
+ {
+ fm_path_list_unref(dd->src_files);
+@@ -405,16 +405,6 @@ static void clear_src_cache(FmDndDest* dd)
+ dd->waiting_data = FALSE;
+ }
+
+-static gboolean clear_src_cache_on_idle(gpointer user_data)
+-{
+- GDK_THREADS_ENTER();
+- /* check if dd is still valid */
+- if(!g_source_is_destroyed(g_main_current_source()))
+- clear_src_cache((FmDndDest*)user_data);
+- GDK_THREADS_LEAVE();
+- return FALSE;
+-}
+-
+ #if 0
+ /* the returned list can be either FmPathList or FmFileInfoList */
+ /* check with fm_list_is_path_list() and fm_list_is_file_info_list(). */
+@@ -581,6 +571,10 @@ gboolean _on_drag_data_received(FmDndDest* dd, GdkDragContext *drag_context,
+ dd->src_files = files;
+ dd->waiting_data = FALSE;
+ dd->info_type = info;
++ /* keep context to verify if it's changed */
++ if(G_UNLIKELY(dd->context))
++ g_object_unref(dd->context);
++ dd->context = g_object_ref(drag_context);
+ return (files != NULL);
+ }
+
+@@ -718,7 +712,7 @@ gboolean _on_drag_drop(FmDndDest* dd, GdkDragContext *drag_context,
+ }
+
+ /* see if the dragged files are cached by "drag-motion" handler */
+- if(dd->src_files)
++ if(dd->src_files && drag_context == dd->context)
+ {
+ GdkDragAction action = gdk_drag_context_get_selected_action(drag_context);
+ /* emit files-dropped signal */
+@@ -777,14 +771,6 @@ GdkDragAction fm_dnd_dest_get_default_action(FmDndDest* dd,
+ /* query drag sources in any case */
+ goto query_sources;
+
+- /* we may have another data already so clear the cache */
+- if(dd->idle)
+- {
+- g_source_remove(dd->idle);
+- dd->idle = 0;
+- clear_src_cache(dd);
+- }
+-
+ /* special support for dropping onto desktop entry */
+ if(fm_file_info_is_desktop_entry(dest))
+ {
+@@ -802,8 +788,10 @@ GdkDragAction fm_dnd_dest_get_default_action(FmDndDest* dd,
+ if(target == dest_target_atom[FM_DND_DEST_TARGET_XDS])
+ return GDK_ACTION_COPY;
+
+- if(!dd->src_files) /* we didn't have any data, cache it */
++ /* we have no valid data, query it now */
++ if(!dd->src_files || dd->context != drag_context)
+ {
++ clear_src_cache(dd);
+ query_sources:
+ action = 0;
+ if(!dd->waiting_data) /* we're still waiting for "drag-data-received" signal */
+@@ -886,13 +874,9 @@ query_sources:
+ */
+ void fm_dnd_dest_drag_leave(FmDndDest* dd, GdkDragContext* drag_context, guint time)
+ {
+- if(dd->idle == 0)
+- dd->idle = g_idle_add_full(G_PRIORITY_LOW, clear_src_cache_on_idle, dd, NULL);
+ }
+
+ static void on_drag_leave(GtkWidget *widget, GdkDragContext *drag_context,
+ guint time, FmDndDest* dd)
+ {
+- if(dd->idle == 0)
+- dd->idle = g_idle_add_full(G_PRIORITY_LOW, clear_src_cache_on_idle, dd, NULL);
+ }
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0004-3582493-Fix-for-SIGSEGV-in-fm_path_new_child-with-pa.patch b/libraries/libfm/patches/0004-3582493-Fix-for-SIGSEGV-in-fm_path_new_child-with-pa.patch
new file mode 100644
index 0000000000..d765c0e997
--- /dev/null
+++ b/libraries/libfm/patches/0004-3582493-Fix-for-SIGSEGV-in-fm_path_new_child-with-pa.patch
@@ -0,0 +1,86 @@
+From 86717c497dcd07e4ba417a4236ee01bf3fb61594 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Mon, 12 Nov 2012 23:14:46 +0200
+Subject: [PATCH 04/22] [#3582493]Fix for SIGSEGV in fm_path_new_child() with
+ parent=NULL.
+
+---
+ src/base/fm-path.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/base/fm-path.c b/src/base/fm-path.c
+index 9cf3088..b90aeab 100644
+--- a/src/base/fm-path.c
++++ b/src/base/fm-path.c
+@@ -238,8 +238,8 @@ static inline FmPath* _fm_path_reuse_existing_paths(FmPath* parent, const char*
+
+ /**
+ * fm_path_new_child_len
+- * @parent: a parent path
+- * @basename: basename of a direct child of @parent directory
++ * @parent: (allow-none): a parent path
++ * @basename: (allow-none): basename of a direct child of @parent directory
+ * @name_len: length of @basename
+ *
+ * Creates new #FmPath for child of @parent directory which have name
+@@ -346,8 +346,8 @@ FmPath* fm_path_new_child_len(FmPath* parent, const char* basename, int name_len
+
+ /**
+ * fm_path_new_child
+- * @parent: a parent path
+- * @basename: basename of a direct child of @parent directory
++ * @parent: (allow-none): a parent path
++ * @basename: (allow-none): basename of a direct child of @parent directory
+ *
+ * Creates new #FmPath for child of @parent directory which have name
+ * @basename. @basename is in glib filename encoding (can be non-UTF-8)
+@@ -362,7 +362,7 @@ FmPath* fm_path_new_child(FmPath* parent, const char* basename)
+ {
+ int baselen = strlen(basename);
+ return _fm_path_new_child_len(parent, basename, baselen,
+- fm_path_is_native(parent));
++ parent && fm_path_is_native(parent));
+ }
+ return G_LIKELY(parent) ? fm_path_ref(parent) : NULL;
+ }
+@@ -396,8 +396,8 @@ FmPath* fm_path_new_for_gfile(GFile* gf)
+
+ /**
+ * fm_path_new_relative
+- * @parent: a parent path
+- * @rel: a path relative to @parent
++ * @parent: (allow-none): a parent path
++ * @rel: (allow-none): a path relative to @parent
+ *
+ * Creates new #FmPath which is relative to @parent directory by the
+ * relative path string @rel. @rel is in glib filename encoding (can be
+@@ -458,7 +458,7 @@ FmPath* fm_path_new_relative(FmPath* parent, const char* rel)
+
+ /**
+ * fm_path_new_for_path
+- * @path_name: a POSIX path.
++ * @path_name: (allow-none): a POSIX path.
+ *
+ * Returns: a newly created FmPath for the path. You have to call
+ * fm_path_unref() when it's no longer needed.
+@@ -484,7 +484,7 @@ FmPath* fm_path_new_for_path(const char* path_name)
+
+ /**
+ * fm_path_new_for_uri
+- * @uri: a URI with special characters escaped.
++ * @uri: (allow-none): a URI with special characters escaped.
+ *
+ * Creates new #FmPath by given @uri. You have to call
+ * fm_path_unref() when it's no longer needed.
+@@ -564,7 +564,7 @@ FmPath* fm_path_new_for_display_name(const char* path_name)
+
+ /**
+ * fm_path_new_for_str
+- * @path_str: a string representing the file path in its native
++ * @path_str: (allow-none): a string representing the file path in its native
+ * encoding (can be non-UTF-8). It can either be a native path or an
+ * unescaped URI (can contain non-ASCII characters and spaces).
+ * The function will try to figure out what to do.
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0005-3582493-Fixing-test-fm-path-two-tests.patch b/libraries/libfm/patches/0005-3582493-Fixing-test-fm-path-two-tests.patch
new file mode 100644
index 0000000000..1da69db274
--- /dev/null
+++ b/libraries/libfm/patches/0005-3582493-Fixing-test-fm-path-two-tests.patch
@@ -0,0 +1,39 @@
+From ea6d673d84b447b81b54c2cb825bdf8284952aea Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Mon, 12 Nov 2012 23:25:39 +0200
+Subject: [PATCH 05/22] [#3582493]Fixing test-fm-path two tests.
+
+---
+ src/tests/test-fm-path.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/tests/test-fm-path.c b/src/tests/test-fm-path.c
+index a4a3a6c..72c340f 100644
+--- a/src/tests/test-fm-path.c
++++ b/src/tests/test-fm-path.c
+@@ -71,8 +71,9 @@ static void test_uri_parsing()
+ TEST_PARSING(fm_path_new_for_uri, "file:/test/path",
+ "/", "test", "path");
+
++ /* The 'test' in this format is a host part of URI */
+ TEST_PARSING(fm_path_new_for_uri, "file://test/path",
+- "/", "test", "path");
++ "/", "path");
+
+ TEST_PARSING(fm_path_new_for_uri, "http://test/path/",
+ "http://test/", "path");
+@@ -87,7 +88,11 @@ static void test_uri_parsing()
+ "http://test/");
+
+ TEST_PARSING(fm_path_new_for_uri, "http://wiki.lxde.org/zh/%E9%A6%96%E9%A0%81",
++#if 0
++ /* It should not do any break in URI since 1.0.1 */
+ "http://wiki.lxde.org/", "zh", "首頁");
++#endif
++ "http://wiki.lxde.org/", "zh", "%E9%A6%96%E9%A0%81");
+
+ TEST_PARSING(fm_path_new_for_uri, "mailto:test",
+ "mailto:test");
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0006-3586178-doc-build-wasn-t-updated-for-with-gtk-3-case.patch b/libraries/libfm/patches/0006-3586178-doc-build-wasn-t-updated-for-with-gtk-3-case.patch
new file mode 100644
index 0000000000..4748a2086d
--- /dev/null
+++ b/libraries/libfm/patches/0006-3586178-doc-build-wasn-t-updated-for-with-gtk-3-case.patch
@@ -0,0 +1,26 @@
+From 80c568c277a5b8aa43d553d7d71f7ea404b41ab4 Mon Sep 17 00:00:00 2001
+From: galtgendo <galt_gendo@sourceforge.net>
+Date: Tue, 13 Nov 2012 00:03:54 +0200
+Subject: [PATCH 06/22] [#3586178]doc build wasn't updated for '--with-gtk=3'
+ case
+
+---
+ docs/reference/libfm/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/docs/reference/libfm/Makefile.am b/docs/reference/libfm/Makefile.am
+index 4650c71..8537cec 100644
+--- a/docs/reference/libfm/Makefile.am
++++ b/docs/reference/libfm/Makefile.am
+@@ -120,7 +120,7 @@ GTKDOC_CFLAGS= \
+ $(GTK_CFLAGS)
+ GTKDOC_LIBS= \
+ $(top_builddir)/src/libfm.la \
+- $(top_builddir)/src/libfm-gtk.la \
++ $(top_builddir)/src/$(LIBFM_GTK_LTLIBRARIES) \
+ $(GTK_LIBS) \
+ $(NULL)
+
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0007-3586178-gtk3-css-strings-have-significantly-differen.patch b/libraries/libfm/patches/0007-3586178-gtk3-css-strings-have-significantly-differen.patch
new file mode 100644
index 0000000000..e795f0fc88
--- /dev/null
+++ b/libraries/libfm/patches/0007-3586178-gtk3-css-strings-have-significantly-differen.patch
@@ -0,0 +1,44 @@
+From 83f0300a130f9c2ec83bbd5af138b0c5633fc608 Mon Sep 17 00:00:00 2001
+From: galtgendo <galt_gendo@sourceforge.net>
+Date: Tue, 13 Nov 2012 00:04:56 +0200
+Subject: [PATCH 07/22] [#3586178]gtk3 css strings have significantly different
+ syntax from gtk2 rc strings
+
+---
+ src/gtk/fm-tab-label.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/gtk/fm-tab-label.c b/src/gtk/fm-tab-label.c
+index 12c78ca..3bae9d4 100644
+--- a/src/gtk/fm-tab-label.c
++++ b/src/gtk/fm-tab-label.c
+@@ -44,20 +44,21 @@ static void fm_tab_label_class_init(FmTabLabelClass *klass)
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ provider = gtk_css_provider_new();
+ gtk_css_provider_load_from_data(provider,
++ "#tab-close-btn {\n"
++ "-GtkWidget-focus-padding : 0;\n"
++ "-GtkWidget-focus-line-width : 0;\n"
++ "padding : 0;\n"
++ "}\n", -1, NULL);
+ #else
+ gtk_rc_parse_string(
+-#endif
+ "style \"close-btn-style\" {\n"
+ "GtkWidget::focus-padding = 0\n"
+ "GtkWidget::focus-line-width = 0\n"
+ "xthickness = 0\n"
+ "ythickness = 0\n"
+ "}\n"
+- "widget \"*.tab-close-btn\" style \"close-btn-style\""
+-#if GTK_CHECK_VERSION(3, 0, 0)
+- , -1, NULL
++ "widget \"*.tab-close-btn\" style \"close-btn-style\"");
+ #endif
+- );
+ }
+
+ /* FIXME: add g_object_unref (provider); on class destroy? */
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0008-3586178-Comparison-is-wrong-bug-6421-in-libexo.patch b/libraries/libfm/patches/0008-3586178-Comparison-is-wrong-bug-6421-in-libexo.patch
new file mode 100644
index 0000000000..f0505ac3b6
--- /dev/null
+++ b/libraries/libfm/patches/0008-3586178-Comparison-is-wrong-bug-6421-in-libexo.patch
@@ -0,0 +1,26 @@
+From 19801e7f3d906ebb4470de0818945e9686dcdf66 Mon Sep 17 00:00:00 2001
+From: galtgendo <galt_gendo@sourceforge.net>
+Date: Tue, 13 Nov 2012 00:12:42 +0200
+Subject: [PATCH 08/22] [#3586178]Comparison is wrong (bug #6421 in libexo).
+
+http://git.xfce.org/xfce/exo/commit/?id=97b9c443baf879580ed851525a3150913c89ec10
+---
+ src/gtk/exo/exo-icon-view.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gtk/exo/exo-icon-view.c b/src/gtk/exo/exo-icon-view.c
+index b572cb0..11bd0cf 100644
+--- a/src/gtk/exo/exo-icon-view.c
++++ b/src/gtk/exo/exo-icon-view.c
+@@ -7581,7 +7581,7 @@ exo_icon_view_set_drag_dest_item (ExoIconView *icon_view,
+
+ /* special case a drop on an empty model */
+ icon_view->priv->empty_view_drop = FALSE;
+- if (pos == EXO_ICON_VIEW_DROP_LEFT && path
++ if (pos == EXO_ICON_VIEW_NO_DROP && path
+ && gtk_tree_path_get_depth (path) == 1
+ && gtk_tree_path_get_indices (path)[0] == 0)
+ {
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0009-Another-fix-for-possible-SIGSEGV-in-src-base-fm-path.patch b/libraries/libfm/patches/0009-Another-fix-for-possible-SIGSEGV-in-src-base-fm-path.patch
new file mode 100644
index 0000000000..b89dcc5414
--- /dev/null
+++ b/libraries/libfm/patches/0009-Another-fix-for-possible-SIGSEGV-in-src-base-fm-path.patch
@@ -0,0 +1,34 @@
+From 195e18e90abf1e641037b84a0e44dbf5c6aa8265 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Tue, 13 Nov 2012 04:04:24 +0200
+Subject: [PATCH 09/22] Another fix for possible SIGSEGV in src/base/fm-path.c.
+
+---
+ src/base/fm-path.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/base/fm-path.c b/src/base/fm-path.c
+index b90aeab..e4a0251 100644
+--- a/src/base/fm-path.c
++++ b/src/base/fm-path.c
+@@ -245,6 +245,8 @@ static inline FmPath* _fm_path_reuse_existing_paths(FmPath* parent, const char*
+ * Creates new #FmPath for child of @parent directory which have name
+ * @basename. The string length of @basename is @name_len. @basename is
+ * in glib filename encoding (can be non-UTF-8) of target filesystem.
++ * If @parent is %NULL then @basename assumed to be root of some file
++ * system.
+ *
+ * Returns: (transfer full): a new #FmPath for the path. You have to call
+ * fm_path_unref() when it's no longer needed.
+@@ -341,7 +343,7 @@ FmPath* _fm_path_new_child_len(FmPath* parent, const char* basename, int name_le
+ FmPath* fm_path_new_child_len(FmPath* parent, const char* basename, int name_len)
+ {
+ return _fm_path_new_child_len(parent, basename, name_len,
+- fm_path_is_native(parent));
++ parent && fm_path_is_native(parent));
+ }
+
+ /**
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0010-3584798-We-shouldn-t-disable-DnD-on-non-native-targe.patch b/libraries/libfm/patches/0010-3584798-We-shouldn-t-disable-DnD-on-non-native-targe.patch
new file mode 100644
index 0000000000..d14e9491bd
--- /dev/null
+++ b/libraries/libfm/patches/0010-3584798-We-shouldn-t-disable-DnD-on-non-native-targe.patch
@@ -0,0 +1,37 @@
+From 40aa4a6ae1531b189a25d373d642f5c7a1f7023d Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Thu, 15 Nov 2012 05:50:44 +0200
+Subject: [PATCH 10/22] [#3584798]We shouldn't disable DnD on non-native
+ targets completely.
+
+The handling dropping on non-native target should have some check
+but not denial as it was before. Let user get error message if
+dropping failed for now and do some other checks later.
+---
+ src/gtk/fm-dnd-dest.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/gtk/fm-dnd-dest.c b/src/gtk/fm-dnd-dest.c
+index 21cf2c0..371e5f6 100644
+--- a/src/gtk/fm-dnd-dest.c
++++ b/src/gtk/fm-dnd-dest.c
+@@ -811,12 +811,16 @@ query_sources:
+ else /* files inside trash are read only */
+ action = 0;
+ }
++#if 0
++ /* bug #3584798: DnD(copy/move) to remote host(SFTP://) does not work.
++ we should do some check if target FS is R/O instead of this */
+ else if(!fm_path_is_native(dest_path))
+ {
+ /* computer:/// and network:/// shouldn't received dropped files. */
+ /* FIXME: some special handling can be done with menu:// */
+ action = 0;
+ }
++#endif
+ else /* dest is a ordinary path */
+ {
+ /* determine if the dragged files are on the same device as destination file */
+--
+1.8.0.1
+
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 0000000000..a980e81668
--- /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
+
diff --git a/libraries/libfm/patches/0012-Fix-for-localizations-of-Detailed-List-View-headers.patch b/libraries/libfm/patches/0012-Fix-for-localizations-of-Detailed-List-View-headers.patch
new file mode 100644
index 0000000000..0fb620cc6f
--- /dev/null
+++ b/libraries/libfm/patches/0012-Fix-for-localizations-of-Detailed-List-View-headers.patch
@@ -0,0 +1,26 @@
+From 924208952dbd8408b20b9357d7154f7aa5081b3e Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 17 Nov 2012 04:36:58 +0200
+Subject: [PATCH 12/22] Fix for localizations of Detailed List View headers.
+
+Detailed List View headers appeared untranslated, macro _() should be added.
+---
+ src/gtk/fm-folder-model.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gtk/fm-folder-model.c b/src/gtk/fm-folder-model.c
+index 36f0d00..6072b3e 100644
+--- a/src/gtk/fm-folder-model.c
++++ b/src/gtk/fm-folder-model.c
+@@ -1783,7 +1783,7 @@ const char* fm_folder_model_col_get_title(FmFolderModel* model, FmFolderModelCol
+ if(G_UNLIKELY(!FM_FOLDER_MODEL_COL_IS_VALID(col_id)
+ || column_infos[col_id] == NULL)) /* invalid id */
+ return NULL;
+- return column_infos[col_id]->title;
++ return _(column_infos[col_id]->title);
+ }
+
+ /**
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0013-3587571-Ctrl-A-should-select-all-depending-on-focus.patch b/libraries/libfm/patches/0013-3587571-Ctrl-A-should-select-all-depending-on-focus.patch
new file mode 100644
index 0000000000..f642e171ea
--- /dev/null
+++ b/libraries/libfm/patches/0013-3587571-Ctrl-A-should-select-all-depending-on-focus.patch
@@ -0,0 +1,36 @@
+From afbe7e29106f9126c53a0c533ab007aae1f81139 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 17 Nov 2012 15:02:15 +0200
+Subject: [PATCH 13/22] [#3587571]Ctrl+A should select all depending on focus.
+
+The commit changes bahavior of Ctrl+A: it does not select all files in
+the active view anymore but does it only if focus in in the view.
+If focus is on some editable (i.e. path entry) it will select all in there.
+---
+ src/gtk/fm-folder-view.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/src/gtk/fm-folder-view.c b/src/gtk/fm-folder-view.c
+index fe65e9f..d7fa53e 100644
+--- a/src/gtk/fm-folder-view.c
++++ b/src/gtk/fm-folder-view.c
+@@ -1035,7 +1035,15 @@ static void on_rm(GtkAction* act, FmFolderView* fv)
+
+ static void on_select_all(GtkAction* act, FmFolderView* fv)
+ {
+- fm_folder_view_select_all(fv);
++ GtkMenu *popup = g_object_get_qdata(G_OBJECT(fv), popup_quark);
++ GtkWidget *win = gtk_menu_get_attach_widget(popup);
++ GtkWidget *focus = gtk_window_get_focus(GTK_WINDOW(win));
++
++ /* check if we are inside the view; for desktop focus will be NULL */
++ if(focus == NULL || gtk_widget_is_ancestor(focus, GTK_WIDGET(fv)))
++ fm_folder_view_select_all(fv);
++ else if(GTK_IS_EDITABLE(focus)) /* fallback for editables */
++ gtk_editable_select_region((GtkEditable*)focus, 0, -1);
+ }
+
+ static void on_invert_select(GtkAction* act, FmFolderView* fv)
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0014-Disabling-input-for-file-name-in-properties-dialog-w.patch b/libraries/libfm/patches/0014-Disabling-input-for-file-name-in-properties-dialog-w.patch
new file mode 100644
index 0000000000..67b0f0bd2f
--- /dev/null
+++ b/libraries/libfm/patches/0014-Disabling-input-for-file-name-in-properties-dialog-w.patch
@@ -0,0 +1,28 @@
+From a10573226a21c1ff3be24efdf7f57be3a3108c76 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Mon, 19 Nov 2012 23:38:34 +0200
+Subject: [PATCH 14/22] Disabling input for file name in properties dialog
+ window.
+
+Changing file name in file properties dialog isn't implemented yet even
+for single file therefore field for changing should be incensitive.
+---
+ src/gtk/fm-file-properties.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/gtk/fm-file-properties.c b/src/gtk/fm-file-properties.c
+index ec486f7..ec672b7 100644
+--- a/src/gtk/fm-file-properties.c
++++ b/src/gtk/fm-file-properties.c
+@@ -786,6 +786,8 @@ static void update_ui(FmFilePropData* data)
+ localtime_r(&atime, &tm);
+ strftime(buf, sizeof(buf), "%x %R", &tm);
+ gtk_label_set_text(data->atime, buf);
++ /* FIXME: changing file name isn't implemented yet, disable entry */
++ gtk_widget_set_sensitive(GTK_WIDGET(data->name), FALSE);
+ }
+ else
+ {
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0015-Adding-tooltips-for-file-name-and-location-in-file-p.patch b/libraries/libfm/patches/0015-Adding-tooltips-for-file-name-and-location-in-file-p.patch
new file mode 100644
index 0000000000..ba8718b034
--- /dev/null
+++ b/libraries/libfm/patches/0015-Adding-tooltips-for-file-name-and-location-in-file-p.patch
@@ -0,0 +1,39 @@
+From 3cea23d685c92dff892aebff01bd1908c4b7e169 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Mon, 19 Nov 2012 23:41:10 +0200
+Subject: [PATCH 15/22] Adding tooltips for file name and location in file
+ properties.
+
+In case when file name is too long to be shown in the field it will be
+truncated so user cannot see it. Adding tooltip with full file name
+and full file path helps to see it in any case.
+The commit implements showing tooltips on base of text lenght, not
+rendering size. That probably should be changed later.
+---
+ src/gtk/fm-file-properties.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/gtk/fm-file-properties.c b/src/gtk/fm-file-properties.c
+index ec672b7..3d79cdf 100644
+--- a/src/gtk/fm-file-properties.c
++++ b/src/gtk/fm-file-properties.c
+@@ -772,9 +772,16 @@ static void update_ui(FmFilePropData* data)
+ time_t atime;
+ struct tm tm;
+ gtk_entry_set_text(data->name, fm_file_info_get_disp_name(data->fi));
++ /* FIXME: check if text fits in line */
++ if(strlen(fm_file_info_get_disp_name(data->fi)) > 16)
++ gtk_widget_set_tooltip_text(GTK_WIDGET(data->name),
++ fm_file_info_get_disp_name(data->fi));
+ if(parent_str)
+ {
+ gtk_label_set_text(data->dir, parent_str);
++ /* FIXME: check if text fits in line */
++ if(strlen(parent_str) > 16)
++ gtk_widget_set_tooltip_text(GTK_WIDGET(data->dir), parent_str);
+ g_free(parent_str);
+ }
+ else
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0016-Fix-file-owner-group-should-be-properly-disabled-in-.patch b/libraries/libfm/patches/0016-Fix-file-owner-group-should-be-properly-disabled-in-.patch
new file mode 100644
index 0000000000..34a1b3041e
--- /dev/null
+++ b/libraries/libfm/patches/0016-Fix-file-owner-group-should-be-properly-disabled-in-.patch
@@ -0,0 +1,34 @@
+From 7b83548b43e2af014873655c850f580b16d24d57 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Mon, 19 Nov 2012 23:33:40 +0200
+Subject: [PATCH 16/22] Fix: file owner/group should be properly disabled in
+ dialog.
+
+Currently if owner and group cannot be changed by user those fields
+are enabled for set cursor but content is unchangeable. That may
+be questioned by users and considered as bug, it also visually not
+distinguishable from changeable case.
+The commit properly disables those fields completely so user will
+see it cannot be changed and cannot set keyboard focus there.
+---
+ src/gtk/fm-file-properties.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/gtk/fm-file-properties.c b/src/gtk/fm-file-properties.c
+index 3d79cdf..a87b546 100644
+--- a/src/gtk/fm-file-properties.c
++++ b/src/gtk/fm-file-properties.c
+@@ -591,8 +591,8 @@ static void update_permissions(FmFilePropData* data)
+ /* on local filesystems, only root can do chown. */
+ if( data->all_native && geteuid() != 0 )
+ {
+- gtk_editable_set_editable(GTK_EDITABLE(data->owner), FALSE);
+- gtk_editable_set_editable(GTK_EDITABLE(data->group), FALSE);
++ gtk_widget_set_sensitive(GTK_WIDGET(data->owner), FALSE);
++ gtk_widget_set_sensitive(GTK_WIDGET(data->group), FALSE);
+ }
+
+ /* read access chooser */
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0017-Fix-disabled-name-cannot-be-copied-to-clipboard-make.patch b/libraries/libfm/patches/0017-Fix-disabled-name-cannot-be-copied-to-clipboard-make.patch
new file mode 100644
index 0000000000..1b63f37e17
--- /dev/null
+++ b/libraries/libfm/patches/0017-Fix-disabled-name-cannot-be-copied-to-clipboard-make.patch
@@ -0,0 +1,29 @@
+From e1029d5ebf0fb1ea49cd4a26eb6f444f703d6e63 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Tue, 20 Nov 2012 02:31:18 +0200
+Subject: [PATCH 17/22] Fix: disabled name cannot be copied to clipboard, make
+ it unfocusable instead.
+
+Set name insensitive is good in visual but we cannot 'Select All'+'Copy'
+on it. Therefore make it unfocusable and ineditable instead.
+---
+ src/gtk/fm-file-properties.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/gtk/fm-file-properties.c b/src/gtk/fm-file-properties.c
+index a87b546..39b402b 100644
+--- a/src/gtk/fm-file-properties.c
++++ b/src/gtk/fm-file-properties.c
+@@ -794,7 +794,8 @@ static void update_ui(FmFilePropData* data)
+ strftime(buf, sizeof(buf), "%x %R", &tm);
+ gtk_label_set_text(data->atime, buf);
+ /* FIXME: changing file name isn't implemented yet, disable entry */
+- gtk_widget_set_sensitive(GTK_WIDGET(data->name), FALSE);
++ gtk_widget_set_can_focus(GTK_WIDGET(data->name), FALSE);
++ gtk_editable_set_editable(GTK_EDITABLE(data->name), FALSE);
+ }
+ else
+ {
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0018-Change-FM_CONFIG_DEFAULT_NO_USB_TRASH-to-more-expect.patch b/libraries/libfm/patches/0018-Change-FM_CONFIG_DEFAULT_NO_USB_TRASH-to-more-expect.patch
new file mode 100644
index 0000000000..899f6e5234
--- /dev/null
+++ b/libraries/libfm/patches/0018-Change-FM_CONFIG_DEFAULT_NO_USB_TRASH-to-more-expect.patch
@@ -0,0 +1,34 @@
+From 70ff12a694a85184775740fcb501342c75fd551b Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Tue, 20 Nov 2012 23:53:16 +0200
+Subject: [PATCH 18/22] Change FM_CONFIG_DEFAULT_NO_USB_TRASH to more expecting
+ TRUE.
+
+The most expected for users used to Windows behavior for that option
+is to have it TRUE, and FALSE creates behavior unexpected by most of
+the users and, moreover, even when user plug off flash drive an then
+plug in it, the trash may be not always recognized by GVFS therefore
+it's not trivial to get files on flash drive be REALLY deleted. And
+users blame pcmanfm, of course.
+The commit changes default. It will not affect users who already use
+libfm 1.1.0 and have own setting for it but only new users.
+---
+ src/base/fm-config.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/base/fm-config.h b/src/base/fm-config.h
+index 313db7c..cd41399 100644
+--- a/src/base/fm-config.h
++++ b/src/base/fm-config.h
+@@ -43,7 +43,7 @@ typedef struct _FmConfigClass FmConfigClass;
+ #define FM_CONFIG_DEFAULT_SINGLE_CLICK FALSE
+ #define FM_CONFIG_DEFAULT_USE_TRASH TRUE
+ #define FM_CONFIG_DEFAULT_CONFIRM_DEL TRUE
+-#define FM_CONFIG_DEFAULT_NO_USB_TRASH FALSE
++#define FM_CONFIG_DEFAULT_NO_USB_TRASH TRUE
+
+ #define FM_CONFIG_DEFAULT_BIG_ICON_SIZE 48
+ #define FM_CONFIG_DEFAULT_SMALL_ICON_SIZE 16
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0019-3589259-Fix-for-dropping-files-onto-Trash-in-Places-.patch b/libraries/libfm/patches/0019-3589259-Fix-for-dropping-files-onto-Trash-in-Places-.patch
new file mode 100644
index 0000000000..d132710fb8
--- /dev/null
+++ b/libraries/libfm/patches/0019-3589259-Fix-for-dropping-files-onto-Trash-in-Places-.patch
@@ -0,0 +1,34 @@
+From 0beaa4830244ab72eeece67bb99802c3aa04f81c Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 24 Nov 2012 00:56:34 +0200
+Subject: [PATCH 19/22] [#3589259]Fix for dropping files onto Trash in Places
+ sidebar.
+
+The Trash item in Places sidebar has incomplete file info and
+FmDndDest widget thinks it's not droppable target.
+The commit adds job to update Trash item so it will be complete.
+---
+ src/gtk/fm-places-model.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/gtk/fm-places-model.c b/src/gtk/fm-places-model.c
+index f5d6927..b637089 100644
+--- a/src/gtk/fm-places-model.c
++++ b/src/gtk/fm-places-model.c
+@@ -611,8 +611,13 @@ static void create_trash_item(FmPlacesModel* model)
+ FmPlacesItem* item;
+ GdkPixbuf* pix;
+ GFile* gf;
++ FmFileInfoJob* job = fm_file_info_job_new(NULL, FM_FILE_INFO_JOB_NONE);
+
+ gf = fm_file_new_for_uri("trash:///");
++ fm_file_info_job_add(job, fm_path_get_trash());
++ g_signal_connect(job, "finished", G_CALLBACK(on_file_info_job_finished), model);
++ model->jobs = g_slist_prepend(model->jobs, job);
++ fm_job_run_async(FM_JOB(job));
+ model->trash_monitor = fm_monitor_directory(gf, NULL);
+ g_signal_connect(model->trash_monitor, "changed", G_CALLBACK(on_trash_changed), model);
+ g_object_unref(gf);
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0020-Fix-after-changing-the-folder-selection-isn-t-reset.patch b/libraries/libfm/patches/0020-Fix-after-changing-the-folder-selection-isn-t-reset.patch
new file mode 100644
index 0000000000..cc3b422db5
--- /dev/null
+++ b/libraries/libfm/patches/0020-Fix-after-changing-the-folder-selection-isn-t-reset.patch
@@ -0,0 +1,31 @@
+From 7d31d56805d907bcb23f6b4c54719ac3b8f7a137 Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 24 Nov 2012 17:31:48 +0200
+Subject: [PATCH 20/22] Fix: after changing the folder selection isn't reset
+
+This is reported in https://bugs.launchpad.net/ubuntu/+source/pcmanfm/+bug/1071231
+
+After changing the folder selection is still stays cached
+so pressing 'Delete' will trash the folder where we just came.
+The commit adds cleanup on idle after model is changed.
+---
+ src/gtk/fm-standard-view.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/gtk/fm-standard-view.c b/src/gtk/fm-standard-view.c
+index 175cced..1ff55ae 100644
+--- a/src/gtk/fm-standard-view.c
++++ b/src/gtk/fm-standard-view.c
+@@ -275,6 +275,9 @@ static void unset_model(FmStandardView* fv)
+ /* g_debug("unset_model: %p, n_ref = %d", model, G_OBJECT(model)->ref_count); */
+ g_object_unref(model);
+ fv->model = NULL;
++ /* https://bugs.launchpad.net/ubuntu/+source/pcmanfm/+bug/1071231:
++ after changing the folder selection isn't reset */
++ on_sel_changed(NULL, fv);
+ }
+ }
+
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0021-Fix-over-previous-commit-it-leaded-to-crash.patch b/libraries/libfm/patches/0021-Fix-over-previous-commit-it-leaded-to-crash.patch
new file mode 100644
index 0000000000..ba8a02fdca
--- /dev/null
+++ b/libraries/libfm/patches/0021-Fix-over-previous-commit-it-leaded-to-crash.patch
@@ -0,0 +1,46 @@
+From 01c1de235d7bdf702f8d1dfc99645b57afe3deec Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Sat, 24 Nov 2012 19:34:44 +0200
+Subject: [PATCH 21/22] Fix over previous commit: it leaded to crash.
+
+The last fix was incorrect since it updated selection after the
+model was actually unset in FmStandardView but still in ExoIconView
+therefore it crashed in raised callbacks.
+The commit does it simpler by unselecting them all. That will
+still send a signal about reset selection but will not conflict.
+---
+ src/gtk/fm-folder-view.c | 3 +++
+ src/gtk/fm-standard-view.c | 3 ---
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/gtk/fm-folder-view.c b/src/gtk/fm-folder-view.c
+index d7fa53e..240f0e3 100644
+--- a/src/gtk/fm-folder-view.c
++++ b/src/gtk/fm-folder-view.c
+@@ -624,6 +624,9 @@ void fm_folder_view_set_model(FmFolderView* fv, FmFolderModel* model)
+ {
+ fm_folder_model_get_sort(old_model, &by, &mode);
+ unset_model(fv, old_model);
++ /* https://bugs.launchpad.net/ubuntu/+source/pcmanfm/+bug/1071231:
++ after changing the folder selection isn't reset */
++ iface->unselect_all(fv);
+ }
+ /* FIXME: which setting to apply if this is first model? */
+ iface->set_model(fv, model);
+diff --git a/src/gtk/fm-standard-view.c b/src/gtk/fm-standard-view.c
+index 1ff55ae..175cced 100644
+--- a/src/gtk/fm-standard-view.c
++++ b/src/gtk/fm-standard-view.c
+@@ -275,9 +275,6 @@ static void unset_model(FmStandardView* fv)
+ /* g_debug("unset_model: %p, n_ref = %d", model, G_OBJECT(model)->ref_count); */
+ g_object_unref(model);
+ fv->model = NULL;
+- /* https://bugs.launchpad.net/ubuntu/+source/pcmanfm/+bug/1071231:
+- after changing the folder selection isn't reset */
+- on_sel_changed(NULL, fv);
+ }
+ }
+
+--
+1.8.0.1
+
diff --git a/libraries/libfm/patches/0022-3590304-Fallback-themed-icon-folder-video-to-folder-.patch b/libraries/libfm/patches/0022-3590304-Fallback-themed-icon-folder-video-to-folder-.patch
new file mode 100644
index 0000000000..4852b267b6
--- /dev/null
+++ b/libraries/libfm/patches/0022-3590304-Fallback-themed-icon-folder-video-to-folder-.patch
@@ -0,0 +1,50 @@
+From 552d91d59d32c0ed9fec958bf4f3c99a9caccedd Mon Sep 17 00:00:00 2001
+From: Andriy Grytsenko <andrej@rep.kiev.ua>
+Date: Tue, 27 Nov 2012 21:23:15 +0200
+Subject: [PATCH 22/22] [#3590304]Fallback themed icon "folder-video" to
+ "folder" not to gnome.
+
+GTK fallbacks missing themed icon "folder-video" to GNOME
+"folder-video" and that breaks icon theme.
+The same happens with many other icons.
+It is better to use g_themed_icon_new_with_default_fallbacks()
+and use default fallback to "folder" in case of above.
+---
+ src/base/fm-icon.c | 2 +-
+ src/gtk/fm-icon-pixbuf.c | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/base/fm-icon.c b/src/base/fm-icon.c
+index 42dd3fc..e86a13b 100644
+--- a/src/base/fm-icon.c
++++ b/src/base/fm-icon.c
+@@ -99,7 +99,7 @@ FmIcon* fm_icon_from_name(const char* name)
+ g_object_unref(gicon_file);
+ }
+ else
+- gicon = g_themed_icon_new(name);
++ gicon = g_themed_icon_new_with_default_fallbacks(name);
+
+ if(G_LIKELY(gicon))
+ {
+diff --git a/src/gtk/fm-icon-pixbuf.c b/src/gtk/fm-icon-pixbuf.c
+index b30d7c7..8b1c276 100644
+--- a/src/gtk/fm-icon-pixbuf.c
++++ b/src/gtk/fm-icon-pixbuf.c
+@@ -102,11 +102,13 @@ GdkPixbuf* fm_pixbuf_from_icon(FmIcon* icon, int size)
+ char* str = g_icon_to_string(icon->gicon);
+ g_debug("unable to load icon %s", str);
+ /* pix = NULL; */
++#if 0
+ if(g_strcmp0(str, "folder-locked") == 0)
+ pix = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "folder",
+ size, GTK_ICON_LOOKUP_USE_BUILTIN|GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
+ /* FIXME: create locked icon from "folder" one */
+ else
++#endif
+ pix = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "unknown",
+ size, GTK_ICON_LOOKUP_USE_BUILTIN|GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
+ if(G_LIKELY(pix))
+--
+1.8.0.1
+