e4700be
From 2aa35e4c8a9d9c632e411df83d43ec27f4ddf718 Mon Sep 17 00:00:00 2001
e4700be
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
e4700be
Date: Sun, 21 Mar 2021 21:52:10 +0900
e4700be
Subject: [PATCH 1/2] load_icon_themes_from_dir: never reuse GKeyFile object
e4700be
e4700be
As written on:
e4700be
https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html#g-key-file-load-from-file
e4700be
an empty GKeyFile object must be passed to g_key_file_load_from_file .
e4700be
---
e4700be
 src/icon-theme.c | 8 ++++----
e4700be
 src/icon-theme.h | 2 +-
e4700be
 src/utils.c      | 4 +---
e4700be
 3 files changed, 6 insertions(+), 8 deletions(-)
e4700be
e4700be
diff --git a/src/icon-theme.c b/src/icon-theme.c
e4700be
index 7fba616..ea1db83 100644
e4700be
--- a/src/icon-theme.c
e4700be
+++ b/src/icon-theme.c
e4700be
@@ -46,7 +46,7 @@ static void icon_theme_free(IconTheme* theme)
e4700be
     g_slice_free(IconTheme, theme);
e4700be
 }
e4700be
 
e4700be
-void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir, GKeyFile* kf)
e4700be
+void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir)
e4700be
 {
e4700be
     /* NOTE:
e4700be
      * 1. theoratically, base_dir is identical to theme_dir
e4700be
@@ -75,6 +75,7 @@ void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir, GKey
e4700be
                 IconTheme* theme = g_slice_new0(IconTheme);
e4700be
                 char* index_theme;
e4700be
                 char* cursor_subdir;
e4700be
+                GKeyFile* kf = g_key_file_new();
e4700be
 
e4700be
                 theme->name = g_strdup(name);
e4700be
                 index_theme = g_build_filename(theme_dir, name, "index.theme", NULL);
e4700be
@@ -97,6 +98,7 @@ void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir, GKey
e4700be
                 else
e4700be
                     theme->disp_name = theme->name;
e4700be
                 g_free(index_theme);
e4700be
+                g_key_file_free(kf);
e4700be
 
e4700be
                 cursor_subdir = g_build_filename(theme_dir, name, "cursors", NULL);
e4700be
                 /* it contains a cursor theme */
e4700be
@@ -119,13 +121,11 @@ static void load_icon_themes()
e4700be
 {
e4700be
     int n, i;
e4700be
     gtk_icon_theme_get_search_path(gtk_icon_theme_get_default(), &icon_theme_dirs, &n);
e4700be
-    GKeyFile* kf = g_key_file_new();
e4700be
     for(i = 0; i < n; ++i)
e4700be
     {
e4700be
-        load_icon_themes_from_dir(icon_theme_dirs[i], icon_theme_dirs[i], kf);
e4700be
+        load_icon_themes_from_dir(icon_theme_dirs[i], icon_theme_dirs[i]);
e4700be
         /* g_debug("icon_theme_dirs[%d] = %s", i, icon_theme_dirs[i]); */
e4700be
     }
e4700be
-    g_key_file_free(kf);
e4700be
 }
e4700be
 
e4700be
 
e4700be
diff --git a/src/icon-theme.h b/src/icon-theme.h
e4700be
index 7ba2ac1..45a104d 100644
e4700be
--- a/src/icon-theme.h
e4700be
+++ b/src/icon-theme.h
e4700be
@@ -40,7 +40,7 @@ typedef struct
e4700be
 }IconTheme;
e4700be
 
e4700be
 void icon_theme_init(GtkBuilder* b);
e4700be
-void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir, GKeyFile* kf);
e4700be
+void load_icon_themes_from_dir(const char* base_dir, const char* theme_dir);
e4700be
 
e4700be
 gint icon_theme_cmp_name(IconTheme* t, const char* name);
e4700be
 gint icon_theme_cmp_disp_name(IconTheme* t1, IconTheme* t2);
e4700be
diff --git a/src/utils.c b/src/utils.c
e4700be
index 09d356d..4f3af10 100644
e4700be
--- a/src/utils.c
e4700be
+++ b/src/utils.c
e4700be
@@ -159,11 +159,9 @@ _failed:
e4700be
         {
e4700be
             /* move files in tmp_dir to user_icons_dir */
e4700be
             GDir* dir;
e4700be
-            GKeyFile* kf = g_key_file_new();
e4700be
 
e4700be
             /* convert the themes in the dir to IconTheme structs and add them to app.icon_themes list */
e4700be
-            load_icon_themes_from_dir(user_icons_dir, tmp_dir, kf);
e4700be
-            g_key_file_free(kf);
e4700be
+            load_icon_themes_from_dir(user_icons_dir, tmp_dir);
e4700be
 
e4700be
             /* now really move this themes to $XDG_DATA_HOME/icons dir and also update the GUI */
e4700be
             dir = g_dir_open(tmp_dir, 0, NULL);
e4700be
-- 
e4700be
2.30.2
e4700be