summaryrefslogtreecommitdiff
path: root/extra/thunar/fix-launching-multiple-files-7456.patch
blob: 40d58155385af514349e295b6702da7a8596d8b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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