GtkPopover with dynamic GtkMenuButton crashed
Steps to reproduce
- Create a GtkPopOver child widget(id = popover)
- Create a GtkMenubutton(id = mb1) and assign the popover widget
- Call
popover.Unparent()
, then delete the mb1 object - Create a GtkMenubutton(id = mb2) and assign the popover widget
- Click the menu button(mb2)
- App crashed
Version information
Windows 11 23H2
Vala 0.56.17
GCC 13.2.0
GLib 2.80.0
pango 1.52.2
GTK 4.14.4
libadwaita 1.5.0
libpanel 1.6.0
GtkSourceView 5.12.0
Backtrace
Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007ffbe16c1f37 in gdk_surface_set_widget (self=0x0, widget=widget@entry=0x274adbc0)
at ../gdk/gdksurface.c:1053
1053 priv->widget = widget;
(gdb) bt
#0 0x00007ffbe16c1f37 in gdk_surface_set_widget (self=0x0, widget=widget@entry=0x274adbc0)
at ../gdk/gdksurface.c:1053
#1 0x00007ffbe1442462 in gtk_popover_realize (widget=0x274adbc0) at ../gtk/gtkpopover.c:993
#2 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x4ac7e90, return_value=0x0,
instance=0x274adbc0, args=0x5fe128 "", n_params=0, param_types=0x0)
at ../gobject/gclosure.c:897
#3 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=0x7ffbe194fe30 <__func__.178>,
instance@entry=0x274adbc0, signal_id=<optimized out>, signal_id@entry=87, detail=32,
detail@entry=0, var_args=<optimized out>, var_args@entry=0x5fe128 "")
at ../gobject/gsignal.c:3424
#4 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5fe128 "", detail=0, signal_id=87,
instance=0x274adbc0) at ../gobject/gsignal.c:3263
#5 g_signal_emit (instance=instance@entry=0x274adbc0, signal_id=87, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#6 0x00007ffbe14fbd6c in gtk_widget_realize (widget=0x274adbc0) at ../gtk/gtkwidget.c:3446
#7 0x00007ffbe14434e2 in gtk_popover_show (widget=0x274adbc0) at ../gtk/gtkpopover.c:1088
#8 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x498d010, return_value=0x0,
instance=0x274adbc0, args=0x5fe4a8 "", n_params=0, param_types=0x0)
at ../gobject/gclosure.c:897
#9 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=0x2b93b040,
instance@entry=0x274adbc0, signal_id=<optimized out>, signal_id@entry=83, detail=732814928,
detail@entry=0, var_args=<optimized out>, var_args@entry=0x5fe4a8 "")
at ../gobject/gsignal.c:3424
#10 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5fe4a8 "", detail=0, signal_id=83,
instance=0x274adbc0) at ../gobject/gsignal.c:3263
#11 g_signal_emit (instance=instance@entry=0x274adbc0, signal_id=83, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#12 0x00007ffbe14f0cd2 in gtk_widget_show (widget=0x274adbc0) at ../gtk/gtkwidget.c:2723
#13 0x00007ffbe14f2c64 in gtk_widget_set_visible (widget=<optimized out>, visible=visible@entry=1)
at ../gtk/gtkwidget.c:5727
#14 0x00007ffbe1445431 in gtk_popover_popup (popover=<optimized out>) at ../gtk/gtkpopover.c:2333
#15 0x00007ffbe141ea00 in gtk_menu_button_toggled (self=0x2b93b040) at ../gtk/gtkmenubutton.c:322
#16 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x2ba89100, return_value=0x0,
instance=0x2badde50, args=0x5fe808 "", n_params=0, param_types=0x0)
at ../gobject/gclosure.c:897
#17 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=0x0, instance@entry=0x2badde50,
signal_id=<optimized out>, signal_id@entry=172, detail=732814928, detail@entry=0,
var_args=<optimized out>, var_args@entry=0x5fe808 "") at ../gobject/gsignal.c:3424
#18 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5fe808 "", detail=0, signal_id=172,
instance=0x2badde50) at ../gobject/gsignal.c:3263
#19 g_signal_emit (instance=instance@entry=0x2badde50, signal_id=172, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#20 0x00007ffbe14e2736 in gtk_toggle_button_set_active (toggle_button=0x2badde50, is_active=1)
at ../gtk/gtktogglebutton.c:449
#21 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x4c43d80, return_value=0x0,
instance=0x2badde50, args=0x5feb48 "痂_", n_params=0, param_types=0x0)
at ../gobject/gclosure.c:897
#22 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=instance@entry=0x2badde50,
signal_id=<optimized out>, signal_id@entry=119, detail=164431776, detail@entry=0,
var_args=<optimized out>, var_args@entry=0x5feb48 "痂_") at ../gobject/gsignal.c:3424
#23 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5feb48 "痂_", detail=0, signal_id=119,
instance=0x2badde50) at ../gobject/gsignal.c:3263
#24 g_signal_emit (instance=0x2badde50, signal_id=119, detail=0) at ../gobject/gsignal.c:3583
#25 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x2ba89c90, return_value=0x0,
instance=0x2ba8a080, args=0x5fee38 "\001", n_params=3, param_types=0x9cd07a0)
at ../gobject/gclosure.c:897
#26 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=0x4021000020000000,
instance@entry=0x2ba8a080, signal_id=<optimized out>, signal_id@entry=127, detail=536870912,
detail@entry=0, var_args=<optimized out>, var_args@entry=0x5fee38 "\001")
at ../gobject/gsignal.c:3424
#27 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5fee38 "\001", detail=0, signal_id=127,
instance=0x2ba8a080) at ../gobject/gsignal.c:3263
#28 g_signal_emit (instance=instance@entry=0x2ba8a080, signal_id=127, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#29 0x00007ffbe13d78de in gtk_gesture_click_end (gesture=0x2ba8a080, sequence=sequence@entry=0x0)
at ../gtk/gtkgestureclick.c:275
#30 0x00007ffc1325ac63 in g_cclosure_marshal_VOID__BOXEDv (closure=0x9b54b80,
return_value=<optimized out>, instance=0x2ba8a080, args=<optimized out>,
marshal_data=0x7ffbe13d7840 <gtk_gesture_click_end>, n_params=1, param_types=0x9b54c60)
at ../gobject/gmarshal.c:1686
#31 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x9b54b80, return_value=0x0,
instance=0x2ba8a080, args=0x5ff1f8 "", n_params=1, param_types=0x9b54c60)
at ../gobject/gclosure.c:897
#32 0x00007ffc1326c362 in signal_emit_valist_unlocked (instance=0x3, instance@entry=0x2ba8a080,
signal_id=<optimized out>, signal_id@entry=122, detail=732471424, detail@entry=0,
var_args=<optimized out>, var_args@entry=0x5ff1f8 "") at ../gobject/gsignal.c:3424
#33 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5ff1f8 "", detail=0, signal_id=122,
instance=0x2ba8a080) at ../gobject/gsignal.c:3263
#34 g_signal_emit (instance=instance@entry=0x2ba8a080, signal_id=122, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#35 0x00007ffbe13d474f in _gtk_gesture_set_recognized (sequence=0x0, recognized=0,
gesture=0x2ba8a080) at ../gtk/gtkgesture.c:340
#36 _gtk_gesture_check_recognized (gesture=gesture@entry=0x2ba8a080, sequence=sequence@entry=0x0)
at ../gtk/gtkgesture.c:381
#37 0x00007ffbe13d5e5b in gtk_gesture_handle_event (controller=0x2ba8a080, event=0x2b922890,
x=8.5000009536743164, y=7.0000004768371582) at ../gtk/gtkgesture.c:686
#38 0x00007ffbe13d8fc9 in gtk_gesture_single_handle_event (controller=0x2ba8a080,
event=0x2b922890, x=8.5000009536743164, y=7.0000004768371582) at ../gtk/gtkgesturesingle.c:227
#39 0x00007ffbe13a3446 in gtk_event_controller_handle_event (
controller=controller@entry=0x2ba8a080, event=event@entry=0x2b922890,
target=target@entry=0x2bbb1320, x=x@entry=8.5000009536743164, y=y@entry=7.0000004768371582)
at ../gtk/gtkeventcontroller.c:362
#40 0x00007ffbe14f1397 in gtk_widget_run_controllers (widget=widget@entry=0x2badde50,
event=event@entry=0x2b922890, target=target@entry=0x2bbb1320, x=8.5000009536743164,
y=7.0000004768371582, phase=phase@entry=GTK_PHASE_CAPTURE) at ../gtk/gtkwidget.c:4585
#41 0x00007ffbe14f8c67 in _gtk_widget_captured_event (widget=widget@entry=0x2badde50,
event=event@entry=0x2b922890, target=target@entry=0x2bbb1320) at ../gtk/gtkwidget.c:4746
#42 0x00007ffbe14182d6 in gtk_propagate_event_internal (widget=0x2badde50,
widget@entry=0x2bbb1320, event=event@entry=0x2b922890, topmost=<optimized out>)
at ../gtk/gtkmain.c:1915
#43 0x00007ffbe14183f9 in gtk_propagate_event (widget=widget@entry=0x2bbb1320,
event=event@entry=0x2b922890) at ../gtk/gtkmain.c:1997
#44 0x00007ffbe1418b23 in gtk_main_do_event (event=0x2b922890) at ../gtk/gtkmain.c:1687
#45 0x00007ffbe1663159 in _gdk_marshal_BOOLEAN__POINTERv (closure=closure@entry=0x2af4ee20,
return_value=return_value@entry=0x5ff920, instance=instance@entry=0x27a28c70,
args=args@entry=0x5ffb08 "\220(\222+", marshal_data=marshal_data@entry=0x0,
n_params=n_params@entry=1, param_types=param_types@entry=0xbf01d80) at gdk/gdkmarshalers.c:302
#46 0x00007ffbe16c192f in gdk_surface_event_marshallerv (closure=0x2af4ee20,
return_value=0x5ff920, instance=0x27a28c70, args=0x5ffb08 "\220(\222+", marshal_data=0x0,
n_params=1, param_types=0xbf01d80) at ../gdk/gdksurface.c:462
#47 0x00007ffc13258334 in _g_closure_invoke_va (closure=0x2af4ee20, return_value=0x5ff920,
instance=0x27a28c70, args=0x5ffb08 "\220(\222+", n_params=1, param_types=0xbf01d80)
at ../gobject/gclosure.c:897
#48 0x00007ffc1326b91f in signal_emit_valist_unlocked (instance=0x5ffb24,
instance@entry=0x27a28c70, signal_id=<optimized out>, signal_id@entry=255,
detail=detail@entry=0, var_args=<optimized out>, var_args@entry=0x5ffb08 "\220(\222+")
at ../gobject/gsignal.c:3424
#49 0x00007ffc13271a11 in g_signal_emit_valist (var_args=0x5ffb08 "\220(\222+", detail=0,
signal_id=255, instance=0x27a28c70) at ../gobject/gsignal.c:3263
#50 g_signal_emit (instance=instance@entry=0x27a28c70, signal_id=255, detail=detail@entry=0)
at ../gobject/gsignal.c:3583
#51 0x00007ffbe16c51b8 in gdk_surface_handle_event (event=event@entry=0x2b922890)
at ../gdk/gdksurface.c:2932
#52 0x00007ffbe16a4f86 in _gdk_event_emit (event=0x2b922890) at ../gdk/gdkevents.c:491
#53 0x00007ffbe1675a41 in gdk_event_dispatch (source=0x4e0fc40, callback=<optimized out>,
user_data=<optimized out>) at ../gdk/win32/gdkevents-win32.c:3406
#54 0x00007ffc1342e72c in g_main_dispatch (context=context@entry=0x811040) at ../glib/gmain.c:3344
#55 0x00007ffc13431263 in g_main_context_dispatch_unlocked (context=0x811040)
at ../glib/gmain.c:4152
#56 g_main_context_iterate_unlocked (context=context@entry=0x811040, block=block@entry=1,
dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#57 0x00007ffc1343198d in g_main_context_iteration (context=context@entry=0x811040,
may_block=may_block@entry=1) at ../glib/gmain.c:4282
#58 0x00007ffc0ede3022 in g_application_run (application=0x7f7a60, argc=<optimized out>,
argv=0x81e150) at ../gio/gapplication.c:2712
#59 0x00007ff6636e1a12 in _vala_main (args=0x81e150, args_length1=1) at ../src/main.vala:22
#60 0x00007ff6636e1a59 in main (argc=1, argv=0x81e150) at ../src/main.vala:13