# HG changeset patch # User Jason Rumney # Date 1016834442 0 # Node ID 16eb7bad861d568bb9c8ef17c09ea9182dada332 # Parent 49a2e59f302bcb836c86abe97f2e0ab7668af401 (x_set_cursor_color): Set cursor_gc as well. (clear_image_cache): Block input, fix logic, clear matrices in all frames that share this cache. diff -r 49a2e59f302b -r 16eb7bad861d src/w32fns.c --- a/src/w32fns.c Fri Mar 22 17:53:09 2002 +0000 +++ b/src/w32fns.c Fri Mar 22 22:00:42 2002 +0000 @@ -277,7 +277,6 @@ extern Lisp_Object Qtop; extern Lisp_Object Qdisplay; -extern Lisp_Object Qtool_bar_lines; /* State variables for emulating a three button mouse. */ #define LMOUSE 1 @@ -2292,6 +2291,13 @@ if (FRAME_W32_WINDOW (f) != 0) { + BLOCK_INPUT; + /* Update frame's cursor_gc. */ + f->output_data.w32->cursor_gc->foreground = fore_pixel; + f->output_data.w32->cursor_gc->background = pixel; + + UNBLOCK_INPUT; + if (FRAME_VISIBLE_P (f)) { x_update_cursor (f, 0); @@ -5671,7 +5677,7 @@ x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1), "menuBar", "MenuBar", RES_TYPE_NUMBER); - x_default_parameter (f, parms, Qtool_bar_lines, make_number (0), + x_default_parameter (f, parms, Qtool_bar_lines, make_number (HAVE_IMAGES), "toolBar", "ToolBar", RES_TYPE_NUMBER); x_default_parameter (f, parms, Qbuffer_predicate, Qnil, "bufferPredicate", "BufferPredicate", RES_TYPE_SYMBOL); @@ -8142,7 +8148,6 @@ } - /*********************************************************************** Image types ***********************************************************************/ @@ -8968,20 +8973,23 @@ { EMACS_TIME t; unsigned long old; - int i, any_freed_p = 0; + int i, nfreed; EMACS_GET_TIME (t); old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay); - for (i = 0; i < c->used; ++i) + /* Block input so that we won't be interrupted by a SIGIO + while being in an inconsistent state. */ + BLOCK_INPUT; + + for (i = nfreed = 0; i < c->used; ++i) { struct image *img = c->images[i]; if (img != NULL - && (force_p - || (img->timestamp > old))) + && (force_p || (img->timestamp < old))) { free_image (f, img); - any_freed_p = 1; + ++nfreed; } } @@ -8989,11 +8997,22 @@ Emacs was iconified for a longer period of time. In that case, current matrices may still contain references to images freed above. So, clear these matrices. */ - if (any_freed_p) - { - clear_current_matrices (f); + if (nfreed) + { + Lisp_Object tail, frame; + + FOR_EACH_FRAME (tail, frame) + { + struct frame *f = XFRAME (frame); + if (FRAME_W32_P (f) + && FRAME_X_IMAGE_CACHE (f) == c) + clear_current_matrices (f); + } + ++windows_or_buffers_changed; } + + UNBLOCK_INPUT; } }