Mercurial > emacs
changeset 28355:11d7a6fdad5f
(x_set_cursor_color): Get color reference counts right.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 27 Mar 2000 14:48:33 +0000 |
parents | d6ae8188fa58 |
children | c94ec7e56746 |
files | src/xfns.c |
diffstat | 1 files changed, 28 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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)