aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Moellmann2000-06-16 18:34:17 +0000
committerGerd Moellmann2000-06-16 18:34:17 +0000
commitbba2a92393b328310ebd23694f66f0c96fb39a4f (patch)
tree9d747028c43e2bbd563e15dd324d932f32285e55
parent457d47f892c3254256e1b7c7ad5ff0c45fbd8ba8 (diff)
downloademacs-bba2a92393b328310ebd23694f66f0c96fb39a4f.tar.gz
emacs-bba2a92393b328310ebd23694f66f0c96fb39a4f.zip
(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.
-rw-r--r--lwlib/xlwmenu.c67
1 files changed, 46 insertions, 21 deletions
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)
1444 XColor topc, botc; 1444 XColor topc, botc;
1445 int top_frobbed = 0, bottom_frobbed = 0; 1445 int top_frobbed = 0, bottom_frobbed = 0;
1446 1446
1447 mw->menu.free_top_shadow_color_p = 0;
1448 mw->menu.free_bottom_shadow_color_p = 0;
1449
1447 if (mw->menu.top_shadow_color == -1) 1450 if (mw->menu.top_shadow_color == -1)
1448 mw->menu.top_shadow_color = mw->core.background_pixel; 1451 mw->menu.top_shadow_color = mw->core.background_pixel;
1452 else
1453 mw->menu.top_shadow_color = mw->menu.top_shadow_color;
1454
1449 if (mw->menu.bottom_shadow_color == -1) 1455 if (mw->menu.bottom_shadow_color == -1)
1450 mw->menu.bottom_shadow_color = mw->menu.foreground; 1456 mw->menu.bottom_shadow_color = mw->menu.foreground;
1457 else
1458 mw->menu.bottom_shadow_color = mw->menu.bottom_shadow_color;
1451 1459
1452 if (mw->menu.top_shadow_color == mw->core.background_pixel || 1460 if (mw->menu.top_shadow_color == mw->core.background_pixel ||
1453 mw->menu.top_shadow_color == mw->menu.foreground) 1461 mw->menu.top_shadow_color == mw->menu.foreground)
@@ -1465,6 +1473,7 @@ make_shadow_gcs (mw)
1465#endif 1473#endif
1466 { 1474 {
1467 mw->menu.top_shadow_color = topc.pixel; 1475 mw->menu.top_shadow_color = topc.pixel;
1476 mw->menu.free_top_shadow_color_p = 1;
1468 top_frobbed = 1; 1477 top_frobbed = 1;
1469 } 1478 }
1470 } 1479 }
@@ -1483,6 +1492,7 @@ make_shadow_gcs (mw)
1483#endif 1492#endif
1484 { 1493 {
1485 mw->menu.bottom_shadow_color = botc.pixel; 1494 mw->menu.bottom_shadow_color = botc.pixel;
1495 mw->menu.free_bottom_shadow_color_p = 1;
1486 bottom_frobbed = 1; 1496 bottom_frobbed = 1;
1487 } 1497 }
1488 } 1498 }
@@ -1501,17 +1511,23 @@ make_shadow_gcs (mw)
1501 { 1511 {
1502 if (botc.pixel == mw->menu.foreground) 1512 if (botc.pixel == mw->menu.foreground)
1503 { 1513 {
1504 x_free_dpy_colors (dpy, screen, cmap, 1514 if (mw->menu.free_top_shadow_color_p)
1505 &mw->menu.top_shadow_color, 1); 1515 {
1506 mw->menu.top_shadow_color 1516 x_free_dpy_colors (dpy, screen, cmap,
1507 = x_copy_dpy_color (dpy, cmap, mw->core.background_pixel); 1517 &mw->menu.top_shadow_color, 1);
1518 mw->menu.free_top_shadow_color_p = 0;
1519 }
1520 mw->menu.top_shadow_color = mw->core.background_pixel;
1508 } 1521 }
1509 else 1522 else
1510 { 1523 {
1511 x_free_dpy_colors (dpy, screen, cmap, 1524 if (mw->menu.free_bottom_shadow_color_p)
1512 &mw->menu.bottom_shadow_color, 1); 1525 {
1513 mw->menu.bottom_shadow_color 1526 x_free_dpy_colors (dpy, screen, cmap,
1514 = x_copy_dpy_color (dpy, cmap, mw->menu.foreground); 1527 &mw->menu.bottom_shadow_color, 1);
1528 mw->menu.free_bottom_shadow_color_p = 0;
1529 }
1530 mw->menu.bottom_shadow_color = mw->menu.foreground;
1515 } 1531 }
1516 } 1532 }
1517 } 1533 }
@@ -1520,20 +1536,24 @@ make_shadow_gcs (mw)
1520 mw->menu.top_shadow_color == mw->core.background_pixel) 1536 mw->menu.top_shadow_color == mw->core.background_pixel)
1521 { 1537 {
1522 mw->menu.top_shadow_pixmap = mw->menu.gray_pixmap; 1538 mw->menu.top_shadow_pixmap = mw->menu.gray_pixmap;
1523 if (top_frobbed) 1539 if (mw->menu.free_top_shadow_color_p)
1524 x_free_dpy_colors (dpy, screen, cmap, &mw->menu.top_shadow_color, 1); 1540 {
1525 mw->menu.top_shadow_color = x_copy_dpy_color (dpy, cmap, 1541 x_free_dpy_colors (dpy, screen, cmap, &mw->menu.top_shadow_color, 1);
1526 mw->menu.foreground); 1542 mw->menu.free_top_shadow_color_p = 0;
1543 }
1544 mw->menu.top_shadow_color = mw->menu.foreground;
1527 } 1545 }
1528 if (!mw->menu.bottom_shadow_pixmap && 1546 if (!mw->menu.bottom_shadow_pixmap &&
1529 mw->menu.bottom_shadow_color == mw->core.background_pixel) 1547 mw->menu.bottom_shadow_color == mw->core.background_pixel)
1530 { 1548 {
1531 mw->menu.bottom_shadow_pixmap = mw->menu.gray_pixmap; 1549 mw->menu.bottom_shadow_pixmap = mw->menu.gray_pixmap;
1532 if (bottom_frobbed) 1550 if (mw->menu.free_bottom_shadow_color_p)
1533 x_free_dpy_colors (dpy, screen, cmap, 1551 {
1534 &mw->menu.bottom_shadow_color, 1); 1552 x_free_dpy_colors (dpy, screen, cmap,
1535 mw->menu.bottom_shadow_color = x_copy_dpy_color (dpy, cmap, 1553 &mw->menu.bottom_shadow_color, 1);
1536 mw->menu.foreground); 1554 mw->menu.free_bottom_shadow_color_p = 0;
1555 }
1556 mw->menu.bottom_shadow_color = mw->menu.foreground;
1537 } 1557 }
1538 1558
1539 xgcv.fill_style = FillStippled; 1559 xgcv.fill_style = FillStippled;
@@ -1557,10 +1577,15 @@ release_shadow_gcs (mw)
1557 Screen *screen = XtScreen ((Widget) mw); 1577 Screen *screen = XtScreen ((Widget) mw);
1558 Colormap cmap = mw->core.colormap; 1578 Colormap cmap = mw->core.colormap;
1559 Pixel px[2]; 1579 Pixel px[2];
1560 1580 int i = 0;
1561 px[0] = mw->menu.top_shadow_color; 1581
1562 px[1] = mw->menu.bottom_shadow_color; 1582 if (mw->menu.free_top_shadow_color_p)
1563 x_free_dpy_colors (dpy, screen, cmap, px, 2); 1583 px[i++] = mw->menu.top_shadow_color;
1584 if (mw->menu.free_bottom_shadow_color_p)
1585 px[i++] = mw->menu.bottom_shadow_color;
1586 if (i > 0)
1587 x_free_dpy_colors (dpy, screen, cmap, px, i);
1588
1564 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc); 1589 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc);
1565 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc); 1590 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc);
1566} 1591}