comparison src/redisplay.c @ 269:b2472a1930f2 r20-5b33

Import from CVS: tag r20-5b33
author cvs
date Mon, 13 Aug 2007 10:27:19 +0200
parents 966663fcf606
children c5d627a313b1
comparison
equal deleted inserted replaced
268:6ced69ccd85f 269:b2472a1930f2
417 int faces_changed; 417 int faces_changed;
418 418
419 /* Nonzero means some frames have been marked as garbaged */ 419 /* Nonzero means some frames have been marked as garbaged */
420 int frame_changed; 420 int frame_changed;
421 421
422 /* non-zero if any of the builtin display glyphs (continuation,
423 hscroll, control-arrow, etc) is in need of updating
424 somewhere. */
425 int glyphs_changed;
426 int glyphs_changed_set;
427
422 /* This variable is 1 if the icon has to be updated. 428 /* This variable is 1 if the icon has to be updated.
423 It is set to 1 when `frame-icon-glyph' changes. */ 429 It is set to 1 when `frame-icon-glyph' changes. */
424 int icon_changed; 430 int icon_changed;
425 int icon_changed_set; 431 int icon_changed_set;
426 432
427 /* This variable is 1 if the menubar widget has to be updated. 433 /* This variable is 1 if the menubar widget has to be updated.
428 It is set to 1 by set-menubar-dirty-flag and cleared when the widget 434 It is set to 1 by set-menubar-dirty-flag and cleared when the widget
429 has been indapted. */ 435 has been updated. */
430 /* indapted???? */
431 int menubar_changed; 436 int menubar_changed;
432 int menubar_changed_set; 437 int menubar_changed_set;
433 438
434 /* true iff we should redraw the modelines on the next redisplay */ 439 /* true iff we should redraw the modelines on the next redisplay */
435 int modeline_changed; 440 int modeline_changed;
5588 else 5593 else
5589 mark_face_cachels_as_not_updated (w); 5594 mark_face_cachels_as_not_updated (w);
5590 5595
5591 /* Ditto the glyph cache elements. */ 5596 /* Ditto the glyph cache elements. */
5592 if ((!echo_active && b != window_display_buffer (w)) 5597 if ((!echo_active && b != window_display_buffer (w))
5593 || !Dynarr_length (w->glyph_cachels)) 5598 || !Dynarr_length (w->glyph_cachels)
5599 || f->glyphs_changed)
5594 reset_glyph_cachels (w); 5600 reset_glyph_cachels (w);
5595 else 5601 else
5596 mark_glyph_cachels_as_not_updated (w); 5602 mark_glyph_cachels_as_not_updated (w);
5597 5603
5598 /* If the marker's buffer is not the window's buffer, then we need 5604 /* If the marker's buffer is not the window's buffer, then we need
5666 && selected_globally 5672 && selected_globally
5667 && !w->windows_changed 5673 && !w->windows_changed
5668 && !f->clip_changed 5674 && !f->clip_changed
5669 && !f->extents_changed 5675 && !f->extents_changed
5670 && !f->faces_changed 5676 && !f->faces_changed
5677 && !f->glyphs_changed
5671 && !f->point_changed 5678 && !f->point_changed
5672 && !f->windows_structure_changed) 5679 && !f->windows_structure_changed)
5673 { 5680 {
5674 /* If not, we're done. */ 5681 /* If not, we're done. */
5675 if (f->modeline_changed) 5682 if (f->modeline_changed)
5685 do things the hard way. */ 5692 do things the hard way. */
5686 if (!w->windows_changed 5693 if (!w->windows_changed
5687 && !f->clip_changed 5694 && !f->clip_changed
5688 && !f->extents_changed 5695 && !f->extents_changed
5689 && !f->faces_changed 5696 && !f->faces_changed
5697 && !f->glyphs_changed
5690 && !f->windows_structure_changed) 5698 && !f->windows_structure_changed)
5691 { 5699 {
5692 if (point_visible (w, pointm, CURRENT_DISP) 5700 if (point_visible (w, pointm, CURRENT_DISP)
5693 && w->last_point_x[CURRENT_DISP] != -1 5701 && w->last_point_x[CURRENT_DISP] != -1
5694 && w->last_point_y[CURRENT_DISP] != -1) 5702 && w->last_point_y[CURRENT_DISP] != -1)
5741 /* See if we can update the data structures locally based on 5749 /* See if we can update the data structures locally based on
5742 knowledge of what changed in the buffer. */ 5750 knowledge of what changed in the buffer. */
5743 else if (!w->windows_changed 5751 else if (!w->windows_changed
5744 && !f->clip_changed 5752 && !f->clip_changed
5745 && !f->faces_changed 5753 && !f->faces_changed
5754 && !f->glyphs_changed
5746 && !f->windows_structure_changed 5755 && !f->windows_structure_changed
5747 && !f->frame_changed 5756 && !f->frame_changed
5748 && !truncation_changed 5757 && !truncation_changed
5749 && pointm >= startp 5758 && pointm >= startp
5750 && regenerate_window_incrementally (w, startp, pointm)) 5759 && regenerate_window_incrementally (w, startp, pointm))
6004 f->buffers_changed = 0; 6013 f->buffers_changed = 0;
6005 f->clip_changed = 0; 6014 f->clip_changed = 0;
6006 f->extents_changed = 0; 6015 f->extents_changed = 0;
6007 f->faces_changed = 0; 6016 f->faces_changed = 0;
6008 f->frame_changed = 0; 6017 f->frame_changed = 0;
6018 f->glyphs_changed = 0;
6009 f->icon_changed = 0; 6019 f->icon_changed = 0;
6010 f->menubar_changed = 0; 6020 f->menubar_changed = 0;
6011 f->modeline_changed = 0; 6021 f->modeline_changed = 0;
6012 f->point_changed = 0; 6022 f->point_changed = 0;
6013 f->toolbar_changed = 0; 6023 f->toolbar_changed = 0;
6067 { 6077 {
6068 if (f->buffers_changed || f->clip_changed || f->extents_changed || 6078 if (f->buffers_changed || f->clip_changed || f->extents_changed ||
6069 f->faces_changed || f->frame_changed || f->menubar_changed || 6079 f->faces_changed || f->frame_changed || f->menubar_changed ||
6070 f->modeline_changed || f->point_changed || f->size_changed || 6080 f->modeline_changed || f->point_changed || f->size_changed ||
6071 f->toolbar_changed || f->windows_changed || 6081 f->toolbar_changed || f->windows_changed ||
6072 f->windows_structure_changed) 6082 f->windows_structure_changed ||
6083 f->glyphs_changed)
6073 { 6084 {
6074 preempted = redisplay_frame (f, 0); 6085 preempted = redisplay_frame (f, 0);
6075 } 6086 }
6076 6087
6077 if (preempted) 6088 if (preempted)
6101 { 6112 {
6102 if (f->buffers_changed || f->clip_changed || f->extents_changed || 6113 if (f->buffers_changed || f->clip_changed || f->extents_changed ||
6103 f->faces_changed || f->frame_changed || f->menubar_changed || 6114 f->faces_changed || f->frame_changed || f->menubar_changed ||
6104 f->modeline_changed || f->point_changed || f->size_changed || 6115 f->modeline_changed || f->point_changed || f->size_changed ||
6105 f->toolbar_changed || f->windows_changed || 6116 f->toolbar_changed || f->windows_changed ||
6106 f->windows_structure_changed) 6117 f->windows_structure_changed ||
6118 f->glyphs_changed)
6107 { 6119 {
6108 preempted = redisplay_frame (f, 0); 6120 preempted = redisplay_frame (f, 0);
6109 } 6121 }
6110 6122
6111 if (preempted) 6123 if (preempted)
6121 d->buffers_changed = 0; 6133 d->buffers_changed = 0;
6122 d->clip_changed = 0; 6134 d->clip_changed = 0;
6123 d->extents_changed = 0; 6135 d->extents_changed = 0;
6124 d->faces_changed = 0; 6136 d->faces_changed = 0;
6125 d->frame_changed = 0; 6137 d->frame_changed = 0;
6138 d->glyphs_changed = 0;
6126 d->icon_changed = 0; 6139 d->icon_changed = 0;
6127 d->menubar_changed = 0; 6140 d->menubar_changed = 0;
6128 d->modeline_changed = 0; 6141 d->modeline_changed = 0;
6129 d->point_changed = 0; 6142 d->point_changed = 0;
6130 d->toolbar_changed = 0; 6143 d->toolbar_changed = 0;
6166 6179
6167 if (!buffers_changed && !clip_changed && !extents_changed && 6180 if (!buffers_changed && !clip_changed && !extents_changed &&
6168 !faces_changed && !frame_changed && !icon_changed && 6181 !faces_changed && !frame_changed && !icon_changed &&
6169 !menubar_changed && !modeline_changed && !point_changed && 6182 !menubar_changed && !modeline_changed && !point_changed &&
6170 !size_changed && !toolbar_changed && !windows_changed && 6183 !size_changed && !toolbar_changed && !windows_changed &&
6184 !glyphs_changed &&
6171 !windows_structure_changed && !disable_preemption && 6185 !windows_structure_changed && !disable_preemption &&
6172 preemption_count < max_preempts) 6186 preemption_count < max_preempts)
6173 goto done; 6187 goto done;
6174 6188
6175 DEVICE_LOOP_NO_BREAK (devcons, concons) 6189 DEVICE_LOOP_NO_BREAK (devcons, concons)
6179 6193
6180 if (d->buffers_changed || d->clip_changed || d->extents_changed || 6194 if (d->buffers_changed || d->clip_changed || d->extents_changed ||
6181 d->faces_changed || d->frame_changed || d->icon_changed || 6195 d->faces_changed || d->frame_changed || d->icon_changed ||
6182 d->menubar_changed || d->modeline_changed || d->point_changed || 6196 d->menubar_changed || d->modeline_changed || d->point_changed ||
6183 d->size_changed || d->toolbar_changed || d->windows_changed || 6197 d->size_changed || d->toolbar_changed || d->windows_changed ||
6184 d->windows_structure_changed) 6198 d->windows_structure_changed ||
6199 d->glyphs_changed)
6185 { 6200 {
6186 preempted = redisplay_device (d); 6201 preempted = redisplay_device (d);
6187 6202
6188 if (preempted) 6203 if (preempted)
6189 { 6204 {
6202 /* Mark redisplay as accurate */ 6217 /* Mark redisplay as accurate */
6203 buffers_changed = 0; 6218 buffers_changed = 0;
6204 clip_changed = 0; 6219 clip_changed = 0;
6205 extents_changed = 0; 6220 extents_changed = 0;
6206 frame_changed = 0; 6221 frame_changed = 0;
6222 glyphs_changed = 0;
6207 icon_changed = 0; 6223 icon_changed = 0;
6208 menubar_changed = 0; 6224 menubar_changed = 0;
6209 modeline_changed = 0; 6225 modeline_changed = 0;
6210 point_changed = 0; 6226 point_changed = 0;
6211 toolbar_changed = 0; 6227 toolbar_changed = 0;
8578 8594
8579 void 8595 void
8580 redisplay_glyph_changed (Lisp_Object glyph, Lisp_Object property, 8596 redisplay_glyph_changed (Lisp_Object glyph, Lisp_Object property,
8581 Lisp_Object locale) 8597 Lisp_Object locale)
8582 { 8598 {
8583 MARK_CLIP_CHANGED; 8599 if (WINDOWP (locale))
8600 {
8601 struct frame *f = XFRAME (WINDOW_FRAME (XWINDOW (locale)));
8602 MARK_FRAME_GLYPHS_CHANGED (f);
8603 }
8604 else if (FRAMEP (locale))
8605 {
8606 struct frame *f = XFRAME (locale);
8607 MARK_FRAME_GLYPHS_CHANGED (f);
8608 }
8609 else if (DEVICEP (locale))
8610 {
8611 Lisp_Object frmcons;
8612 DEVICE_FRAME_LOOP (frmcons, XDEVICE (locale))
8613 {
8614 struct frame *f = XFRAME (XCAR (frmcons));
8615 MARK_FRAME_GLYPHS_CHANGED (f);
8616 }
8617 }
8618 else if (CONSOLEP (locale))
8619 {
8620 Lisp_Object frmcons, devcons;
8621 CONSOLE_FRAME_LOOP_NO_BREAK (frmcons, devcons, XCONSOLE (locale))
8622 {
8623 struct frame *f = XFRAME (XCAR (frmcons));
8624 MARK_FRAME_GLYPHS_CHANGED (f);
8625 }
8626 }
8627 else /* global or buffer */
8628 {
8629 Lisp_Object frmcons, devcons, concons;
8630 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
8631 {
8632 struct frame *f = XFRAME (XCAR (frmcons));
8633 MARK_FRAME_GLYPHS_CHANGED (f);
8634 }
8635 }
8584 } 8636 }
8585 8637
8586 static void 8638 static void
8587 text_cursor_visible_p_changed (Lisp_Object specifier, struct window *w, 8639 text_cursor_visible_p_changed (Lisp_Object specifier, struct window *w,
8588 Lisp_Object oldval) 8640 Lisp_Object oldval)