? anim.patch ? bug.patch ? g.patch ? miscstuff.patch ? munge.awk ? Root ? tmp ? ToDo ? tst ? etc/anim.gif ? etc/ChangeLog ? lib-src/patch.exe.core ? lib-src/run.res ? lisp/.emacs_andyp ? lisp/f.patch ? lisp/fl.el ? lisp/font-lock.el.dist ? lisp/font-lock.el.new ? lisp/gserv.patch ? lisp/mule ? lisp/prim ? lisp/sel.patch ? lwlib/tsync.patch ? lwlib/xlwtabs.c.new ? man/internals/patch.exe.core ? modules/ChangeLog ? nt/Addtargetscheckandcheck-temacstoxemacsmakremovemule-c.txt ? nt/Installation ? nt/obj ? nt/puresize-adjust.h ? nt/xemacs.mak+ ? nt/xemacs95.mak ? src/.emacs_andyp ? src/dialog-msw.c.new ? src/emacs.c.mine ? src/emacs.c.new ? src/glyphs-x.c- ? src/l ? src/lay.tgz ? src/mkdc ? src/redisplay-output.c.new ? src/sw.patch ? src/symsinit.h.mine ? src/t.c ? src/TDOC ? src/temacs-lineno.plog ? src/temacs.exe.core ? src/temacs.plog ? src/tstdoc ? src/weblogic.log ? src/wid.patch ? src/xany.patch Index: lisp/gui.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/lisp/gui.el,v retrieving revision 1.5.2.1 diff -u -r1.5.2.1 gui.el --- lisp/gui.el 1999/07/16 19:05:35 1.5.2.1 +++ lisp/gui.el 1999/10/14 20:51:21 @@ -83,7 +83,7 @@ "True if OBJECT is a GUI button." (and (vectorp object) (> (length object) 0) - (eq 'gui-button (aref object 0)))) + (eq 'button (aref object 0)))) (make-face 'gui-button-face "Face used for gui buttons") (if (not (face-differs-from-default-p 'gui-button-face)) @@ -98,26 +98,16 @@ "Make a GUI button whose label is STRING and whose action is ACTION. If the button is inserted in a buffer and then clicked on, and ACTION is non-nil, ACTION will be called with one argument, USER-DATA." - (vector 'gui-button - (if (featurep 'xpm) - (xpm-button-create - string gui-button-shadow-thickness - (color-instance-name (face-foreground-instance 'gui-button-face)) - (color-instance-name (face-background-instance 'gui-button-face))) - (xbm-button-create string gui-button-shadow-thickness)) - action user-data)) + (vector 'button + :descriptor string + :width (max (length string) 8) + :face 'gui-button-face + :callback (list 'funcall action user-data))) (defun insert-gui-button (button &optional pos buffer) "Insert GUI button BUTTON at POS in BUFFER." (check-argument-type 'gui-button-p button) - (let ((annotation - (make-annotation (make-glyph (car (aref button 1))) - pos 'text buffer nil - (make-glyph (cadr (aref button 1))))) - (action (aref button 2))) - (and action - (progn - (set-annotation-action annotation action) - (set-annotation-data annotation (aref button 3)))))) + (make-annotation (make-glyph button) + pos 'text buffer nil)) ;;; gui.el ends here Index: lisp/gutter-items.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/lisp/Attic/gutter-items.el,v retrieving revision 1.1.2.18 diff -u -r1.1.2.18 gutter-items.el --- lisp/gutter-items.el 1999/09/22 16:29:31 1.1.2.18 +++ lisp/gutter-items.el 1999/10/14 20:51:23 @@ -303,39 +303,40 @@ (make-glyph (vector 'progress-gauge :pixel-height (- progress-glyph-height 8) - :pixel-width 200 + :pixel-width 250 :descriptor "Progress"))) (defvar progress-text-glyph (make-glyph [string :data ""])) -;; a limitation of the layout glyph is that the glyph is redisplayed -;; as a unit, this means that if you change the text in the glyph -;; everything else gets redisplayed, including subwindows. This has -;; the knock on effect that if it is happening very quickly then -;; subwindows will not get redisplayed until things have settled down. (defvar progress-layout-glyph (make-glyph - (vector 'layout - :orientation 'vertical - :justify 'left - :items - (list progress-text-glyph - (make-glyph - (vector - 'layout - :pixel-height progress-glyph-height - :orientation 'horizontal - :items - (list progress-gauge-glyph - (make-glyph - (vector - 'button - :pixel-height (- progress-glyph-height 8) - :descriptor " Stop " - :callback '(funcall progress-stop-callback)))))))))) + (vector + 'layout :orientation 'vertical :justify 'left + :items (list + progress-text-glyph + (make-glyph + (vector + 'layout :pixel-height progress-glyph-height + :orientation 'horizontal + :items (list + progress-gauge-glyph + (vector + 'button :pixel-height (- progress-glyph-height 8) + :descriptor " Stop " + :callback '(funcall progress-stop-callback))))))))) -(defvar progress-text-and-extent nil) +(defvar progress-abort-glyph + (make-glyph + (vector 'layout :orientation 'vertical :justify 'left + :items (list progress-text-glyph + (make-glyph + (vector 'layout + :pixel-height progress-glyph-height + :orientation 'horizontal)))))) + +(defvar progress-extent-text "") +(defvar progress-extent nil) (defun progress-displayed-p (&optional return-string frame) "Return a non-nil value if a progress gauge is presently displayed in the @@ -401,16 +402,53 @@ (set-image-instance-property (glyph-image-instance progress-gauge-glyph) :percent value) - (raw-append-progress message value frame) - (redisplay-gutter-area) - (sit-for 0.1)) - (redisplay-gutter-area)) + (raw-append-progress message value frame)) + (redisplay-gutter-area) + (when (input-pending-p) + (dispatch-event (next-command-event)))) (push (cons label message) progress-stack) (raw-append-progress message value frame)) (when (eq value 100) - (sit-for 0.5) + (sit-for 0.5 nil) (clear-progress label)))) +(defun abort-progress (label message &optional frame) + (or frame (setq frame (selected-frame))) + ;; Add a new entry to the message-stack, or modify an existing one + (let* ((top (car progress-stack)) + (inhibit-read-only t) + (zmacs-region-stays zmacs-region-stays)) + (if (eq label (car top)) + (setcdr top message) + (push (cons label message) progress-stack)) + (unless (equal message "") + (insert-string message (get-buffer-create " *Gutter Area*")) + ;; Do what the device is able to cope with. + (if (not (valid-image-instantiator-format-p 'progress-gauge frame)) + (progn + (insert-string message " *Echo Area*") + (if (not executing-kbd-macro) + (redisplay-echo-area))) + ;; do some funky display here. + (unless progress-extent + (setq progress-extent (make-extent 0 0 progress-extent-text))) + (let ((bglyph (extent-begin-glyph progress-extent))) + (set-extent-begin-glyph progress-extent progress-abort-glyph) + ;; fixup the gutter specifiers + (set-specifier bottom-gutter progress-extent-text frame) + (set-specifier bottom-gutter-border-width 2 frame) + (set-image-instance-property + (glyph-image-instance progress-text-glyph) :data message) + (set-specifier bottom-gutter-height 'autodetect frame) + (set-specifier bottom-gutter-visible-p t frame) + ;; we have to do this so redisplay is up-to-date and so + ;; redisplay-gutter-area performs optimally. + (redisplay-gutter-area) + (sit-for 0.5 nil) + (clear-progress label) + (set-extent-begin-glyph progress-extent bglyph) + ))))) + (defun raw-append-progress (message &optional value frame) (unless (equal message "") (let ((inhibit-read-only t) @@ -421,18 +459,17 @@ (if (not (valid-image-instantiator-format-p 'progress-gauge frame)) (progn (insert-string - (concat message (make-string (/ val 5) ?.) - (if (eq val 100) "done")) + (concat message (if (eq val 100) "done.") + (make-string (/ val 5) ?.)) " *Echo Area*") (if (not executing-kbd-macro) (redisplay-echo-area))) ;; do some funky display here. - (unless progress-text-and-extent - (setq progress-text-and-extent "") - (set-extent-begin-glyph (make-extent 0 0 progress-text-and-extent) - progress-layout-glyph)) + (unless progress-extent + (setq progress-extent (make-extent 0 0 progress-extent-text)) + (set-extent-begin-glyph progress-extent progress-layout-glyph)) ;; fixup the gutter specifiers - (set-specifier bottom-gutter progress-text-and-extent frame) + (set-specifier bottom-gutter progress-extent-text frame) (set-specifier bottom-gutter-border-width 2 frame) (set-image-instance-property (glyph-image-instance progress-gauge-glyph) :percent val) @@ -441,13 +478,19 @@ (if (and (eq (specifier-instance bottom-gutter-height frame) 'autodetect) (specifier-instance bottom-gutter-visible-p frame)) - ;; if the gauge is already visible then just draw the gutter - (redisplay-gutter-area) + (progn + ;; if the gauge is already visible then just draw the gutter + ;; checking for user events + (redisplay-gutter-area) + (when (input-pending-p) + (dispatch-event (next-command-event)))) ;; otherwise make the gutter visible and redraw the frame (set-specifier bottom-gutter-height 'autodetect frame) (set-specifier bottom-gutter-visible-p t frame) - (redisplay-frame)) - )))) + ;; we have to do this so redisplay is up-to-date and so + ;; redisplay-gutter-area performs optimally. + (redisplay-frame) + ))))) (defun display-progress (label message &optional value frame) "Display a progress gauge and message in the bottom gutter area. @@ -455,7 +498,9 @@ the string to display. Use `clear-progress' to remove a labelled message." (clear-progress label frame t) - (append-progress label message value frame)) + (if (eq value 'abort) + (abort-progress label message frame) + (append-progress label message value frame))) (defun current-progress (&optional frame) "Return the current progress gauge in the gutter area, or nil. Index: src/event-msw.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/event-msw.c,v retrieving revision 1.38.2.19 diff -u -r1.38.2.19 event-msw.c --- src/event-msw.c 1999/08/08 13:50:08 1.38.2.19 +++ src/event-msw.c 1999/10/14 20:51:50 @@ -144,6 +144,7 @@ /* These are Lisp integers; see DEFVARS in this file for description. */ int mswindows_dynamic_frame_resize; +int mswindows_meta_activates_menu; int mswindows_num_mouse_buttons; int mswindows_mouse_button_max_skew_x; int mswindows_mouse_button_max_skew_y; @@ -1734,7 +1735,7 @@ } /* else */ } /* F10 causes menu activation by default. We do not want this */ - if (wParam != VK_F10) + if (wParam != VK_F10 && (mswindows_meta_activates_menu || wParam != VK_MENU)) goto defproc; break; @@ -2468,7 +2469,6 @@ case VK_ESCAPE: return QKescape; case VK_SPACE: return QKspace; case VK_DELETE: return QKdelete; - /* The rest */ case VK_CLEAR: return KEYSYM ("clear"); /* Should do ^L ? */ case VK_PRIOR: return KEYSYM ("prior"); @@ -2485,6 +2485,25 @@ case VK_SNAPSHOT: return KEYSYM ("print"); case VK_INSERT: return KEYSYM ("insert"); case VK_HELP: return KEYSYM ("help"); + /* The keypad. */ + case VK_NUMPAD0: return KEYSYM ("kp-0"); + case VK_NUMPAD1: return KEYSYM ("kp-1"); + case VK_NUMPAD2: return KEYSYM ("kp-2"); + case VK_NUMPAD3: return KEYSYM ("kp-3"); + case VK_NUMPAD4: return KEYSYM ("kp-4"); + case VK_NUMPAD5: return KEYSYM ("kp-5"); + case VK_NUMPAD6: return KEYSYM ("kp-6"); + case VK_NUMPAD7: return KEYSYM ("kp-7"); + case VK_NUMPAD8: return KEYSYM ("kp-8"); + case VK_NUMPAD9: return KEYSYM ("kp-9"); + + case VK_MULTIPLY: return KEYSYM ("kp-divide"); + case VK_ADD: return KEYSYM ("kp-add"); + case VK_SEPARATOR: return KEYSYM ("kp-separator"); + case VK_DECIMAL: return KEYSYM ("kp-decimal"); + case VK_SUBTRACT: return KEYSYM ("kp-subtract"); + case VK_DIVIDE: return KEYSYM ("kp-divide"); + #if 0 /* XXX What are these supposed to do? */ case VK_LWIN return KEYSYM (""); case VK_RWIN return KEYSYM (""); @@ -2955,6 +2974,12 @@ mswindows_event_stream->delete_stream_pair_cb = emacs_mswindows_delete_stream_pair; #endif + DEFVAR_BOOL ("mswindows-meta-activates-menu", &mswindows_meta_activates_menu /* +*Controls whether pressing and releasing the Meta (Alt) key should +activate the menubar. +Default is t. +*/ ); + DEFVAR_BOOL ("mswindows-dynamic-frame-resize", &mswindows_dynamic_frame_resize /* *Controls redrawing frame contents during mouse-drag or keyboard resize operation. When non-nil, the frame is redrawn while being resized. When @@ -2999,6 +3024,7 @@ mswindows_mouse_button_max_skew_x = 0; mswindows_mouse_button_max_skew_y = 0; mswindows_mouse_button_tolerance = 0; + mswindows_meta_activates_menu = 1; } void Index: src/glyphs-eimage.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/glyphs-eimage.c,v retrieving revision 1.3.2.7 diff -u -r1.3.2.7 glyphs-eimage.c --- src/glyphs-eimage.c 1999/10/06 11:41:43 1.3.2.7 +++ src/glyphs-eimage.c 1999/10/14 20:52:41 @@ -672,10 +672,7 @@ for (slice = 0; slice < unwind.giffile->ImageCount; slice++) { - /* Note: We just use the first image in the file and ignore the rest. - We check here that that image covers the full "screen" size. - I don't know whether that's always the case. - -dkindred@cs.cmu.edu */ + /* We check here that that the current image covers the full "screen" size. */ if (unwind.giffile->SavedImages[slice].ImageDesc.Height != height || unwind.giffile->SavedImages[slice].ImageDesc.Width != width || unwind.giffile->SavedImages[slice].ImageDesc.Left != 0 @@ -707,19 +704,40 @@ row += interlace ? InterlacedJumps[pass] : 1; } } + + /* now instantiate */ + MAYBE_DEVMETH (XDEVICE (ii->device), + init_image_instance_from_eimage, + (ii, width, height, unwind.giffile->ImageCount, unwind.eimage, dest_mask, + instantiator, domain)); } - /* now instantiate */ - MAYBE_DEVMETH (XDEVICE (ii->device), - init_image_instance_from_eimage, - (ii, width, height, unwind.giffile->ImageCount, unwind.eimage, dest_mask, - instantiator, domain)); /* We read the gif successfully. If we have more than one slice then animate the gif. */ if (unwind.giffile->ImageCount > 1) { - add_glyph_animated_timeout (100, ii->device); + /* See if there is a timeout value. In theory there could be one + for every image - but that makes the implementation way to + complicated for now so we just take the first. */ + unsigned short timeout = 0; + Lisp_Object tid; + + if (unwind.giffile->SavedImages[0].Function == GRAPHICS_EXT_FUNC_CODE + && + unwind.giffile->SavedImages[0].ExtensionBlockCount) + { + timeout = (unsigned short) + ((unwind.giffile->SavedImages[0].ExtensionBlocks[0].Bytes[2] << 8) + + unwind.giffile-> SavedImages[0].ExtensionBlocks[0].Bytes[1]) * 10; + } + + /* Too short a timeout will crucify us performance-wise. */ + tid = add_glyph_animated_timeout (timeout > 10 ? timeout : 10, image_instance); + + if (!NILP (tid)) + IMAGE_INSTANCE_PIXMAP_TIMEOUT (ii) = XINT (tid); } + unbind_to (speccount, Qnil); } Index: src/glyphs-msw.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/glyphs-msw.c,v retrieving revision 1.21.2.28 diff -u -r1.21.2.28 glyphs-msw.c --- src/glyphs-msw.c 1999/10/07 16:33:32 1.21.2.28 +++ src/glyphs-msw.c 1999/10/14 20:52:50 @@ -2049,11 +2049,15 @@ else if (p->data) { int i; + if (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p)) + disable_glyph_animated_timeout (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p)); + if (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (p)) { for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++) { - DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i)); + if (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i)) + DeleteObject (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i)); IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE (p, i) = 0; } xfree (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES (p)); Index: src/glyphs-x.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/glyphs-x.c,v retrieving revision 1.49.2.35 diff -u -r1.49.2.35 glyphs-x.c --- src/glyphs-x.c 1999/10/11 13:47:30 1.49.2.35 +++ src/glyphs-x.c 1999/10/14 20:53:02 @@ -408,6 +408,9 @@ else { int i; + if (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p)) + disable_glyph_animated_timeout (IMAGE_INSTANCE_PIXMAP_TIMEOUT (p)); + if (IMAGE_INSTANCE_X_MASK (p) && IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p)) XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p)); Index: src/glyphs.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/glyphs.c,v retrieving revision 1.23.2.30 diff -u -r1.23.2.30 glyphs.c --- src/glyphs.c 1999/10/06 11:41:44 1.23.2.30 +++ src/glyphs.c 1999/10/14 20:53:17 @@ -72,6 +72,8 @@ Lisp_Object Vimage_instance_type_list; Lisp_Object Vglyph_type_list; +int disable_animated_pixmaps; + DEFINE_IMAGE_INSTANTIATOR_FORMAT (nothing); DEFINE_IMAGE_INSTANTIATOR_FORMAT (inherit); DEFINE_IMAGE_INSTANTIATOR_FORMAT (string); @@ -4264,32 +4266,6 @@ * timeouts for animated glyphs * *****************************************************************************/ static Lisp_Object Qglyph_animated_timeout_handler; -static Lisp_Object Vglyph_animated_ticker; - -static int glyph_animated_timeout_mapper (Lisp_Object key, Lisp_Object value, - void* extra_arg) -{ - if (IMAGE_INSTANCEP (value)) - { - struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (value); - if (COLOR_PIXMAP_IMAGE_INSTANCEP (value) - && - IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) > 1) - { - /* Increment the index of the image slice we are currently - viewing. */ - IMAGE_INSTANCE_PIXMAP_SLICE (ii) = - (IMAGE_INSTANCE_PIXMAP_SLICE (ii) + 1) - % IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii); - /* We might need to kick redisplay at this point - but we - also might not. */ - MARK_DEVICE_FRAMES_GLYPHS_CHANGED - (XDEVICE (IMAGE_INSTANCE_DEVICE (ii))); - IMAGE_INSTANCE_DIRTYP (ii) = 1; - } - } - return 0; -} DEFUN ("glyph-animated-timeout-handler", Fglyph_animated_timeout_handler, 1, 1, 0, /* Callback function for updating animated images. @@ -4297,41 +4273,66 @@ */ (arg)) { - struct device* d; - Lisp_Object hasht; + CHECK_WEAK_LIST (arg); - CHECK_DEVICE (arg); - d = XDEVICE (arg); - - hasht = Fgethash - ( make_int (IMAGE_NOTHING_MASK | IMAGE_TEXT_MASK - | IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK - | IMAGE_SUBWINDOW_MASK | IMAGE_WIDGET_MASK - | IMAGE_LAYOUT_MASK ), - d->image_instance_cache, Qunbound); - - if (!UNBOUNDP (hasht)) - elisp_maphash ((maphash_function_t)&glyph_animated_timeout_mapper, - hasht, 0); + if (!NILP (XWEAK_LIST_LIST (arg)) && !NILP (XCAR (XWEAK_LIST_LIST (arg)))) + { + Lisp_Object value = XCAR (XWEAK_LIST_LIST (arg)); + + if (IMAGE_INSTANCEP (value)) + { + struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (value); + + if (COLOR_PIXMAP_IMAGE_INSTANCEP (value) + && + IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) > 1 + && + !disable_animated_pixmaps) + { + /* Increment the index of the image slice we are currently + viewing. */ + IMAGE_INSTANCE_PIXMAP_SLICE (ii) = + (IMAGE_INSTANCE_PIXMAP_SLICE (ii) + 1) + % IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii); + /* We might need to kick redisplay at this point - but we + also might not. */ + MARK_DEVICE_FRAMES_GLYPHS_CHANGED + (XDEVICE (IMAGE_INSTANCE_DEVICE (ii))); + IMAGE_INSTANCE_DIRTYP (ii) = 1; + } + } + } return Qnil; } -void add_glyph_animated_timeout (EMACS_INT tickms, Lisp_Object device) +Lisp_Object add_glyph_animated_timeout (EMACS_INT tickms, Lisp_Object image) { - if (tickms > 0) + Lisp_Object ret = Qnil; + + if (tickms > 0 && IMAGE_INSTANCEP (image)) { double ms = ((double)tickms) / 1000.0; - Vglyph_animated_ticker = Fadd_timeout (make_float (ms), - Qglyph_animated_timeout_handler, - device, make_float (ms)); + struct gcpro gcpro1; + Lisp_Object holder = make_weak_list (WEAK_LIST_SIMPLE); + + GCPRO1 (holder); + XWEAK_LIST_LIST (holder) = Fcons (image, Qnil); + + ret = Fadd_timeout (make_float (ms), + Qglyph_animated_timeout_handler, + holder, make_float (ms)); + + UNGCPRO; } + return ret; } -void disable_glyph_animated_timeout () + +void disable_glyph_animated_timeout (int i) { - if (!NILP (Vglyph_animated_ticker)) - { - Fdisable_timeout (Vglyph_animated_ticker); - } + Lisp_Object id; + XSETINT (id, i); + + Fdisable_timeout (id); } @@ -4702,9 +4703,11 @@ #endif hold_ignored_expose_registration = 0; - /* For animated glyphs. */ - Vglyph_animated_ticker = Qnil; - staticpro (&Vglyph_animated_ticker); + DEFVAR_BOOL ("disable-animated-pixmaps", &disable_animated_pixmaps /* +Whether animated pixmaps should be animated. +Default is t. +*/); + disable_animated_pixmaps = 0; } void Index: src/gutter.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/Attic/gutter.c,v retrieving revision 1.1.2.14 diff -u -r1.1.2.14 gutter.c --- src/gutter.c 1999/10/06 11:41:45 1.1.2.14 +++ src/gutter.c 1999/10/14 20:53:20 @@ -262,8 +262,7 @@ dl = Dynarr_atp (ddla, Dynarr_length (ddla) - 1); ypos = dl->ypos + dl->descent - dl->clip; redisplay_clear_region (window, findex, x + border_width , ypos, - width - 2 * border_width, height - (ypos - y)); - + width - 2 * border_width, height - (ypos - y) - border_width); /* bevel the gutter area if so desired */ if (border_width != 0) { @@ -289,8 +288,10 @@ assert (pos == TOP_GUTTER || pos == BOTTOM_GUTTER); /* degenerate case */ if (NILP (WINDOW_GUTTER (w, pos)) + || + !FRAME_VISIBLE_P (f) || - !FRAME_VISIBLE_P (f)) + NILP (w->buffer)) return Qnil; ddla = Dynarr_new (display_line); @@ -334,22 +335,32 @@ void update_frame_gutters (struct frame *f) { - if (f->gutter_changed || f->frame_changed || f->clear - || f->glyphs_changed || f->windows_changed) + if (f->gutter_changed || f->clear || + f->glyphs_changed || f->subwindows_changed || + f->windows_changed || f->windows_structure_changed || + f->extents_changed || f->faces_changed) { enum gutter_pos pos; - /* and output */ + + /* We don't actually care about these when outputting the gutter + so locally disable them. */ + int local_clip_changed = f->clip_changed; + int local_buffers_changed = f->buffers_changed; + f->clip_changed = 0; + f->buffers_changed = 0; + /* and output */ GUTTER_POS_LOOP (pos) { if (FRAME_GUTTER_VISIBLE (f, pos)) - output_gutter (f, pos); + output_gutter (f, pos); else if (gutter_was_visible (f, pos)) clear_gutter (f, pos); } - + f->clip_changed = local_clip_changed; + f->buffers_changed = local_buffers_changed; + f->gutter_changed = 0; } - f->gutter_changed = 0; } void Index: src/redisplay-msw.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/redisplay-msw.c,v retrieving revision 1.28.2.9 diff -u -r1.28.2.9 redisplay-msw.c --- src/redisplay-msw.c 1999/10/06 11:41:46 1.28.2.9 +++ src/redisplay-msw.c 1999/10/14 20:54:15 @@ -304,6 +304,10 @@ Lisp_Object bg_pmap = WINDOW_FACE_CACHEL_BACKGROUND_PIXMAP (w, rb->findex); + /* Unmap all subwindows in the area we are going to blank. */ + redisplay_unmap_subwindows_maybe (f, rb->xpos, DISPLAY_LINE_YPOS (dl), + rb->width, DISPLAY_LINE_HEIGHT (dl)); + if (!IMAGE_INSTANCEP (bg_pmap) || !IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (bg_pmap))) bg_pmap = Qnil; @@ -362,6 +366,10 @@ int cursor_p = !NILP (w->text_cursor_visible_p); int real_char_p = ch != 0; + /* Unmap all subwindows in the area we are going to blank. */ + redisplay_unmap_subwindows_maybe (f, xpos, DISPLAY_LINE_YPOS (dl), + width, DISPLAY_LINE_HEIGHT (dl)); + if (real_char_p) { /* Use the font from the underlying character */ @@ -505,6 +513,10 @@ rect.top = DISPLAY_LINE_YPOS (dl); rect.right = clip_end; rect.bottom = rect.top + height; + + /* make sure the area we are about to display is subwindow free. */ + redisplay_unmap_subwindows_maybe (f, clip_start, DISPLAY_LINE_YPOS (dl), + clip_end - clip_start, DISPLAY_LINE_HEIGHT (dl)); /* output the background pixmap if there is one */ bg_pmap = cachel->background_pixmap; Index: src/redisplay-output.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/redisplay-output.c,v retrieving revision 1.11.2.18 diff -u -r1.11.2.18 redisplay-output.c --- src/redisplay-output.c 1999/10/06 11:41:46 1.11.2.18 +++ src/redisplay-output.c 1999/10/14 20:54:22 @@ -2,7 +2,7 @@ Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. Copyright (C) 1995, 1996 Ben Wing. Copyright (C) 1996 Chuck Thompson. - Copyright (C) 1999 Andy Piper.. + Copyright (C) 1999 Andy Piper. This file is part of XEmacs. @@ -54,6 +54,10 @@ static int redisplay_display_boxes_in_window_p (struct window* w, struct display_box* db, struct display_glyph_area* dga); +static void redisplay_clear_clipped_region (Lisp_Object locale, face_index findex, + struct display_box* dest, + struct display_glyph_area* glyphsrc, + int fullheight_p, Lisp_Object); /***************************************************************************** sync_rune_structs @@ -1059,9 +1063,6 @@ rb = Dynarr_atp (rba, end - 1); width = rb->xpos + rb->width - xpos; - /* make sure the area we are about to display is subwindow free. */ - redisplay_unmap_subwindows_maybe (f, xpos, DISPLAY_LINE_YPOS (dl), - width, DISPLAY_LINE_HEIGHT (dl)); /* now actually output the block. */ DEVMETH (d, output_display_block, (w, dl, block, start, end, start_pixpos, @@ -1137,7 +1138,6 @@ { struct Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance); Lisp_Object window; - struct frame* f = XFRAME (WINDOW_FRAME (w)); struct display_glyph_area sdga; dga->height = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (p); @@ -1149,25 +1149,14 @@ XSETWINDOW (window, w); - /* Clear the area the subwindow is going into. The subwindow itself - will always take care of the full width. We don't want to clear - where it is going to go in order to avoid flicker. So, all we - have to take care of is any area above or below the subwindow. Of - course this is rubbish if the subwindow has transparent areas - (for instance with frames). */ + /* Clear the area the subwindow is going into. */ redisplay_clear_clipped_region (window, findex, - db, dga, 1); + db, dga, 0, image_instance); /* This shrinks the display box to exactly enclose the glyph area. */ redisplay_normalize_display_box (db, dga); - /* unmap all subwindows we are mapping over - except ourselves - because we will get moved anyway. unmapping ourselves cause - unacceptable flicker. */ - redisplay_unmap_subwindows_except_us (f, db->xpos, db->ypos, - db->width, db->height, - image_instance); /* if we can't view the whole window we can't view any of it. We have to be careful here since we may be being asked to display part of a subwindow, the rest of which is on-screen as well. We @@ -1207,8 +1196,20 @@ struct Lisp_Image_Instance *p = XIMAGE_INSTANCE (image_instance); Lisp_Object window, rest; Emchar_dynarr *buf = Dynarr_new (Emchar); - struct device *d = XDEVICE (XFRAME (w->frame)->device); + struct frame *f = XFRAME (w->frame); + struct device *d = XDEVICE (f->device); int layout_height, layout_width; + /* We bogusly don't take f->extents_changed and f->glyphs_changed + into account. This is because if we do we always redisplay the + entire layout. So far I have seen no ill effects to we'll see. */ + int frame_changed = (f->buffers_changed || + f->clip_changed || + f->faces_changed || + f->frame_changed || + f->modeline_changed || + f->subwindows_changed || + f->windows_changed || + f->windows_structure_changed); XSETWINDOW (window, w); @@ -1222,50 +1223,55 @@ if (!redisplay_normalize_glyph_area (db, dga)) return; - /* First clear the area we are drawing into. This is the easiest - thing to do since we have many gaps that we have to make sure are - filled in. */ - redisplay_clear_clipped_region (window, findex, db, dga, 1); - - /* Output a border if required */ - if (!NILP (IMAGE_INSTANCE_LAYOUT_BORDER (p))) - { - int edges = 0; - enum edge_style style; - int ypos = db->ypos; - int height = dga->height; - - if (dga->xoffset >= 0) - edges |= EDGE_LEFT; - if (dga->width - dga->xoffset == layout_width) - edges |= EDGE_RIGHT; - if (dga->yoffset >= 0) - edges |= EDGE_TOP; - if (dga->height - dga->yoffset == layout_height) - edges |= EDGE_BOTTOM; - - if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_in)) - style = EDGE_ETCHED_IN; - else if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_out)) - style = EDGE_ETCHED_OUT; - else if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qbevel_in)) - style = EDGE_BEVEL_IN; - else if (INTP (IMAGE_INSTANCE_LAYOUT_BORDER (p))) + /* Highly dodgy optimization. We want to only output the whole + layout if we really have to. */ + if (frame_changed || IMAGE_INSTANCE_DIRTYP (p)) + { + /* First clear the area we are drawing into. This is the easiest + thing to do since we have many gaps that we have to make sure are + filled in. */ + redisplay_clear_clipped_region (window, findex, db, dga, 1, Qnil); + + /* Output a border if required */ + if (!NILP (IMAGE_INSTANCE_LAYOUT_BORDER (p))) { - style = EDGE_ETCHED_IN; - if (edges & EDGE_TOP) + int edges = 0; + enum edge_style style; + int ypos = db->ypos; + int height = dga->height; + + if (dga->xoffset >= 0) + edges |= EDGE_LEFT; + if (dga->width - dga->xoffset == layout_width) + edges |= EDGE_RIGHT; + if (dga->yoffset >= 0) + edges |= EDGE_TOP; + if (dga->height - dga->yoffset == layout_height) + edges |= EDGE_BOTTOM; + + if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_in)) + style = EDGE_ETCHED_IN; + else if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qetched_out)) + style = EDGE_ETCHED_OUT; + else if (EQ (IMAGE_INSTANCE_LAYOUT_BORDER (p), Qbevel_in)) + style = EDGE_BEVEL_IN; + else if (INTP (IMAGE_INSTANCE_LAYOUT_BORDER (p))) { - ypos += XINT (IMAGE_INSTANCE_LAYOUT_BORDER (p)); - height -= XINT (IMAGE_INSTANCE_LAYOUT_BORDER (p)); + style = EDGE_ETCHED_IN; + if (edges & EDGE_TOP) + { + ypos += XINT (IMAGE_INSTANCE_LAYOUT_BORDER (p)); + height -= XINT (IMAGE_INSTANCE_LAYOUT_BORDER (p)); + } } - } - else - style = EDGE_BEVEL_OUT; + else + style = EDGE_BEVEL_OUT; - MAYBE_DEVMETH (d, bevel_area, - (w, findex, db->xpos, - ypos, - dga->width, height, 2, edges, style)); + MAYBE_DEVMETH (d, bevel_area, + (w, findex, db->xpos, + ypos, + dga->width, height, 2, edges, style)); + } } /* This shrinks the display box to exactly enclose the glyph @@ -1287,13 +1293,14 @@ /* First determine if the image is visible at all */ if (IMAGE_INSTANCEP (child)) { + struct Lisp_Image_Instance* childii = XIMAGE_INSTANCE (child); /* The enclosing layout offsets are +ve at this point */ struct display_glyph_area cdga; - cdga.xoffset = XIMAGE_INSTANCE_XOFFSET (child) - dga->xoffset; - cdga.yoffset = XIMAGE_INSTANCE_YOFFSET (child) - dga->yoffset; + cdga.xoffset = IMAGE_INSTANCE_XOFFSET (childii) - dga->xoffset; + cdga.yoffset = IMAGE_INSTANCE_YOFFSET (childii) - dga->yoffset; cdga.width = glyph_width (child, Qnil, findex, window); cdga.height = glyph_height (child, Qnil, findex, window); - + /* Although normalization is done by the output routines we have to do it here so that they don't try and clear all of db. This is true below also. */ @@ -1312,17 +1319,19 @@ cdga.xoffset = -cdga.xoffset; cdga.yoffset = -cdga.yoffset; - switch (XIMAGE_INSTANCE_TYPE (child)) + switch (IMAGE_INSTANCE_TYPE (childii)) { case IMAGE_TEXT: { /* #### This is well hacked and could use some generalisation.*/ - if (redisplay_normalize_glyph_area (&cdb, &cdga)) + if (redisplay_normalize_glyph_area (&cdb, &cdga) + && + (frame_changed || IMAGE_INSTANCE_DIRTYP (childii))) { struct display_line dl; /* this is fake */ Lisp_Object string = - XIMAGE_INSTANCE_TEXT_STRING (child); + IMAGE_INSTANCE_TEXT_STRING (childii); convert_bufbyte_string_into_emchar_dynarr (XSTRING_DATA (string), XSTRING_LENGTH (string), buf); @@ -1352,14 +1361,16 @@ case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: - redisplay_output_pixmap (w, child, &cdb, &cdga, findex, - 0, 0, 0, 0); + if (frame_changed || IMAGE_INSTANCE_DIRTYP (childii)) + redisplay_output_pixmap (w, child, &cdb, &cdga, findex, + 0, 0, 0, 0); break; case IMAGE_WIDGET: case IMAGE_SUBWINDOW: - redisplay_output_subwindow (w, child, &cdb, &cdga, findex, - 0, 0, 0); + if (frame_changed || IMAGE_INSTANCE_DIRTYP (childii)) + redisplay_output_subwindow (w, child, &cdb, &cdga, findex, + 0, 0, 0); break; case IMAGE_LAYOUT: @@ -1418,7 +1429,8 @@ { redisplay_clear_clipped_region (window, findex, db, dga, - (int)IMAGE_INSTANCE_PIXMAP_MASK (p)); + (int)IMAGE_INSTANCE_PIXMAP_MASK (p), + Qnil); /* This shrinks the display box to exactly enclose the glyph area. */ @@ -1543,13 +1555,14 @@ for images shorter than the display line. Clipping can be played around with by altering these. glyphsrc should be normalized. ****************************************************************************/ -void +static void redisplay_clear_clipped_region (Lisp_Object window, face_index findex, struct display_box* dest, struct display_glyph_area* glyphsrc, - int fullheight_p) + int fullheight_p, Lisp_Object ignored_subwindow) { /* assume dest->xpos >= 0 */ int clear_x; + struct frame* f = XFRAME (XWINDOW (window)->frame); if (glyphsrc->xoffset > 0) { @@ -1569,6 +1582,12 @@ else { int yoffset = (glyphsrc->yoffset > 0 ? glyphsrc->yoffset : 0); + + /* We need to make sure that subwindows are unmapped from the + whole area. */ + redisplay_unmap_subwindows_except_us (f, clear_x, dest->ypos, + glyphsrc->width, dest->height, + ignored_subwindow); /* first the top box */ if (yoffset > 0) { Index: src/redisplay-x.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/redisplay-x.c,v retrieving revision 1.23.2.16 diff -u -r1.23.2.16 redisplay-x.c --- src/redisplay-x.c 1999/10/06 11:41:46 1.23.2.16 +++ src/redisplay-x.c 1999/10/14 20:54:29 @@ -826,6 +826,10 @@ xpos -= xoffset; + /* make sure the area we are about to display is subwindow free. */ + redisplay_unmap_subwindows_maybe (f, clip_start, DISPLAY_LINE_YPOS (dl), + clip_end - clip_start, DISPLAY_LINE_HEIGHT (dl)); + nruns = separate_textual_runs (text_storage, runs, Dynarr_atp (buf, 0), Dynarr_length (buf)); @@ -1387,6 +1391,9 @@ int width = rb->width; int height = DISPLAY_LINE_HEIGHT (dl); + /* Unmap all subwindows in the area we are going to blank. */ + redisplay_unmap_subwindows_maybe (f, x, y, width, height); + if (start_pixpos > x) { if (start_pixpos >= (x + width)) @@ -1548,27 +1555,27 @@ if (edges & EDGE_TOP) { - top_shadow[seg1].x1 = x; + top_shadow[seg1].x1 = x + elt; top_shadow[seg1].x2 = x + width - elt - 1; top_shadow[seg1].y1 = top_shadow[seg1].y2 = y + elt; } if (edges & EDGE_LEFT) { top_shadow[seg2].x1 = top_shadow[seg2].x2 = x + elt; - top_shadow[seg2].y1 = y + shadow_thickness; + top_shadow[seg2].y1 = y + elt; top_shadow[seg2].y2 = y + height - elt - 1; } if (edges & EDGE_BOTTOM) { - bottom_shadow[seg1].x1 = x + elt + 1; - bottom_shadow[seg1].x2 = x + width - 1; + bottom_shadow[seg1].x1 = x + elt; + bottom_shadow[seg1].x2 = x + width - elt - 1; bottom_shadow[seg1].y1 = bottom_shadow[seg1].y2 = y + height - elt - 1; } if (edges & EDGE_RIGHT) { bottom_shadow[bot_seg2].x1 = bottom_shadow[bot_seg2].x2 = x + width - elt - 1; - bottom_shadow[bot_seg2].y1 = y + elt + 1; - bottom_shadow[bot_seg2].y2 = y + height - shadow_thickness; + bottom_shadow[bot_seg2].y1 = y + elt; + bottom_shadow[bot_seg2].y2 = y + height - elt - 1; } } Index: src/redisplay.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/redisplay.c,v retrieving revision 1.55.2.18 diff -u -r1.55.2.18 redisplay.c --- src/redisplay.c 1999/10/06 11:41:47 1.55.2.18 +++ src/redisplay.c 1999/10/14 20:55:28 @@ -4259,7 +4259,7 @@ pos_data data; - int truncate_win = window_truncation_on (w); + int truncate_win = b ? window_truncation_on (w) : 0; int end_glyph_width = 0; /* we're going to ditch selective display for static text, its an @@ -4905,7 +4905,7 @@ Bufpos ret_bufpos; /* you must set bounds before calling this. */ - + /* Reset what this line is using. */ if (dl->display_blocks) Dynarr_reset (dl->display_blocks); @@ -6369,25 +6369,9 @@ update_frame_title (f); - f->buffers_changed = 0; - f->clip_changed = 0; - f->extents_changed = 0; - f->faces_changed = 0; - f->frame_changed = 0; - f->glyphs_changed = 0; - f->subwindows_changed = 0; - f->subwindows_state_changed = 0; - f->icon_changed = 0; - f->menubar_changed = 0; - f->modeline_changed = 0; - f->point_changed = 0; - f->toolbar_changed = 0; - f->gutter_changed = 0; - f->windows_changed = 0; - f->windows_structure_changed = 0; + CLASS_RESET_CHANGED_FLAGS (f); f->window_face_cache_reset = 0; f->echo_area_garbaged = 0; - f->clear = 0; if (!f->size_change_pending) @@ -6437,13 +6421,7 @@ if (FRAME_REPAINT_P (f)) { - if (f->buffers_changed || f->clip_changed || f->extents_changed || - f->faces_changed || f->frame_changed || f->menubar_changed || - f->modeline_changed || f->point_changed || f->size_changed || - f->toolbar_changed || f->windows_changed || f->size_slipped || - f->windows_structure_changed || f->glyphs_changed || - f->subwindows_changed || f->subwindows_state_changed || - f->gutter_changed) + if (CLASS_REDISPLAY_FLAGS_CHANGEDP(f)) { preempted = redisplay_frame (f, 0); } @@ -6473,13 +6451,8 @@ if (FRAME_REPAINT_P (f)) { - if (f->buffers_changed || f->clip_changed || f->extents_changed || - f->faces_changed || f->frame_changed || f->menubar_changed || - f->modeline_changed || f->point_changed || f->size_changed || - f->toolbar_changed || f->windows_changed || - f->windows_structure_changed || f->gutter_changed || - f->glyphs_changed || f->subwindows_changed || - f->subwindows_state_changed) + if (CLASS_REDISPLAY_FLAGS_CHANGEDP(f) + || f->size_changed) { preempted = redisplay_frame (f, 0); } @@ -6494,22 +6467,7 @@ /* If we get here then we redisplayed all of our frames without getting preempted so mark ourselves as clean. */ - d->buffers_changed = 0; - d->clip_changed = 0; - d->extents_changed = 0; - d->faces_changed = 0; - d->frame_changed = 0; - d->glyphs_changed = 0; - d->subwindows_changed = 0; - d->subwindows_state_changed = 0; - d->icon_changed = 0; - d->menubar_changed = 0; - d->modeline_changed = 0; - d->point_changed = 0; - d->toolbar_changed = 0; - d->gutter_changed = 0; - d->windows_changed = 0; - d->windows_structure_changed = 0; + CLASS_RESET_CHANGED_FLAGS (d); if (!size_change_failed) d->size_changed = 0; @@ -6544,14 +6502,8 @@ if (asynch_device_change_pending) handle_asynch_device_change (); - if (!buffers_changed && !clip_changed && !extents_changed && - !faces_changed && !frame_changed && !icon_changed && - !menubar_changed && !modeline_changed && !point_changed && - !size_changed && !toolbar_changed && !windows_changed && - !glyphs_changed && !subwindows_changed && - !subwindows_state_changed && - !gutter_changed && !windows_structure_changed && - !disable_preemption && preemption_count < max_preempts) + if (!GLOBAL_REDISPLAY_FLAGS_CHANGEDP && + !size_changed && !disable_preemption && preemption_count < max_preempts) goto done; DEVICE_LOOP_NO_BREAK (devcons, concons) @@ -6559,13 +6511,8 @@ struct device *d = XDEVICE (XCAR (devcons)); int preempted; - if (d->buffers_changed || d->clip_changed || d->extents_changed || - d->faces_changed || d->frame_changed || d->icon_changed || - d->menubar_changed || d->modeline_changed || d->point_changed || - d->size_changed || d->toolbar_changed || d->windows_changed || - d->windows_structure_changed || d->gutter_changed || - d->glyphs_changed || d->subwindows_changed || - d->subwindows_state_changed) + if (CLASS_REDISPLAY_FLAGS_CHANGEDP (d) + || d->size_changed) { preempted = redisplay_device (d); @@ -6584,21 +6531,7 @@ preemption_count = 0; /* Mark redisplay as accurate */ - buffers_changed = 0; - clip_changed = 0; - extents_changed = 0; - frame_changed = 0; - glyphs_changed = 0; - subwindows_changed = 0; - subwindows_state_changed = 0; - icon_changed = 0; - menubar_changed = 0; - modeline_changed = 0; - point_changed = 0; - toolbar_changed = 0; - gutter_changed = 0; - windows_changed = 0; - windows_structure_changed = 0; + GLOBAL_RESET_CHANGED_FLAGS; RESET_CHANGED_SET_FLAGS; if (faces_changed) Index: src/redisplay.h =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/redisplay.h,v retrieving revision 1.7.2.10 diff -u -r1.7.2.10 redisplay.h --- src/redisplay.h 1999/10/06 11:41:48 1.7.2.10 +++ src/redisplay.h 1999/10/14 20:55:52 @@ -509,6 +509,54 @@ #define MARK_SUBWINDOWS_STATE_CHANGED \ MARK_TYPE_CHANGED (subwindows_state) +#define RESET_CHANGED_FLAGS(type) \ + do { \ + type buffers_changed = 0; \ + type clip_changed = 0; \ + type extents_changed = 0; \ + type faces_changed = 0; \ + type frame_changed = 0; \ + type icon_changed = 0; \ + type menubar_changed = 0; \ + type modeline_changed = 0; \ + type point_changed = 0; \ + type toolbar_changed = 0; \ + type gutter_changed = 0; \ + type glyphs_changed = 0; \ + type subwindows_changed = 0; \ + type subwindows_state_changed = 0; \ + type windows_changed = 0; \ + type windows_structure_changed = 0; \ + } while (0) + +#define CLASS_RESET_CHANGED_FLAGS(f) \ +RESET_CHANGED_FLAGS((f)->) +#define GLOBAL_RESET_CHANGED_FLAGS \ +RESET_CHANGED_FLAGS((int)) + +#define REDISPLAY_FLAGS_CHANGEDP(type) \ + ( type buffers_changed || \ + type clip_changed || \ + type extents_changed || \ + type faces_changed || \ + type frame_changed || \ + type icon_changed || \ + type menubar_changed || \ + type modeline_changed || \ + type point_changed || \ + type toolbar_changed || \ + type gutter_changed || \ + type glyphs_changed || \ + type subwindows_changed || \ + type subwindows_state_changed || \ + type windows_changed || \ + type windows_structure_changed ) + +#define CLASS_REDISPLAY_FLAGS_CHANGEDP(f) \ +REDISPLAY_FLAGS_CHANGEDP((f)->) +#define GLOBAL_REDISPLAY_FLAGS_CHANGEDP \ +REDISPLAY_FLAGS_CHANGEDP((int)) + /* Anytime a console, device or frame is added or deleted we need to reset these flags. */ #define RESET_CHANGED_SET_FLAGS \ @@ -666,10 +714,6 @@ int xoffset, int start_pixpos, int width, struct display_box* dest, struct display_glyph_area* src); -void redisplay_clear_clipped_region (Lisp_Object locale, face_index findex, - struct display_box* dest, - struct display_glyph_area* glyphsrc, - int fullheight_p); int redisplay_normalize_glyph_area (struct display_box* dest, struct display_glyph_area* glyphsrc); void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2); Index: tests/glyph-test.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/tests/Attic/glyph-test.el,v retrieving revision 1.1.2.14 diff -u -r1.1.2.14 glyph-test.el --- tests/glyph-test.el 1999/09/07 14:48:24 1.1.2.14 +++ tests/glyph-test.el 1999/10/14 20:55:53 @@ -1,5 +1,9 @@ (set-extent-begin-glyph (make-extent (point) (point)) + (setq im (make-glyph [gif :file "anim.gif"]))) + +(set-extent-begin-glyph + (make-extent (point) (point)) (setq im (make-glyph [xpm :file "xemacs-icon.xpm"]))) (defun foo ()