summaryrefslogtreecommitdiff
path: root/extra/thunar/fix-launching-multiple-files-7456.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/thunar/fix-launching-multiple-files-7456.patch')
-rw-r--r--extra/thunar/fix-launching-multiple-files-7456.patch53
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