21.5 screen resize issue

Stephen J. Turnbull stephen at xemacs.org
Mon Dec 3 04:42:44 EST 2007


Ron Isaacson writes:

 > After a resize, I see TWO calls to change_frame_size with the correct
 > dimensions, while delay == 1. Each of these sets the f->new_*
 > variables, along with size_change_pending, then returns. Then there's
 > a THIRD call, again with correct dimensions, when delay == 0; that
 > sets size_change_pending to 0 and then we go through a full redisplay.
 > redisplay_frame does:
 > 
 >   depth = enter_redisplay_critical_section ();
 > 
 > and gets back a depth of 3. It proceeds all the way through the
 > CRITICAL REDISPLAY SECTION, then when it's done, calls:
 > 
 >   exit_redisplay_critical_section (depth);
 > 
 > Now, I confirmed that just before that call, f->size_change_pending is
 > still 0. However, when exit_redisplay_critical_section does its
 > unbind_to business, specpdl_depth_counter starts at 13; by the time it
 > walks down to 3, f->size_change_pending has been reset to 1,

Hm.  I wonder if it's not size_change_pending that has been reset to
1, but rather f has been reset to a frame where size_change_pending is
1!  See the comment about size_change_pending in change_frame_size_1
at line 3437 of frame.c, but in change_frame_size we loop over all TTY
frames without resetting size_change_pending on frames != f at line 3460.

 > but the two f->new_* variables are still 0.

And this may make sense because change_frame_size was called on that
frame from the loop in redisplay.c at line 6719.

I gotta get some sleep, but I think that moving the reset of
size_changed_pending to the beginning of change_frame_size_1 might help.



More information about the XEmacs-Beta mailing list