forked from AuroraMiddleware/gtk
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
This commit is contained in:
parent
81bfc91c7a
commit
efbe40214b
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user