Merge branch 'wip/otte/for-main' into 'main'

Fix infinite loop in zenity

See merge request GNOME/gtk!6767
This commit is contained in:
Matthias Clasen
2024-01-16 11:36:34 +00:00
5 changed files with 32 additions and 8 deletions

View File

@@ -269,11 +269,12 @@ gtk_column_view_cell_widget_size_allocate (GtkWidget *widget,
}
}
static void
gtk_column_view_cell_widget_unroot (GtkWidget *widget)
/* This should be to be called when unsetting the parent, but we have no
* set_parent vfunc().
*/
void
gtk_column_view_cell_widget_unset_column (GtkColumnViewCellWidget *self)
{
GtkColumnViewCellWidget *self = GTK_COLUMN_VIEW_CELL_WIDGET (widget);
if (self->column)
{
gtk_column_view_column_remove_cell (self->column, self);
@@ -288,8 +289,17 @@ gtk_column_view_cell_widget_unroot (GtkWidget *widget)
g_clear_object (&self->column);
}
}
GTK_WIDGET_CLASS (gtk_column_view_cell_widget_parent_class)->unroot (widget);
static void
gtk_column_view_cell_widget_dispose (GObject *object)
{
GtkColumnViewCellWidget *self = GTK_COLUMN_VIEW_CELL_WIDGET (object);
/* unset_parent() forgot to call this. Be very angry. */
g_warn_if_fail (self->column == NULL);
G_OBJECT_CLASS (gtk_column_view_cell_widget_parent_class)->dispose (object);
}
static GtkSizeRequestMode
@@ -308,6 +318,7 @@ gtk_column_view_cell_widget_class_init (GtkColumnViewCellWidgetClass *klass)
{
GtkListFactoryWidgetClass *factory_class = GTK_LIST_FACTORY_WIDGET_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
factory_class->create_object = gtk_column_view_cell_widget_create_object;
factory_class->setup_object = gtk_column_view_cell_widget_setup_object;
@@ -319,8 +330,8 @@ gtk_column_view_cell_widget_class_init (GtkColumnViewCellWidgetClass *klass)
widget_class->measure = gtk_column_view_cell_widget_measure;
widget_class->size_allocate = gtk_column_view_cell_widget_size_allocate;
widget_class->get_request_mode = gtk_column_view_cell_widget_get_request_mode;
widget_class->unroot = gtk_column_view_cell_widget_unroot;
gobject_class->dispose = gtk_column_view_cell_widget_dispose;
gtk_widget_class_set_css_name (widget_class, I_("cell"));
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GRID_CELL);

View File

@@ -46,5 +46,6 @@ void gtk_column_view_cell_widget_remove (
GtkColumnViewCellWidget * gtk_column_view_cell_widget_get_next (GtkColumnViewCellWidget *self);
GtkColumnViewCellWidget * gtk_column_view_cell_widget_get_prev (GtkColumnViewCellWidget *self);
GtkColumnViewColumn * gtk_column_view_cell_widget_get_column (GtkColumnViewCellWidget *self);
void gtk_column_view_cell_widget_unset_column (GtkColumnViewCellWidget *self);
G_END_DECLS

View File

@@ -592,6 +592,9 @@ void
gtk_column_view_row_widget_remove_child (GtkColumnViewRowWidget *self,
GtkWidget *child)
{
if (GTK_IS_COLUMN_VIEW_CELL_WIDGET (child))
gtk_column_view_cell_widget_unset_column (GTK_COLUMN_VIEW_CELL_WIDGET (child));
gtk_widget_unparent (child);
}

View File

@@ -119,10 +119,15 @@ row_data_update_info (RowData *data,
icon = g_file_icon_new (thumbnail_file);
g_object_unref (thumbnail_file);
}
else
else if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_ICON))
{
icon = g_file_info_get_icon (info);
}
else
{
icon = NULL;
}
gtk_widget_set_visible (data->icon, icon != NULL);
gtk_image_set_from_gicon (GTK_IMAGE (data->icon), icon);

View File

@@ -376,10 +376,14 @@ row_data_update_info (RowData *data,
icon = g_file_icon_new (thumbnail_file);
g_object_unref (thumbnail_file);
}
else
else if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_ICON))
{
icon = g_file_info_get_icon (info);
}
else
{
icon = NULL;
}
gtk_widget_set_visible (data->icon, icon != NULL);
gtk_image_set_from_gicon (GTK_IMAGE (data->icon), icon);