[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#19721: 25.0.50; Mode-line not redrawn with expose events
From: |
YAMAMOTO Mitsuharu |
Subject: |
bug#19721: 25.0.50; Mode-line not redrawn with expose events |
Date: |
Sat, 31 Jan 2015 19:31:59 +0900 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) |
I could reproduce the bug with Emacs 24.4 but not with Emacs 24.3.
I also tried git bisect. The result was:
655ab9a380068143cfb9a31d01488e83676d81c1 is the first bad commit
commit 655ab9a380068143cfb9a31d01488e83676d81c1
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Thu Nov 28 17:43:09 2013 -0500
Refine redisplay optimizations to only redisplay *some* frames/windows
rather than all of them.
* src/xdisp.c (REDISPLAY_SOME): New constant.
(redisplay_other_windows, wset_redisplay, fset_redisplay)
(bset_redisplay, bset_update_mode_line): New functions.
(message_dolog): Use bset_redisplay.
(clear_garbaged_frames): Use fset_redisplay.
(echo_area_display): Use wset_redisplay.
(buffer_shared_and_changed): Remove.
(prepare_menu_bars): Call Vpre_redisplay_function before updating
frame titles. Compute the actual set of windows redisplayed.
Don't update frame titles and menu bars for frames that don't need to
be redisplayed.
(propagate_buffer_redisplay): New function.
(AINC): New macro.
(redisplay_internal): Use it. Be more selective in the set of windows
we redisplay. Propagate windows_or_buffers_changed to
update_mode_lines a bit later to simplify the code.
(mark_window_display_accurate_1): Reset window and buffer's
`redisplay' flag.
(redisplay_window): Do nothing if neither the window nor the buffer nor
the frame needs redisplay.
* src/window.h (struct window): Add `redisplay' field.
(wset_redisplay, fset_redisplay, bset_redisplay, bset_update_mode_line)
(redisplay_other_windows, window_list): New declarations.
* src/window.c (select_window, Fset_window_start): Use wset_redisplay.
(window_list): Not static any more.
(grow_mini_window, shrink_mini_window): Use fset_redisplay.
* src/minibuf.c (read_minibuf_unwind): Don't redisplay everything.
* src/insdel.c (prepare_to_modify_buffer_1): Use bset_redisplay.
* src/frame.c (Fmake_frame_visible): Don't redisplay everything.
* src/frame.h (struct frame): Add `redisplay' field.
Move `external_menu_bar' bitfield next to other bit-fields.
(SET_FRAME_GARBAGED): Use fset_redisplay.
(SET_FRAME_VISIBLE): Don't garbage the frame;
Use redisplay_other_windows.
* src/buffer.h (struct buffer): Add `redisplay' field.
* src/buffer.c (Fforce_mode_line_update): Pay attention to the `all' flag.
(modify_overlay): Use bset_redisplay.
* src/alloc.c (gc_sweep): Don't unmark strings while sweeping symbols.
* lisp/doc-view.el (doc-view-goto-page): Update mode-line.
:040000 040000 539134fa8301dbfe574c24f72a568daf322768b2
6e5b613809d7c5dcf21ac1b3be5f21ef4e3d877b M lisp
:040000 040000 518107ab34d68fedf97e35cfac6b8a7e78f9c67c
5acb1b218288451c64bae59b039d359a046aec78 M src
YAMAMOTO Mitsuharu
mituharu@math.s.chiba-u.ac.jp
>>>>> On Thu, 29 Jan 2015 19:51:24 +0900, YAMAMOTO Mitsuharu
>>>>> <mituharu@math.s.chiba-u.ac.jp> said:
> This bug is related to the mode-line erasure problem I mentioned in
> http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg01040.html .
> To reproduce the problem by the instruction below, you would need to
> make sure that your X11 compositing manager is turned off. I tested
> on Cent OS 5.11, default setting. See also
> http://lists.gnu.org/archive/html/emacs-devel/2013-04/msg00600.html .
> Steps to reproduce:
> 1. Create a file (say, ~/test.el) containing the following contents:
> (custom-set-faces
> '(mode-line ((((class color) (min-colors 88)) (:background
> "grey75" :foreground "black" :box (:line-width 2 :color
> "grey75" :style released-button)))))
> )
> 2. $ emacs -Q -D -l ~/test.el
> 3. C-x 2 C-x 2 C-x 2
> 4. C-x o C-x o C-x o
> 5. Move another window (e.g., the terminal window from which Emacs is
> invoked) so that it hovers over the Emacs frame.
> Result:
> The upper two mode-lines among four are not redrawn after their hidden
> part is revealed (see the attachment). They are not redrawn in
> response to expose events because the flag `enabled_p' for these
> mode-line glyph rows have been set to false.
> YAMAMOTO Mitsuharu
> mituharu@math.s.chiba-u.ac.jp
> In GNU Emacs 25.0.50.1 (i686-pc-linux-gnu, GTK+ Version 2.10.4)
> of 2015-01-29 on localhost.localdomain
> Windowing system distributor `The X.Org Foundation', version 11.0.70101000
> System Description: CentOS release 5.11 (Final)
> Configured features:
> XPM JPEG TIFF GIF PNG SOUND LIBSELINUX FREETYPE XFT ZLIB