Changing a Menu from LTR to RTL fails in gtk_widget_reposition_after()
- Run
gtk4-widget-factory
, ortestmenubutton
withPopover
unchecked, or etc. - Open the Inspector
- Change the Text Direction to Right-to-Left
- Get 16 or 5 or N of these beauties in the console for each offending
MenuItem
(gtk4-widget-factory:26521): Gtk-WARNING **: 20:55:43.452: Can't set a parent on widget which has a parent
backtrace:
#0 _g_log_abort (breakpoint=1) at /home/daniel/jhbuild/checkout/gnome/glib/glib/gmessages.c:583
#1 0x00007ffff70d434c in g_log_writer_default (log_level=18, fields=0x7fffffffb3f0, n_fields=6, user_data=0x0)
at /home/daniel/jhbuild/checkout/gnome/glib/glib/gmessages.c:2735
#2 0x00007ffff70d3178 in g_log_structured_array (log_level=G_LOG_LEVEL_WARNING, fields=0x7fffffffb3f0, n_fields=6)
at /home/daniel/jhbuild/checkout/gnome/glib/glib/gmessages.c:1970
#3 0x00007ffff70d33e0 in g_log_structured_standard (log_domain=0x7ffff796b819 "Gtk", log_level=G_LOG_LEVEL_WARNING,
file=0x7ffff796c530 "../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c", line=0x7ffff796d0b8 "6734",
func=0x7ffff796e7e0 <__func__.53137> "gtk_widget_reposition_after",
message_format=0x7ffff796d088 "Can't set a parent on widget which has a parent")
at /home/daniel/jhbuild/checkout/gnome/glib/glib/gmessages.c:2027
#4 0x00007ffff76f61c5 in gtk_widget_reposition_after (widget=0x555555d90f20, parent=0x555555f5a590, previous_sibling=0x0)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:6734
#5 0x00007ffff770456e in gtk_widget_insert_after (widget=0x555555d90f20, parent=0x555555f5a590, previous_sibling=0x0)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:13391
#6 0x00007ffff75a3287 in update_arrow_classes (menu_item=0x555555d90f20)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkmenuitem.c:936
#7 0x00007ffff75a54a2 in gtk_menu_item_direction_changed (widget=0x555555d90f20, previous_dir=GTK_TEXT_DIR_LTR)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkmenuitem.c:1654
#8 0x00007ffff6e2fb88 in g_cclosure_marshal_VOID__ENUMv (closure=0x5555558214d0, return_value=0x0, instance=0x555555d90f20,
args=0x7fffffffbae8, marshal_data=0x7ffff75a546c <gtk_menu_item_direction_changed>, n_params=1, param_types=0x55555580dc10)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gmarshal.c:1496
#9 0x00007ffff6e2c0f0 in g_type_class_meta_marshalv (closure=0x5555558214d0, return_value=0x0, instance=0x555555d90f20,
args=0x7fffffffbae8, marshal_data=0xe8, n_params=1, param_types=0x55555580dc10)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gclosure.c:1024
#10 0x00007ffff6e2bcb2 in _g_closure_invoke_va (closure=0x5555558214d0, return_value=0x0, instance=0x555555d90f20,
args=0x7fffffffbae8, n_params=1, param_types=0x55555580dc10) at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gclosure.c:867
#11 0x00007ffff6e47ac6 in g_signal_emit_valist (instance=0x555555d90f20, signal_id=67, detail=0, var_args=0x7fffffffbae8)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gsignal.c:3300
#12 0x00007ffff6e48d0c in g_signal_emit (instance=0x555555d90f20, signal_id=67, detail=0)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gsignal.c:3447
#13 0x00007ffff76f8a17 in gtk_widget_emit_direction_changed (widget=0x555555d90f20, old_dir=GTK_TEXT_DIR_LTR)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:8192
#14 0x00007ffff76f8c1a in gtk_widget_set_default_direction_recurse (widget=0x555555d90f20, old_dir=GTK_TEXT_DIR_LTR)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:8259
#15 0x00007ffff76f8c3d in gtk_widget_set_default_direction_recurse (widget=0x555555e58b90, old_dir=GTK_TEXT_DIR_LTR)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:8265
#16 0x00007ffff76f8c3d in gtk_widget_set_default_direction_recurse (widget=0x555555c09d10, old_dir=GTK_TEXT_DIR_LTR)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:8265
#17 0x00007ffff76f8cfc in gtk_widget_set_default_direction (dir=GTK_TEXT_DIR_RTL)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkwidget.c:8296
#18 0x00007ffff780de62 in direction_changed (combo=0x555556057f70)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/inspector/visual.c:130
#19 0x00007ffff6e2ed29 in g_cclosure_marshal_VOID__VOID (closure=0x55555800c740, return_value=0x0, n_param_values=1,
param_values=0x7fffffffbf20, invocation_hint=0x7fffffffbe60, marshal_data=0x0)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gmarshal.c:875
#20 0x00007ffff6e2ba1a in g_closure_invoke (closure=0x55555800c740, return_value=0x0, n_param_values=1, param_values=0x7fffffffbf20,
invocation_hint=0x7fffffffbe60) at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gclosure.c:804
#21 0x00007ffff6e4947c in signal_emit_unlocked_R (node=0x555555b49400, detail=0, instance=0x555556057f70, emission_return=0x0,
instance_and_params=0x7fffffffbf20) at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gsignal.c:3635
#22 0x00007ffff6e48789 in g_signal_emit_valist (instance=0x555556057f70, signal_id=228, detail=0, var_args=0x7fffffffc1d8)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gsignal.c:3391
#23 0x00007ffff6e48d0c in g_signal_emit (instance=0x555556057f70, signal_id=228, detail=0)
at /home/daniel/jhbuild/checkout/gnome/glib/gobject/gsignal.c:3447
#24 0x00007ffff74bb2ab in gtk_combo_box_set_active_internal (combo_box=0x555556057f70, path=0x555555d3d2c0)
at ../../../../jhbuild/checkout/gnome/gtk+/gtk/gtkcombobox.c:2303
With a better warning,
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 6e0183d405..821b551c90 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -6731,7 +6731,10 @@ gtk_widget_reposition_after (GtkWidget *widget,
if (priv->parent != NULL && priv->parent != parent)
{
- g_warning ("Can't set a parent on widget which has a parent");
+ g_warning ("Can't set new parent %s@%p on widget %s@%p which has parent %s@%p",
+ gtk_widget_get_name (parent), (void *)parent,
+ gtk_widget_get_name (widget), (void *)widget,
+ gtk_widget_get_name (priv->parent), (void *)priv->parent);
return;
}
we can get a better idea of what is going wrong:
(gtk4-widget-factory:28121): Gtk-WARNING **: 21:10:07.181: Can't set new parent GtkIcon@0x555555f5a590 on widget GtkMenuItem@0x555555f1bf10 which has parent GtkMenu@0x555555e58b90
Adding a MenuItem
to an Icon
seems rather backwards...