aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey2004-01-02 04:22:23 +0000
committerKaroly Lorentey2004-01-02 04:22:23 +0000
commitfa971ac34de80905a91d2af15dd8712329dad273 (patch)
tree62b0f8a8ca6df6c126a15f0cabe0d2ddf7642156 /src
parent7b00d185eba8e01f191a69740e3270c88f88159c (diff)
downloademacs-fa971ac34de80905a91d2af15dd8712329dad273.tar.gz
emacs-fa971ac34de80905a91d2af15dd8712329dad273.zip
Got rid of the rif (window-based redisplay interface) global variable.
src/dispextern.h (PRODUCE_GLYPHS): Use the rif in IT->f, not the global rif. (rif): Removed. src/dispnew.c (rif): Removed. (direct_output_for_insert, direct_output_forward_char, update_frame) (redraw_overlapped_rows, redraw_overlapping_rows, update_window) (update_marginal_area, update_text_area, update_window_line) (set_window_cursor_after_update, scrolling_window): Use the rif of the current frame, not the global rif. src/fontset.c: #include termhooks.h, for FRAME_RIF. (Finternal_char_font): Use the rif of the current frame. src/frame.c (x_set_frame_parameters): Use the rif of the current frame. src/keyboard.c (detect_input_pending_run_timers): Use the rif of the current frame. src/minibuf.c: #include termhooks.h, for FRAME_RIF. (read_minibuf): Use the rif of the current frame. src/term.c (update_begin): Removed rif update hack. src/termhooks.h (FRAME_RIF): New macro. src/xdisp.c (init_iterator, expose_frame): Removed rif update hack. (echo_area_display, x_cursor_to, draw_fringe_bitmap) (try_window_reusing_current_matrix, try_window_id) (get_glyph_face_and_encoding, x_get_glyph_overhangs) (get_char_face_and_encoding, compute_overhangs_and_x, draw_glyphs) (x_produce_glyphs, x_insert_glyphs, x_clear_end_of_line) (erase_phys_cursor, display_and_set_cursor, show_mouse_face) (define_frame_cursor1, x_draw_vertical_border): Use the rif of the current frame. src/xfns.c (Fx_create_frame): Removed rif update hack. src/xterm.c (frame_highlight, frame_unhighlight): Ditto. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-32
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in4
-rw-r--r--src/dispextern.h24
-rw-r--r--src/dispnew.c49
-rw-r--r--src/fontset.c3
-rw-r--r--src/frame.c8
-rw-r--r--src/keyboard.c8
-rw-r--r--src/minibuf.c9
-rw-r--r--src/term.c2
-rw-r--r--src/termhooks.h2
-rw-r--r--src/xdisp.c106
-rw-r--r--src/xfns.c3
-rw-r--r--src/xterm.c6
12 files changed, 110 insertions, 114 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index 8a19441c53a..1f0e18d9e55 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1076,7 +1076,7 @@ frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
1076 blockinput.h systty.h atimer.h systime.h buffer.h charset.h fontset.h \ 1076 blockinput.h systty.h atimer.h systime.h buffer.h charset.h fontset.h \
1077 msdos.h dosfns.h dispextern.h $(config_h) 1077 msdos.h dosfns.h dispextern.h $(config_h)
1078fontset.o: dispextern.h fontset.h fontset.c ccl.h buffer.h charset.h frame.h \ 1078fontset.o: dispextern.h fontset.h fontset.c ccl.h buffer.h charset.h frame.h \
1079 keyboard.h $(config_h) 1079 keyboard.h termhooks.h $(config_h)
1080getloadavg.o: getloadavg.c $(config_h) 1080getloadavg.o: getloadavg.c $(config_h)
1081indent.o: indent.c frame.h window.h systty.h indent.h buffer.h $(config_h) termchar.h \ 1081indent.o: indent.c frame.h window.h systty.h indent.h buffer.h $(config_h) termchar.h \
1082 termopts.h disptab.h region-cache.h charset.h composite.h dispextern.h \ 1082 termopts.h disptab.h region-cache.h charset.h composite.h dispextern.h \
@@ -1099,7 +1099,7 @@ vm-limit.o: vm-limit.c mem-limits.h $(config_h)
1099marker.o: marker.c buffer.h charset.h $(config_h) 1099marker.o: marker.c buffer.h charset.h $(config_h)
1100md5.o: md5.c md5.h $(config_h) 1100md5.o: md5.c md5.h $(config_h)
1101minibuf.o: minibuf.c syntax.h dispextern.h frame.h window.h keyboard.h \ 1101minibuf.o: minibuf.c syntax.h dispextern.h frame.h window.h keyboard.h \
1102 buffer.h commands.h charset.h msdos.h $(config_h) 1102 buffer.h commands.h charset.h msdos.h termhooks.h $(config_h)
1103mktime.o: mktime.c $(config_h) 1103mktime.o: mktime.c $(config_h)
1104msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \ 1104msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
1105 termopts.h termchar.h charset.h coding.h ccl.h disptab.h window.h \ 1105 termopts.h termchar.h charset.h coding.h ccl.h disptab.h window.h \
diff --git a/src/dispextern.h b/src/dispextern.h
index 4b47aaf7188..52ea29b8d69 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -2011,16 +2011,16 @@ struct it
2011/* Call produce_glyphs or produce_glyphs_hook, if set. Shortcut to 2011/* Call produce_glyphs or produce_glyphs_hook, if set. Shortcut to
2012 avoid the function call overhead. */ 2012 avoid the function call overhead. */
2013 2013
2014#define PRODUCE_GLYPHS(IT) \ 2014#define PRODUCE_GLYPHS(IT) \
2015 do { \ 2015 do { \
2016 extern int inhibit_free_realized_faces; \ 2016 extern int inhibit_free_realized_faces; \
2017 if (rif != NULL) \ 2017 if (FRAME_RIF ((IT)->f) != NULL) \
2018 rif->produce_glyphs ((IT)); \ 2018 FRAME_RIF ((IT)->f)->produce_glyphs ((IT)); \
2019 else \ 2019 else \
2020 produce_glyphs ((IT)); \ 2020 produce_glyphs ((IT)); \
2021 if ((IT)->glyph_row != NULL) \ 2021 if ((IT)->glyph_row != NULL) \
2022 inhibit_free_realized_faces = 1; \ 2022 inhibit_free_realized_faces = 1; \
2023 } while (0) 2023 } while (0)
2024 2024
2025/* Bit-flags indicating what operation move_it_to should perform. */ 2025/* Bit-flags indicating what operation move_it_to should perform. */
2026 2026
@@ -2189,10 +2189,6 @@ struct redisplay_interface
2189#endif /* HAVE_WINDOW_SYSTEM */ 2189#endif /* HAVE_WINDOW_SYSTEM */
2190}; 2190};
2191 2191
2192/* The current interface for window-based redisplay. */
2193
2194extern struct redisplay_interface *rif;
2195
2196 2192
2197/*********************************************************************** 2193/***********************************************************************
2198 Images 2194 Images
diff --git a/src/dispnew.c b/src/dispnew.c
index 9ccc87a6020..87ac292a1b0 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -297,13 +297,6 @@ int glyph_pool_count;
297 297
298static struct frame *frame_matrix_frame; 298static struct frame *frame_matrix_frame;
299 299
300/* Current interface for window-based redisplay. Set from
301 update_begin. A null value means we are not using window-based
302 redisplay. */
303/* XXX this variable causes frequent coredumps */
304
305struct redisplay_interface *rif;
306
307/* Non-zero means that fonts have been loaded since the last glyph 300/* Non-zero means that fonts have been loaded since the last glyph
308 matrix adjustments. Redisplay must stop, and glyph matrices must 301 matrix adjustments. Redisplay must stop, and glyph matrices must
309 be adjusted when this flag becomes non-zero during display. The 302 be adjusted when this flag becomes non-zero during display. The
@@ -3610,17 +3603,17 @@ direct_output_for_insert (g)
3610 updated_row = glyph_row; 3603 updated_row = glyph_row;
3611 updated_area = TEXT_AREA; 3604 updated_area = TEXT_AREA;
3612 update_begin (f); 3605 update_begin (f);
3613 if (rif) 3606 if (FRAME_RIF (f))
3614 { 3607 {
3615 rif->update_window_begin_hook (w); 3608 FRAME_RIF (f)->update_window_begin_hook (w);
3616 3609
3617 if (glyphs == end - n 3610 if (glyphs == end - n
3618 /* In front of a space added by append_space. */ 3611 /* In front of a space added by append_space. */
3619 || (glyphs == end - n - 1 3612 || (glyphs == end - n - 1
3620 && (end - n)->charpos <= 0)) 3613 && (end - n)->charpos <= 0))
3621 rif->write_glyphs (glyphs, n); 3614 FRAME_RIF (f)->write_glyphs (glyphs, n);
3622 else 3615 else
3623 rif->insert_glyphs (glyphs, n); 3616 FRAME_RIF (f)->insert_glyphs (glyphs, n);
3624 } 3617 }
3625 else 3618 else
3626 { 3619 {
@@ -3640,8 +3633,8 @@ direct_output_for_insert (g)
3640 a frame matrix is used, cursor_to expects frame coordinates, 3633 a frame matrix is used, cursor_to expects frame coordinates,
3641 and the X and Y parameters are not used. */ 3634 and the X and Y parameters are not used. */
3642 if (window_redisplay_p) 3635 if (window_redisplay_p)
3643 rif->cursor_to (w->cursor.vpos, w->cursor.hpos, 3636 FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos,
3644 w->cursor.y, w->cursor.x); 3637 w->cursor.y, w->cursor.x);
3645 else 3638 else
3646 { 3639 {
3647 int x, y; 3640 int x, y;
@@ -3653,8 +3646,8 @@ direct_output_for_insert (g)
3653 cursor_to (y, x); 3646 cursor_to (y, x);
3654 } 3647 }
3655 3648
3656 if (rif) 3649 if (FRAME_RIF (f))
3657 rif->update_window_end_hook (w, 1, 0); 3650 FRAME_RIF (f)->update_window_end_hook (w, 1, 0);
3658 update_end (f); 3651 update_end (f);
3659 updated_row = NULL; 3652 updated_row = NULL;
3660 if (FRAME_TERMCAP_P (f)) 3653 if (FRAME_TERMCAP_P (f))
@@ -3736,8 +3729,8 @@ direct_output_forward_char (n)
3736 && w->cursor.hpos < w->desired_matrix->matrix_w); 3729 && w->cursor.hpos < w->desired_matrix->matrix_w);
3737 3730
3738 if (FRAME_WINDOW_P (f)) 3731 if (FRAME_WINDOW_P (f))
3739 rif->cursor_to (w->cursor.vpos, w->cursor.hpos, 3732 FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos,
3740 w->cursor.y, w->cursor.x); 3733 w->cursor.y, w->cursor.x);
3741 else 3734 else
3742 { 3735 {
3743 int x, y; 3736 int x, y;
@@ -3824,7 +3817,7 @@ update_frame (f, force_p, inhibit_hairy_id_p)
3824 3817
3825#if 0 /* This flush is a performance bottleneck under X, 3818#if 0 /* This flush is a performance bottleneck under X,
3826 and it doesn't seem to be necessary anyway. */ 3819 and it doesn't seem to be necessary anyway. */
3827 rif->flush_display (f); 3820 FRAME_RIF (f)->flush_display (f);
3828#endif 3821#endif
3829 } 3822 }
3830 else 3823 else
@@ -3926,7 +3919,8 @@ redraw_overlapped_rows (w, yb)
3926 int yb; 3919 int yb;
3927{ 3920{
3928 int i; 3921 int i;
3929 3922 struct frame *f = XFRAME (WINDOW_FRAME (w));
3923
3930 /* If rows overlapping others have been changed, the rows being 3924 /* If rows overlapping others have been changed, the rows being
3931 overlapped have to be redrawn. This won't draw lines that have 3925 overlapped have to be redrawn. This won't draw lines that have
3932 already been drawn in update_window_line because overlapped_p in 3926 already been drawn in update_window_line because overlapped_p in
@@ -3949,10 +3943,12 @@ redraw_overlapped_rows (w, yb)
3949 { 3943 {
3950 updated_row = row; 3944 updated_row = row;
3951 updated_area = area; 3945 updated_area = area;
3952 rif->cursor_to (i, 0, row->y, area == TEXT_AREA ? row->x : 0); 3946 FRAME_RIF (f)->cursor_to (i, 0, row->y,
3947 area == TEXT_AREA ? row->x : 0);
3953 if (row->used[area]) 3948 if (row->used[area])
3954 rif->write_glyphs (row->glyphs[area], row->used[area]); 3949 FRAME_RIF (f)->write_glyphs (row->glyphs[area],
3955 rif->clear_end_of_line (-1); 3950 row->used[area]);
3951 FRAME_RIF (f)->clear_end_of_line (-1);
3956 } 3952 }
3957 3953
3958 row->overlapped_p = 0; 3954 row->overlapped_p = 0;
@@ -3974,7 +3970,8 @@ redraw_overlapping_rows (w, yb)
3974{ 3970{
3975 int i, bottom_y; 3971 int i, bottom_y;
3976 struct glyph_row *row; 3972 struct glyph_row *row;
3977 3973 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
3974
3978 for (i = 0; i < w->current_matrix->nrows; ++i) 3975 for (i = 0; i < w->current_matrix->nrows; ++i)
3979 { 3976 {
3980 row = w->current_matrix->rows + i; 3977 row = w->current_matrix->rows + i;
@@ -4054,6 +4051,7 @@ update_window (w, force_p)
4054#if GLYPH_DEBUG 4051#if GLYPH_DEBUG
4055 struct frame *f = XFRAME (WINDOW_FRAME (w)); 4052 struct frame *f = XFRAME (WINDOW_FRAME (w));
4056#endif 4053#endif
4054 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
4057 4055
4058 /* Check that W's frame doesn't have glyph matrices. */ 4056 /* Check that W's frame doesn't have glyph matrices. */
4059 xassert (FRAME_WINDOW_P (f)); 4057 xassert (FRAME_WINDOW_P (f));
@@ -4221,6 +4219,7 @@ update_marginal_area (w, area, vpos)
4221 int area, vpos; 4219 int area, vpos;
4222{ 4220{
4223 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); 4221 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
4222 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
4224 4223
4225 /* Let functions in xterm.c know what area subsequent X positions 4224 /* Let functions in xterm.c know what area subsequent X positions
4226 will be relative to. */ 4225 will be relative to. */
@@ -4246,6 +4245,7 @@ update_text_area (w, vpos)
4246{ 4245{
4247 struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos); 4246 struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos);
4248 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); 4247 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
4248 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
4249 int changed_p = 0; 4249 int changed_p = 0;
4250 4250
4251 /* Let functions in xterm.c know what area subsequent X positions 4251 /* Let functions in xterm.c know what area subsequent X positions
@@ -4467,6 +4467,7 @@ update_window_line (w, vpos, mouse_face_overwritten_p)
4467{ 4467{
4468 struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos); 4468 struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos);
4469 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); 4469 struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
4470 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
4470 int changed_p = 0; 4471 int changed_p = 0;
4471 4472
4472 /* Set the row being updated. This is important to let xterm.c 4473 /* Set the row being updated. This is important to let xterm.c
@@ -4537,6 +4538,7 @@ set_window_cursor_after_update (w)
4537 struct window *w; 4538 struct window *w;
4538{ 4539{
4539 struct frame *f = XFRAME (w->frame); 4540 struct frame *f = XFRAME (w->frame);
4541 struct redisplay_interface *rif = FRAME_RIF (f);
4540 int cx, cy, vpos, hpos; 4542 int cx, cy, vpos, hpos;
4541 4543
4542 /* Not intended for frame matrix updates. */ 4544 /* Not intended for frame matrix updates. */
@@ -4760,6 +4762,7 @@ scrolling_window (w, header_line_p)
4760 int i, j, first_old, first_new, last_old, last_new; 4762 int i, j, first_old, first_new, last_old, last_new;
4761 int nruns, nbytes, n, run_idx; 4763 int nruns, nbytes, n, run_idx;
4762 struct row_entry *entry; 4764 struct row_entry *entry;
4765 struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
4763 4766
4764 /* Skip over rows equal at the start. */ 4767 /* Skip over rows equal at the start. */
4765 for (i = header_line_p ? 1 : 0; i < current_matrix->nrows - 1; ++i) 4768 for (i = header_line_p ? 1 : 0; i < current_matrix->nrows - 1; ++i)
diff --git a/src/fontset.c b/src/fontset.c
index b199f53df17..7ff1ed1177f 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -45,6 +45,7 @@ Boston, MA 02111-1307, USA. */
45#ifdef MAC_OS 45#ifdef MAC_OS
46#include "macterm.h" 46#include "macterm.h"
47#endif 47#endif
48#include "termhooks.h"
48 49
49#ifdef FONTSET_DEBUG 50#ifdef FONTSET_DEBUG
50#undef xassert 51#undef xassert
@@ -1279,7 +1280,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0,
1279 STORE_XCHAR2B (&char2b, c1, c2); 1280 STORE_XCHAR2B (&char2b, c1, c2);
1280 else 1281 else
1281 STORE_XCHAR2B (&char2b, 0, c1); 1282 STORE_XCHAR2B (&char2b, 0, c1);
1282 rif->encode_char (c, &char2b, fontp, NULL); 1283 FRAME_RIF (f)->encode_char (c, &char2b, fontp, NULL);
1283 code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b); 1284 code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b);
1284 } 1285 }
1285 return Fcons (build_string (face->font_name), make_number (code)); 1286 return Fcons (build_string (face->font_name), make_number (code));
diff --git a/src/frame.c b/src/frame.c
index d1c0a220afb..3b8ce346cad 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -2807,8 +2807,8 @@ x_set_frame_parameters (f, alist)
2807 if (NATNUMP (param_index) 2807 if (NATNUMP (param_index)
2808 && (XFASTINT (param_index) 2808 && (XFASTINT (param_index)
2809 < sizeof (frame_parms)/sizeof (frame_parms[0])) 2809 < sizeof (frame_parms)/sizeof (frame_parms[0]))
2810 && rif->frame_parm_handlers[XINT (param_index)]) 2810 && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])
2811 (*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); 2811 (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value);
2812 } 2812 }
2813 } 2813 }
2814 } 2814 }
@@ -2851,8 +2851,8 @@ x_set_frame_parameters (f, alist)
2851 if (NATNUMP (param_index) 2851 if (NATNUMP (param_index)
2852 && (XFASTINT (param_index) 2852 && (XFASTINT (param_index)
2853 < sizeof (frame_parms)/sizeof (frame_parms[0])) 2853 < sizeof (frame_parms)/sizeof (frame_parms[0]))
2854 && rif->frame_parm_handlers[XINT (param_index)]) 2854 && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])
2855 (*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); 2855 (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value);
2856 } 2856 }
2857 } 2857 }
2858 2858
diff --git a/src/keyboard.c b/src/keyboard.c
index d849b9ce4d6..df5c65c3341 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -9874,8 +9874,12 @@ detect_input_pending_run_timers (do_display)
9874 from an idle timer function. The symptom of the bug is that 9874 from an idle timer function. The symptom of the bug is that
9875 the cursor sometimes doesn't become visible until the next X 9875 the cursor sometimes doesn't become visible until the next X
9876 event is processed. --gerd. */ 9876 event is processed. --gerd. */
9877 if (rif) 9877 {
9878 rif->flush_display (NULL); 9878 Lisp_Object tail, frame;
9879 FOR_EACH_FRAME (tail, frame)
9880 if (FRAME_RIF (XFRAME (frame)))
9881 FRAME_RIF (XFRAME (frame))->flush_display (XFRAME (frame));
9882 }
9879 } 9883 }
9880 9884
9881 return input_pending; 9885 return input_pending;
diff --git a/src/minibuf.c b/src/minibuf.c
index 9a05a4d1ce0..6124054f3c0 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */
34#include "syntax.h" 34#include "syntax.h"
35#include "intervals.h" 35#include "intervals.h"
36#include "keymap.h" 36#include "keymap.h"
37#include "termhooks.h"
37 38
38extern int quit_char; 39extern int quit_char;
39 40
@@ -692,8 +693,12 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
692 XWINDOW (minibuf_window)->cursor.x = 0; 693 XWINDOW (minibuf_window)->cursor.x = 0;
693 XWINDOW (minibuf_window)->must_be_updated_p = 1; 694 XWINDOW (minibuf_window)->must_be_updated_p = 1;
694 update_frame (XFRAME (selected_frame), 1, 1); 695 update_frame (XFRAME (selected_frame), 1, 1);
695 if (rif && rif->flush_display) 696 {
696 rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame)); 697 struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame);
698 struct redisplay_interface *rif = FRAME_RIF (f);
699 if (rif && rif->flush_display)
700 rif->flush_display (f);
701 }
697 } 702 }
698 703
699 /* Make minibuffer contents into a string. */ 704 /* Make minibuffer contents into a string. */
diff --git a/src/term.c b/src/term.c
index b35a20a2ff0..24dbc614c6f 100644
--- a/src/term.c
+++ b/src/term.c
@@ -374,8 +374,6 @@ update_begin (f)
374 struct frame *f; 374 struct frame *f;
375{ 375{
376 updating_frame = f; 376 updating_frame = f;
377 /* XXX rif hack */
378 rif = f->display_method->rif;
379 if (!FRAME_TERMCAP_P (f)) 377 if (!FRAME_TERMCAP_P (f))
380 update_begin_hook (f); 378 update_begin_hook (f);
381} 379}
diff --git a/src/termhooks.h b/src/termhooks.h
index 0d7818ab818..35a8763425a 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -71,6 +71,8 @@ struct display_method
71#define FRAME_SCROLL_REGION_COST(f) ((f)->display_method->scroll_region_cost) 71#define FRAME_SCROLL_REGION_COST(f) ((f)->display_method->scroll_region_cost)
72#define FRAME_MEMORY_BELOW_FRAME(f) ((f)->display_method->memory_below_frame) 72#define FRAME_MEMORY_BELOW_FRAME(f) ((f)->display_method->memory_below_frame)
73 73
74#define FRAME_RIF(f) ((f)->display_method->rif)
75
74/* Text display hooks. */ 76/* Text display hooks. */
75 77
76extern void (*cursor_to_hook) P_ ((int vpos, int hpos)); 78extern void (*cursor_to_hook) P_ ((int vpos, int hpos));
diff --git a/src/xdisp.c b/src/xdisp.c
index e2decba9066..dcddeeb9037 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2009,9 +2009,6 @@ init_iterator (it, w, charpos, bytepos, row, base_face_id)
2009 it->w = w; 2009 it->w = w;
2010 it->f = XFRAME (w->frame); 2010 it->f = XFRAME (w->frame);
2011 2011
2012 /* XXX rif hack: Make sure the redisplay interface is correctly set. */
2013 rif = it->f->display_method->rif;
2014
2015 /* Extra space between lines (on window systems only). */ 2012 /* Extra space between lines (on window systems only). */
2016 if (base_face_id == DEFAULT_FACE_ID 2013 if (base_face_id == DEFAULT_FACE_ID
2017 && FRAME_WINDOW_P (it->f)) 2014 && FRAME_WINDOW_P (it->f))
@@ -7674,7 +7671,7 @@ echo_area_display (update_frame_p)
7674 Can do with a display update of the echo area, 7671 Can do with a display update of the echo area,
7675 unless we displayed some mode lines. */ 7672 unless we displayed some mode lines. */
7676 update_single_window (w, 1); 7673 update_single_window (w, 1);
7677 rif->flush_display (f); 7674 FRAME_RIF (f)->flush_display (f);
7678 } 7675 }
7679 else 7676 else
7680 update_frame (f, 1, 1); 7677 update_frame (f, 1, 1);
@@ -8135,8 +8132,8 @@ x_cursor_to (vpos, hpos, y, x)
8135 { 8132 {
8136 BLOCK_INPUT; 8133 BLOCK_INPUT;
8137 display_and_set_cursor (w, 1, hpos, vpos, x, y); 8134 display_and_set_cursor (w, 1, hpos, vpos, x, y);
8138 if (rif->flush_display_optional) 8135 if (FRAME_RIF (SELECTED_FRAME ())->flush_display_optional)
8139 rif->flush_display_optional (SELECTED_FRAME ()); 8136 FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (SELECTED_FRAME ());
8140 UNBLOCK_INPUT; 8137 UNBLOCK_INPUT;
8141 } 8138 }
8142} 8139}
@@ -9029,7 +9026,7 @@ draw_fringe_bitmap (w, row, which, left_p)
9029 /* Adjust y to the offset in the row to start drawing the bitmap. */ 9026 /* Adjust y to the offset in the row to start drawing the bitmap. */
9030 p.y += (row->height - p.h) / 2; 9027 p.y += (row->height - p.h) / 2;
9031 9028
9032 rif->draw_fringe_bitmap (w, row, &p); 9029 FRAME_RIF (f)->draw_fringe_bitmap (w, row, &p);
9033} 9030}
9034 9031
9035/* Draw fringe bitmaps for glyph row ROW on window W. Call this 9032/* Draw fringe bitmaps for glyph row ROW on window W. Call this
@@ -12303,10 +12300,10 @@ try_window_reusing_current_matrix (w)
12303 if (run.height > 0 && run.current_y != run.desired_y) 12300 if (run.height > 0 && run.current_y != run.desired_y)
12304 { 12301 {
12305 update_begin (f); 12302 update_begin (f);
12306 rif->update_window_begin_hook (w); 12303 FRAME_RIF (f)->update_window_begin_hook (w);
12307 rif->clear_window_mouse_face (w); 12304 FRAME_RIF (f)->clear_window_mouse_face (w);
12308 rif->scroll_run_hook (w, &run); 12305 FRAME_RIF (f)->scroll_run_hook (w, &run);
12309 rif->update_window_end_hook (w, 0, 0); 12306 FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
12310 update_end (f); 12307 update_end (f);
12311 } 12308 }
12312 12309
@@ -12476,10 +12473,10 @@ try_window_reusing_current_matrix (w)
12476 { 12473 {
12477 struct frame *f = XFRAME (WINDOW_FRAME (w)); 12474 struct frame *f = XFRAME (WINDOW_FRAME (w));
12478 update_begin (f); 12475 update_begin (f);
12479 rif->update_window_begin_hook (w); 12476 FRAME_RIF (f)->update_window_begin_hook (w);
12480 rif->clear_window_mouse_face (w); 12477 FRAME_RIF (f)->clear_window_mouse_face (w);
12481 rif->scroll_run_hook (w, &run); 12478 FRAME_RIF (f)->scroll_run_hook (w, &run);
12482 rif->update_window_end_hook (w, 0, 0); 12479 FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
12483 update_end (f); 12480 update_end (f);
12484 } 12481 }
12485 12482
@@ -13310,10 +13307,10 @@ try_window_id (w)
13310 13307
13311 if (FRAME_WINDOW_P (f)) 13308 if (FRAME_WINDOW_P (f))
13312 { 13309 {
13313 rif->update_window_begin_hook (w); 13310 FRAME_RIF (f)->update_window_begin_hook (w);
13314 rif->clear_window_mouse_face (w); 13311 FRAME_RIF (f)->clear_window_mouse_face (w);
13315 rif->scroll_run_hook (w, &run); 13312 FRAME_RIF (f)->scroll_run_hook (w, &run);
13316 rif->update_window_end_hook (w, 0, 0); 13313 FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
13317 } 13314 }
13318 else 13315 else
13319 { 13316 {
@@ -16818,7 +16815,7 @@ get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p)
16818 = FONT_INFO_FROM_ID (f, face->font_info_id); 16815 = FONT_INFO_FROM_ID (f, face->font_info_id);
16819 if (font_info) 16816 if (font_info)
16820 glyph->font_type 16817 glyph->font_type
16821 = rif->encode_char (glyph->u.ch, char2b, font_info, two_byte_p); 16818 = FRAME_RIF (f)->encode_char (glyph->u.ch, char2b, font_info, two_byte_p);
16822 } 16819 }
16823 } 16820 }
16824 16821
@@ -17048,7 +17045,7 @@ x_get_glyph_overhangs (glyph, f, left, right)
17048 font = face->font; 17045 font = face->font;
17049 font_info = FONT_INFO_FROM_ID (f, face->font_info_id); 17046 font_info = FONT_INFO_FROM_ID (f, face->font_info_id);
17050 if (font /* ++KFS: Should this be font_info ? */ 17047 if (font /* ++KFS: Should this be font_info ? */
17051 && (pcm = rif->per_char_metric (font, &char2b, glyph->font_type))) 17048 && (pcm = FRAME_RIF (f)->per_char_metric (font, &char2b, glyph->font_type)))
17052 { 17049 {
17053 if (pcm->rbearing > pcm->width) 17050 if (pcm->rbearing > pcm->width)
17054 *right = pcm->rbearing - pcm->width; 17051 *right = pcm->rbearing - pcm->width;
@@ -17216,7 +17213,7 @@ get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p, display_p)
17216 struct font_info *font_info 17213 struct font_info *font_info
17217 = FONT_INFO_FROM_ID (f, face->font_info_id); 17214 = FONT_INFO_FROM_ID (f, face->font_info_id);
17218 if (font_info) 17215 if (font_info)
17219 rif->encode_char (c, char2b, font_info, 0); 17216 FRAME_RIF (f)->encode_char (c, char2b, font_info, 0);
17220 } 17217 }
17221 } 17218 }
17222 17219
@@ -17283,8 +17280,8 @@ compute_overhangs_and_x (s, x, backward_p)
17283 { 17280 {
17284 while (s) 17281 while (s)
17285 { 17282 {
17286 if (rif->compute_glyph_string_overhangs) 17283 if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
17287 rif->compute_glyph_string_overhangs (s); 17284 FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
17288 x -= s->width; 17285 x -= s->width;
17289 s->x = x; 17286 s->x = x;
17290 s = s->prev; 17287 s = s->prev;
@@ -17294,8 +17291,8 @@ compute_overhangs_and_x (s, x, backward_p)
17294 { 17291 {
17295 while (s) 17292 while (s)
17296 { 17293 {
17297 if (rif->compute_glyph_string_overhangs) 17294 if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
17298 rif->compute_glyph_string_overhangs (s); 17295 FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
17299 s->x = x; 17296 s->x = x;
17300 x += s->width; 17297 x += s->width;
17301 s = s->next; 17298 s = s->next;
@@ -17576,9 +17573,9 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
17576 struct glyph_string *h, *t; 17573 struct glyph_string *h, *t;
17577 17574
17578 /* Compute overhangs for all glyph strings. */ 17575 /* Compute overhangs for all glyph strings. */
17579 if (rif->compute_glyph_string_overhangs) 17576 if (FRAME_RIF (f)->compute_glyph_string_overhangs)
17580 for (s = head; s; s = s->next) 17577 for (s = head; s; s = s->next)
17581 rif->compute_glyph_string_overhangs (s); 17578 FRAME_RIF (f)->compute_glyph_string_overhangs (s);
17582 17579
17583 /* Prepend glyph strings for glyphs in front of the first glyph 17580 /* Prepend glyph strings for glyphs in front of the first glyph
17584 string that are overwritten because of the first glyph 17581 string that are overwritten because of the first glyph
@@ -17646,7 +17643,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
17646 17643
17647 /* Draw all strings. */ 17644 /* Draw all strings. */
17648 for (s = head; s; s = s->next) 17645 for (s = head; s; s = s->next)
17649 rif->draw_glyph_string (s); 17646 FRAME_RIF (f)->draw_glyph_string (s);
17650 17647
17651 if (area == TEXT_AREA 17648 if (area == TEXT_AREA
17652 && !row->full_width_p 17649 && !row->full_width_p
@@ -18334,8 +18331,8 @@ x_produce_glyphs (it)
18334 18331
18335 it->nglyphs = 1; 18332 it->nglyphs = 1;
18336 18333
18337 pcm = rif->per_char_metric (font, &char2b, 18334 pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
18338 FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display)); 18335 FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display));
18339 it->ascent = FONT_BASE (font) + boff; 18336 it->ascent = FONT_BASE (font) + boff;
18340 it->descent = FONT_DESCENT (font) - boff; 18337 it->descent = FONT_DESCENT (font) - boff;
18341 18338
@@ -18459,8 +18456,8 @@ x_produce_glyphs (it)
18459 from the charset width; this is what old redisplay code 18456 from the charset width; this is what old redisplay code
18460 did. */ 18457 did. */
18461 18458
18462 pcm = rif->per_char_metric (font, &char2b, 18459 pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
18463 FONT_TYPE_FOR_MULTIBYTE (font, it->c)); 18460 FONT_TYPE_FOR_MULTIBYTE (font, it->c));
18464 18461
18465 if (font_not_found_p || !pcm) 18462 if (font_not_found_p || !pcm)
18466 { 18463 {
@@ -18591,8 +18588,8 @@ x_produce_glyphs (it)
18591 18588
18592 /* Initialize the bounding box. */ 18589 /* Initialize the bounding box. */
18593 if (font_info 18590 if (font_info
18594 && (pcm = rif->per_char_metric (font, &char2b, 18591 && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
18595 FONT_TYPE_FOR_MULTIBYTE (font, it->c)))) 18592 FONT_TYPE_FOR_MULTIBYTE (font, it->c))))
18596 { 18593 {
18597 width = pcm->width; 18594 width = pcm->width;
18598 ascent = pcm->ascent; 18595 ascent = pcm->ascent;
@@ -18650,8 +18647,8 @@ x_produce_glyphs (it)
18650 } 18647 }
18651 18648
18652 if (font_info 18649 if (font_info
18653 && (pcm = rif->per_char_metric (font, &char2b, 18650 && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
18654 FONT_TYPE_FOR_MULTIBYTE (font, ch)))) 18651 FONT_TYPE_FOR_MULTIBYTE (font, ch))))
18655 { 18652 {
18656 width = pcm->width; 18653 width = pcm->width;
18657 ascent = pcm->ascent; 18654 ascent = pcm->ascent;
@@ -18886,8 +18883,8 @@ x_insert_glyphs (start, len)
18886 frame_x = window_box_left (w, updated_area) + output_cursor.x; 18883 frame_x = window_box_left (w, updated_area) + output_cursor.x;
18887 frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y); 18884 frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y);
18888 18885
18889 rif->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width, 18886 FRAME_RIF (f)->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width,
18890 line_height, shift_by_width); 18887 line_height, shift_by_width);
18891 18888
18892 /* Write the glyphs. */ 18889 /* Write the glyphs. */
18893 hpos = start - row->glyphs[updated_area]; 18890 hpos = start - row->glyphs[updated_area];
@@ -18969,8 +18966,8 @@ x_clear_end_of_line (to_x)
18969 if (to_x > from_x && to_y > from_y) 18966 if (to_x > from_x && to_y > from_y)
18970 { 18967 {
18971 BLOCK_INPUT; 18968 BLOCK_INPUT;
18972 rif->clear_frame_area (f, from_x, from_y, 18969 FRAME_RIF (f)->clear_frame_area (f, from_x, from_y,
18973 to_x - from_x, to_y - from_y); 18970 to_x - from_x, to_y - from_y);
18974 UNBLOCK_INPUT; 18971 UNBLOCK_INPUT;
18975 } 18972 }
18976} 18973}
@@ -19407,8 +19404,8 @@ erase_phys_cursor (w)
19407 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); 19404 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
19408 y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y)); 19405 y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y));
19409 19406
19410 rif->clear_frame_area (f, x, y, 19407 FRAME_RIF (f)->clear_frame_area (f, x, y,
19411 cursor_glyph->pixel_width, cursor_row->visible_height); 19408 cursor_glyph->pixel_width, cursor_row->visible_height);
19412 } 19409 }
19413 19410
19414 /* Erase the cursor by redrawing the character underneath it. */ 19411 /* Erase the cursor by redrawing the character underneath it. */
@@ -19504,9 +19501,9 @@ display_and_set_cursor (w, on, hpos, vpos, x, y)
19504 w->phys_cursor.vpos = vpos; 19501 w->phys_cursor.vpos = vpos;
19505 } 19502 }
19506 19503
19507 rif->draw_window_cursor (w, glyph_row, x, y, 19504 FRAME_RIF (f)->draw_window_cursor (w, glyph_row, x, y,
19508 new_cursor_type, new_cursor_width, 19505 new_cursor_type, new_cursor_width,
19509 on, active_cursor); 19506 on, active_cursor);
19510} 19507}
19511 19508
19512 19509
@@ -19651,11 +19648,11 @@ show_mouse_face (dpyinfo, draw)
19651 19648
19652 /* Change the mouse cursor. */ 19649 /* Change the mouse cursor. */
19653 if (draw == DRAW_NORMAL_TEXT) 19650 if (draw == DRAW_NORMAL_TEXT)
19654 rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); 19651 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor);
19655 else if (draw == DRAW_MOUSE_FACE) 19652 else if (draw == DRAW_MOUSE_FACE)
19656 rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor); 19653 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor);
19657 else 19654 else
19658 rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor); 19655 FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor);
19659} 19656}
19660 19657
19661/* EXPORT: 19658/* EXPORT:
@@ -20152,7 +20149,7 @@ define_frame_cursor1 (f, cursor, pointer)
20152#else 20149#else
20153 if (bcmp (&cursor, &No_Cursor, sizeof (Cursor))) 20150 if (bcmp (&cursor, &No_Cursor, sizeof (Cursor)))
20154#endif 20151#endif
20155 rif->define_frame_cursor (f, cursor); 20152 FRAME_RIF (f)->define_frame_cursor (f, cursor);
20156} 20153}
20157 20154
20158/* Take proper action when mouse has moved to the mode or header line 20155/* Take proper action when mouse has moved to the mode or header line
@@ -20987,6 +20984,8 @@ void
20987x_draw_vertical_border (w) 20984x_draw_vertical_border (w)
20988 struct window *w; 20985 struct window *w;
20989{ 20986{
20987 struct frame *f = XFRAME (WINDOW_FRAME (w));
20988
20990 /* We could do better, if we knew what type of scroll-bar the adjacent 20989 /* We could do better, if we knew what type of scroll-bar the adjacent
20991 windows (on either side) have... But we don't :-( 20990 windows (on either side) have... But we don't :-(
20992 However, I think this works ok. ++KFS 2003-04-25 */ 20991 However, I think this works ok. ++KFS 2003-04-25 */
@@ -21003,7 +21002,7 @@ x_draw_vertical_border (w)
21003 window_box_edges (w, -1, &x0, &y0, &x1, &y1); 21002 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
21004 y1 -= 1; 21003 y1 -= 1;
21005 21004
21006 rif->draw_vertical_window_border (w, x1, y0, y1); 21005 FRAME_RIF (f)->draw_vertical_window_border (w, x1, y0, y1);
21007 } 21006 }
21008 else if (!WINDOW_LEFTMOST_P (w) 21007 else if (!WINDOW_LEFTMOST_P (w)
21009 && !WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)) 21008 && !WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
@@ -21013,7 +21012,7 @@ x_draw_vertical_border (w)
21013 window_box_edges (w, -1, &x0, &y0, &x1, &y1); 21012 window_box_edges (w, -1, &x0, &y0, &x1, &y1);
21014 y1 -= 1; 21013 y1 -= 1;
21015 21014
21016 rif->draw_vertical_window_border (w, x0, y0, y1); 21015 FRAME_RIF (f)->draw_vertical_window_border (w, x0, y0, y1);
21017 } 21016 }
21018} 21017}
21019 21018
@@ -21197,9 +21196,6 @@ expose_frame (f, x, y, w, h)
21197 21196
21198 TRACE ((stderr, "expose_frame ")); 21197 TRACE ((stderr, "expose_frame "));
21199 21198
21200 /* XXX rif hack: Make sure redisplay interface is updated. */
21201 rif = f->display_method->rif;
21202
21203 /* No need to redraw if frame will be redrawn soon. */ 21199 /* No need to redraw if frame will be redrawn soon. */
21204 if (FRAME_GARBAGED_P (f)) 21200 if (FRAME_GARBAGED_P (f))
21205 { 21201 {
diff --git a/src/xfns.c b/src/xfns.c
index 3306173580c..bfb4140f8d1 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3191,9 +3191,6 @@ This function is an internal primitive--use `make-frame' instead. */)
3191 3191
3192 check_x (); 3192 check_x ();
3193 3193
3194 /* XXX rif hack:Make sure rif is set to the right value. */
3195 rif = x_display_method.rif;
3196
3197 /* Use this general default value to start with 3194 /* Use this general default value to start with
3198 until we know if this frame has a specified name. */ 3195 until we know if this frame has a specified name. */
3199 Vx_resource_name = Vinvocation_name; 3196 Vx_resource_name = Vinvocation_name;
diff --git a/src/xterm.c b/src/xterm.c
index 01b500f1915..b850139de4c 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3062,9 +3062,6 @@ static void
3062frame_highlight (f) 3062frame_highlight (f)
3063 struct frame *f; 3063 struct frame *f;
3064{ 3064{
3065 /* XXX hack: make sure rif is right. */
3066 rif = f->display_method->rif;
3067
3068 /* We used to only do this if Vx_no_window_manager was non-nil, but 3065 /* We used to only do this if Vx_no_window_manager was non-nil, but
3069 the ICCCM (section 4.1.6) says that the window's border pixmap 3066 the ICCCM (section 4.1.6) says that the window's border pixmap
3070 and border pixel are window attributes which are "private to the 3067 and border pixel are window attributes which are "private to the
@@ -3080,9 +3077,6 @@ static void
3080frame_unhighlight (f) 3077frame_unhighlight (f)
3081 struct frame *f; 3078 struct frame *f;
3082{ 3079{
3083 /* XXX hack: make sure rif is right. */
3084 rif = f->display_method->rif;
3085
3086 /* We used to only do this if Vx_no_window_manager was non-nil, but 3080 /* We used to only do this if Vx_no_window_manager was non-nil, but
3087 the ICCCM (section 4.1.6) says that the window's border pixmap 3081 the ICCCM (section 4.1.6) says that the window's border pixmap
3088 and border pixel are window attributes which are "private to the 3082 and border pixel are window attributes which are "private to the