From: Gerd Moellmann Date: Fri, 16 Jun 2000 18:34:17 +0000 (+0000) Subject: (make_shadow_gcs): Set free_top_shadow_color_p X-Git-Tag: emacs-pretest-21.0.90~3277 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bba2a92393b328310ebd23694f66f0c96fb39a4f;p=emacs.git (make_shadow_gcs): Set free_top_shadow_color_p and free_top_shadow_color_p flags in the menu widget if top and bottom shadow colors must be freed. (release_shadow_gcs): Free colors only if they must be freed. --- diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index 034875f53ca..3a1a490710b 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -1444,10 +1444,18 @@ make_shadow_gcs (mw) XColor topc, botc; int top_frobbed = 0, bottom_frobbed = 0; + mw->menu.free_top_shadow_color_p = 0; + mw->menu.free_bottom_shadow_color_p = 0; + if (mw->menu.top_shadow_color == -1) mw->menu.top_shadow_color = mw->core.background_pixel; + else + mw->menu.top_shadow_color = mw->menu.top_shadow_color; + if (mw->menu.bottom_shadow_color == -1) mw->menu.bottom_shadow_color = mw->menu.foreground; + else + mw->menu.bottom_shadow_color = mw->menu.bottom_shadow_color; if (mw->menu.top_shadow_color == mw->core.background_pixel || mw->menu.top_shadow_color == mw->menu.foreground) @@ -1465,6 +1473,7 @@ make_shadow_gcs (mw) #endif { mw->menu.top_shadow_color = topc.pixel; + mw->menu.free_top_shadow_color_p = 1; top_frobbed = 1; } } @@ -1483,6 +1492,7 @@ make_shadow_gcs (mw) #endif { mw->menu.bottom_shadow_color = botc.pixel; + mw->menu.free_bottom_shadow_color_p = 1; bottom_frobbed = 1; } } @@ -1501,17 +1511,23 @@ make_shadow_gcs (mw) { if (botc.pixel == mw->menu.foreground) { - x_free_dpy_colors (dpy, screen, cmap, - &mw->menu.top_shadow_color, 1); - mw->menu.top_shadow_color - = x_copy_dpy_color (dpy, cmap, mw->core.background_pixel); + if (mw->menu.free_top_shadow_color_p) + { + x_free_dpy_colors (dpy, screen, cmap, + &mw->menu.top_shadow_color, 1); + mw->menu.free_top_shadow_color_p = 0; + } + mw->menu.top_shadow_color = mw->core.background_pixel; } else { - x_free_dpy_colors (dpy, screen, cmap, - &mw->menu.bottom_shadow_color, 1); - mw->menu.bottom_shadow_color - = x_copy_dpy_color (dpy, cmap, mw->menu.foreground); + if (mw->menu.free_bottom_shadow_color_p) + { + x_free_dpy_colors (dpy, screen, cmap, + &mw->menu.bottom_shadow_color, 1); + mw->menu.free_bottom_shadow_color_p = 0; + } + mw->menu.bottom_shadow_color = mw->menu.foreground; } } } @@ -1520,20 +1536,24 @@ make_shadow_gcs (mw) mw->menu.top_shadow_color == mw->core.background_pixel) { mw->menu.top_shadow_pixmap = mw->menu.gray_pixmap; - if (top_frobbed) - x_free_dpy_colors (dpy, screen, cmap, &mw->menu.top_shadow_color, 1); - mw->menu.top_shadow_color = x_copy_dpy_color (dpy, cmap, - mw->menu.foreground); + if (mw->menu.free_top_shadow_color_p) + { + x_free_dpy_colors (dpy, screen, cmap, &mw->menu.top_shadow_color, 1); + mw->menu.free_top_shadow_color_p = 0; + } + mw->menu.top_shadow_color = mw->menu.foreground; } if (!mw->menu.bottom_shadow_pixmap && mw->menu.bottom_shadow_color == mw->core.background_pixel) { mw->menu.bottom_shadow_pixmap = mw->menu.gray_pixmap; - if (bottom_frobbed) - x_free_dpy_colors (dpy, screen, cmap, - &mw->menu.bottom_shadow_color, 1); - mw->menu.bottom_shadow_color = x_copy_dpy_color (dpy, cmap, - mw->menu.foreground); + if (mw->menu.free_bottom_shadow_color_p) + { + x_free_dpy_colors (dpy, screen, cmap, + &mw->menu.bottom_shadow_color, 1); + mw->menu.free_bottom_shadow_color_p = 0; + } + mw->menu.bottom_shadow_color = mw->menu.foreground; } xgcv.fill_style = FillStippled; @@ -1557,10 +1577,15 @@ release_shadow_gcs (mw) Screen *screen = XtScreen ((Widget) mw); Colormap cmap = mw->core.colormap; Pixel px[2]; - - px[0] = mw->menu.top_shadow_color; - px[1] = mw->menu.bottom_shadow_color; - x_free_dpy_colors (dpy, screen, cmap, px, 2); + int i = 0; + + if (mw->menu.free_top_shadow_color_p) + px[i++] = mw->menu.top_shadow_color; + if (mw->menu.free_bottom_shadow_color_p) + px[i++] = mw->menu.bottom_shadow_color; + if (i > 0) + x_free_dpy_colors (dpy, screen, cmap, px, i); + XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc); XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc); }