[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