gtk_at_context_set_accessible_role: assertion '!self->realized' failed when attempting to add a g_object_ref_sink()'ed widget to a box right after removing it
Steps to reproduce
- create a GtkBox
- create a custom widget (this one inherits from GtkBox)
- use
g_object_ref_sink()
to get a reference to the custom widget - add the custom widget to the GtkBox from step 1 using
gtk_box_append()
- later, inside an action, remove the custom widget from the box using
gtk_box_remove()
- immediately after, do
gtk_box_append()
to re-add the custom widget to the box - this CRITICAL message appears
I tried to write a reproducer in python but I could not replicate this behavior there.
Current behavior
CRITICAL message, but other than it seems that the custom widget gets re-added to the box without issues
Expected outcome
no CRITICAL message, or something more informative if this is a programmer error
Version information
Parabola GNU/Linux
using gtk master branch as meson subproject with these options
default_options: [
'demos=false', 'build-examples=false',
'build-tests=false',
'media-gstreamer=disabled',],
Additional information
this is the backtrace when you attempt to re-add the custom widget to the box
(zrythm:4146100): zrythm-DEBUG: 06:47:19.690: (z_gtk_widget_remove_children_of_type:300): removing TrackWidget (0x5555832b3120) from box GtkBox (0x555583bc5e10)
(zrythm:4146100): zrythm-DEBUG: 06:47:19.690: (z_gtk_widget_remove_children_of_type:300): removing DragDestBoxWidget (0x55558395cba0) from box GtkBox (0x555583bc5e10)
(zrythm:4146100): zrythm-DEBUG: 06:47:19.691: (z_gtk_widget_remove_children_of_type:300): removing TrackWidget (0x5555832b24e0) from box GtkBox (0x555583bc5990)
(zrythm:4146100): zrythm-DEBUG: 06:47:19.691: (z_gtk_widget_remove_children_of_type:300): removing TrackWidget (0x5555832b27f0) from box GtkBox (0x555583bc5990)
(zrythm:4146100): zrythm-DEBUG: 06:47:19.691: (z_gtk_widget_remove_children_of_type:300): removing TrackWidget (0x5555832b2b00) from box GtkBox (0x555583bc5990)
(zrythm:4146100): zrythm-DEBUG: 06:47:19.691: (z_gtk_widget_remove_children_of_type:300): removing TrackWidget (0x5555832b2e10) from box GtkBox (0x555583bc5990)
(zrythm:4146100): Gtk-CRITICAL **: 06:47:19.691: ((null):(null)): gtk_at_context_set_accessible_role: assertion '!self->realized' failed
Thread 1 "zrythm" received signal SIGTRAP, Trace/breakpoint trap.
0x00007ffff73a895b in g_logv () from /usr/lib/libglib-2.0.so.0
(gdb) bt
#0 0x00007ffff73a895b in g_logv () at /usr/lib/libglib-2.0.so.0
#1 0x00007ffff73a8c30 in g_log () at /usr/lib/libglib-2.0.so.0
#2 0x00007ffff7710f15 in gtk_at_context_set_accessible_role (self=0x55558717f190, role=GTK_ACCESSIBLE_ROLE_GROUP) at ../subprojects/gtk-master/gtk/gtkatcontext.c:429
#3 0x00007ffff7a0a703 in gtk_widget_root_at_context (self=0x555586eda9b0) at ../subprojects/gtk-master/gtk/gtkwidget.c:2440
#4 0x00007ffff7a0a998 in gtk_widget_root (widget=0x555586eda9b0) at ../subprojects/gtk-master/gtk/gtkwidget.c:2496
#5 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x5555870aaf70, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#6 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x5555870aaf70) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#7 0x00007ffff7a0a9af in gtk_widget_root (widget=0x5555870aaf70) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#8 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x555583d7a650, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#9 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x555583d7a650) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#10 0x00007ffff7a04164 in gtk_viewport_root (widget=0x555583d7a650) at ../subprojects/gtk-master/gtk/gtkviewport.c:324
#11 0x00007ffff7a0a9af in gtk_widget_root (widget=0x555583d7a650) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#12 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x555586e85480, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#13 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x555586e85480) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#14 0x00007ffff7a0a9af in gtk_widget_root (widget=0x555586e85480) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#15 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x555586da69f0, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#16 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x555586da69f0) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#17 0x00007ffff7a0a9af in gtk_widget_root (widget=0x555586da69f0) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#18 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x555583a48af0, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#19 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x555583a48af0) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#20 0x00007ffff78c7eed in gtk_popover_menu_root (widget=0x555583a48af0) at ../subprojects/gtk-master/gtk/gtkpopovermenu.c:567
#21 0x00007ffff7a0a9af in gtk_widget_root (widget=0x555583a48af0) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#22 0x00007ffff7a1fdd7 in gtk_widget_forall (widget=0x55558395cba0, callback=0x7ffff7a0a7f8 <gtk_widget_root>, user_data=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:12004
#23 0x00007ffff7a0746f in gtk_widget_real_root (widget=0x55558395cba0) at ../subprojects/gtk-master/gtk/gtkwidget.c:756
#24 0x00007ffff7a0a9af in gtk_widget_root (widget=0x55558395cba0) at ../subprojects/gtk-master/gtk/gtkwidget.c:2498
#25 0x00007ffff7a1293f in gtk_widget_reposition_after (widget=0x55558395cba0, parent=0x555583bc5e10, previous_sibling=0x5555832b3430) at ../subprojects/gtk-master/gtk/gtkwidget.c:6067
#26 0x00007ffff7a1fcfd in gtk_widget_insert_before (widget=0x55558395cba0, parent=0x555583bc5e10, next_sibling=0x0) at ../subprojects/gtk-master/gtk/gtkwidget.c:11986
#27 0x00007ffff7738fad in gtk_box_append (box=0x555583bc5e10, child=0x55558395cba0) at ../subprojects/gtk-master/gtk/gtkbox.c:572
#28 0x000055555602e731 in tracklist_widget_hard_refresh(TracklistWidget*) (self=0x555583788ad0) at ../src/gui/widgets/tracklist.c:454
#29 0x0000555555f3c522 in event_manager_process_event(EventManager*, ZEvent*) (self=0x555582602ac0, ev=0x55558264fb90) at ../src/gui/backend/event_manager.c:1294
#30 0x0000555555f3e70f in process_events(void*) (data=0x555582602ac0) at ../src/gui/backend/event_manager.c:2016
#31 0x0000555555f3ea34 in event_manager_process_now(EventManager*) (self=0x555582602ac0) at ../src/gui/backend/event_manager.c:2119
#32 0x0000555555eb08a1 in undo_manager_perform(UndoManager*, UndoableAction*, GError**) (self=0x555583689410, action=0x55558750b3a0, error=0x7fffffffba38) at ../src/actions/undo_manager.c:340
#33 0x0000555555ea7f68 in tracklist_selections_action_perform(TracklistSelectionsActionType, TracklistSelections*, TracklistSelections*, PortConnectionsManager const*, Track*, TrackType, PluginSetting*, SupportedFile*, int, Position const*, int, EditTracksActionType, int, GdkRGBA const*, float, float, char const*, _Bool, GError**)
(type=TRACKLIST_SELECTIONS_ACTION_CREATE, tls_before=0x0, tls_after=0x0, port_connections_mgr=0x0, track=0x0, track_type=TRACK_TYPE_MIDI, pl_setting=0x0, file_descr=0x0, track_pos=5, pos=0x0, num_tracks=1, edit_type=EDIT_TRACK_ACTION_TYPE_SOLO, ival_after=-1, color_new=0x0, val_before=0, val_after=0, new_txt=0x0, already_edited=false, error=0x7fffffffba38) at ../src/actions/tracklist_selections.c:703
#34 0x0000555555f19141 in track_create_with_action(TrackType, PluginSetting*, SupportedFile*, Position*, int, int, GError**) (type=TRACK_TYPE_MIDI, pl_setting=0x0, file_descr=0x0, pos=0x0, index=5, num_tracks=1, error=0x7fffffffbaa0)
at ../src/audio/track.c:3818
#35 0x0000555555e8dd82 in activate_create_midi_track(GSimpleAction*, GVariant*, gpointer) (action=0x555583415800, variant=0x0, user_data=0x555556ed91e0) at ../src/actions/actions.c:1641
#36 0x00007ffff7302d8f in g_closure_invoke () at /usr/lib/libgobject-2.0.so.0
#37 0x00007ffff731e718 in () at /usr/lib/libgobject-2.0.so.0
#38 0x00007ffff731fdd9 in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#39 0x00007ffff7320330 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#40 0x00007ffff7202b9e in () at /usr/lib/libgio-2.0.so.0
#41 0x00007ffff7a42b5a in gtk_action_muxer_activate_action (muxer=0x555556ed5140, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:863
#42 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x5555834101b0, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
--Type <RET> for more, q to quit, c to continue without paging--
#43 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x5555837aa740, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#44 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555583a5bdc0, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#45 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555583a5bf40, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#46 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555583957230, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#47 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x5555839574b0, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#48 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555583bcac90, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#49 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555583bd3240, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#50 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x5555871986b0, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#51 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x555587197920, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#52 0x00007ffff7a42b84 in gtk_action_muxer_activate_action (muxer=0x5555870e1130, action_name=0x5555831f3ba1 "app.create-midi-track", parameter=0x0) at ../subprojects/gtk-master/gtk/gtkactionmuxer.c:865
#53 0x00007ffff7ab5c5f in gtk_menu_tracker_item_activated (self=0x5555872f90c0) at ../subprojects/gtk-master/gtk/gtkmenutrackeritem.c:822
#54 0x00007ffff7ab10ec in gtk_popover_item_activate (button=0x5555831d7d10, user_data=0x5555872f90c0) at ../subprojects/gtk-master/gtk/gtkmenusectionbox.c:200
#55 0x00007ffff7302d8f in g_closure_invoke () at /usr/lib/libgobject-2.0.so.0
#56 0x00007ffff731e718 in () at /usr/lib/libgobject-2.0.so.0
#57 0x00007ffff731fdd9 in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#58 0x00007ffff7320330 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#59 0x00007ffff7890512 in emit_clicked (button=0x5555831d7d10) at ../subprojects/gtk-master/gtk/gtkmodelbutton.c:1455
#60 0x00007ffff76e4499 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv (closure=0x5555870efe00, return_value=0x0, instance=0x5555831c8180, args=0x7fffffffcb70, marshal_data=0x0, n_params=3, param_types=0x555582865a90)
at subprojects/gtk-master/gtk/gtkmarshalers.c:5445
#61 0x00007ffff73201c0 in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#62 0x00007ffff7320330 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#63 0x00007ffff78161b4 in gtk_gesture_click_end (gesture=0x5555831c8180, sequence=0x0) at ../subprojects/gtk-master/gtk/gtkgestureclick.c:276
#64 0x00007ffff73074ac in g_cclosure_marshal_VOID__BOXEDv () at /usr/lib/libgobject-2.0.so.0
#65 0x00007ffff73201c0 in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#66 0x00007ffff7320330 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#67 0x00007ffff781144f in _gtk_gesture_set_recognized (gesture=0x5555831c8180, recognized=0, sequence=0x0) at ../subprojects/gtk-master/gtk/gtkgesture.c:339
#68 0x00007ffff7811566 in _gtk_gesture_check_recognized (gesture=0x5555831c8180, sequence=0x0) at ../subprojects/gtk-master/gtk/gtkgesture.c:380
#69 0x00007ffff7811edc in gtk_gesture_handle_event (controller=0x5555831c8180, event=0x7fffcc1aaa80, x=92, y=22) at ../subprojects/gtk-master/gtk/gtkgesture.c:678
#70 0x00007ffff78182da in gtk_gesture_single_handle_event (controller=0x5555831c8180, event=0x7fffcc1aaa80, x=92, y=22) at ../subprojects/gtk-master/gtk/gtkgesturesingle.c:227
#71 0x00007ffff78163ed in gtk_gesture_click_handle_event (controller=0x5555831c8180, event=0x7fffcc1aaa80, x=92, y=22) at ../subprojects/gtk-master/gtk/gtkgestureclick.c:324
#72 0x00007ffff77cf29e in gtk_event_controller_handle_event (controller=0x5555831c8180, event=0x7fffcc1aaa80, target=0x5555831c7770, x=92, y=22) at ../subprojects/gtk-master/gtk/gtkeventcontroller.c:369
#73 0x00007ffff7a0f870 in gtk_widget_run_controllers (widget=0x5555831d7d10, event=0x7fffcc1aaa80, target=0x5555831c7770, x=92, y=22, phase=GTK_PHASE_CAPTURE) at ../subprojects/gtk-master/gtk/gtkwidget.c:4569
#74 0x00007ffff7a0fdfd in _gtk_widget_captured_event (widget=0x5555831d7d10, event=0x7fffcc1aaa80, target=0x5555831c7770) at ../subprojects/gtk-master/gtk/gtkwidget.c:4732
#75 0x00007ffff788133f in gtk_propagate_event_internal (widget=0x5555831d7d10, event=0x7fffcc1aaa80, topmost=0x555583a48af0) at ../subprojects/gtk-master/gtk/gtkmain.c:1866
#76 0x00007ffff78815cf in gtk_propagate_event (widget=0x5555831c7770, event=0x7fffcc1aaa80) at ../subprojects/gtk-master/gtk/gtkmain.c:1948
#77 0x00007ffff7880d33 in gtk_main_do_event (event=0x7fffcc1aaa80) at ../subprojects/gtk-master/gtk/gtkmain.c:1640
#78 0x00007ffff78c278f in surface_event (surface=0x5555827194d0, event=0x7fffcc1aaa80, widget=0x555583a48af0) at ../subprojects/gtk-master/gtk/gtkpopover.c:827
#79 0x00007ffff7b74cf2 in _gdk_marshal_BOOLEAN__POINTER (closure=0x5555870cc8f0, return_value=0x7fffffffd6e0, n_param_values=2, param_values=0x7fffffffd740, invocation_hint=0x7fffffffd6c0, marshal_data=0x0)
at subprojects/gtk-master/gdk/gdkmarshalers.c:258
#80 0x00007ffff7bb2e93 in gdk_surface_event_marshaller (closure=0x5555870cc8f0, return_value=0x7fffffffd6e0, n_param_values=2, param_values=0x7fffffffd740, invocation_hint=0x7fffffffd6c0, marshal_data=0x0)
at ../subprojects/gtk-master/gdk/gdksurface.c:435
#81 0x00007ffff7302d8f in g_closure_invoke () at /usr/lib/libgobject-2.0.so.0
#82 0x00007ffff731e718 in () at /usr/lib/libgobject-2.0.so.0
#83 0x00007ffff731f40b in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#84 0x00007ffff7320330 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#85 0x00007ffff7bb7f55 in gdk_surface_handle_event (event=0x7fffcc1aaa80) at ../subprojects/gtk-master/gdk/gdksurface.c:2948
#86 0x00007ffff7b931a4 in _gdk_event_emit (event=0x7fffcc1aaa80) at ../subprojects/gtk-master/gdk/gdkevents.c:490
--Type <RET> for more, q to quit, c to continue without paging--
#87 0x00007ffff7c1c982 in gdk_event_source_dispatch (source=0x55558273aab0, callback=0x0, user_data=0x0) at ../subprojects/gtk-master/gdk/x11/gdkeventsource.c:425
#88 0x00007ffff73a04dc in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#89 0x00007ffff73f4749 in () at /usr/lib/libglib-2.0.so.0
#90 0x00007ffff739dbc1 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#91 0x00007ffff72072ee in g_application_run () at /usr/lib/libgio-2.0.so.0
#92 0x0000555555e829ec in main(int, char**) (argc=2, argv=0x7fffffffdd08) at ../src/main.c:42
(gdb)
Edited by alex-tee