Comment 6 for bug 1667227

Revision history for this message
yzp15 (yzp15) wrote :

The warning

(mate-terminal:14703): Gtk-CRITICAL **: gtk_widget_get_toplevel: assertion 'GTK_IS_WIDGET (widget)' failed

is from

#0 0x00007ffff6d95d1f in gdk_window_get_window_type (window=0x0) at ././gdk/gdkwindow.c:2240
#1 0x00007ffff72822da in gtk_grab_add (widget=0x555555e40790) at ././gtk/gtkmain.c:2222
#2 0x00007ffff71997d8 in gtk_cell_renderer_accel_start_editing (cell=<optimized out>,
    event=0x5555557edd20, widget=<optimized out>, path=0x555555e35720 "2:0",
    background_area=<optimized out>, cell_area=<optimized out>, flags=(unknown: 0))
    at ././gtk/gtkcellrendereraccel.c:497
#3 0x00007ffff7196700 in gtk_cell_renderer_start_editing (cell=cell@entry=0x555555842270,
    event=event@entry=0x5555557edd20, widget=widget@entry=0x555555e08400, path=0x555555e35720 "2:0",
    background_area=background_area@entry=0x7fffffffcc40, cell_area=cell_area@entry=0x7fffffffcc40,
    flags=(unknown: 0)) at ././gtk/gtkcellrenderer.c:921
#4 0x00007ffff718e601 in gtk_cell_area_activate_cell (area=area@entry=0x555555e02140,
    widget=widget@entry=0x555555e08400, renderer=renderer@entry=0x555555842270,
    event=event@entry=0x5555557edd20, cell_area=cell_area@entry=0x7fffffffccc0,
    flags=flags@entry=(unknown: 0)) at ././gtk/gtkcellarea.c:3432
#5 0x00007ffff718eb0e in gtk_cell_area_real_event (area=0x555555e02140, context=<optimized out>,
    widget=0x555555e08400, event=0x5555557edd20, cell_area=0x7fffffffcd80, flags=(unknown: 0))
    at ././gtk/gtkcellarea.c:1101
#6 0x00007ffff73bee64 in gtk_tree_view_multipress_gesture_pressed (gesture=0x555555849330,
    n_press=1, x=<optimized out>, y=<optimized out>, tree_view=0x555555e08400)
    at ././gtk/gtktreeview.c:3324

The code to gtk_grab_add was added as debian patch in gtk+3.0-3.22.7 (libgtk-3-0 package):
debian/patches/016_no_offscreen_widgets_grabbing.patch:+ if (toplevel && gdk_window_get_window_type (gtk_widget_get_window (toplevel)) == GDK_WINDOW_OFFSCREEN)

Description: Don't let offscreen widget do grabbing
Author: Cody Russell <email address hidden>
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=607668
Bug-Ubuntu: https://bugs.launchpad.net/bugs/512427

critical was reported in https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/512427/comments/4

SEGV stack has code which works on grabs too:

#0 0x00007ffff5ef5321 in g_type_check_instance_is_a ()
   from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#1 0x00007ffff73d61d6 in gtk_widget_get_toplevel (widget=0x555555e40790) at ././gtk/gtkwidget.c:11521
11518 GtkWidget*
11519 gtk_widget_get_toplevel (GtkWidget *widget)
11520 {
11521 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);

#2 0x00007ffff73f79c9 in window_group_cleanup_grabs (group=<optimized out>,
    window=window@entry=0x555555dc42f0) at ././gtk/gtkwindowgroup.c:110
105 priv = group->priv;
106
107 tmp_list = priv->grabs;
108 while (tmp_list)
109 {
110 if (gtk_widget_get_toplevel (tmp_list->data) == (GtkWidget*) window)
111 to_remove = g_slist_prepend (to_remove, g_object_ref (tmp_list->data));
112 tmp_list = tmp_list->next;
113 }