unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#16736: Compiling a Lisp file causes display to flash off and on
@ 2014-02-13  2:25 Glenn Morris
  2014-02-14  6:42 ` Glenn Morris
  0 siblings, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-13  2:25 UTC (permalink / raw)
  To: 16736

Package: emacs
Version: 24.3.50

Current trunk on x86_64 GNU/Linux, Lucid toolkit.

Visit some non-trivial file that compiles with no warnings:

  emacs -Q some-file.el
  M-x byte-compile-file RET RET


During the resulting compilation, at some point it looks like the Emacs
display goes completely blank. It happens a bit fast, so it is hard to
say exactly. It does not look to me as if it is switching to another
buffer (Compile-Log) and back again. It's like the display flashes off
and on. The tool-bar, mode line also disappear.

This effect does not happen with 24.3.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-13  2:25 bug#16736: Compiling a Lisp file causes display to flash off and on Glenn Morris
@ 2014-02-14  6:42 ` Glenn Morris
  2014-02-14  7:29   ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-14  6:42 UTC (permalink / raw)
  To: 16736


I'm noticing display flashes in other situations too. Eg with simply
emacs -Q, then repeating C-x 2, C-x 1 in sequence, I notice the toolbar
flashing quickly off and on. Not every time, but often. It's rather
distracting. I do not observe this with 24.3.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-14  6:42 ` Glenn Morris
@ 2014-02-14  7:29   ` Eli Zaretskii
  2014-02-14  7:48     ` Glenn Morris
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-14  7:29 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Date: Fri, 14 Feb 2014 01:42:29 -0500
> 
> 
> I'm noticing display flashes in other situations too. Eg with simply
> emacs -Q, then repeating C-x 2, C-x 1 in sequence, I notice the toolbar
> flashing quickly off and on. Not every time, but often. It's rather
> distracting. I do not observe this with 24.3.

I tried to reproduce your original report, but couldn't, perhaps
because I couldn't find a large enough Lisp file that compiles without
warnings.  Can you tell which file did you use?

As for toolbar flickering with repeated "C-x 2" and "C-x 1", I don't
see it here.  Is this with a configuration where Emacs draws the
toolbar, or is the toolbar drawn by the toolkit?





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-14  7:29   ` Eli Zaretskii
@ 2014-02-14  7:48     ` Glenn Morris
  2014-02-15  8:24       ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-14  7:48 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

> I tried to reproduce your original report, but couldn't, perhaps
> because I couldn't find a large enough Lisp file that compiles without
> warnings.  Can you tell which file did you use?

I think I randomly used progmodes/scheme.el, but added

(require 'gnus)
(require 'org)

at the start, and deleted gnus/*.elc and org/*.elc to slow things down.

Basically make the slowest compilation you can, so long as there are no
warnings. It seems to be right at the end of the compilation that the
flash occurs.

> As for toolbar flickering with repeated "C-x 2" and "C-x 1", I don't
> see it here.  Is this with a configuration where Emacs draws the
> toolbar, or is the toolbar drawn by the toolkit?

--with-x-toolkit=athena --without-toolkit-scroll-bars





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-14  7:48     ` Glenn Morris
@ 2014-02-15  8:24       ` Eli Zaretskii
  2014-02-15  8:34         ` Eli Zaretskii
  2014-02-15 21:28         ` Glenn Morris
  0 siblings, 2 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-15  8:24 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org
> Date: Fri, 14 Feb 2014 02:48:31 -0500
> 
> Eli Zaretskii wrote:
> 
> > I tried to reproduce your original report, but couldn't, perhaps
> > because I couldn't find a large enough Lisp file that compiles without
> > warnings.  Can you tell which file did you use?
> 
> I think I randomly used progmodes/scheme.el, but added
> 
> (require 'gnus)
> (require 'org)
> 
> at the start, and deleted gnus/*.elc and org/*.elc to slow things down.
> 
> Basically make the slowest compilation you can, so long as there are no
> warnings. It seems to be right at the end of the compilation that the
> flash occurs.

I don't see any flash here.

What you describe, viz.:

> During the resulting compilation, at some point it looks like the Emacs
> display goes completely blank. It happens a bit fast, so it is hard to
> say exactly. It does not look to me as if it is switching to another
> buffer (Compile-Log) and back again. It's like the display flashes off
> and on. The tool-bar, mode line also disappear.

sounds like the frame is cleared and completely redrawn, which I won't
expect during byte-compile, which only redisplays the echo area.  If I
put a breakpoint in clear_frame, it is never hit during your recipe.

> > As for toolbar flickering with repeated "C-x 2" and "C-x 1", I don't
> > see it here.  Is this with a configuration where Emacs draws the
> > toolbar, or is the toolbar drawn by the toolkit?
> 
> --with-x-toolkit=athena --without-toolkit-scroll-bars

These symptoms seem to indicate that the tool bar is redrawn, whereas
it shouldn't be, because its content is unchanged by "C-x 2".  I don't
see any flickering here, so please step with GDB through the affected
code, as described below, and tell what you see.

I also tried this recipe:

  (while t
    (split-window-below)
    (sit-for 0.05)
    (delete-other-windows)
    (sit-for 0.05))

Typing "C-x C-e" at the right paren of this in *scratch*, I see no
flickering in the tool bar.  Do you?

To find out why does the tool-bar flicker, please step into the
portion of redisplay that redraws the tool bar.  Its entry point is in
update_frame, like this:

  #if defined (HAVE_WINDOW_SYSTEM) && ! defined (USE_GTK) && ! defined (HAVE_NS)
	/* Update the tool-bar window, if present.  */
	if (WINDOWP (f->tool_bar_window))
	  {
	    struct window *w = XWINDOW (f->tool_bar_window);

	    /* Update tool-bar window.  */
	    if (w->must_be_updated_p)
	      {
		Lisp_Object tem;

		update_window (w, 1);
		w->must_be_updated_p = false;

		/* Swap tool-bar strings.  We swap because we want to
		   reuse strings.  */
		tem = f->current_tool_bar_string;
		fset_current_tool_bar_string (f, f->desired_tool_bar_string);
		fset_desired_tool_bar_string (f, tem);
	      }
	  }
  #endif

Please step into the update_window call above.  There you should see
that we perform this loop:

      /* Update the rest of the lines.  */
      for (; row < end && (force_p || !input_pending); ++row)
	/* scrolling_window resets the enabled_p flag of the rows it
	   reuses from current_matrix.  */
	if (row->enabled_p)
	  {

Then step into update_window_line call in that loop.  The glyph rows
of the tool-bar window don't have marginal areas, so when the loop
calls update_window_line, only update_text_area is called from
update_window_line.  There's call in update_text_area that compares
the glyph row of the current glyph matrix (which reflects what is on
the screen) and the desired glyph matrix (which says what should be on
the screen).  The comparison code starts with this:

      stop = min (current_row->used[TEXT_AREA], desired_stop_pos);
      i = 0;
      x = desired_row->x;

      /* Loop over glyphs that current and desired row may have
	 in common.  */
      while (i < stop)
	{

In my case, current_row and desired_row are exactly equal, so the tool
bar is never redrawn.  Please see if things are different in your
case, and why.

You can display the contents of the glyph row with the pgrowx command
(defined on src/.gdbinit), like this:

  (gdb) pgrowx current_row
  TEXT: 13 glyphs
    0    0: IMAGE[10] str=0x3a9f394[0] w=35 a+d=14+21 face=3 MB [ slice=0,0,24,24
    1   35: IMAGE[11] str=0x3a9f394[1] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
    2   69: IMAGE[12] str=0x3a9f394[2] w=29 a+d=14+21 face=3 MB slice=0,0,19,24
    3   98: IMAGE[13] str=0x3a9f394[3] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
    4  132: IMAGE[14] str=0x3a9f394[4] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
    5  166: IMAGE[15] str=0x3a9f394[5] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
    6  178: IMAGE[16] str=0x3a9f394[6] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
    7  212: IMAGE[15] str=0x3a9f394[7] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
    8  224: IMAGE[17] str=0x3a9f394[8] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
    9  258: IMAGE[18] str=0x3a9f394[9] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
   10  292: IMAGE[19] str=0x3a9f394[10] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
   11  326: IMAGE[15] str=0x3a9f394[11] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
   12  338: IMAGE[20] str=0x3a9f394[12] w=34 a+d=14+21 face=3 MB ] slice=0,0,24,24

Thanks.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15  8:24       ` Eli Zaretskii
@ 2014-02-15  8:34         ` Eli Zaretskii
  2014-02-15 21:28         ` Glenn Morris
  1 sibling, 0 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-15  8:34 UTC (permalink / raw)
  To: rgm; +Cc: 16736

> Date: Sat, 15 Feb 2014 10:24:44 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 16736@debbugs.gnu.org
> 
> Then step into update_window_line call in that loop.  The glyph rows
> of the tool-bar window don't have marginal areas, so when the loop
> calls update_window_line, only update_text_area is called from
> update_window_line.  There's call in update_text_area that compares
                               ^^^^
This should have been "code", sorry.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15  8:24       ` Eli Zaretskii
  2014-02-15  8:34         ` Eli Zaretskii
@ 2014-02-15 21:28         ` Glenn Morris
  2014-02-15 22:07           ` Glenn Morris
  2014-02-16 16:17           ` Eli Zaretskii
  1 sibling, 2 replies; 35+ messages in thread
From: Glenn Morris @ 2014-02-15 21:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736


Eli Zaretskii wrote:

> sounds like the frame is cleared and completely redrawn, which I won't
> expect during byte-compile, which only redisplays the echo area.  If I
> put a breakpoint in clear_frame, it is never hit during your recipe.

I put a break on x_clear_frame, and with emacs -Q, byte-compile-file on
scheme.el triggers it.

>   (while t
>     (split-window-below)
>     (sit-for 0.05)
>     (delete-other-windows)
>     (sit-for 0.05))
>
> Typing "C-x C-e" at the right paren of this in *scratch*, I see no
> flickering in the tool bar.  Do you?

Oh yes. It looks awful!

In an attempt to follow your instructions, I put a break on dispnew.c:3045.

So far I don't think I am getting any useful information out of this,
because it seems to trigger a lot, and I'm not sure I'm catching it at
the right time. I'll try again later, but frankly I don't know what I'm
doing, even with your detailed instructions.

Here's current_row and desired_row in update_text_area one time.

TEXT: 13 glyphs
  0    0: IMAGE[10] str=0x13fb5c8[0] w=35 a+d=14+21 face=3 MB [ slice=0,0,24,24
  1   35: IMAGE[11] str=0x13fb5c8[1] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  2   69: IMAGE[12] str=0x13fb5c8[2] w=29 a+d=14+21 face=3 MB slice=0,0,19,24
  3   98: IMAGE[13] str=0x13fb5c8[3] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  4  132: IMAGE[14] str=0x13fb5c8[4] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  5  166: IMAGE[15] str=0x13fb5c8[5] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
  6  178: IMAGE[16] str=0x13fb5c8[6] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  7  212: IMAGE[15] str=0x13fb5c8[7] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
  8  224: IMAGE[17] str=0x13fb5c8[8] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  9  258: IMAGE[18] str=0x13fb5c8[9] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
 10  292: IMAGE[19] str=0x13fb5c8[10] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
 11  326: IMAGE[15] str=0x13fb5c8[11] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
 12  338: IMAGE[20] str=0x13fb5c8[12] w=34 a+d=14+21 face=3 MB ] slice=0,0,24,24
TEXT: 13 glyphs
  0    0: IMAGE[10] str=0x13fbe90[0] w=35 a+d=14+21 face=3 MB [ slice=0,0,24,24
  1   35: IMAGE[11] str=0x13fbe90[1] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  2   69: IMAGE[12] str=0x13fbe90[2] w=29 a+d=14+21 face=3 MB slice=0,0,19,24
  3   98: IMAGE[13] str=0x13fbe90[3] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  4  132: IMAGE[14] str=0x13fbe90[4] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  5  166: IMAGE[15] str=0x13fbe90[5] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
  6  178: IMAGE[16] str=0x13fbe90[6] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  7  212: IMAGE[15] str=0x13fbe90[7] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
  8  224: IMAGE[17] str=0x13fbe90[8] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
  9  258: IMAGE[18] str=0x13fbe90[9] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
 10  292: IMAGE[19] str=0x13fbe90[10] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
 11  326: IMAGE[15] str=0x13fbe90[11] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
 12  338: IMAGE[20] str=0x13fbe90[12] w=34 a+d=14+21 face=3 MB ] slice=0,0,24,24





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15 21:28         ` Glenn Morris
@ 2014-02-15 22:07           ` Glenn Morris
  2014-02-16 10:31             ` martin rudalics
  2014-02-16 16:22             ` Eli Zaretskii
  2014-02-16 16:17           ` Eli Zaretskii
  1 sibling, 2 replies; 35+ messages in thread
From: Glenn Morris @ 2014-02-15 22:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Glenn Morris wrote:

>>   (while t
>>     (split-window-below)
>>     (sit-for 0.05)
>>     (delete-other-windows)
>>     (sit-for 0.05))
>>
>> Typing "C-x C-e" at the right paren of this in *scratch*, I see no
>> flickering in the tool bar.  Do you?
>
> Oh yes. It looks awful!

Bisected to:
    
    revno: 115971
    committer: martin rudalics <rudalics@gmx.at>
    branch nick: trunk
    timestamp: Sat 2014-01-11 10:31:09 +0100
    message:
      Fix handling of internal borders (Bug#16348).





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15 22:07           ` Glenn Morris
@ 2014-02-16 10:31             ` martin rudalics
  2014-02-16 16:46               ` Eli Zaretskii
  2014-02-17  0:53               ` Glenn Morris
  2014-02-16 16:22             ` Eli Zaretskii
  1 sibling, 2 replies; 35+ messages in thread
From: martin rudalics @ 2014-02-16 10:31 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

 > Bisected to:
 >
 >     revno: 115971
 >     committer: martin rudalics <rudalics@gmx.at>
 >     branch nick: trunk
 >     timestamp: Sat 2014-01-11 10:31:09 +0100
 >     message:
 >       Fix handling of internal borders (Bug#16348).

Does anything change when you set the frame's internal border width to
zero?  Does anything change when you disable the calls to
x_clear_under_internal_border?  If so, can you spot one of these calls
as the offending one?  I'm yet too silly to understand what's going on
here.

Thanks, martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15 21:28         ` Glenn Morris
  2014-02-15 22:07           ` Glenn Morris
@ 2014-02-16 16:17           ` Eli Zaretskii
  2014-02-16 19:48             ` Glenn Morris
  2014-02-17  1:18             ` Glenn Morris
  1 sibling, 2 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-16 16:17 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org
> Date: Sat, 15 Feb 2014 16:28:13 -0500
> 
> 
> Eli Zaretskii wrote:
> 
> > sounds like the frame is cleared and completely redrawn, which I won't
> > expect during byte-compile, which only redisplays the echo area.  If I
> > put a breakpoint in clear_frame, it is never hit during your recipe.
> 
> I put a break on x_clear_frame, and with emacs -Q, byte-compile-file on
> scheme.el triggers it.

Can you show a backtrace from that breakpoint?

> In an attempt to follow your instructions, I put a break on dispnew.c:3045.
> 
> So far I don't think I am getting any useful information out of this,
> because it seems to trigger a lot, and I'm not sure I'm catching it at
> the right time.

I'm interested in seeing what happens the first time this breakpoint
breaks after you type "C-x 2" in *scratch*.  (On my system, this is
the only time it breaks after "C-x 2"; do you see something
different?)

> Here's current_row and desired_row in update_text_area one time.
> 
> TEXT: 13 glyphs
>   0    0: IMAGE[10] str=0x13fb5c8[0] w=35 a+d=14+21 face=3 MB [ slice=0,0,24,24
>   1   35: IMAGE[11] str=0x13fb5c8[1] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   2   69: IMAGE[12] str=0x13fb5c8[2] w=29 a+d=14+21 face=3 MB slice=0,0,19,24
>   3   98: IMAGE[13] str=0x13fb5c8[3] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   4  132: IMAGE[14] str=0x13fb5c8[4] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   5  166: IMAGE[15] str=0x13fb5c8[5] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>   6  178: IMAGE[16] str=0x13fb5c8[6] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   7  212: IMAGE[15] str=0x13fb5c8[7] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>   8  224: IMAGE[17] str=0x13fb5c8[8] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   9  258: IMAGE[18] str=0x13fb5c8[9] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>  10  292: IMAGE[19] str=0x13fb5c8[10] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>  11  326: IMAGE[15] str=0x13fb5c8[11] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>  12  338: IMAGE[20] str=0x13fb5c8[12] w=34 a+d=14+21 face=3 MB ] slice=0,0,24,24
> TEXT: 13 glyphs
>   0    0: IMAGE[10] str=0x13fbe90[0] w=35 a+d=14+21 face=3 MB [ slice=0,0,24,24
>   1   35: IMAGE[11] str=0x13fbe90[1] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   2   69: IMAGE[12] str=0x13fbe90[2] w=29 a+d=14+21 face=3 MB slice=0,0,19,24
>   3   98: IMAGE[13] str=0x13fbe90[3] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   4  132: IMAGE[14] str=0x13fbe90[4] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   5  166: IMAGE[15] str=0x13fbe90[5] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>   6  178: IMAGE[16] str=0x13fbe90[6] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   7  212: IMAGE[15] str=0x13fbe90[7] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>   8  224: IMAGE[17] str=0x13fbe90[8] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>   9  258: IMAGE[18] str=0x13fbe90[9] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>  10  292: IMAGE[19] str=0x13fbe90[10] w=34 a+d=14+21 face=3 MB slice=0,0,24,24
>  11  326: IMAGE[15] str=0x13fbe90[11] w=12 a+d=14+21 face=3 MB slice=0,0,2,24
>  12  338: IMAGE[20] str=0x13fbe90[12] w=34 a+d=14+21 face=3 MB ] slice=0,0,24,24

These look identical to me.  Are you saying that tracing into
update_window_line and then update_text_area for these two, you see
that the loop which starts at line 3598 ends with i's value smaller
than desired_row->used[TEXT_AREA], and you see these 3 lines (3696 to
3698) being executed:

	      output_cursor_to (w, vpos, start_hpos, desired_row->y, start_x);
	      rif->write_glyphs (w, updated_row, start,
				 TEXT_AREA, i - start_hpos);
	      changed_p = 1;

Again, please trace all this upon the first time the breakpoint on
line 3045 breaks after "C-x 2".

> I'll try again later, but frankly I don't know what I'm doing, even
> with your detailed instructions.

Thanks.  Feel free to ask questions about things you'd like to
understand.  In a nutshell, this is part of the code that updates the
window after Emacs has determined that some window(s) need to be
updated, in this case, due to "C-x 2" that created a new window and
made the old one smaller.  The code I pointed to updates the tool-bar
window when anything on the tool bar changes, or refrains from
updating it if the tool bar did not change at all (which should happen
in this case).





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-15 22:07           ` Glenn Morris
  2014-02-16 10:31             ` martin rudalics
@ 2014-02-16 16:22             ` Eli Zaretskii
  2014-02-17  0:58               ` Glenn Morris
  1 sibling, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-16 16:22 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org, martin rudalics <rudalics@gmx.at>
> Date: Sat, 15 Feb 2014 17:07:38 -0500
> 
> Glenn Morris wrote:
> 
> >>   (while t
> >>     (split-window-below)
> >>     (sit-for 0.05)
> >>     (delete-other-windows)
> >>     (sit-for 0.05))
> >>
> >> Typing "C-x C-e" at the right paren of this in *scratch*, I see no
> >> flickering in the tool bar.  Do you?
> >
> > Oh yes. It looks awful!
> 
> Bisected to:
>     
>     revno: 115971
>     committer: martin rudalics <rudalics@gmx.at>
>     branch nick: trunk
>     timestamp: Sat 2014-01-11 10:31:09 +0100
>     message:
>       Fix handling of internal borders (Bug#16348).

Thanks, but I think we still need more info to find what caused this,
as most of that commit is for non-toolkit builds.

Can you put a breakpoint in change_frame_size_1, on line 5564:

  SET_FRAME_COLS (f, new_cols); <<<<<<<<<<<<<<<<
  FRAME_LINES (f) = new_lines;
  FRAME_TEXT_WIDTH (f) = new_text_width;

and see if that breakpoint breaks when you type "C-x 2" in *scratch*?
If it does break, can you show the values of these:

  new_text_width
  FRAME_TEXT_WIDTH (f)
  new_root_width
  old_root_width
  FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)
  FRAME_INTERNAL_BORDER_WIDTH (f)





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 10:31             ` martin rudalics
@ 2014-02-16 16:46               ` Eli Zaretskii
  2014-02-16 17:14                 ` martin rudalics
  2014-02-17  0:53               ` Glenn Morris
  1 sibling, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-16 16:46 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

> Date: Sun, 16 Feb 2014 11:31:29 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: Eli Zaretskii <eliz@gnu.org>, 16736@debbugs.gnu.org
> 
>  > Bisected to:
>  >
>  >     revno: 115971
>  >     committer: martin rudalics <rudalics@gmx.at>
>  >     branch nick: trunk
>  >     timestamp: Sat 2014-01-11 10:31:09 +0100
>  >     message:
>  >       Fix handling of internal borders (Bug#16348).
> 
> Does anything change when you set the frame's internal border width to
> zero?  Does anything change when you disable the calls to
> x_clear_under_internal_border?  If so, can you spot one of these calls
> as the offending one?  I'm yet too silly to understand what's going on
> here.

Btw, the bug was about non-toolkit builds, but at least one of the
hunks affects toolkit builds as well.  Not sure if that was intended.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 16:46               ` Eli Zaretskii
@ 2014-02-16 17:14                 ` martin rudalics
  0 siblings, 0 replies; 35+ messages in thread
From: martin rudalics @ 2014-02-16 17:14 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > Btw, the bug was about non-toolkit builds, but at least one of the
 > hunks affects toolkit builds as well.  Not sure if that was intended.

It was intended.  A related bug showed up also on the Windows build.
I then checked the border behavior on all builds I made.

Basically, the changes should only clear areas where display artifacts
show up.  It does that somewhat brute forcish (similar to the Gtk build)
but I can't yet imagine that these could screw up redisplay that much.

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 16:17           ` Eli Zaretskii
@ 2014-02-16 19:48             ` Glenn Morris
  2014-02-16 21:04               ` Eli Zaretskii
  2014-02-17  1:18             ` Glenn Morris
  1 sibling, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-16 19:48 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

>> I put a break on x_clear_frame, and with emacs -Q, byte-compile-file on
>> scheme.el triggers it.
>
> Can you show a backtrace from that breakpoint?

Easy enough.

#0  x_clear_frame (f=0x11cd8b8) at xterm.c:2909
#1  0x00000000004ece00 in clear_frame (f=0x11cd8b8) at terminal.c:140
#2  0x0000000000417f8f in redraw_frame (f=0x11cd8b8) at dispnew.c:2955
#3  0x0000000000448e4d in clear_garbaged_frames () at xdisp.c:10935
#4  0x0000000000448fb9 in echo_area_display (update_frame_p=1) at xdisp.c:10979
#5  0x000000000044703a in message3_nolog (m=14191025) at xdisp.c:9987
#6  0x0000000000446de9 in message3 (m=14191025) at xdisp.c:9929
#7  0x00000000005b560f in Fmessage (nargs=3, args=0x7fffffff8338)
    at editfns.c:3452
#8  0x00000000005c0e83 in Ffuncall (nargs=4, args=0x7fffffff8330)
    at eval.c:2796
#9  0x0000000000600e44 in exec_byte_code (bytestr=13161473, vector=19239277, 
    maxdepth=72, args_template=5140, nargs=5, args=0x7fffffff88d8)
    at bytecode.c:919
#10 0x00000000005c16b2 in funcall_lambda (fun=18472445, nargs=5, 
    arg_vector=0x7fffffff88b0) at eval.c:2983
#11 0x00000000005c11a7 in Ffuncall (nargs=6, args=0x7fffffff88a8)
    at eval.c:2864
#12 0x0000000000600e44 in exec_byte_code (bytestr=14003153, vector=18902205, 
    maxdepth=32, args_template=2056, nargs=2, args=0x7fffffff8e68)
    at bytecode.c:919
#13 0x00000000005c16b2 in funcall_lambda (fun=18951917, nargs=2, 
    arg_vector=0x7fffffff8e58) at eval.c:2983
#14 0x00000000005c11a7 in Ffuncall (nargs=3, args=0x7fffffff8e50)
    at eval.c:2864
#15 0x0000000000600e44 in exec_byte_code (bytestr=14003009, vector=18997205, 
    maxdepth=64, args_template=6168, nargs=6, args=0x7fffffff9420)
    at bytecode.c:919
#16 0x00000000005c16b2 in funcall_lambda (fun=18997301, nargs=6, 
    arg_vector=0x7fffffff93f0) at eval.c:2983
#17 0x00000000005c11a7 in Ffuncall (nargs=7, args=0x7fffffff93e8)
    at eval.c:2864
#18 0x0000000000600e44 in exec_byte_code (bytestr=14002977, vector=18073693, 
    maxdepth=68, args_template=5140, nargs=5, args=0x7fffffff99e8)
    at bytecode.c:919
#19 0x00000000005c16b2 in funcall_lambda (fun=18997349, nargs=5, 
    arg_vector=0x7fffffff99c0) at eval.c:2983
#20 0x00000000005c11a7 in Ffuncall (nargs=6, args=0x7fffffff99b8)
    at eval.c:2864
#21 0x0000000000600e44 in exec_byte_code (bytestr=14002785, vector=18997397, 
    maxdepth=120, args_template=1028, nargs=1, args=0x7fffffff9f68)
    at bytecode.c:919
#22 0x00000000005c16b2 in funcall_lambda (fun=18997477, nargs=1, 
    arg_vector=0x7fffffff9f60) at eval.c:2983
#23 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffff9f58)
    at eval.c:2864
#24 0x0000000000600e44 in exec_byte_code (bytestr=21918129, vector=17903693, 
    maxdepth=16, args_template=1028, nargs=1, args=0x7fffffffa4a0)
    at bytecode.c:919
#25 0x00000000005c16b2 in funcall_lambda (fun=17919557, nargs=1, 
    arg_vector=0x7fffffffa498) at eval.c:2983
#26 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffffa490)
    at eval.c:2864
#27 0x0000000000600e44 in exec_byte_code (bytestr=21918449, vector=17903597, 
    maxdepth=20, args_template=1028, nargs=1, args=0x7fffffffa9e0)
    at bytecode.c:919
#28 0x00000000005c16b2 in funcall_lambda (fun=17903645, nargs=1, 
    arg_vector=0x7fffffffa9d8) at eval.c:2983
#29 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffffa9d0)
    at eval.c:2864
#30 0x0000000000600e44 in exec_byte_code (bytestr=14339425, vector=19017693, 
    maxdepth=16, args_template=0, nargs=0, args=0x7fffffffaf10)
    at bytecode.c:919
#31 0x00000000005c16b2 in funcall_lambda (fun=19017861, nargs=0, 
    arg_vector=0x7fffffffaf10) at eval.c:2983
#32 0x00000000005c11a7 in Ffuncall (nargs=1, args=0x7fffffffaf08)
    at eval.c:2864
#33 0x0000000000600e44 in exec_byte_code (bytestr=14364257, vector=19207309, 
    maxdepth=4, args_template=0, nargs=0, args=0x7fffffffb438)
    at bytecode.c:919
#34 0x00000000005c16b2 in funcall_lambda (fun=19308733, nargs=0, 
    arg_vector=0x7fffffffb438) at eval.c:2983
#35 0x00000000005c11a7 in Ffuncall (nargs=1, args=0x7fffffffb430)
    at eval.c:2864
#36 0x00000000005bfa48 in eval_sub (form=13338950) at eval.c:2157
#37 0x00000000005bdd6a in internal_lisp_condition_case (var=14018162, 
    bodyform=13338950, handlers=13339046) at eval.c:1323
#38 0x0000000000601ff5 in exec_byte_code (bytestr=21623585, vector=19198157, 
    maxdepth=64, args_template=1028, nargs=1, args=0x7fffffffbc48)
    at bytecode.c:1169
#39 0x00000000005c16b2 in funcall_lambda (fun=16683157, nargs=1, 
    arg_vector=0x7fffffffbc40) at eval.c:2983
#40 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffffbc38)
    at eval.c:2864
#41 0x0000000000600e44 in exec_byte_code (bytestr=21665569, vector=18963773, 
    maxdepth=68, args_template=2052, nargs=1, args=0x7fffffffc1a8)
    at bytecode.c:919
#42 0x00000000005c16b2 in funcall_lambda (fun=16684125, nargs=1, 
    arg_vector=0x7fffffffc1a0) at eval.c:2983
#43 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffffc198)
    at eval.c:2864
#44 0x0000000000600e44 in exec_byte_code (bytestr=10789089, vector=10789125, 
    maxdepth=8, args_template=0, nargs=0, args=0x7fffffffc6d0)
    at bytecode.c:919
#45 0x00000000005c16b2 in funcall_lambda (fun=10789037, nargs=0, 
    arg_vector=0x7fffffffc6d0) at eval.c:2983
#46 0x00000000005c11a7 in Ffuncall (nargs=1, args=0x7fffffffc6c8)
    at eval.c:2864
#47 0x00000000005c08c7 in apply1 (fn=20569570, arg=12757298) at eval.c:2581
#48 0x00000000005b9cd3 in Fcall_interactively (function=20569570, 
    record_flag=12757298, keys=12792317) at callint.c:378
#49 0x00000000005c1014 in Ffuncall (nargs=4, args=0x7fffffffc9f8)
    at eval.c:2822
#50 0x0000000000600e44 in exec_byte_code (bytestr=10183985, vector=10184021, 
    maxdepth=52, args_template=4100, nargs=1, args=0x7fffffffcf60)
    at bytecode.c:919
#51 0x00000000005c16b2 in funcall_lambda (fun=10183941, nargs=1, 
    arg_vector=0x7fffffffcf58) at eval.c:2983
#52 0x00000000005c11a7 in Ffuncall (nargs=2, args=0x7fffffffcf50)
    at eval.c:2864
#53 0x00000000005c096c in call1 (fn=12801186, arg1=20569570) at eval.c:2614
#54 0x0000000000531592 in command_loop_1 () at keyboard.c:1556
#55 0x00000000005bdecd in internal_condition_case (
    bfun=0x530eab <command_loop_1>, handlers=12808898, 
    hfun=0x5307bd <cmd_error>) at eval.c:1354
#56 0x0000000000530c05 in command_loop_2 (ignore=12757298) at keyboard.c:1174
#57 0x00000000005bd6df in internal_catch (tag=12804834, 
    func=0x530bdf <command_loop_2>, arg=12757298) at eval.c:1118
#58 0x0000000000530bb3 in command_loop () at keyboard.c:1153
#59 0x00000000005303b8 in recursive_edit_1 () at keyboard.c:777
#60 0x0000000000530525 in Frecursive_edit () at keyboard.c:845
#61 0x000000000052e550 in main (argc=3, argv=0x7fffffffd438) at emacs.c:1643

Lisp Backtrace:
  "message" (0xffff8338)
  "byte-compile-file-form-defmumble" (0xffff88b0)
0x1212ee8 PVEC_COMPILED
0x121e030 PVEC_COMPILED
0x121e060 PVEC_COMPILED
  "byte-compile-file-form-defalias" (0xffff9f60)
  "byte-compile-file-form" (0xffffa498)
  "byte-compile-toplevel-file-form" (0xffffa9d8)
0x1223080 PVEC_COMPILED
0x126a0b8 PVEC_COMPILED
  "funcall" (0xffffb430)
  "byte-compile-from-buffer" (0xffffbc40)
  "byte-compile-file" (0xffffc1a0)
  "emacs-lisp-byte-compile" (0xffffc6d0)
  "call-interactively" (0xffffca00)
  "command-execute" (0xffffcf58)


I don't have time to look into the rest of the things you asked right
now.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 19:48             ` Glenn Morris
@ 2014-02-16 21:04               ` Eli Zaretskii
  0 siblings, 0 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-16 21:04 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org
> Date: Sun, 16 Feb 2014 14:48:10 -0500
> 
> Eli Zaretskii wrote:
> 
> >> I put a break on x_clear_frame, and with emacs -Q, byte-compile-file on
> >> scheme.el triggers it.
> >
> > Can you show a backtrace from that breakpoint?
> 
> Easy enough.
> 
> #0  x_clear_frame (f=0x11cd8b8) at xterm.c:2909
> #1  0x00000000004ece00 in clear_frame (f=0x11cd8b8) at terminal.c:140
> #2  0x0000000000417f8f in redraw_frame (f=0x11cd8b8) at dispnew.c:2955
> #3  0x0000000000448e4d in clear_garbaged_frames () at xdisp.c:10935
> #4  0x0000000000448fb9 in echo_area_display (update_frame_p=1) at xdisp.c:10979
> #5  0x000000000044703a in message3_nolog (m=14191025) at xdisp.c:9987
> #6  0x0000000000446de9 in message3 (m=14191025) at xdisp.c:9929
> #7  0x00000000005b560f in Fmessage (nargs=3, args=0x7fffffff8338)
>     at editfns.c:3452

Thanks.  This clearly shows that the frame was marked as "garbaged",
which naturally requires its complete redrawing.

The question now becomes why it is marked garbaged.  It's possible
that the change in change_frame_size_1 is the reason, because the code
in that function does just that.

> I don't have time to look into the rest of the things you asked right
> now.

I hope you will some time soon, as I think we are zeroing in on the
culprit.

Thanks.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 10:31             ` martin rudalics
  2014-02-16 16:46               ` Eli Zaretskii
@ 2014-02-17  0:53               ` Glenn Morris
  1 sibling, 0 replies; 35+ messages in thread
From: Glenn Morris @ 2014-02-17  0:53 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

martin rudalics wrote:

> Does anything change when you set the frame's internal border width to
> zero?

emacs -Q -ib 0

seems the same.

> Does anything change when you disable the calls to
> x_clear_under_internal_border?

AFAICS, that function is not defined for me, since USE_X_TOOLKIT = 1.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 16:22             ` Eli Zaretskii
@ 2014-02-17  0:58               ` Glenn Morris
  2014-02-17  5:14                 ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-17  0:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

> Can you put a breakpoint in change_frame_size_1, on line 5564:
>
>   SET_FRAME_COLS (f, new_cols); <<<<<<<<<<<<<<<<
>   FRAME_LINES (f) = new_lines;
>   FRAME_TEXT_WIDTH (f) = new_text_width;
>
> and see if that breakpoint breaks when you type "C-x 2" in *scratch*?

Yes, it does.

>   new_text_width
>   FRAME_TEXT_WIDTH (f)
>   new_root_width
>   old_root_width
>   FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)
>   FRAME_INTERNAL_BORDER_WIDTH (f)

640
640
672
672
674
1





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-16 16:17           ` Eli Zaretskii
  2014-02-16 19:48             ` Glenn Morris
@ 2014-02-17  1:18             ` Glenn Morris
  2014-02-17  5:15               ` Eli Zaretskii
  1 sibling, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-17  1:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

>> In an attempt to follow your instructions, I put a break on dispnew.c:3045.
[...]
> I'm interested in seeing what happens the first time this breakpoint
> breaks after you type "C-x 2" in *scratch*.  (On my system, this is
> the only time it breaks after "C-x 2"; do you see something
> different?)

I do
  gdb> run -Q

and continue a few times until Emacs starts up. If I then select the
Emacs window with the mouse, it breaks twice, so I have to reselect the
gdb window to get it to continue, and then when I select the Emacs
window... Anyway, I can get around that by alt-tabbing back into Emacs.

> Are you saying that tracing into update_window_line and then
> update_text_area for these two, you see that the loop which starts at
> line 3598 ends with i's value smaller than
> desired_row->used[TEXT_AREA], and you see these 3 lines (3696 to 3698)
> being executed:

That does not seem to happen, no.
I have i = stop = 13 = desired_row->used[TEXT_AREA].

> Again, please trace all this upon the first time the breakpoint on
> line 3045 breaks after "C-x 2".





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17  0:58               ` Glenn Morris
@ 2014-02-17  5:14                 ` Eli Zaretskii
  2014-02-17  7:45                   ` Glenn Morris
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17  5:14 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org,  rudalics@gmx.at
> Date: Sun, 16 Feb 2014 19:58:13 -0500
> 
> Eli Zaretskii wrote:
> 
> > Can you put a breakpoint in change_frame_size_1, on line 5564:
> >
> >   SET_FRAME_COLS (f, new_cols); <<<<<<<<<<<<<<<<
> >   FRAME_LINES (f) = new_lines;
> >   FRAME_TEXT_WIDTH (f) = new_text_width;
> >
> > and see if that breakpoint breaks when you type "C-x 2" in *scratch*?
> 
> Yes, it does.
> 
> >   new_text_width
> >   FRAME_TEXT_WIDTH (f)
> >   new_root_width
> >   old_root_width
> >   FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)
> >   FRAME_INTERNAL_BORDER_WIDTH (f)
> 
> 640
> 640
> 672
> 672
> 674
> 1

OK, then that's the root cause, right there: this function continues
to do this:

  adjust_frame_glyphs (f);
  calculate_costs (f);
  SET_FRAME_GARBAGED (f);
  f->resized_p = 1;

which marks the frame "garbaged" and requires its complete redisplay,
that starts with clearing it (as you have demonstrated in your
backtrace a few messages ago), and continues by redrawing the tool
bar.

Martin, any ideas why this happens in a toolkit build?  I don't
understand how come this condition:

  if (new_text_height == FRAME_TEXT_HEIGHT (f)
      && new_text_width == FRAME_TEXT_WIDTH (f)
      && new_root_width == old_root_width
      && (FRAME_PIXEL_HEIGHT (f) ==
	  FRAME_TEXT_TO_PIXEL_HEIGHT (f, new_text_height))
      && (FRAME_PIXEL_WIDTH (f) ==
	  FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)))
    return;

fails to cause the function to return.  The reason must be in the 2
last conditions, which you added in revision 115971.

Glenn, can you show the values of FRAME_PIXEL_HEIGHT (f) and
FRAME_PIXEL_WIDTH (f) in this scenario?





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17  1:18             ` Glenn Morris
@ 2014-02-17  5:15               ` Eli Zaretskii
  0 siblings, 0 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17  5:15 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org
> Date: Sun, 16 Feb 2014 20:18:39 -0500
> 
> > Are you saying that tracing into update_window_line and then
> > update_text_area for these two, you see that the loop which starts at
> > line 3598 ends with i's value smaller than
> > desired_row->used[TEXT_AREA], and you see these 3 lines (3696 to 3698)
> > being executed:
> 
> That does not seem to happen, no.
> I have i = stop = 13 = desired_row->used[TEXT_AREA].

That figures: the problem is not that the rows differ, the problem is
that Emacs thinks the frame is garbaged, and redraws it
unconditionally.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17  5:14                 ` Eli Zaretskii
@ 2014-02-17  7:45                   ` Glenn Morris
  2014-02-17 15:42                     ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-17  7:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

>   if (new_text_height == FRAME_TEXT_HEIGHT (f)
>       && new_text_width == FRAME_TEXT_WIDTH (f)
>       && new_root_width == old_root_width
>       && (FRAME_PIXEL_HEIGHT (f) ==
> 	  FRAME_TEXT_TO_PIXEL_HEIGHT (f, new_text_height))
>       && (FRAME_PIXEL_WIDTH (f) ==
> 	  FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)))
>     return;

new_text_height = 570 = FRAME_TEXT_HEIGHT (f)
new_text_width = 640 = FRAME_TEXT_WIDTH (f)
new_root_width = 672 = old_root_width

FRAME_PIXEL_HEIGHT (f) = 605
FRAME_TEXT_TO_PIXEL_HEIGHT (f, new_text_height) = 572
new_text_height = 570

FRAME_PIXEL_WIDTH (f) = 674 = FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)
new_text_width = 640





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17  7:45                   ` Glenn Morris
@ 2014-02-17 15:42                     ` Eli Zaretskii
  2014-02-17 16:23                       ` martin rudalics
  2014-02-17 18:19                       ` Glenn Morris
  0 siblings, 2 replies; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17 15:42 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org,  rudalics@gmx.at
> Date: Mon, 17 Feb 2014 02:45:40 -0500
> 
> Eli Zaretskii wrote:
> 
> >   if (new_text_height == FRAME_TEXT_HEIGHT (f)
> >       && new_text_width == FRAME_TEXT_WIDTH (f)
> >       && new_root_width == old_root_width
> >       && (FRAME_PIXEL_HEIGHT (f) ==
> > 	  FRAME_TEXT_TO_PIXEL_HEIGHT (f, new_text_height))
> >       && (FRAME_PIXEL_WIDTH (f) ==
> > 	  FRAME_TEXT_TO_PIXEL_WIDTH (f, new_text_width)))
> >     return;
> 
> new_text_height = 570 = FRAME_TEXT_HEIGHT (f)
> new_text_width = 640 = FRAME_TEXT_WIDTH (f)
> new_root_width = 672 = old_root_width
> 
> FRAME_PIXEL_HEIGHT (f) = 605
> FRAME_TEXT_TO_PIXEL_HEIGHT (f, new_text_height) = 572
> new_text_height = 570

Looks like FRAME_PIXEL_HEIGHT includes the tool bar, and is thus 33
pixels larger than we expect.  (What is f->tool_bar_height?)  But I
cannot find the place where we assign any value to FRAME_PIXEL_HEIGHT,
except in this very function, so I'm unsure where do those extra 33
pixels come from.

Glenn, if you put a breakpoint in change_frame_size_1 and then just
"run -Q", can you show all the calls you see until Emacs starts up,
including the arguments we pass to that function?  Here's what I see
on Windows:

  (gdb) break change_frame_size_1
  Breakpoint 3 at 0x100d809: file dispnew.c, line 5467.
  (gdb) r -Q
  Starting program: D:\gnu\bzr\emacs\trunk\src\emacs.exe -Q
  [New Thread 2272.0x13c0]
  [New Thread 2272.0x1790]
  [New Thread 2272.0x324]

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=80, new_height=160,
      pretend=true, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb) c
  Continuing.

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=640,
      new_height=608, pretend=false, delay=true, safe=false, pixelwise=true)
      at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb)
  Continuing.

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=640,
      new_height=608, pretend=false, delay=true, safe=false, pixelwise=true)
      at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb)
  Continuing.

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=640,
      new_height=608, pretend=false, delay=false, safe=false, pixelwise=true)
      at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb)
  Continuing.

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=0, new_height=0,
      pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb)
  Continuing.

  Breakpoint 3, change_frame_size_1 (f=0x394a9d8, new_width=640,
      new_height=608, pretend=true, delay=false, safe=false, pixelwise=true)
      at dispnew.c:5467
  5467      int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
  (gdb)
  Continuing.

(The 640x608 size corresponds to the 80x35 text size I get (35
includes the mode line and the echo area), plus the equivalent of 3
text lines used for the tool bar.)





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 15:42                     ` Eli Zaretskii
@ 2014-02-17 16:23                       ` martin rudalics
  2014-02-17 16:50                         ` Eli Zaretskii
  2014-02-17 18:19                       ` Glenn Morris
  1 sibling, 1 reply; 35+ messages in thread
From: martin rudalics @ 2014-02-17 16:23 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > Looks like FRAME_PIXEL_HEIGHT includes the tool bar, and is thus 33
 > pixels larger than we expect.  (What is f->tool_bar_height?)  But I
 > cannot find the place where we assign any value to FRAME_PIXEL_HEIGHT,
 > except in this very function, so I'm unsure where do those extra 33
 > pixels come from.

It's from update_various_frame_slots in widget.c.  If you comment that
out, the problem disappears.  But I don't know yet whether it's needed
elsewhere ...

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 16:23                       ` martin rudalics
@ 2014-02-17 16:50                         ` Eli Zaretskii
  2014-02-17 17:16                           ` martin rudalics
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17 16:50 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

> Date: Mon, 17 Feb 2014 17:23:25 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: Glenn Morris <rgm@gnu.org>, 16736@debbugs.gnu.org
> 
>  > Looks like FRAME_PIXEL_HEIGHT includes the tool bar, and is thus 33
>  > pixels larger than we expect.  (What is f->tool_bar_height?)  But I
>  > cannot find the place where we assign any value to FRAME_PIXEL_HEIGHT,
>  > except in this very function, so I'm unsure where do those extra 33
>  > pixels come from.
> 
> It's from update_various_frame_slots in widget.c.  If you comment that
> out, the problem disappears.  But I don't know yet whether it's needed
> elsewhere ...

If you mean this:

  FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;

then does it mean that menubar_height is 33 pixels?  Sounds too much
to me.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 16:50                         ` Eli Zaretskii
@ 2014-02-17 17:16                           ` martin rudalics
  2014-02-17 17:27                             ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: martin rudalics @ 2014-02-17 17:16 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > If you mean this:
 >
 >   FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
 >
 > then does it mean that menubar_height is 33 pixels?  Sounds too much
 > to me.

In change_frame_size I here have a FRAME_PIXEL_HEIGHT of 697 and a
new_text_height of 667.  f->output_data.x->menubar_height equals 28 and
there are two pixels to add for the default internal border.

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 17:16                           ` martin rudalics
@ 2014-02-17 17:27                             ` Eli Zaretskii
  2014-02-17 17:58                               ` martin rudalics
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17 17:27 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

> Date: Mon, 17 Feb 2014 18:16:46 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: rgm@gnu.org, 16736@debbugs.gnu.org
> 
>  > If you mean this:
>  >
>  >   FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
>  >
>  > then does it mean that menubar_height is 33 pixels?  Sounds too much
>  > to me.
> 
> In change_frame_size I here have a FRAME_PIXEL_HEIGHT of 697 and a
> new_text_height of 667.  f->output_data.x->menubar_height equals 28 and
> there are two pixels to add for the default internal border.

OK, so it sounds like we need to make change_frame_size_1 consistent
with widget.c code.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 17:27                             ` Eli Zaretskii
@ 2014-02-17 17:58                               ` martin rudalics
  2014-02-17 18:56                                 ` Eli Zaretskii
  0 siblings, 1 reply; 35+ messages in thread
From: martin rudalics @ 2014-02-17 17:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > OK, so it sounds like we need to make change_frame_size_1 consistent
 > with widget.c code.

IMO the widget.c code is inherently absurd.  EmacsFrameResize processes
a resize request by calculating a text size from ew->core.height.  Then
it sets

   FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;

and update_from_various_frame_slots inversely processes

   ew->core.height = FRAME_PIXEL_HEIGHT (f) - x->menubar_height;

where update_from_various_frame_slots is called only by
EmacsFrameInitialize.  Does anyone understand what this is good for?

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 15:42                     ` Eli Zaretskii
  2014-02-17 16:23                       ` martin rudalics
@ 2014-02-17 18:19                       ` Glenn Morris
  2014-02-17 18:47                         ` Eli Zaretskii
  1 sibling, 1 reply; 35+ messages in thread
From: Glenn Morris @ 2014-02-17 18:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

Eli Zaretskii wrote:

> (What is f->tool_bar_height?)

45

> Glenn, if you put a breakpoint in change_frame_size_1 and then just
> "run -Q", can you show all the calls you see until Emacs starts up,
> including the arguments we pass to that function?

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=80, new_height=150, 
    pretend=true, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=0, new_height=0, 
    pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=true, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=80, new_height=38, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=571, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=571, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.

Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
    pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
Continuing.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 18:19                       ` Glenn Morris
@ 2014-02-17 18:47                         ` Eli Zaretskii
  2014-02-18 11:03                           ` martin rudalics
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17 18:47 UTC (permalink / raw)
  To: Glenn Morris; +Cc: 16736

> From: Glenn Morris <rgm@gnu.org>
> Cc: 16736@debbugs.gnu.org,  rudalics@gmx.at
> Date: Mon, 17 Feb 2014 13:19:54 -0500
> 
> Eli Zaretskii wrote:
> 
> > (What is f->tool_bar_height?)
> 
> 45
> 
> > Glenn, if you put a breakpoint in change_frame_size_1 and then just
> > "run -Q", can you show all the calls you see until Emacs starts up,
> > including the arguments we pass to that function?
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=80, new_height=150, 
>     pretend=true, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=0, new_height=0, 
>     pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=true, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=80, new_height=38, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=537, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=571, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=571, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=false, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=true, safe=false, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.
> 
> Breakpoint 3, change_frame_size_1 (f=0x11cd8b8, new_width=640, new_height=570, 
>     pretend=false, delay=false, safe=true, pixelwise=true) at dispnew.c:5467
> 5467	  int old_root_width = WINDOW_PIXEL_WIDTH (XWINDOW (FRAME_ROOT_WINDOW (f)));
> Continuing.

Thanks.

Martin, any idea what this dance with 570/537/571/570 sizes is about?





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 17:58                               ` martin rudalics
@ 2014-02-17 18:56                                 ` Eli Zaretskii
  2014-02-18 11:02                                   ` martin rudalics
  0 siblings, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-17 18:56 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

> Date: Mon, 17 Feb 2014 18:58:42 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: rgm@gnu.org, 16736@debbugs.gnu.org
> 
>  > OK, so it sounds like we need to make change_frame_size_1 consistent
>  > with widget.c code.
> 
> IMO the widget.c code is inherently absurd.  EmacsFrameResize processes
> a resize request by calculating a text size from ew->core.height.  Then
> it sets
> 
>    FRAME_PIXEL_HEIGHT (f) = ew->core.height + x->menubar_height;
> 
> and update_from_various_frame_slots inversely processes
> 
>    ew->core.height = FRAME_PIXEL_HEIGHT (f) - x->menubar_height;
> 
> where update_from_various_frame_slots is called only by
> EmacsFrameInitialize.  Does anyone understand what this is good for?

The latter part is not important, I think, because ew->core is not
used anywhere.

So the only important part here is setting FRAME_PIXEL_HEIGHT and
other fields of the frame struct.

widget.c is compiled only for X toolkits, right?  So I think making
update_various_frame_slots consistent with change_frame_size_1 when
USE_X_TOOLKIT will fix the problem.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 18:56                                 ` Eli Zaretskii
@ 2014-02-18 11:02                                   ` martin rudalics
  2014-02-18 18:08                                     ` Eli Zaretskii
  2014-02-18 18:19                                     ` Glenn Morris
  0 siblings, 2 replies; 35+ messages in thread
From: martin rudalics @ 2014-02-18 11:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > So the only important part here is setting FRAME_PIXEL_HEIGHT and
 > other fields of the frame struct.
 >
 > widget.c is compiled only for X toolkits, right?  So I think making
 > update_various_frame_slots consistent with change_frame_size_1 when
 > USE_X_TOOLKIT will fix the problem.

I defined out the assignments in update_various_frame_slots.  I saw no
other way because FRAME_PIXEL_HEIGHT inherently records the "old"
internal border width (that's all it does IIUC).  When the border width
changes, the text height remains unaltered, and I see no alternate means
to detect the change and redraw the frame appropriately.

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-17 18:47                         ` Eli Zaretskii
@ 2014-02-18 11:03                           ` martin rudalics
  0 siblings, 0 replies; 35+ messages in thread
From: martin rudalics @ 2014-02-18 11:03 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

 > Martin, any idea what this dance with 570/537/571/570 sizes is about?

The 570 ~> 537 seem caused by the 33 difference of Glenn's frame pixel
height w and w/o menubar + internal borders.  The 571 one is a mystery
to me.  Most of these changes seem caused by frequent calls of resize_cb
whose frequency is a mystery to me as well.  I also recall having seen
tooltip frames in here.

martin





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-18 11:02                                   ` martin rudalics
@ 2014-02-18 18:08                                     ` Eli Zaretskii
  2014-02-19 10:02                                       ` martin rudalics
  2014-02-18 18:19                                     ` Glenn Morris
  1 sibling, 1 reply; 35+ messages in thread
From: Eli Zaretskii @ 2014-02-18 18:08 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

> Date: Tue, 18 Feb 2014 12:02:41 +0100
> From: martin rudalics <rudalics@gmx.at>
> CC: rgm@gnu.org, 16736@debbugs.gnu.org
> 
>  > So the only important part here is setting FRAME_PIXEL_HEIGHT and
>  > other fields of the frame struct.
>  >
>  > widget.c is compiled only for X toolkits, right?  So I think making
>  > update_various_frame_slots consistent with change_frame_size_1 when
>  > USE_X_TOOLKIT will fix the problem.
> 
> I defined out the assignments in update_various_frame_slots.  I saw no
> other way because FRAME_PIXEL_HEIGHT inherently records the "old"
> internal border width (that's all it does IIUC).  When the border width
> changes, the text height remains unaltered, and I see no alternate means
> to detect the change and redraw the frame appropriately.

Thanks.  I see no problem with your changes.





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-18 11:02                                   ` martin rudalics
  2014-02-18 18:08                                     ` Eli Zaretskii
@ 2014-02-18 18:19                                     ` Glenn Morris
  1 sibling, 0 replies; 35+ messages in thread
From: Glenn Morris @ 2014-02-18 18:19 UTC (permalink / raw)
  To: martin rudalics; +Cc: 16736

martin rudalics wrote:

> I defined out the assignments in update_various_frame_slots.

Thanks, it doesn't flash now, so I'll close this.
(Please reopen, or open a new report, if you still think there are issues.)





^ permalink raw reply	[flat|nested] 35+ messages in thread

* bug#16736: Compiling a Lisp file causes display to flash off and on
  2014-02-18 18:08                                     ` Eli Zaretskii
@ 2014-02-19 10:02                                       ` martin rudalics
  0 siblings, 0 replies; 35+ messages in thread
From: martin rudalics @ 2014-02-19 10:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 16736

> Thanks.  I see no problem with your changes.

Thanks to you and Glenn for the forensics.

martin






^ permalink raw reply	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2014-02-19 10:02 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-13  2:25 bug#16736: Compiling a Lisp file causes display to flash off and on Glenn Morris
2014-02-14  6:42 ` Glenn Morris
2014-02-14  7:29   ` Eli Zaretskii
2014-02-14  7:48     ` Glenn Morris
2014-02-15  8:24       ` Eli Zaretskii
2014-02-15  8:34         ` Eli Zaretskii
2014-02-15 21:28         ` Glenn Morris
2014-02-15 22:07           ` Glenn Morris
2014-02-16 10:31             ` martin rudalics
2014-02-16 16:46               ` Eli Zaretskii
2014-02-16 17:14                 ` martin rudalics
2014-02-17  0:53               ` Glenn Morris
2014-02-16 16:22             ` Eli Zaretskii
2014-02-17  0:58               ` Glenn Morris
2014-02-17  5:14                 ` Eli Zaretskii
2014-02-17  7:45                   ` Glenn Morris
2014-02-17 15:42                     ` Eli Zaretskii
2014-02-17 16:23                       ` martin rudalics
2014-02-17 16:50                         ` Eli Zaretskii
2014-02-17 17:16                           ` martin rudalics
2014-02-17 17:27                             ` Eli Zaretskii
2014-02-17 17:58                               ` martin rudalics
2014-02-17 18:56                                 ` Eli Zaretskii
2014-02-18 11:02                                   ` martin rudalics
2014-02-18 18:08                                     ` Eli Zaretskii
2014-02-19 10:02                                       ` martin rudalics
2014-02-18 18:19                                     ` Glenn Morris
2014-02-17 18:19                       ` Glenn Morris
2014-02-17 18:47                         ` Eli Zaretskii
2014-02-18 11:03                           ` martin rudalics
2014-02-16 16:17           ` Eli Zaretskii
2014-02-16 19:48             ` Glenn Morris
2014-02-16 21:04               ` Eli Zaretskii
2014-02-17  1:18             ` Glenn Morris
2014-02-17  5:15               ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).