[Xfce4-commits] <thunar:master> Fix handling %U when launching multiple files with an app (bug #7456).

Jannis Pohlmann noreply at xfce.org
Sun Feb 26 19:58:02 CET 2012


Updating branch refs/heads/master
         to 16055b933c938886488c06b402e68e7383318a3a (commit)
       from d47f4053b1ea47299f5ef501cd98e5d5c7cf2026 (commit)

commit 16055b933c938886488c06b402e68e7383318a3a
Author: John Lindgren <john.lindgren at aol.com>
Date:   Sun Feb 26 18:52:24 2012 +0000

    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.

 NEWS                     |    1 +
 thunar/thunar-launcher.c |   17 ++++++++++++++---
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index f840b87..328b18a 100644
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,7 @@
   Patch by Eric Koegel.
 - Respect ThunarIconFactory::show-thumbnails. Fixes a regression.
 - Fix crash when removing an ancestor of the current folder (bug #8168).
+- Fix handling %U when launching multiple files with an app (bug #7456).
 
 1.3.0
 =====
diff --git a/thunar/thunar-launcher.c b/thunar/thunar-launcher.c
index 6d31dee..f525f89 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);


More information about the Xfce4-commits mailing list