diff options
| author | Gerd Moellmann | 2000-06-16 18:34:17 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 2000-06-16 18:34:17 +0000 |
| commit | bba2a92393b328310ebd23694f66f0c96fb39a4f (patch) | |
| tree | 9d747028c43e2bbd563e15dd324d932f32285e55 | |
| parent | 457d47f892c3254256e1b7c7ad5ff0c45fbd8ba8 (diff) | |
| download | emacs-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.c | 67 |
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 | } |