From 10168ebbc5f4f1bad0711de93c5c2a329701ad62 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 27 Mar 2000 14:48:33 +0000 Subject: [PATCH] (x_set_cursor_color): Get color reference counts right. --- src/xfns.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/xfns.c b/src/xfns.c index 5fe1b4dac19..fed93404f3f 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1520,26 +1520,49 @@ x_set_cursor_color (f, arg, oldval) Lisp_Object arg, oldval; { unsigned long fore_pixel, pixel; + int fore_pixel_allocated_p = 0, pixel_allocated_p = 0; - if (!EQ (Vx_cursor_fore_pixel, Qnil)) - fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, - WHITE_PIX_DEFAULT (f)); + 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) -- 2.39.5