Commit efbe4021 authored by Olivier Fourdan's avatar Olivier Fourdan

gdkwindow: different displays, different classes

GdkWindow's before_process_all_updates() and after_process_all_updates()
wrongly assume that all displays are from the same class, which is not
the case if for example a client open different displays with different
backends such as X11 and Wayland.

Use the actual class for each display in the display list to avoid a
crash when mixing displays from different classes.

Fix suggested by Christian Persch <chpe@gnome.org> in bug #776472.

https://bugzilla.gnome.org/show_bug.cgi?id=776472
parent 81bfc91c
......@@ -4024,12 +4024,10 @@ static void
before_process_all_updates (void)
{
GSList *displays, *l;
GdkDisplayClass *display_class;
displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
display_class = GDK_DISPLAY_GET_CLASS (displays->data);
for (l = displays; l; l = l->next)
display_class->before_process_all_updates (l->data);
GDK_DISPLAY_GET_CLASS (l->data)->before_process_all_updates (l->data);
g_slist_free (displays);
}
......@@ -4038,12 +4036,10 @@ static void
after_process_all_updates (void)
{
GSList *displays, *l;
GdkDisplayClass *display_class;
displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
display_class = GDK_DISPLAY_GET_CLASS (displays->data);
for (l = displays; l; l = l->next)
display_class->after_process_all_updates (l->data);
GDK_DISPLAY_GET_CLASS (l->data)->after_process_all_updates (l->data);
g_slist_free (displays);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment