diff options
Diffstat (limited to 'extra/thunar/fix-launching-multiple-files-7456.patch')
-rw-r--r-- | extra/thunar/fix-launching-multiple-files-7456.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/extra/thunar/fix-launching-multiple-files-7456.patch b/extra/thunar/fix-launching-multiple-files-7456.patch new file mode 100644 index 000000000..40d581553 --- /dev/null +++ b/extra/thunar/fix-launching-multiple-files-7456.patch @@ -0,0 +1,53 @@ +From 379b8b9f350cb362735eb0e2a0e9471a898f2664 Mon Sep 17 00:00:00 2001 +From: John Lindgren <john.lindgren@aol.com> +Date: Sun, 26 Feb 2012 18:52:24 +0000 +Subject: Fix handling %U when launching multiple files with an app (bug #7456). + +GIO returns a newly allocated GAppInfo every time +g_app_info_get_default_for_type() is called. This means that if we use a +GHashTable and g_direct_hash() to associate GAppInfos with files to be +launched with each of them, we will actually end up with multiple +GAppInfos that are the same, and each of them will only have a single +file associated. + +To fix this, we now use a fake hash function that causes GHashTable to +always search the GAppInfo in the collision list. +--- +diff --git a/thunar/thunar-launcher.c b/thunar/thunar-launcher.c +index f479cf9..9f96b87 100644 +--- a/thunar/thunar-launcher.c ++++ b/thunar/thunar-launcher.c +@@ -546,17 +546,28 @@ thunar_launcher_execute_files (ThunarLauncher *launcher, + + + ++static guint ++thunar_launcher_g_app_info_hash (gconstpointer app_info) ++{ ++ return 0; ++} ++ ++ ++ + static void + thunar_launcher_open_files (ThunarLauncher *launcher, + GList *files) + { +- GAppInfo *app_info; + GHashTable *applications; ++ GAppInfo *app_info; + GList *file_list; + GList *lp; + +- /* allocate a hash table to associate applications to URIs */ +- applications = g_hash_table_new_full (g_direct_hash, ++ /* allocate a hash table to associate applications to URIs. since GIO allocates ++ * new GAppInfo objects every time, g_direct_hash does not work. we therefor use ++ * a fake hash function to always hit the collision list of the hash table and ++ * avoid storing multiple equal GAppInfos by means of g_app_info_equal(). */ ++ applications = g_hash_table_new_full (thunar_launcher_g_app_info_hash, + (GEqualFunc) g_app_info_equal, + (GDestroyNotify) g_object_unref, + (GDestroyNotify) thunar_g_file_list_free); +-- +cgit v0.9.0.2 |