Subject: bug#18912: 24.4; mode-line corruption on graphical frames in dual-headed display

From: Bruno Félix Rezende Ribeiro <[email-masked]>
Date: Thu, 30 Oct 2014 11:46:29 -0200

In the following single-headed setup GNU Emacs behaves as intended:

  Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096
  VGA1 connected primary (normal left inverted right x axis y axis)
     1280x720      59.86 +
     1024x768      75.08    70.07    60.00
     832x624       74.55
     800x600       72.19    75.00    60.32    56.25
     640x480       75.00    72.81    66.67    60.00
     720x400       70.08
  LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y
axis) 228mm x 131mm
     1024x600      59.99*+
     800x600       60.32    56.25
     640x480       59.94

In this setup, as you can see, only the LVDS1 output is enabled.

However in my usual setup I have both outputs enabled for a dual-headed
display:

  Screen 0: minimum 320 x 200, current 2304 x 720, maximum 4096 x 4096
  VGA1 connected primary 1280x720+0+0 (normal left inverted right x axis
y axis) 340mm x 270mm
     1280x720      59.86*+
     1024x768      75.08    70.07    60.00
     832x624       74.55
     800x600       72.19    75.00    60.32    56.25
     640x480       75.00    72.81    66.67    60.00
     720x400       70.08
  LVDS1 connected 1024x600+1280+120 (normal left inverted right x axis y
axis) 228mm x 131mm
     1024x600      59.99*+
     800x600       60.32    56.25
     640x480       59.94

In this setup GNU Emacs corrupts the mode-line (a graphical glitch)
drawing over it the buffer's line that would otherwise be below it.

Refreshing the window with 'xrefresh' or just switching to another
window and back again repaints the mode-line content, so it looks
normal, until the next buffer scroll operation, when it gets corrupt
again.

Starting Emacs with the '-Q' option, without changing the frame's
geometry, and typing 'C-x d /dev <RET>' is sufficient to reproduce the
bug.  Actually, most of the time, Emacs windows that hold text
underneath the mode-line trigger the problem.

See the attached screenshot for how the corrupted mode-line looks like.

In GNU Emacs 24.4.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2014-10-30 on felix-laptop
Windowing system distributor `The X.Org Foundation', version 11.0.11601000
System Description:	Debian GNU/Linux testing (jessie)

Configured using:
 `configure --prefix=/home/felix/opt/emacs-24.4 --with-x-toolkit=athena'

Important settings:
  value of $LANG: pt_BR.utf8
  locale-coding-system: utf-8-unix

Major mode: Info

Minor modes in effect:
  diff-auto-refine-mode: t
  shell-dirtrack-mode: t
  global-semanticdb-minor-mode: t
  global-semantic-idle-scheduler-mode: t
  semantic-mode: t
  winner-mode: t
  electric-pair-mode: t
  show-paren-mode: t
  display-time-mode: t
  which-function-mode: t
  tooltip-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug sendmail reposition calc-alg calc-ext
calc-menu calc calc-loaddefs calc-macs crm org org-macro org-footnote
org-pcomplete org-list org-faces org-entities org-version ob-emacs-lisp
ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys ob-comint
ob-core ob-eval org-compat org-macs org-loaddefs debbugs-gnu derived
debbugs cl-macs cl soap-client warnings xml diff-mode diff autoload
tar-mode lisp-mnt mm-archive message format-spec rfc822 mml mml-sec
mailabbrev gmm-utils mailheader mm-decode mm-bodies mm-encode mail-utils
network-stream starttls url-http tls mail-parse rfc2231 rfc2047 rfc2045
ietf-drums url-gw url-cache url-auth url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap url-handlers url-parse auth-source gnus-util mm-util mail-prsvr
password-cache url-vars epg finder-inf browse-url goto-addr shell
pcomplete grep compile dired-aux dired dabbrev cus-edit wid-edit
cus-start cus-load noutline outline view apropos gdb-mi bindat json gud
easy-mmode comint ansi-color linum mule-util cal-move cal-menu calendar
cal-loaddefs semantic/tag-write jka-compr misearch multi-isearch
semantic/symref/list semantic/complete eieio-opt semantic/sb speedbar
sb-image dframe find-func semantic/symref semantic/analyze/complete
semantic/db-typecache semantic/ia semantic/senator semantic/edit
help-mode thingatpt semantic/tag-file add-log semantic/imenu advice
semantic/db-file data-debug cedet-files semantic/bovine/c
semantic/decorate/include semantic/decorate/mode semantic/decorate pulse
hideif semantic/bovine/c-by semantic/lex-spp semantic/bovine/gcc
semantic/dep semantic/bovine semantic/analyze/refs semantic/db-find
semantic/db-ref semantic/analyze semantic/sort semantic/scope
semantic/analyze/fcn superword subword cc-langs cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
server eldoc help-fns paredit hideshow glasses flyspell ispell
semantic/db-mode semantic/db gv eieio-base semantic/idle semantic/format
ezimage semantic/tag-ls semantic/find semantic/ctxt semantic/util-modes
semantic/util semantic semantic/tag semantic/lex semantic/fw eieio
byte-opt bytecomp byte-compile cconv eieio-core mode-local cedet
windmove winner ring elec-pair paren time time-date which-func imenu
edmacro kmacro cl-loaddefs cl-lib auctex-autoloads company-autoloads
dired-details+-autoloads dired-details-autoloads info easymenu
geiser-autoloads google-translate-autoloads paredit-autoloads
quack-autoloads sokoban-autoloads package epg-config tooltip electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list newcomment lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev
minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
dbusbind gfilenotify dynamic-setting system-font-setting
font-render-setting x-toolkit x multi-tty emacs)

Memory information:
((conses 8 474862 160898)
 (symbols 24 44010 0)
 (miscs 20 6276 2576)
 (strings 16 101774 31471)
 (string-bytes 1 2940699)
 (vectors 8 39166)
 (vector-slots 4 725772 24178)
 (floats 8 2008 461)
 (intervals 28 12998 46)
 (buffers 512 38)
 (heap 1024 53384 2385))

-- 
 ,= ,-_-. =.  Bruno Félix Rezende Ribeiro (oitofelix) [0x28D618AF]
((_/)o o(\_)) There is no system but GNU;
 `-'(. .)`-'  GNU Linux-Libre is one of its official kernels;
     \_/      All software must be free as in freedom;