gsk_radial_gradient_node_new: assertion 'color_stops[i].offset >= color_stops[i - 1].offset' failed when closing a dialog
Steps to reproduce
- Use any Matcha theme: https://github.com/vinceliuice/Matcha-gtk-theme/
- Click the button in the example below
- Click "Close" in the dialog
#include <gtk/gtk.h>
static GtkWidget * menubutton;
static GMenu * menu = NULL;
static void
print_hello_and_set_menubutton_model (GtkWidget *widget,
gpointer data)
{
GtkWindow * window = GTK_WINDOW (data);
g_print ("Hello World\n");
GtkWidget * dialog =
gtk_message_dialog_new (
GTK_WINDOW (data), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE, "%s", "test");
gtk_window_set_title (GTK_WINDOW (dialog), "my dialog");
gtk_window_set_icon_name (GTK_WINDOW (dialog), "edit-copy");
gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
gtk_widget_show (GTK_WIDGET (dialog));
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_window_destroy),
NULL);
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *button;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (print_hello_and_set_menubutton_model), window);
gtk_window_set_child (GTK_WINDOW (window), button);
gtk_window_present (GTK_WINDOW (window));
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
Current behavior
CRITICAL messages:
(hello-world-gtk:89955): Gsk-CRITICAL **: 22:04:18.222: gsk_radial_gradient_node_new: assertion 'color_stops[i].offset >= color_stops[i - 1].offset' failed
(hello-world-gtk:89955): Gsk-CRITICAL **: 22:04:18.222: gsk_render_node_ref: assertion 'GSK_IS_RENDER_NODE (node)' failed
(hello-world-gtk:89955): Gsk-CRITICAL **: 22:04:18.222: gsk_render_node_unref: assertion 'GSK_IS_RENDER_NODE (node)' failed
Other than the messages, there don't seem to be any issues
Expected outcome
No CRITICAL messages
Version information
GTK 4.4.0 from Arch Linux, also happens on latest master
Additional information
I only have Matcha theme installed so I can only test that or "Default". This issue does not happen on the Default theme so it may be a theme bug, but then again CRITICAL messages usually indicate a programmer error. I'd expect warnings if it was a theme bug.
Below is the backtrace (using gtk from latest master here):
(hello-world-gtk:92890): Gsk-CRITICAL **: 22:18:25.073: gsk_radial_gradient_node_new: assertion 'color_stops[i].offset >= color_stops[i - 1].offset' failed
Thread 1 "hello-world-gtk" received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff6f5392b in g_logv () from /usr/lib/libglib-2.0.so.0
(gdb) bt
#0 0x00007ffff6f5392b in g_logv () from /usr/lib/libglib-2.0.so.0
#1 0x00007ffff6f53c00 in g_log () from /usr/lib/libglib-2.0.so.0
#2 0x00007ffff7c29a75 in gsk_radial_gradient_node_new (bounds=0x7fffffffc250, center=0x7fffffffc248, hradius=270.599335, vradius=270.599335, start=0, end=1, color_stops=0x7fffffffc280, n_color_stops=2)
at ../subprojects/gtk-ebassi-issue-4421/gsk/gskrendernodeimpl.c:576
#3 0x00007ffff792ec00 in gtk_snapshot_append_radial_gradient (snapshot=0x55555750e020, bounds=0x7fffffffc370, center=0x7fffffffc368, hradius=270.599335, vradius=270.599335, start=0, end=1, stops=0x7fffffffc280, n_stops=2)
at ../subprojects/gtk-ebassi-issue-4421/gtk/gtksnapshot.c:2403
#4 0x00007ffff7a76fb9 in gtk_css_image_radial_snapshot (image=0x55555765a990, snapshot=0x55555750e020, width=540, height=36) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkcssimageradial.c:208
#5 0x00007ffff7a6eb57 in gtk_css_image_snapshot (image=0x55555765a990, snapshot=0x55555750e020, width=540, height=36) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkcssimage.c:290
#6 0x00007ffff78e96ce in gtk_theming_background_snapshot_layer (bg=0x7fffffffc5c0, idx=0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkrenderbackground.c:143
#7 0x00007ffff78e9dda in gtk_css_style_snapshot_background (boxes=0x7fffffffc5c0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkrenderbackground.c:302
#8 0x00007ffff7a1cdd3 in gtk_widget_create_render_node (widget=0x555557429640, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11597
#9 0x00007ffff7a1cff4 in gtk_widget_do_snapshot (widget=0x555557429640, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11643
#10 0x00007ffff7a1df1c in gtk_widget_snapshot_child (widget=0x555557425ef0, child=0x555557429640, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:12064
#11 0x00007ffff7a05370 in gtk_widget_real_snapshot (widget=0x555557425ef0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:734
#12 0x00007ffff7a1ce78 in gtk_widget_create_render_node (widget=0x555557425ef0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11608
#13 0x00007ffff7a1cff4 in gtk_widget_do_snapshot (widget=0x555557425ef0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11643
#14 0x00007ffff7a1df1c in gtk_widget_snapshot_child (widget=0x555557425d70, child=0x555557425ef0, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:12064
#15 0x00007ffff7a05370 in gtk_widget_real_snapshot (widget=0x555557425d70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:734
#16 0x00007ffff7a1ce78 in gtk_widget_create_render_node (widget=0x555557425d70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11608
#17 0x00007ffff7a1cff4 in gtk_widget_do_snapshot (widget=0x555557425d70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11643
#18 0x00007ffff7a1df1c in gtk_widget_snapshot_child (widget=0x555557425a70, child=0x555557425d70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:12064
#19 0x00007ffff7a05370 in gtk_widget_real_snapshot (widget=0x555557425a70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:734
#20 0x00007ffff7a1ce78 in gtk_widget_create_render_node (widget=0x555557425a70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11608
#21 0x00007ffff7a1cff4 in gtk_widget_do_snapshot (widget=0x555557425a70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11643
#22 0x00007ffff7a1df1c in gtk_widget_snapshot_child (widget=0x555556074630, child=0x555557425a70, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:12064
#23 0x00007ffff7a05370 in gtk_widget_real_snapshot (widget=0x555556074630, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:734
#24 0x00007ffff7a1ce43 in gtk_widget_create_render_node (widget=0x555556074630, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11603
#25 0x00007ffff7a1cff4 in gtk_widget_do_snapshot (widget=0x555556074630, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11643
#26 0x00007ffff7a1d0ac in gtk_widget_snapshot (widget=0x555556074630, snapshot=0x55555750e020) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11665
#27 0x00007ffff7a1d1c2 in gtk_widget_render (widget=0x555556074630, surface=0x55555570cd60, region=0x5555575e3490) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwidget.c:11697
#28 0x00007ffff7a2c881 in surface_render (surface=0x55555570cd60, region=0x5555575e3490, widget=0x555556074630) at ../subprojects/gtk-ebassi-issue-4421/gtk/gtkwindow.c:4718
#29 0x00007ffff7b7294e in _gdk_marshal_BOOLEAN__BOXEDv (closure=0x555557607be0, return_value=0x7fffffffd400, instance=0x55555570cd60, args=0x7fffffffd490, marshal_data=0x0, n_params=1, param_types=0x5555556617a0)
at subprojects/gtk-ebassi-issue-4421/gdk/gdkmarshalers.c:130
#30 0x00007ffff70604e4 in _g_closure_invoke_va (closure=0x555557607be0, return_value=0x7fffffffd400, instance=0x55555570cd60, args=0x7fffffffd490, n_params=1, param_types=0x5555556617a0) at ../subprojects/glib/gobject/gclosure.c:893
#31 0x00007ffff707f544 in g_signal_emit_valist (instance=0x55555570cd60, signal_id=113, detail=0, var_args=0x7fffffffd490) at ../subprojects/glib/gobject/gsignal.c:3406
#32 0x00007ffff7080836 in g_signal_emit (instance=0x55555570cd60, signal_id=113, detail=0) at ../subprojects/glib/gobject/gsignal.c:3553
#33 0x00007ffff7bb2bd8 in gdk_surface_process_updates_internal (surface=0x55555570cd60) at ../subprojects/gtk-ebassi-issue-4421/gdk/gdksurface.c:1343
#34 0x00007ffff7bb2f40 in gdk_surface_paint_on_clock (clock=0x5555557413a0, data=0x55555570cd60) at ../subprojects/gtk-ebassi-issue-4421/gdk/gdksurface.c:1431
#35 0x00007ffff7063c79 in g_cclosure_marshal_VOID__VOIDv (closure=0x55555760bc50, return_value=0x0, instance=0x5555557413a0, args=0x7fffffffd960, marshal_data=0x0, n_params=0, param_types=0x0)
at ../subprojects/glib/gobject/gmarshal.c:165
#36 0x00007ffff70604e4 in _g_closure_invoke_va (closure=0x55555760bc50, return_value=0x0, instance=0x5555557413a0, args=0x7fffffffd960, n_params=0, param_types=0x0) at ../subprojects/glib/gobject/gclosure.c:893
#37 0x00007ffff707f544 in g_signal_emit_valist (instance=0x5555557413a0, signal_id=109, detail=0, var_args=0x7fffffffd960) at ../subprojects/glib/gobject/gsignal.c:3406
#38 0x00007ffff7080836 in g_signal_emit (instance=0x5555557413a0, signal_id=109, detail=0) at ../subprojects/glib/gobject/gsignal.c:3553
#39 0x00007ffff7b995ff in _gdk_frame_clock_emit_paint (frame_clock=0x5555557413a0) at ../subprojects/gtk-ebassi-issue-4421/gdk/gdkframeclock.c:708
#40 0x00007ffff7b9a612 in gdk_frame_clock_paint_idle (data=0x5555557413a0) at ../subprojects/gtk-ebassi-issue-4421/gdk/gdkframeclockidle.c:605
#41 0x00007ffff6f4ba84 in ?? () from /usr/lib/libglib-2.0.so.0
#42 0x00007ffff6f4b3e5 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--c
#43 0x00007ffff6f9f799 in ?? () from /usr/lib/libglib-2.0.so.0
#44 0x00007ffff6f48bc1 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#45 0x00007ffff71ee98c in g_application_run (application=0x5555555720e0, argc=1, argv=0x7fffffffddb8) at ../subprojects/glib/gio/gapplication.c:2569
#46 0x0000555555555528 in main ()
Note: I also reported this to the theme author https://github.com/vinceliuice/Matcha-gtk-theme/issues/189
Edited by alex-tee