# HG changeset patch # User Gerd Moellmann # Date 954168513 0 # Node ID 11d7a6fdad5f85d2f52fe0b8790e4ba4aa11f34e # Parent d6ae8188fa580d1d4c0643ca7dd470bc38fb10e4 (x_set_cursor_color): Get color reference counts right. diff -r d6ae8188fa58 -r 11d7a6fdad5f src/xfns.c --- a/src/xfns.c Mon Mar 27 14:47:42 2000 +0000 +++ b/src/xfns.c Mon Mar 27 14:48:33 2000 +0000 @@ -1520,26 +1520,49 @@ Lisp_Object arg, oldval; { unsigned long fore_pixel, pixel; - - if (!EQ (Vx_cursor_fore_pixel, Qnil)) - fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, - WHITE_PIX_DEFAULT (f)); + int fore_pixel_allocated_p = 0, pixel_allocated_p = 0; + + if (!NILP (Vx_cursor_fore_pixel)) + { + fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, + WHITE_PIX_DEFAULT (f)); + fore_pixel_allocated_p = 1; + } else fore_pixel = f->output_data.x->background_pixel; + pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); + pixel_allocated_p = 1; /* Make sure that the cursor color differs from the background color. */ if (pixel == f->output_data.x->background_pixel) { + if (pixel_allocated_p) + { + x_free_colors (f, &pixel, 1); + pixel_allocated_p = 0; + } + pixel = f->output_data.x->mouse_pixel; if (pixel == fore_pixel) - fore_pixel = f->output_data.x->background_pixel; + { + if (fore_pixel_allocated_p) + { + x_free_colors (f, &fore_pixel, 1); + fore_pixel_allocated_p = 0; + } + fore_pixel = f->output_data.x->background_pixel; + } } unload_color (f, f->output_data.x->cursor_foreground_pixel); + if (!fore_pixel_allocated_p) + fore_pixel = x_copy_color (f, fore_pixel); f->output_data.x->cursor_foreground_pixel = fore_pixel; unload_color (f, f->output_data.x->cursor_pixel); + if (!pixel_allocated_p) + pixel = x_copy_color (f, pixel); f->output_data.x->cursor_pixel = pixel; if (FRAME_X_WINDOW (f) != 0)