[packages/libfm] - config logic and gcc14 build fixes from fedora, rel 3

baggins baggins at pld-linux.org
Fri Aug 2 04:36:09 CEST 2024


commit c1a9a606c38d2c12fd91a09e0f1217dde69575d3
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Fri Aug 2 02:53:39 2024 +0200

    - config logic and gcc14 build fixes from fedora, rel 3

 ...oad_from_key_file-don-t-replace-string-va.patch | 91 ++++++++++++++++++++++
 ...t-gcc14-Werror-incompatible-pointer-types.patch | 56 +++++++++++++
 libfm.spec                                         |  9 ++-
 3 files changed, 155 insertions(+), 1 deletion(-)
---
diff --git a/libfm.spec b/libfm.spec
index ecd2392..f4611f2 100644
--- a/libfm.spec
+++ b/libfm.spec
@@ -12,12 +12,14 @@ Summary:	Helper library for pcmanfm
 Summary(pl.UTF-8):	Biblioteka pomocnicza do pcmanfm
 Name:		libfm
 Version:	1.3.2
-Release:	2
+Release:	3
 License:	GPL v2+
 Group:		Libraries
 Source0:	http://downloads.sourceforge.net/pcmanfm/%{name}-%{version}.tar.xz
 # Source0-md5:	c87a0ff41ae77825079b2f785ec0741e
 Patch0:		%{name}-doc.patch
+Patch1:		0001-fm_config_load_from_key_file-don-t-replace-string-va.patch
+Patch2:		0002-FIX-support-gcc14-Werror-incompatible-pointer-types.patch
 URL:		http://pcmanfm.sourceforge.net/
 BuildRequires:	cairo-devel >= 1.8.0
 BuildRequires:	dbus-glib-devel
