Handle spontaneous frames during a resize

During a resize, if we don't have a configure pending, then a counter
change shouldn't trigger anything other than the normal drawing:
it's just a spontaneous frame from the application. So don't try
to update the position or remove our timeout ID.

https://bugzilla.gnome.org/show_bug.cgi?id=696091
This commit is contained in:
Owen W. Taylor 2013-03-15 16:16:28 -04:00
parent af01ddaf5d
commit 7a8c45dda8

View File

@ -9638,19 +9638,14 @@ meta_window_update_sync_request_counter (MetaWindow *window,
if (window == window->display->grab_window && if (window == window->display->grab_window &&
meta_grab_op_is_resizing (window->display->grab_op) && meta_grab_op_is_resizing (window->display->grab_op) &&
new_counter_value >= window->sync_request_wait_serial && new_counter_value >= window->sync_request_wait_serial &&
(!window->extended_sync_request_counter || new_counter_value % 2 == 0)) (!window->extended_sync_request_counter || new_counter_value % 2 == 0) &&
window->sync_request_timeout_id)
{ {
meta_topic (META_DEBUG_RESIZING, meta_topic (META_DEBUG_RESIZING,
"Alarm event received last motion x = %d y = %d\n", "Alarm event received last motion x = %d y = %d\n",
window->display->grab_latest_motion_x, window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y); window->display->grab_latest_motion_y);
/* If sync was previously disabled, turn it back on and hope
* the application has come to its senses (maybe it was just
* busy with a pagefault or a long computation).
*/
window->disable_sync = FALSE;
g_source_remove (window->sync_request_timeout_id); g_source_remove (window->sync_request_timeout_id);
window->sync_request_timeout_id = 0; window->sync_request_timeout_id = 0;
@ -9663,6 +9658,12 @@ meta_window_update_sync_request_counter (MetaWindow *window,
TRUE); TRUE);
} }
/* If sync was previously disabled, turn it back on and hope
* the application has come to its senses (maybe it was just
* busy with a pagefault or a long computation).
*/
window->disable_sync = FALSE;
if (needs_frame_drawn) if (needs_frame_drawn)
meta_compositor_queue_frame_drawn (window->display->compositor, window, meta_compositor_queue_frame_drawn (window->display->compositor, window,
no_delay_frame); no_delay_frame);