Marcus Harnisch <marcus.harnisch(a)gmx.net> writes:
Michael Sperber <sperber(a)informatik.uni-tuebingen.de> writes:
> I vaguely suspect that's my fault (i.e. the window-config rewrite). I
> don't use VM: It would greatly help if you could provide "instructions
> for dummies" to reproduce the problem, i.e. of the form:
>
> do M-x vm RET
[...]
enter a folder with (> (frame-height)) messages
C-x 1 ; see more of the summary
move point to a message far down in the summary
SPACE ; display message
watch how summary window shrinks to make space for message body. The
message number at the top of the summary window is the same as
before. point is re-centered in current (shrunk) summary window.
OK, I've found this one. The reason is that VM uses
`delete-other-windows' in the process of recreating the correct window
configuration. ``delete-other-windows' tries to minimize redisplay and
thus keeps the top of the summary windows at the same place as before.
As the point is now offscreen, redisplay adjusts the point. However, we
want to keep the current point. I already encountered this problem when
rewriting the window configurations, and there's a function there that
already does the right thing.
(This window-point stuff and the interaction with redisplay is just
hideous. It took me a few hours to track this down.)
I'll hopefully be able to look into the flicker problem next week.
2007-09-07 Mike Sperber <mike(a)xemacs.org>
* tapestry.el (tapestry-set-window-map): Use
`frame-reduce-to-one-window' instead of `delete-other-windows' to
keep the point from moving inadvertently.
--
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
Index: tapestry.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/vm/tapestry.el,v
retrieving revision 1.5
diff -u -r1.5 tapestry.el
--- tapestry.el 3 Sep 2003 00:43:45 -0000 1.5
+++ tapestry.el 7 Sep 2007 08:29:13 -0000
@@ -205,7 +205,11 @@
root-window )
(if (tapestry-windows-match-map map map-width map-height)
(tapestry-first-window)
- (delete-other-windows)
+ (if (fboundp 'frame-reduce-to-one-window)
+ (frame-reduce-to-one-window (selected-frame))
+ ;; `delete-other-windows' may cause the window point to move
+ ;; as it tries to minimize redisplay
+ (delete-other-windows))
(setq root-window (selected-window))
(tapestry-apply-window-map map map-width map-height root-window)
(setq tapestry-windows-changed t)
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta