gtk2/gdk
Ray Strode 56b3669411 x11: Avoid thawing surface until frame is drawn
Since commit 972134abe4 a frame getting
drawn has three states (with the vendor nvidia driver at least):

1. drawn by gtk waiting on the GPU
2. drawn by GPU waiting on the compositor
3. drawn by compositor

Those three states are encoded in two flags: frame_pending and
frame_still_painting.

frame_pending means step 1 is done, but step 2 and 3 are still
in progress.  frame_still_painting means step 2 is still in progress.

After step 1 is finished the surface is frozen until step 3 is finished.

When the compositor notifies gtk it's done with step 3, with a
_NET_WM_FRAME_DRAWN client message, the toolkit thaws the surface to
allow the next frame to proceed.

The compositor sometimes sends gtk a _NET_WM_FRAME_DRAWN client message
between steps 1 and 2.  This message should be ignored because it's not
a reply to the current frame.

Unfortunately, gtk currently assumes if it gets a _NET_WM_FRAME_DRAWN
client message while waiting for step 2 that it's actually at step 3,
and proceeds to draw a new frame while the existing frame is still
pending, leading to a blown assertion.

This commit addresses the problem by ignoring _NET_WM_FRAME_DRAWN
client messages from the compositor unless actually expecting one.

Fixes: #2902
2020-06-30 14:36:15 -04:00
..
broadway gdk: Drop GdkGrabOwnership 2020-06-23 23:42:53 +02:00
quartz Rename master and slave device 2020-06-18 19:22:20 +01:00
resources/glsl
wayland wayland: Respect GDK_DEBUG=default-settings 2020-06-28 13:42:02 -04:00
win32 gdk: Drop GdkGrabOwnership 2020-06-23 23:42:53 +02:00
x11 x11: Avoid thawing surface until frame is drawn 2020-06-30 14:36:15 -04:00
COPYING
default_cursor.png gdk: Include a default cursor as resource 2020-04-26 14:41:52 -04:00
filetransferportal.c filechooser portal: Free portal proxy when bus connection closes 2020-02-04 14:08:10 +01:00
filetransferportalprivate.h Tweak the file transfer portal _again_ 2020-01-17 23:46:37 -05:00
gdk-autocleanup.h gdk: Make GdkKeymap a private api 2020-04-06 16:32:03 -04:00
gdk-private.h gdk: Better help for GDK_DEBUG 2020-06-28 13:42:02 -04:00
gdk.c gdk: Better help for GDK_DEBUG 2020-06-28 13:42:02 -04:00
gdk.h Add a GdkDragSurface interface 2020-03-12 14:56:21 -04:00
gdkapplaunchcontext.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkapplaunchcontext.h Add a getter for GdkAppLaunchContext::display 2020-02-24 08:32:34 -05:00
gdkapplaunchcontextprivate.h
gdkcairo.c gdk: Remove gdk_cairo_get_clip_rectangle() 2020-02-13 07:36:38 +01:00
gdkcairo.h gdk: Remove gdk_cairo_get_clip_rectangle() 2020-02-13 07:36:38 +01:00
gdkcairocontext.c
gdkcairocontext.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkcairocontextprivate.h
gdkclipboard.c Fix minor typos 2020-06-18 10:47:16 +03:00
gdkclipboard.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkclipboardprivate.h gdk: Change some async clipboard api 2019-04-02 15:10:53 +00:00
gdkconfig.h.meson Remove more mir remnants 2019-12-28 21:52:34 -05:00
gdkconfig.h.win32 Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkconfig.h.win32_vulkan Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkconstructor.h gdk: Include copy of glib/gconstructor.h 2019-03-17 21:29:59 +01:00
gdkcontentdeserializer.c Tweak the file transfer portal _again_ 2020-01-17 23:46:37 -05:00
gdkcontentdeserializer.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkcontentformats.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkcontentformats.h contentformats: Constify some functions 2020-03-02 04:43:56 +01:00
gdkcontentformatsprivate.h
gdkcontentprovider.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkcontentprovider.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkcontentproviderimpl.c Fix minor typos 2020-06-18 10:47:16 +03:00
gdkcontentproviderimpl.h Remove gdk_content_provider_new_with_formats() 2020-02-18 02:40:00 +01:00
gdkcontentproviderprivate.h
gdkcontentserializer.c Tweak the file transfer portal _again_ 2020-01-17 23:46:37 -05:00
gdkcontentserializer.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkcursor.c docs: Small updates 2018-07-13 10:13:00 +02:00
gdkcursor.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkcursorprivate.h
gdkdevice.c gdk: Drop gdk_device_get_last_event_surface() 2020-06-24 11:24:04 +02:00
gdkdevice.h docs: Remove ancient version information 2020-06-27 21:46:22 -04:00
gdkdevicepad.c
gdkdevicepad.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkdevicepadprivate.h
gdkdeviceprivate.h Rename master and slave device 2020-06-18 19:22:20 +01:00
gdkdevicetool.c
gdkdevicetool.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkdevicetoolprivate.h
gdkdisplay.c gdk: Drop GdkGrabOwnership 2020-06-23 23:42:53 +02:00
gdkdisplay.h Bring back gdk_display_put_event 2020-05-29 09:26:50 -04:00
gdkdisplaymanager.c Fix minor typos 2020-05-28 11:00:03 +03:00
gdkdisplaymanager.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkdisplaymanagerprivate.h
gdkdisplayprivate.h gdk: Drop GdkGrabOwnership 2020-06-23 23:42:53 +02:00
gdkdrag.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkdrag.h gdk: Make gdk_drag_begin take doubles 2020-05-17 17:51:03 -04:00
gdkdragprivate.h Strip const from GdkEvent 2020-02-21 00:51:02 -05:00
gdkdragsurface.c docs: Remove unnecessary SECTION 2020-05-12 18:44:21 +01:00
gdkdragsurface.h Annotation fixes 2020-04-03 15:30:56 +01:00
gdkdragsurfaceprivate.h Add a GdkDragSurface interface 2020-03-12 14:56:21 -04:00
gdkdrawcontext.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkdrawcontext.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkdrawcontextprivate.h
gdkdrop.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkdrop.h drop: Remove unused convenience APIs 2020-03-02 04:43:56 +01:00
gdkdropprivate.h gdk: Make gdk_drop_status() take preferred action 2020-03-02 04:43:56 +01:00
gdkenumtypes.c.template Use g_once for all the mkenums template files 2019-05-21 10:32:08 -05:00
gdkenumtypes.h.template Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkevents.c gdk: Small documentation fixes 2020-06-28 12:24:03 -04:00
gdkevents.h gdk: Add gdk_event_get_seat() 2020-06-23 23:42:53 +02:00
gdkeventsprivate.h Keep scroll history 2020-06-09 13:43:03 -04:00
gdkframeclock.c frame-clock: New approach in smoothing frame clock 2020-05-28 15:13:07 +02:00
gdkframeclock.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkframeclockidle.c frame clock: fix scheduling 2020-06-15 08:54:18 +02:00
gdkframeclockidleprivate.h
gdkframeclockprivate.h frame-clock: New approach in smoothing frame clock 2020-05-28 15:13:07 +02:00
gdkframetimings.c
gdkframetimings.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkgl.c Switch to GL_ARB_framebuffer_object 2020-06-12 15:08:44 +02:00
gdkglcontext.c Fixed OpenGL extension detection for extensions promoted to OpenGL core. 2020-02-14 05:41:01 +11:00
gdkglcontext.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkglcontextprivate.h GdkGLContext: Add internal functions for KHR_DEBUG calls 2019-04-25 11:35:00 +02:00
gdkglobals.c
gdkgltexture.c gl texture: fix a typo 2019-01-23 22:33:44 -05:00
gdkgltexture.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkgltextureprivate.h
gdkinternals.h gdk: Drop GdkGrabOwnership 2020-06-23 23:42:53 +02:00
gdkintl.h
gdkkeynames.c
gdkkeys.c Fix minor typos 2020-06-18 10:47:16 +03:00
gdkkeys.h gdk: Make GdkKeymap a private api 2020-04-06 16:32:03 -04:00
gdkkeysprivate.h keymap: Cache key info 2020-04-30 13:05:52 -04:00
gdkkeysyms-update.pl docs: Fix GTK links and locations 2019-02-06 10:39:27 +01:00
gdkkeysyms.h docs: Fix GTK links and locations 2019-02-06 10:39:27 +01:00
gdkkeyuni.c gdk: Clarify the docs of gdk_keyval_to_unicode 2020-06-22 13:24:34 -04:00
gdkmarshalers.list surface: Add marshallers for new events 2019-05-28 19:19:24 +02:00
gdkmemorytexture.c
gdkmemorytexture.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkmemorytextureprivate.h
gdkmonitor.c display: Remove unneeded getters 2020-05-17 07:32:37 +02:00
gdkmonitor.h Remove primary monitor api 2020-01-30 21:33:37 +01:00
gdkmonitorprivate.h monitor: Add gdk_monitor_set_geometry() 2020-05-17 07:10:34 +02:00
gdkpaintable.c xxx: Add a hack to make paintables transform to/from objects 2020-05-30 19:26:46 -04:00
gdkpaintable.h docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkpango.c
gdkpango.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkpipeiostream.c
gdkpipeiostreamprivate.h
gdkpixbuf-drawable.c pixbuf: Add a missing return value transfer annotation 2019-09-13 11:07:56 +02:00
gdkpixbuf.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkpopup.c docs: Fix several missing references in the documentation 2020-05-11 19:26:20 +02:00
gdkpopup.h surface: Implement GdkPopup 2020-03-11 19:35:55 -04:00
gdkpopuplayout.c popuplayout: Add docs 2020-03-11 19:35:55 -04:00
gdkpopuplayout.h gdk: Documentation fixups 2020-06-05 20:59:51 -04:00
gdkpopupprivate.h Introduce GdkPopup 2020-03-11 19:35:55 -04:00
gdkprofiler.c profiler: Add G_GNUC_PRINTF markers to silence warnings 2020-02-12 13:36:04 +01:00
gdkprofilerprivate.h profiler: Add _end_mark() version of _add_mark() 2020-02-12 11:25:34 +01:00
gdkrectangle.c
gdkrectangle.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkrgba.c Drop fallback-c89.c 2020-05-31 17:09:23 +02:00
gdkrgba.h Add pure and const annotations to various functions 2020-01-26 18:21:07 +01:00
gdkrgbaprivate.h build: Add more useful warning flags 2020-03-05 07:56:28 +01:00
gdkseat.c gdk: Drop gdk_seat_get_logical_pointers() 2020-06-23 23:42:53 +02:00
gdkseat.h gdk: Drop gdk_seat_get_logical_pointers() 2020-06-23 23:42:53 +02:00
gdkseatdefault.c gdk: Drop gdk_seat_get_logical_pointers() 2020-06-23 23:42:53 +02:00
gdkseatdefaultprivate.h Rename master and slave device 2020-06-18 19:22:20 +01:00
gdkseatprivate.h gdk: Drop gdk_seat_get_logical_pointers() 2020-06-23 23:42:53 +02:00
gdksnapshot.c
gdksnapshot.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdksnapshotprivate.h
gdksurface.c gdk: Depend less on gdk_event_get_device() 2020-06-23 23:42:53 +02:00
gdksurface.h gdk: Drop supports_multidevice API 2020-06-23 23:42:53 +02:00
gdksurfaceprivate.h gdk: Drop supports_multidevice API 2020-06-23 23:42:53 +02:00
gdktexture.c Fix minor typos 2020-06-18 10:47:16 +03:00
gdktexture.h Add pure and const annotations to various functions 2020-01-26 18:21:07 +01:00
gdktextureprivate.h
gdktoplevel.c Fix minor typos 2020-05-28 11:00:03 +03:00
gdktoplevel.h gdk: Add gdk_toplevel_begin_move/resize 2020-05-17 12:41:16 -04:00
gdktoplevellayout.c surface: Document coordinate systems a bit 2020-04-13 09:29:11 -04:00
gdktoplevellayout.h gdk: Documentation fixups 2020-06-05 20:59:51 -04:00
gdktoplevelprivate.h gdk: Move the begin_move/resize_drag vfuncs around 2020-05-17 14:15:06 -04:00
gdktypes.h gdk: Add scroll delta x/y as device axes 2020-06-09 13:43:03 -04:00
gdkversionmacros.h.in Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkvulkancontext.c Fix minor typos 2020-05-28 11:00:03 +03:00
gdkvulkancontext.h Use a single compilation symbol 2019-11-27 13:33:43 +00:00
gdkvulkancontextprivate.h
gen-gdk-gresources-xml.py gdk: Include a default cursor as resource 2020-04-26 14:41:52 -04:00
gen-keyname-table.pl
keyname-table.h
keynames-translate.txt
keynames.txt
meson.build Add a GdkDragSurface interface 2020-03-12 14:56:21 -04:00