gtk_main_get_window_group function return different results for gtk_grab_add and gtk_grab_remove, but widget address was same in both functions:
if (GTK_IS_WINDOW (toplevel)) return gtk_window_get_group (GTK_WINDOW (toplevel)); else return gtk_window_get_group (NULL);
On gtk_grab_add window group is 0x555555b0b160 for widget 0x555555e50780: Thread 1 "mate-terminal" hit Breakpoint 3, gtk_main_get_window_group (widget=0x555555e50780) at ././gtk/gtkmain.c:2 025 2025 if (GTK_IS_WINDOW (toplevel)) $2044 (widget) = 0x555555e50780 $2045 (toplevel) = 0x555555e50780 $2046 (*widget) = {parent_instance = {g_type_instance = {g_class = 0x555555e5e800}, ref_count = 1, qdata = 0x2}, priv = 0x555 555e50690} $2047 (*widget.priv) = {..., window = 0x0, registered_windows = 0x0, parent = 0x0, event_contr ollers = 0x0, accessible = 0x0} #0 gtk_main_get_window_group (widget=0x555555e50780) at ././gtk/gtkmain.c:2025 #1 0x00007ffff71f3bb3 in gtk_grab_add (widget=0x555555e50780) at ././gtk/gtkmain.c:2231 #2 0x00007ffff70ac1d1 in gtk_cell_renderer_accel_start_editing (cell=0x555555845270, event=0x555555d416f0, widget= 0x555555e183f0, path=0x555555e57720 "2:0", background_area=0x7fffffffc2e0, cell_area=0x7fffffffc2e0, flags=(unknown : 0)) at ././gtk/gtkcellrendereraccel.c:497 #3 0x00007ffff70a92dd in gtk_cell_renderer_start_editing (cell=0x555555845270, event=0x555555d416f0, widget=0x5555 55e183f0, path=0x555555e57720 "2:0", background_area=0x7fffffffc2e0, cell_area=0x7fffffffc2e0, flags=(unknown: 0)) at ././gtk/gtkcellrenderer.c:921 #4 0x00007ffff709d47e in gtk_cell_area_activate_cell (area=0x555555e0d140, widget=0x555555e183f0, renderer=0x555555845270, event=0x555555d416f0, cell_area=0x7fffffffc380, flags=(unknown: 0)) at ././gtk/gtkcellarea.c:3432 #5 0x00007ffff7096407 in gtk_cell_area_real_event (area=0x555555e0d140, context=0x555555e26850, widget=0x555555e183f0, event=0x555555d416f0, cell_area=0x7fffffffc570, flags=(unknown: 0)) at ././gtk/gtkcellarea.c:1101
At time of gtk_grab_remove, when event is delivered to widget 0x555555e50780 from gtk_main_do_event, its toplevel was 0x555555ddb0d0 Thread 1 "mate-terminal" hit Breakpoint 3, gtk_main_get_window_group (widget=0x555555e50780) at ././gtk/gtkmain.c:2025 2025 if (GTK_IS_WINDOW (toplevel)) $2092 (widget) = 0x555555e50780 $2093 (toplevel) = 0x555555ddb0d0 $2094 (*widget) = {parent_instance = {g_type_instance = {g_class = 0x555555e5e800}, ref_count = 7, qdata = 0x555555ecf180}, priv = 0x555555e50690} $2095 (*widget.priv) = {...., window = 0x555555e507e0, registered_windows = 0x55555595 7d00, parent = 0x555555e183f0, event_controllers = 0x0, accessible = 0x555555e1d320} #0 gtk_main_get_window_group (widget=0x555555e50780) at ././gtk/gtkmain.c:2025 #1 0x00007ffff71f3d8c in gtk_grab_remove (widget=0x555555e50780) at ././gtk/gtkmain.c:2286 #2 0x00007ffff70ac56b in gtk_cell_editable_event_box_key_press_event (widget=0x555555e50780, event=0x555555e473c0) at ././gtk/gtkcellrendereraccel.c:645
Parent of the widget was changed by gtk_tree_view_multipress_gesture_pressed -> .. -> gtk_cell_area_activate_cell -> gtk_cell_area_add_editable -> ..signal.. -> gtk_tree_view_column_add_editable_callback -> _gtk_tree_view_add_editable -> gtk_tree_view_put -> gtk_widget_set_parent
So, gtk_cell_area_activate_cell of gtk+3 (3.22.7) has incorrect order of actions which broke gtk_grab_add / gtk_grab_remove pair https://github.com/GNOME/gtk/blob/6cc08d60efeb02afc0d67982c3dc205dfd16d7cd/gtk/gtkcellarea.c#L3388
3428 gtk_cell_renderer_start_editing (renderer, ... 3444 gtk_cell_area_add_editable (area, priv->focus_cell, editable_widget, cell_area);
gtk_main_ get_window_ group function return different results for gtk_grab_add and gtk_grab_remove, but widget address was same in both functions:
if (GTK_IS_WINDOW (toplevel)) get_group (GTK_WINDOW (toplevel)); get_group (NULL);
return gtk_window_
else
return gtk_window_
On gtk_grab_add window group is 0x555555b0b160 for widget 0x555555e50780: get_window_ group (widget= 0x555555e50780) at ././gtk/gtkmain.c:2 get_window_ group (widget= 0x555555e50780) at ././gtk/ gtkmain. c:2025 0x555555e50780) at ././gtk/ gtkmain. c:2231 renderer_ accel_start_ editing (cell=0x5555558 45270, event=0x555555d 416f0, widget= area=0x7fffffff c2e0, cell_area= 0x7fffffffc2e0, flags=(unknown gtkcellrenderer accel.c: 497 renderer_ start_editing (cell=0x5555558 45270, event=0x555555d 416f0, widget=0x5555 area=0x7fffffff c2e0, cell_area= 0x7fffffffc2e0, flags=(unknown: 0)) gtkcellrenderer .c:921 area_activate_ cell (area=0x555555e 0d140, widget= 0x555555e183f0, renderer= 0x555555845270, event=0x555555d 416f0, cell_area= 0x7fffffffc380, flags=(unknown: 0)) at ././gtk/ gtkcellarea. c:3432 area_real_ event (area=0x555555e 0d140, context= 0x555555e26850, widget= 0x555555e183f0, event=0x555555d 416f0, cell_area= 0x7fffffffc570, flags=(unknown: 0)) at ././gtk/ gtkcellarea. c:1101
Thread 1 "mate-terminal" hit Breakpoint 3, gtk_main_
025
2025 if (GTK_IS_WINDOW (toplevel))
$2044 (widget) = 0x555555e50780
$2045 (toplevel) = 0x555555e50780
$2046 (*widget) = {parent_instance = {g_type_instance = {g_class = 0x555555e5e800}, ref_count = 1, qdata = 0x2}, priv = 0x555
555e50690}
$2047 (*widget.priv) = {..., window = 0x0, registered_windows = 0x0, parent = 0x0, event_contr
ollers = 0x0, accessible = 0x0}
#0 gtk_main_
#1 0x00007ffff71f3bb3 in gtk_grab_add (widget=
#2 0x00007ffff70ac1d1 in gtk_cell_
0x555555e183f0, path=0x555555e57720 "2:0", background_
: 0)) at ././gtk/
#3 0x00007ffff70a92dd in gtk_cell_
55e183f0, path=0x555555e57720 "2:0", background_
at ././gtk/
#4 0x00007ffff709d47e in gtk_cell_
#5 0x00007ffff7096407 in gtk_cell_
At time of gtk_grab_remove, when event is delivered to widget 0x555555e50780 from gtk_main_do_event, its toplevel was 0x555555ddb0d0 get_window_ group (widget= 0x555555e50780) at ././gtk/ gtkmain. c:2025 get_window_ group (widget= 0x555555e50780) at ././gtk/ gtkmain. c:2025 0x555555e50780) at ././gtk/ gtkmain. c:2286 editable_ event_box_ key_press_ event (widget= 0x555555e50780, event=0x555555e 473c0) gtkcellrenderer accel.c: 645
Thread 1 "mate-terminal" hit Breakpoint 3, gtk_main_
2025 if (GTK_IS_WINDOW (toplevel))
$2092 (widget) = 0x555555e50780
$2093 (toplevel) = 0x555555ddb0d0
$2094 (*widget) = {parent_instance = {g_type_instance = {g_class = 0x555555e5e800}, ref_count = 7, qdata = 0x555555ecf180}, priv = 0x555555e50690}
$2095 (*widget.priv) = {...., window = 0x555555e507e0, registered_windows = 0x55555595
7d00, parent = 0x555555e183f0, event_controllers = 0x0, accessible = 0x555555e1d320}
#0 gtk_main_
#1 0x00007ffff71f3d8c in gtk_grab_remove (widget=
#2 0x00007ffff70ac56b in gtk_cell_
at ././gtk/
Parent of the widget was changed by gtk_tree_ view_multipress _gesture_ pressed -> .. -> gtk_cell_ area_activate_ cell -> gtk_cell_ area_add_ editable -> ..signal.. -> gtk_tree_ view_column_ add_editable_ callback -> _gtk_tree_ view_add_ editable -> gtk_tree_view_put -> gtk_widget_ set_parent
So, gtk_cell_ area_activate_ cell of gtk+3 (3.22.7) has incorrect order of actions which broke gtk_grab_add / gtk_grab_remove pair /github. com/GNOME/ gtk/blob/ 6cc08d60efeb02a fc0d67982c3dc20 5dfd16d7cd/ gtk/gtkcellarea .c#L3388
https:/
3428 gtk_cell_ renderer_ start_editing (renderer, area_add_ editable (area, priv->focus_cell, editable_widget, cell_area);
...
3444 gtk_cell_