@@ -176,6 +178,11 @@ Statyczna biblioteka libfm-extra.
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
+# Force regeneration of Vala sources
+%{__rm} src/actions/*.c
 
 %build
 %configure \
diff --git a/0001-fm_config_load_from_key_file-don-t-replace-string-va.patch b/0001-fm_config_load_from_key_file-don-t-replace-string-va.patch
new file mode 100644
index 0000000..493abf9
--- /dev/null
+++ b/0001-fm_config_load_from_key_file-don-t-replace-string-va.patch
@@ -0,0 +1,91 @@
+From 1789c96ae73720ef001249d2085553102043aee3 Mon Sep 17 00:00:00 2001
+From: Mamoru TASAKA <mtasaka at fedoraproject.org>
+Date: Thu, 28 Oct 2021 22:07:14 +0900
+Subject: [PATCH] fm_config_load_from_key_file: don't replace string value when
+ loaded config file does not have such key
+
+For example, fm_config_load_from_file() loads every key file with path
+ending with "/libfm/libfm.conf" under XDG_CONFIG_DIRS using fm_config_load_from_key_file().
+
+With current fm_config_load_from_key_file() implementation, every time it is called,
+for key having string, firstly the old value is always free'ed, and the new value is
+read and set, even if the new value is empty.
+So if system wide key file contains a key with string value but user-specific key file
+does not contain the key, system widely set key value is lost, which is unwilling.
+
+For other value types (such as bool or int), the corresponding fm_key_file_get_TYPE
+function are used, and these functions replace old values when the new config file
+actually has the corresponding key.
+
+With this patch, similar to other value types, string value is to be replaced
+only when new loaded config actually has corresponding key.
+Also, implement fm_key_file_get_string() to be consistent with other types.
+---
+ src/base/fm-config.c | 30 ++++++++++++++++++------------
+ 1 file changed, 18 insertions(+), 12 deletions(-)
+
+diff --git a/src/base/fm-config.c b/src/base/fm-config.c
+index a633857..1e3d3f7 100644
+--- a/src/base/fm-config.c
++++ b/src/base/fm-config.c
+@@ -245,6 +245,19 @@ static void _parse_drop_default_action(GKeyFile *kf, gint *action)
+     }
+ }
+ 
++static gboolean fm_key_file_get_string(GKeyFile* kf, const char* grp, const char* key, char** val)
++{
++    char* str_key_new = g_key_file_get_string(kf, grp, key, NULL);
++    if(G_LIKELY(str_key_new))
++    {
++        if (*val)
++            g_free(*val);
++        *val = str_key_new;
++    }
++    return str_key_new != NULL;
++}
++
++
+ /**
+  * fm_config_load_from_key_file
+  * @cfg: pointer to configuration
+@@ -263,12 +276,8 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
+     fm_key_file_get_int(kf, "config", "auto_selection_delay", &cfg->auto_selection_delay);
+     fm_key_file_get_bool(kf, "config", "confirm_del", &cfg->confirm_del);
+     fm_key_file_get_bool(kf, "config", "confirm_trash", &cfg->confirm_trash);
+-    if(cfg->terminal)
+-        g_free(cfg->terminal);
+-    cfg->terminal = g_key_file_get_string(kf, "config", "terminal", NULL);
+-    if(cfg->archiver)
+-        g_free(cfg->archiver);
+-    cfg->archiver = g_key_file_get_string(kf, "config", "archiver", NULL);
++    fm_key_file_get_string(kf, "config", "terminal", &cfg->terminal);
++    fm_key_file_get_string(kf, "config", "archiver", &cfg->archiver);
+     fm_key_file_get_bool(kf, "config", "thumbnail_local", &cfg->thumbnail_local);
+     fm_key_file_get_int(kf, "config", "thumbnail_max", &cfg->thumbnail_max);
+     fm_key_file_get_bool(kf, "config", "advanced_mode", &cfg->advanced_mode);
+@@ -285,8 +294,7 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
+     fm_key_file_get_bool(kf, "config", "defer_content_test", &cfg->defer_content_test);
+     fm_key_file_get_bool(kf, "config", "quick_exec", &cfg->quick_exec);
+     fm_key_file_get_bool(kf, "config", "smart_desktop_autodrop", &cfg->smart_desktop_autodrop);
+-    g_free(cfg->format_cmd);
+-    cfg->format_cmd = g_key_file_get_string(kf, "config", "format_cmd", NULL);
++    fm_key_file_get_string(kf, "config", "format_cmd", &cfg->format_cmd);
+     /* append blacklist */
+     strv = g_key_file_get_string_list(kf, "config", "modules_blacklist", NULL, NULL);
+     fm_strcatv(&cfg->modules_blacklist, strv);
+@@ -305,10 +313,8 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
+     fm_key_file_get_int(kf, "ui", "thumbnail_size", &cfg->thumbnail_size);
+     fm_key_file_get_bool(kf, "ui", "show_thumbnail", &cfg->show_thumbnail);
+     fm_key_file_get_bool(kf, "ui", "shadow_hidden", &cfg->shadow_hidden);
+-    g_free(cfg->list_view_size_units);
+-    cfg->list_view_size_units = g_key_file_get_string(kf, "ui", "list_view_size_units", NULL);
+-    g_free(cfg->saved_search);
+-    cfg->saved_search = g_key_file_get_string(kf, "ui", "saved_search", NULL);
++    fm_key_file_get_string(kf, "ui", "list_view_size_units", &cfg->list_view_size_units);
++    fm_key_file_get_string(kf, "ui", "saved_search",  &cfg->saved_search);
+ 
+     fm_key_file_get_bool(kf, "places", "places_home", &cfg->places_home);
+     fm_key_file_get_bool(kf, "places", "places_desktop", &cfg->places_desktop);
+-- 
+2.33.1
+
diff --git a/0002-FIX-support-gcc14-Werror-incompatible-pointer-types.patch b/0002-FIX-support-gcc14-Werror-incompatible-pointer-types.patch
new file mode 100644
index 0000000..7389021
--- /dev/null
+++ b/0002-FIX-support-gcc14-Werror-incompatible-pointer-types.patch
@@ -0,0 +1,56 @@
+From a86353b8ef8ddd5c8a8a0de9b00a103e8f5e5c52 Mon Sep 17 00:00:00 2001
+From: libfm Fedora maintainer <libfm-maintainer at fedoraproject.org>
+Date: Fri, 23 Feb 2024 14:56:20 +0900
+Subject: [PATCH] FIX: support gcc14 -Werror=incompatible-pointer-types
+
+gcc14 now defaults to -Werror=incompatible-pointer-types .
+To support this, cast GTK related objects for assignment
+properly.
+---
+ src/gtk/exo/exo-icon-view.c | 2 +-
+ src/gtk/fm-dnd-dest.c       | 2 +-
+ src/gtk/fm-standard-view.c  | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/gtk/exo/exo-icon-view.c b/src/gtk/exo/exo-icon-view.c
+index 3ce9809..79e1c7a 100644
+--- a/src/gtk/exo/exo-icon-view.c
++++ b/src/gtk/exo/exo-icon-view.c
+@@ -2819,7 +2819,7 @@ exo_icon_view_key_press_event (GtkWidget   *widget,
+   /* allocate a new event to forward */
+   new_event = gdk_event_copy ((GdkEvent *) event);
+   g_object_unref (G_OBJECT (new_event->key.window));
+-  new_event->key.window = g_object_ref (G_OBJECT (gtk_widget_get_window (icon_view->priv->search_entry)));
++  new_event->key.window = GDK_WINDOW(g_object_ref (G_OBJECT (gtk_widget_get_window (icon_view->priv->search_entry))));
+ 
+   /* send the event to the search entry. If the "preedit-changed" signal is
+    * emitted during this event, priv->search_imcontext_changed will be set.
+diff --git a/src/gtk/fm-dnd-dest.c b/src/gtk/fm-dnd-dest.c
+index 95d310d..ce75275 100644
+--- a/src/gtk/fm-dnd-dest.c
++++ b/src/gtk/fm-dnd-dest.c
+@@ -458,7 +458,7 @@ static GdkDragAction _ask_action_on_drop(GtkWidget *widget,
+             gtk_action_set_sensitive(act, FALSE);
+         }
+     }
+-    ri.menu = g_object_ref(gtk_ui_manager_get_widget(ui, "/popup"));
++    ri.menu = GTK_MENU(g_object_ref(gtk_ui_manager_get_widget(ui, "/popup")));
+     g_signal_connect(ri.menu, "selection-done", G_CALLBACK(gtk_widget_destroy), NULL);
+     unmap_handler = g_signal_connect(ri.menu, "unmap",
+                                      G_CALLBACK(run_unmap_handler), &ri);
+diff --git a/src/gtk/fm-standard-view.c b/src/gtk/fm-standard-view.c
+index e0ff5a0..df92025 100644
+--- a/src/gtk/fm-standard-view.c
++++ b/src/gtk/fm-standard-view.c
+@@ -637,7 +637,7 @@ static inline void create_icon_view(FmStandardView* fv, GList* sels)
+                                 "text", FM_FOLDER_MODEL_COL_NAME );
+     if(fv->renderer_text)
+         g_object_unref(fv->renderer_text);
+-    fv->renderer_text = g_object_ref_sink(render);
++    fv->renderer_text = FM_CELL_RENDERER_TEXT(g_object_ref_sink(render));
+     exo_icon_view_set_search_column((ExoIconView*)fv->view, FM_FOLDER_MODEL_COL_NAME);
+     g_signal_connect(fv->view, "item-activated", G_CALLBACK(on_icon_view_item_activated), fv);
+     g_signal_connect(fv->view, "selection-changed", G_CALLBACK(on_sel_changed), fv);
+-- 
+2.43.2
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/libfm.git/commitdiff/c1a9a606c38d2c12fd91a09e0f1217dde69575d3



More information about the pld-cvs-commit mailing list