From fa971ac34de80905a91d2af15dd8712329dad273 Mon Sep 17 00:00:00 2001 From: Karoly Lorentey Date: Fri, 2 Jan 2004 04:22:23 +0000 Subject: [PATCH] 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 --- README.multi-tty | 12 +++++-- src/Makefile.in | 4 +-- src/dispextern.h | 24 ++++++------- src/dispnew.c | 49 +++++++++++++------------ src/fontset.c | 3 +- src/frame.c | 8 ++--- src/keyboard.c | 8 +++-- src/minibuf.c | 9 +++-- src/term.c | 2 -- src/termhooks.h | 2 ++ src/xdisp.c | 106 ++++++++++++++++++++++++++----------------------------- src/xfns.c | 3 -- src/xterm.c | 6 ---- 13 files changed, 119 insertions(+), 117 deletions(-) diff --git a/README.multi-tty b/README.multi-tty index 535ed4b3f7f..f395d3acbdc 100644 --- a/README.multi-tty +++ b/README.multi-tty @@ -127,9 +127,8 @@ See arch logs. THINGS TO DO ------------ -** Fix rif issue with X-tty combo sessions. IMHO the best thing to do - is to get rid of that global variable (and use the value value in - display_method, which is guaranteed to be correct). +** Something with (maybe) multi-keyboard support broke function keys + and arrows on ttys during X+tty combo sessions. Debug this. ** Fix faces on tty frames during X-tty combo sessions. @@ -430,4 +429,11 @@ DIARY OF CHANGES added a kboard member to tty_display_info, and initialized the frame's kboard from there.) +-- Fix rif issue with X-tty combo sessions. IMHO the best thing to do + is to get rid of that global variable (and use the value value in + display_method, which is guaranteed to be correct). + + (Done, did exactly that. Core dumps during combo sessions became + much rarer. In fact, I have not yet met a single one.) + ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d 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 \ blockinput.h systty.h atimer.h systime.h buffer.h charset.h fontset.h \ msdos.h dosfns.h dispextern.h $(config_h) fontset.o: dispextern.h fontset.h fontset.c ccl.h buffer.h charset.h frame.h \ - keyboard.h $(config_h) + keyboard.h termhooks.h $(config_h) getloadavg.o: getloadavg.c $(config_h) indent.o: indent.c frame.h window.h systty.h indent.h buffer.h $(config_h) termchar.h \ 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) marker.o: marker.c buffer.h charset.h $(config_h) md5.o: md5.c md5.h $(config_h) minibuf.o: minibuf.c syntax.h dispextern.h frame.h window.h keyboard.h \ - buffer.h commands.h charset.h msdos.h $(config_h) + buffer.h commands.h charset.h msdos.h termhooks.h $(config_h) mktime.o: mktime.c $(config_h) msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \ 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 /* Call produce_glyphs or produce_glyphs_hook, if set. Shortcut to avoid the function call overhead. */ -#define PRODUCE_GLYPHS(IT) \ - do { \ - extern int inhibit_free_realized_faces; \ - if (rif != NULL) \ - rif->produce_glyphs ((IT)); \ - else \ - produce_glyphs ((IT)); \ - if ((IT)->glyph_row != NULL) \ - inhibit_free_realized_faces = 1; \ - } while (0) +#define PRODUCE_GLYPHS(IT) \ + do { \ + extern int inhibit_free_realized_faces; \ + if (FRAME_RIF ((IT)->f) != NULL) \ + FRAME_RIF ((IT)->f)->produce_glyphs ((IT)); \ + else \ + produce_glyphs ((IT)); \ + if ((IT)->glyph_row != NULL) \ + inhibit_free_realized_faces = 1; \ + } while (0) /* Bit-flags indicating what operation move_it_to should perform. */ @@ -2189,10 +2189,6 @@ struct redisplay_interface #endif /* HAVE_WINDOW_SYSTEM */ }; -/* The current interface for window-based redisplay. */ - -extern struct redisplay_interface *rif; - /*********************************************************************** 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; static struct frame *frame_matrix_frame; -/* Current interface for window-based redisplay. Set from - update_begin. A null value means we are not using window-based - redisplay. */ -/* XXX this variable causes frequent coredumps */ - -struct redisplay_interface *rif; - /* Non-zero means that fonts have been loaded since the last glyph matrix adjustments. Redisplay must stop, and glyph matrices must be adjusted when this flag becomes non-zero during display. The @@ -3610,17 +3603,17 @@ direct_output_for_insert (g) updated_row = glyph_row; updated_area = TEXT_AREA; update_begin (f); - if (rif) + if (FRAME_RIF (f)) { - rif->update_window_begin_hook (w); + FRAME_RIF (f)->update_window_begin_hook (w); if (glyphs == end - n /* In front of a space added by append_space. */ || (glyphs == end - n - 1 && (end - n)->charpos <= 0)) - rif->write_glyphs (glyphs, n); + FRAME_RIF (f)->write_glyphs (glyphs, n); else - rif->insert_glyphs (glyphs, n); + FRAME_RIF (f)->insert_glyphs (glyphs, n); } else { @@ -3640,8 +3633,8 @@ direct_output_for_insert (g) a frame matrix is used, cursor_to expects frame coordinates, and the X and Y parameters are not used. */ if (window_redisplay_p) - rif->cursor_to (w->cursor.vpos, w->cursor.hpos, - w->cursor.y, w->cursor.x); + FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos, + w->cursor.y, w->cursor.x); else { int x, y; @@ -3653,8 +3646,8 @@ direct_output_for_insert (g) cursor_to (y, x); } - if (rif) - rif->update_window_end_hook (w, 1, 0); + if (FRAME_RIF (f)) + FRAME_RIF (f)->update_window_end_hook (w, 1, 0); update_end (f); updated_row = NULL; if (FRAME_TERMCAP_P (f)) @@ -3736,8 +3729,8 @@ direct_output_forward_char (n) && w->cursor.hpos < w->desired_matrix->matrix_w); if (FRAME_WINDOW_P (f)) - rif->cursor_to (w->cursor.vpos, w->cursor.hpos, - w->cursor.y, w->cursor.x); + FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos, + w->cursor.y, w->cursor.x); else { int x, y; @@ -3824,7 +3817,7 @@ update_frame (f, force_p, inhibit_hairy_id_p) #if 0 /* This flush is a performance bottleneck under X, and it doesn't seem to be necessary anyway. */ - rif->flush_display (f); + FRAME_RIF (f)->flush_display (f); #endif } else @@ -3926,7 +3919,8 @@ redraw_overlapped_rows (w, yb) int yb; { int i; - + struct frame *f = XFRAME (WINDOW_FRAME (w)); + /* If rows overlapping others have been changed, the rows being overlapped have to be redrawn. This won't draw lines that have already been drawn in update_window_line because overlapped_p in @@ -3949,10 +3943,12 @@ redraw_overlapped_rows (w, yb) { updated_row = row; updated_area = area; - rif->cursor_to (i, 0, row->y, area == TEXT_AREA ? row->x : 0); + FRAME_RIF (f)->cursor_to (i, 0, row->y, + area == TEXT_AREA ? row->x : 0); if (row->used[area]) - rif->write_glyphs (row->glyphs[area], row->used[area]); - rif->clear_end_of_line (-1); + FRAME_RIF (f)->write_glyphs (row->glyphs[area], + row->used[area]); + FRAME_RIF (f)->clear_end_of_line (-1); } row->overlapped_p = 0; @@ -3974,7 +3970,8 @@ redraw_overlapping_rows (w, yb) { int i, bottom_y; struct glyph_row *row; - + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); + for (i = 0; i < w->current_matrix->nrows; ++i) { row = w->current_matrix->rows + i; @@ -4054,6 +4051,7 @@ update_window (w, force_p) #if GLYPH_DEBUG struct frame *f = XFRAME (WINDOW_FRAME (w)); #endif + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); /* Check that W's frame doesn't have glyph matrices. */ xassert (FRAME_WINDOW_P (f)); @@ -4221,6 +4219,7 @@ update_marginal_area (w, area, vpos) int area, vpos; { struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); /* Let functions in xterm.c know what area subsequent X positions will be relative to. */ @@ -4246,6 +4245,7 @@ update_text_area (w, vpos) { struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos); struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); int changed_p = 0; /* Let functions in xterm.c know what area subsequent X positions @@ -4467,6 +4467,7 @@ update_window_line (w, vpos, mouse_face_overwritten_p) { struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos); struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos); + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); int changed_p = 0; /* Set the row being updated. This is important to let xterm.c @@ -4537,6 +4538,7 @@ set_window_cursor_after_update (w) struct window *w; { struct frame *f = XFRAME (w->frame); + struct redisplay_interface *rif = FRAME_RIF (f); int cx, cy, vpos, hpos; /* Not intended for frame matrix updates. */ @@ -4760,6 +4762,7 @@ scrolling_window (w, header_line_p) int i, j, first_old, first_new, last_old, last_new; int nruns, nbytes, n, run_idx; struct row_entry *entry; + struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w))); /* Skip over rows equal at the start. */ 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. */ #ifdef MAC_OS #include "macterm.h" #endif +#include "termhooks.h" #ifdef FONTSET_DEBUG #undef xassert @@ -1279,7 +1280,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, STORE_XCHAR2B (&char2b, c1, c2); else STORE_XCHAR2B (&char2b, 0, c1); - rif->encode_char (c, &char2b, fontp, NULL); + FRAME_RIF (f)->encode_char (c, &char2b, fontp, NULL); code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b); } 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) if (NATNUMP (param_index) && (XFASTINT (param_index) < sizeof (frame_parms)/sizeof (frame_parms[0])) - && rif->frame_parm_handlers[XINT (param_index)]) - (*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); + && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)]) + (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); } } } @@ -2851,8 +2851,8 @@ x_set_frame_parameters (f, alist) if (NATNUMP (param_index) && (XFASTINT (param_index) < sizeof (frame_parms)/sizeof (frame_parms[0])) - && rif->frame_parm_handlers[XINT (param_index)]) - (*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); + && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)]) + (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value); } } 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) from an idle timer function. The symptom of the bug is that the cursor sometimes doesn't become visible until the next X event is processed. --gerd. */ - if (rif) - rif->flush_display (NULL); + { + Lisp_Object tail, frame; + FOR_EACH_FRAME (tail, frame) + if (FRAME_RIF (XFRAME (frame))) + FRAME_RIF (XFRAME (frame))->flush_display (XFRAME (frame)); + } } 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. */ #include "syntax.h" #include "intervals.h" #include "keymap.h" +#include "termhooks.h" extern int quit_char; @@ -692,8 +693,12 @@ read_minibuf (map, initial, prompt, backup_n, expflag, XWINDOW (minibuf_window)->cursor.x = 0; XWINDOW (minibuf_window)->must_be_updated_p = 1; update_frame (XFRAME (selected_frame), 1, 1); - if (rif && rif->flush_display) - rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame)); + { + struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame); + struct redisplay_interface *rif = FRAME_RIF (f); + if (rif && rif->flush_display) + rif->flush_display (f); + } } /* 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) struct frame *f; { updating_frame = f; - /* XXX rif hack */ - rif = f->display_method->rif; if (!FRAME_TERMCAP_P (f)) update_begin_hook (f); } 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 #define FRAME_SCROLL_REGION_COST(f) ((f)->display_method->scroll_region_cost) #define FRAME_MEMORY_BELOW_FRAME(f) ((f)->display_method->memory_below_frame) +#define FRAME_RIF(f) ((f)->display_method->rif) + /* Text display hooks. */ extern 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) it->w = w; it->f = XFRAME (w->frame); - /* XXX rif hack: Make sure the redisplay interface is correctly set. */ - rif = it->f->display_method->rif; - /* Extra space between lines (on window systems only). */ if (base_face_id == DEFAULT_FACE_ID && FRAME_WINDOW_P (it->f)) @@ -7674,7 +7671,7 @@ echo_area_display (update_frame_p) Can do with a display update of the echo area, unless we displayed some mode lines. */ update_single_window (w, 1); - rif->flush_display (f); + FRAME_RIF (f)->flush_display (f); } else update_frame (f, 1, 1); @@ -8135,8 +8132,8 @@ x_cursor_to (vpos, hpos, y, x) { BLOCK_INPUT; display_and_set_cursor (w, 1, hpos, vpos, x, y); - if (rif->flush_display_optional) - rif->flush_display_optional (SELECTED_FRAME ()); + if (FRAME_RIF (SELECTED_FRAME ())->flush_display_optional) + FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (SELECTED_FRAME ()); UNBLOCK_INPUT; } } @@ -9029,7 +9026,7 @@ draw_fringe_bitmap (w, row, which, left_p) /* Adjust y to the offset in the row to start drawing the bitmap. */ p.y += (row->height - p.h) / 2; - rif->draw_fringe_bitmap (w, row, &p); + FRAME_RIF (f)->draw_fringe_bitmap (w, row, &p); } /* Draw fringe bitmaps for glyph row ROW on window W. Call this @@ -12303,10 +12300,10 @@ try_window_reusing_current_matrix (w) if (run.height > 0 && run.current_y != run.desired_y) { update_begin (f); - rif->update_window_begin_hook (w); - rif->clear_window_mouse_face (w); - rif->scroll_run_hook (w, &run); - rif->update_window_end_hook (w, 0, 0); + FRAME_RIF (f)->update_window_begin_hook (w); + FRAME_RIF (f)->clear_window_mouse_face (w); + FRAME_RIF (f)->scroll_run_hook (w, &run); + FRAME_RIF (f)->update_window_end_hook (w, 0, 0); update_end (f); } @@ -12476,10 +12473,10 @@ try_window_reusing_current_matrix (w) { struct frame *f = XFRAME (WINDOW_FRAME (w)); update_begin (f); - rif->update_window_begin_hook (w); - rif->clear_window_mouse_face (w); - rif->scroll_run_hook (w, &run); - rif->update_window_end_hook (w, 0, 0); + FRAME_RIF (f)->update_window_begin_hook (w); + FRAME_RIF (f)->clear_window_mouse_face (w); + FRAME_RIF (f)->scroll_run_hook (w, &run); + FRAME_RIF (f)->update_window_end_hook (w, 0, 0); update_end (f); } @@ -13310,10 +13307,10 @@ try_window_id (w) if (FRAME_WINDOW_P (f)) { - rif->update_window_begin_hook (w); - rif->clear_window_mouse_face (w); - rif->scroll_run_hook (w, &run); - rif->update_window_end_hook (w, 0, 0); + FRAME_RIF (f)->update_window_begin_hook (w); + FRAME_RIF (f)->clear_window_mouse_face (w); + FRAME_RIF (f)->scroll_run_hook (w, &run); + FRAME_RIF (f)->update_window_end_hook (w, 0, 0); } else { @@ -16818,7 +16815,7 @@ get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p) = FONT_INFO_FROM_ID (f, face->font_info_id); if (font_info) glyph->font_type - = rif->encode_char (glyph->u.ch, char2b, font_info, two_byte_p); + = FRAME_RIF (f)->encode_char (glyph->u.ch, char2b, font_info, two_byte_p); } } @@ -17048,7 +17045,7 @@ x_get_glyph_overhangs (glyph, f, left, right) font = face->font; font_info = FONT_INFO_FROM_ID (f, face->font_info_id); if (font /* ++KFS: Should this be font_info ? */ - && (pcm = rif->per_char_metric (font, &char2b, glyph->font_type))) + && (pcm = FRAME_RIF (f)->per_char_metric (font, &char2b, glyph->font_type))) { if (pcm->rbearing > pcm->width) *right = pcm->rbearing - pcm->width; @@ -17216,7 +17213,7 @@ get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p, display_p) struct font_info *font_info = FONT_INFO_FROM_ID (f, face->font_info_id); if (font_info) - rif->encode_char (c, char2b, font_info, 0); + FRAME_RIF (f)->encode_char (c, char2b, font_info, 0); } } @@ -17283,8 +17280,8 @@ compute_overhangs_and_x (s, x, backward_p) { while (s) { - if (rif->compute_glyph_string_overhangs) - rif->compute_glyph_string_overhangs (s); + if (FRAME_RIF (s->f)->compute_glyph_string_overhangs) + FRAME_RIF (s->f)->compute_glyph_string_overhangs (s); x -= s->width; s->x = x; s = s->prev; @@ -17294,8 +17291,8 @@ compute_overhangs_and_x (s, x, backward_p) { while (s) { - if (rif->compute_glyph_string_overhangs) - rif->compute_glyph_string_overhangs (s); + if (FRAME_RIF (s->f)->compute_glyph_string_overhangs) + FRAME_RIF (s->f)->compute_glyph_string_overhangs (s); s->x = x; x += s->width; s = s->next; @@ -17576,9 +17573,9 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p) struct glyph_string *h, *t; /* Compute overhangs for all glyph strings. */ - if (rif->compute_glyph_string_overhangs) + if (FRAME_RIF (f)->compute_glyph_string_overhangs) for (s = head; s; s = s->next) - rif->compute_glyph_string_overhangs (s); + FRAME_RIF (f)->compute_glyph_string_overhangs (s); /* Prepend glyph strings for glyphs in front of the first glyph string that are overwritten because of the first glyph @@ -17646,7 +17643,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p) /* Draw all strings. */ for (s = head; s; s = s->next) - rif->draw_glyph_string (s); + FRAME_RIF (f)->draw_glyph_string (s); if (area == TEXT_AREA && !row->full_width_p @@ -18334,8 +18331,8 @@ x_produce_glyphs (it) it->nglyphs = 1; - pcm = rif->per_char_metric (font, &char2b, - FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display)); + pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b, + FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display)); it->ascent = FONT_BASE (font) + boff; it->descent = FONT_DESCENT (font) - boff; @@ -18459,8 +18456,8 @@ x_produce_glyphs (it) from the charset width; this is what old redisplay code did. */ - pcm = rif->per_char_metric (font, &char2b, - FONT_TYPE_FOR_MULTIBYTE (font, it->c)); + pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b, + FONT_TYPE_FOR_MULTIBYTE (font, it->c)); if (font_not_found_p || !pcm) { @@ -18591,8 +18588,8 @@ x_produce_glyphs (it) /* Initialize the bounding box. */ if (font_info - && (pcm = rif->per_char_metric (font, &char2b, - FONT_TYPE_FOR_MULTIBYTE (font, it->c)))) + && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b, + FONT_TYPE_FOR_MULTIBYTE (font, it->c)))) { width = pcm->width; ascent = pcm->ascent; @@ -18650,8 +18647,8 @@ x_produce_glyphs (it) } if (font_info - && (pcm = rif->per_char_metric (font, &char2b, - FONT_TYPE_FOR_MULTIBYTE (font, ch)))) + && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b, + FONT_TYPE_FOR_MULTIBYTE (font, ch)))) { width = pcm->width; ascent = pcm->ascent; @@ -18886,8 +18883,8 @@ x_insert_glyphs (start, len) frame_x = window_box_left (w, updated_area) + output_cursor.x; frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y); - rif->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width, - line_height, shift_by_width); + FRAME_RIF (f)->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width, + line_height, shift_by_width); /* Write the glyphs. */ hpos = start - row->glyphs[updated_area]; @@ -18969,8 +18966,8 @@ x_clear_end_of_line (to_x) if (to_x > from_x && to_y > from_y) { BLOCK_INPUT; - rif->clear_frame_area (f, from_x, from_y, - to_x - from_x, to_y - from_y); + FRAME_RIF (f)->clear_frame_area (f, from_x, from_y, + to_x - from_x, to_y - from_y); UNBLOCK_INPUT; } } @@ -19407,8 +19404,8 @@ erase_phys_cursor (w) x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); y = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, cursor_row->y)); - rif->clear_frame_area (f, x, y, - cursor_glyph->pixel_width, cursor_row->visible_height); + FRAME_RIF (f)->clear_frame_area (f, x, y, + cursor_glyph->pixel_width, cursor_row->visible_height); } /* Erase the cursor by redrawing the character underneath it. */ @@ -19504,9 +19501,9 @@ display_and_set_cursor (w, on, hpos, vpos, x, y) w->phys_cursor.vpos = vpos; } - rif->draw_window_cursor (w, glyph_row, x, y, - new_cursor_type, new_cursor_width, - on, active_cursor); + FRAME_RIF (f)->draw_window_cursor (w, glyph_row, x, y, + new_cursor_type, new_cursor_width, + on, active_cursor); } @@ -19651,11 +19648,11 @@ show_mouse_face (dpyinfo, draw) /* Change the mouse cursor. */ if (draw == DRAW_NORMAL_TEXT) - rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); + FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor); else if (draw == DRAW_MOUSE_FACE) - rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor); + FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor); else - rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor); + FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor); } /* EXPORT: @@ -20152,7 +20149,7 @@ define_frame_cursor1 (f, cursor, pointer) #else if (bcmp (&cursor, &No_Cursor, sizeof (Cursor))) #endif - rif->define_frame_cursor (f, cursor); + FRAME_RIF (f)->define_frame_cursor (f, cursor); } /* Take proper action when mouse has moved to the mode or header line @@ -20987,6 +20984,8 @@ void x_draw_vertical_border (w) struct window *w; { + struct frame *f = XFRAME (WINDOW_FRAME (w)); + /* We could do better, if we knew what type of scroll-bar the adjacent windows (on either side) have... But we don't :-( However, I think this works ok. ++KFS 2003-04-25 */ @@ -21003,7 +21002,7 @@ x_draw_vertical_border (w) window_box_edges (w, -1, &x0, &y0, &x1, &y1); y1 -= 1; - rif->draw_vertical_window_border (w, x1, y0, y1); + FRAME_RIF (f)->draw_vertical_window_border (w, x1, y0, y1); } else if (!WINDOW_LEFTMOST_P (w) && !WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)) @@ -21013,7 +21012,7 @@ x_draw_vertical_border (w) window_box_edges (w, -1, &x0, &y0, &x1, &y1); y1 -= 1; - rif->draw_vertical_window_border (w, x0, y0, y1); + FRAME_RIF (f)->draw_vertical_window_border (w, x0, y0, y1); } } @@ -21197,9 +21196,6 @@ expose_frame (f, x, y, w, h) TRACE ((stderr, "expose_frame ")); - /* XXX rif hack: Make sure redisplay interface is updated. */ - rif = f->display_method->rif; - /* No need to redraw if frame will be redrawn soon. */ if (FRAME_GARBAGED_P (f)) { 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. */) check_x (); - /* XXX rif hack:Make sure rif is set to the right value. */ - rif = x_display_method.rif; - /* Use this general default value to start with until we know if this frame has a specified name. */ 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 frame_highlight (f) struct frame *f; { - /* XXX hack: make sure rif is right. */ - rif = f->display_method->rif; - /* We used to only do this if Vx_no_window_manager was non-nil, but the ICCCM (section 4.1.6) says that the window's border pixmap and border pixel are window attributes which are "private to the @@ -3080,9 +3077,6 @@ static void frame_unhighlight (f) struct frame *f; { - /* XXX hack: make sure rif is right. */ - rif = f->display_method->rif; - /* We used to only do this if Vx_no_window_manager was non-nil, but the ICCCM (section 4.1.6) says that the window's border pixmap and border pixel are window attributes which are "private to the -- 2.11.4.GIT