GNOME Bugzilla – Bug 693833
Fixes for _NET_WM_FRAME_DRAWN
Last modified: 2013-02-14 21:22:50 UTC
The first patch here fixes a problem where interactive resizes are completely broken with the current GTK+ wip/frame-synchronization branch. The second patch fixes a potential bug where a spontaneous update in a interactively resized window could cause a missed _NET_WM_FRAME_DRAWN and thus a hang. (Not actually reproduced.)
Created attachment 236116 [details] [review] MetaWindow: fix detecting the response to an extended _NET_WM_SYNC_REQUEST During resizing, An odd counter value (indicating the beginning of a frame) shouldn't cause us to redraw and start a new frame, only an even counter value. This was causing the frozen state for the window frame counter to overlap the frozen state for the resize, causing the window not to be updated.
Created attachment 236117 [details] [review] Fix corner cases where _NET_WM_FRAME_DRAWN might be missed The WM spec requires _NET_WM_FRAME_DRAWN to *always* be sent when there is an appropriate update to the sync counter value. We were potentially missing _NET_WM_FRAME_DRAWN when an application did a spontaneous update during an interactive resize and during effects. Refactor the code to always send _NET_WM_FRAME_DRAWN, even when a window is frozen.
Review of attachment 236116 [details] [review]: OK.
Review of attachment 236117 [details] [review]: ::: src/compositor/compositor.c @@ +762,3 @@ + return; + + meta_window_actor_set_updates_frozen (window_actor, no_delay_frame); Uh, did you mean to call meta_window_actor_queue_frame_drawn here?
Created attachment 236126 [details] [review] Fix corner cases where _NET_WM_FRAME_DRAWN might be missed Corrected version (I think I restarted gnome-shell on the wrong computer when testing...)
Review of attachment 236126 [details] [review]: OK.
Attachment 236116 [details] pushed as aeb589c - MetaWindow: fix detecting the response to an extended _NET_WM_SYNC_REQUEST Attachment 236126 [details] pushed as 5876f2e - Fix corner cases where _NET_WM_FRAME_DRAWN might be missed