OK On Wed, Dec 06, 2023 at 07:01:28PM +0100, Marc Espie wrote: > 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, >
-- Antoine