diff src/dispnew.c @ 101464:f34b82b3a6e0

(buffer_posn_from_coords): Use Fset_buffer instead of setting current_buffer directly.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 25 Jan 2009 17:00:55 +0000
parents e038c1a8307c
children 1009d5607716
line wrap: on
line diff
--- a/src/dispnew.c	Sun Jan 25 17:00:25 2009 +0000
+++ b/src/dispnew.c	Sun Jan 25 17:00:55 2009 +0000
@@ -5933,7 +5933,7 @@
      int *width, *height;
 {
   struct it it;
-  struct buffer *old_current_buffer = current_buffer;
+  Lisp_Object old_current_buffer = Fcurrent_buffer ();
   struct text_pos startp;
   Lisp_Object string;
   struct glyph_row *row;
@@ -5942,7 +5942,9 @@
 #endif
   int x0, x1;
 
-  current_buffer = XBUFFER (w->buffer);
+  /* We used to set current_buffer directly here, but that does the
+     wrong thing with `face-remapping-alist' (bug#2044).  */
+  Fset_buffer (w->buffer);
   SET_TEXT_POS_FROM_MARKER (startp, w->start);
   CHARPOS (startp) = min (ZV, max (BEGV, CHARPOS (startp)));
   BYTEPOS (startp) = min (ZV_BYTE, max (BEGV_BYTE, BYTEPOS (startp)));
@@ -5952,7 +5954,7 @@
   move_it_to (&it, -1, x0 + it.first_visible_x, *y, -1,
 	      MOVE_TO_X | MOVE_TO_Y);
 
-  current_buffer = old_current_buffer;
+  Fset_buffer (old_current_buffer);
 
   *dx = x0 + it.first_visible_x - it.current_x;
   *dy = *y - it.current_y;