With glib-2.78, gimp has become more or less unusable in large directories.
The culprit is gtk+2 which is end of life.
I found a backport from gtk+3 that fixes the issue.
See comments in patches.
okay ?
Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/gtk+2/Makefile,v
diff -u -p -r1.248 Makefile
--- Makefile 24 Apr 2023 11:45:24 -0000 1.248
+++ Makefile 6 Dec 2023 17:59:50 -0000
@@ -9,7 +9,7 @@ GNOME_PROJECT= gtk+
PKGNAME-main= gtk+2-${GNOME_VERSION}
PKGNAME-cups= gtk+2-cups-${GNOME_VERSION}
-REVISION-main= 5
+REVISION-main= 6
REVISION-cups= 4
CATEGORIES= x11 devel
Index: patches/patch-gtk_gtkfilechooserdefault_c
===================================================================
RCS file: patches/patch-gtk_gtkfilechooserdefault_c
diff -N patches/patch-gtk_gtkfilechooserdefault_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-gtk_gtkfilechooserdefault_c 6 Dec 2023 17:59:50 -0000
@@ -0,0 +1,20 @@
+See https://gitlab.gnome.org/GNOME/gimp/-/issues/9994
+and
https://gitlab.gnome.org/GNOME/gtk/-/commit/c1fa916e88de20fc61dc06d3ff9f26722effa0df#note_1852594
+Index: gtk/gtkfilechooserdefault.c
+--- gtk/gtkfilechooserdefault.c.orig
++++ gtk/gtkfilechooserdefault.c
+@@ -6378,10 +6378,12 @@ show_and_select_files (GtkFileChooserDefault *impl,
+ if (!_gtk_file_system_model_iter_is_visible (fsmodel, &iter))
+ {
+ GFileInfo *info = _gtk_file_system_model_get_info (fsmodel, &iter);
++ gboolean has_is_hidden = g_file_info_has_attribute (info,
"standard::is-hidden");
++ gboolean has_is_backup = g_file_info_has_attribute (info,
"standard::is-backup");
+
+ if (!enabled_hidden &&
+- (g_file_info_get_is_hidden (info) ||
+- g_file_info_get_is_backup (info)))
++ ((has_is_hidden && g_file_info_get_is_hidden (info)) ||
++ (has_is_backup && g_file_info_get_is_backup (info))))
+ {
+ g_object_set (impl, "show-hidden", TRUE, NULL);
+ enabled_hidden = TRUE;
Index: patches/patch-gtk_gtkfilesystemmodel_c
===================================================================
RCS file: patches/patch-gtk_gtkfilesystemmodel_c
diff -N patches/patch-gtk_gtkfilesystemmodel_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-gtk_gtkfilesystemmodel_c 6 Dec 2023 17:59:50 -0000
@@ -0,0 +1,25 @@
+See https://gitlab.gnome.org/GNOME/gimp/-/issues/9994
+and
https://gitlab.gnome.org/GNOME/gtk/-/commit/c1fa916e88de20fc61dc06d3ff9f26722effa0df#note_1852594
+Index: gtk/gtkfilesystemmodel.c
+--- gtk/gtkfilesystemmodel.c.orig
++++ gtk/gtkfilesystemmodel.c
+@@ -444,13 +444,18 @@ static gboolean
+ node_should_be_visible (GtkFileSystemModel *model, guint id, gboolean
filtered_out)
+ {
+ FileModelNode *node = get_node (model, id);
++ gboolean has_is_hidden, has_is_backup;
+ gboolean result;
+
+ if (node->info == NULL)
+ return FALSE;
++
++ has_is_hidden = g_file_info_has_attribute (node->info,
"standard::is-hidden");
++ has_is_backup = g_file_info_has_attribute (node->info,
"standard::is-backup");
+
+ if (!model->show_hidden &&
+- (g_file_info_get_is_hidden (node->info) || g_file_info_get_is_backup
(node->info)))
++ ((has_is_hidden && g_file_info_get_is_hidden (node->info)) ||
++ (has_is_backup && g_file_info_get_is_backup (node->info))))
+ return FALSE;
+
+ if (_gtk_file_info_consider_as_directory (node->info))
Index: patches/patch-gtk_gtkpathbar_c
===================================================================
RCS file: patches/patch-gtk_gtkpathbar_c
diff -N patches/patch-gtk_gtkpathbar_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-gtk_gtkpathbar_c 6 Dec 2023 17:59:50 -0000
@@ -0,0 +1,15 @@
+See https://gitlab.gnome.org/GNOME/gimp/-/issues/9994
+and
https://gitlab.gnome.org/GNOME/gtk/-/commit/c1fa916e88de20fc61dc06d3ff9f26722effa0df#note_1852594
+Index: gtk/gtkpathbar.c
+--- gtk/gtkpathbar.c.orig
++++ gtk/gtkpathbar.c
+@@ -1659,7 +1659,8 @@ gtk_path_bar_get_info_callback (GCancellable *cancella
+ }
+
+ display_name = g_file_info_get_display_name (info);
+- is_hidden = g_file_info_get_is_hidden (info) || g_file_info_get_is_backup
(info);
++ is_hidden = g_file_info_get_attribute_boolean (info, "standard::is-hidden")
||
++ g_file_info_get_attribute_boolean (info, "standard::is-backup");
+
+ gtk_widget_push_composite_child ();
+ button_data = make_directory_button (file_info->path_bar, display_name,