On Wed, May 26, 2004 at 12:21:57AM +0200, Kim Woelders wrote:

> Thanks!
> I'd like this included. However, in particular one change is required:
> You adjust the applied ImageClass opacity using a flags field in the
> ImageClass struct. As you have probably discovered the ImageClass'es are
> referenced from many different objects and therefore you have to set and
> clear these flags all the time.

This patch propogates the image_type flags through IclassApply{,Copy} and
through the DrawQueue.

> Making the menus "aqua" transparent should be optional.
> Actually, it might be nice if the menu and tooltip transparency type
> could be selected between off, background, and "aqua"(?).

They are now.  If you do not choose Aqua, and do not choose to have the
item opaque, it's transparency will resemble that of Eterm's behaviour.

> And then the boring complaints:
> - Opaque menu item highlighting doesn't seem to work in the winter
> theme.

I have walked through menus.c.  I might need some help here.  Winter's
menu images are opaque, if you open them up in Gimp and make their
backgrounds transparent then all will be fine.  The problem now is that
when you rollover a menu directory (sub_iclass), the image doesn't get
flushed as it does in with item_class.  So, each time you roll over the
image, it gets darker as it stacks the images (bug?).  Anyway, I just
spent about three hours trying to hunt this down, and haven't been able
to do so reliably.

Note: Most other themes do not display this issue.  But there are a
few that do [Ecdysis-v2 for example].  I modified the menu images in
Ecdysis-v2, and I must say this patch looks really good with it, it
has multishaded menu images so they add to the eye-candy effect.

> - Please remove stuff that hasn't been finished like
> Conf.sel_transparency.focused/unfocused/hilighted/tinted/eterm.

I have kept residue hints of the tint features in this patch.  I
feel that it will be trivial to implement at the moment.  The biggest
problem is settings presentation.  Right now, the Backgrounds setting
dialog is getting large.

> Maybe it can be added if implemented.
> - It would help if you could make the patch based on current CVS.

This patch is based off of a CVS pull the day pre3 was announced.

Jaron Omega

================================CUT HERE===============================
diff -ur e.orig/src/E.h e/src/E.h
--- e.orig/src/E.h      2004-05-30 20:18:20.000000000 -0700
+++ e/src/E.h   2004-06-01 00:26:32.000000000 -0700
@@ -66,6 +66,23 @@
 #define ENABLE_TRANSPARENCY 1
 #define ENABLE_THEME_TRANSPARENCY 1
 
+#define ST_UNKNWN      0
+#define ST_BORDER      1
+#define ST_WIDGET      2
+#define ST_ICON                3
+#define ST_MENU                4
+#define ST_MENU_ITEM   5
+#define ST_TOOLTIP     6
+#define ST_DIALOG      7
+#define ST_HILIGHT     8
+#define ST_PAGER       9
+#define ST_WARP                10
+
+#define BMASK_ENABLED  0x0001
+#define BMASK_AQUA     0x0002
+#define BMASK_TINTED   0x0004
+#define BMASK_ISOPAQUE 0x0008
+
 #else
 
 #include <Imlib.h>
@@ -1211,6 +1228,19 @@
       char                warpiconified;
       char                warpfocused;
    } warplist;
+   struct
+   {
+      int           border;
+      int           widget;
+      int           tooltip;
+      int           menu;
+      int           menu_item;
+      int           hilight;
+      int           dialog;
+      int           pager;
+      int           warp;
+      int           icon;
+   } st_transparency;
    int                 deskmode;
    int                 movemode;
    int                 resizemode;
@@ -1567,6 +1597,7 @@
    Dialog             *d;
    DItem              *di;
    int                 x, y;
+   int                 image_type;
 }
 DrawQueue;
 
@@ -2302,10 +2333,10 @@
 void                IclassPopulate(ImageClass * iclass);
 int                 IclassIsTransparent(ImageClass * iclass);
 void                IclassApply(ImageClass * iclass, Window win, int w, int h,
-                               int active, int sticky, int state, char expose);
+                               int active, int sticky, int state, char expose, int 
image_type);
 void                IclassApplyCopy(ImageClass * iclass, Window win, int w,
                                    int h, int active, int sticky, int state,
-                                   PmapMask * pmm, int make_mask);
+                                   PmapMask * pmm, int make_mask, int image_type);
 void                FreePmapMask(PmapMask * pmm);
 
 /* iconify.c */
diff -ur e.orig/src/borders.c e/src/borders.c
--- e.orig/src/borders.c        2004-05-30 20:18:20.000000000 -0700
+++ e/src/borders.c     2004-06-01 00:29:11.000000000 -0700
@@ -741,7 +741,7 @@
 
    IclassApply(ewin->border->part[i].iclass, ewin->bits[i].win,
               ewin->bits[i].w, ewin->bits[i].h, ewin->active,
-              ewin->sticky, ewin->bits[i].state, ewin->bits[i].expose);
+              ewin->sticky, ewin->bits[i].state, ewin->bits[i].expose, ST_BORDER);
 
    if (ewin->border->part[i].flags == FLAG_TITLE)
      {
diff -ur e.orig/src/buttons.c e/src/buttons.c
--- e.orig/src/buttons.c        2004-05-30 20:18:20.000000000 -0700
+++ e/src/buttons.c     2004-06-01 00:29:22.000000000 -0700
@@ -303,7 +303,7 @@
 {
    EDBUG(3, "ButtonDraw");
 
-   IclassApply(b->iclass, b->win, b->w, b->h, 0, 0, b->state, 0);
+   IclassApply(b->iclass, b->win, b->w, b->h, 0, 0, b->state, 0, ST_BORDER);
 
    if (b->label)
       TclassApply(b->iclass, b->win, b->w, b->h, 0, 0, b->state, 0, b->tclass,
diff -ur e.orig/src/conf.h e/src/conf.h
--- e.orig/src/conf.h   2004-05-30 20:18:20.000000000 -0700
+++ e/src/conf.h        2004-05-30 21:26:24.000000000 -0700
@@ -143,6 +143,17 @@
 #define CONTROL_GROUP_SWAPMOVE 1372
 #define CONTROL_THEME_TRANSPARENCY 1373
 
+#define CONTROL_ST_BORDER 1375
+#define CONTROL_ST_WIDGET 1376
+#define CONTROL_ST_ICON 1377
+#define CONTROL_ST_MENU 1378
+#define CONTROL_ST_MENU_ITEM 1379
+#define CONTROL_ST_TOOLTIP 1380
+#define CONTROL_ST_DIALOG 1381
+#define CONTROL_ST_HILIGHT 1382
+#define CONTROL_ST_PAGER 1383
+#define CONTROL_ST_WARP 1384
+
 #define ICLASS_NAME 350
 #define ICLASS_NORMAL 351
 #define ICLASS_CLICKED 352
diff -ur e.orig/src/config.c e/src/config.c
--- e.orig/src/config.c 2004-05-30 20:18:20.000000000 -0700
+++ e/src/config.c      2004-05-31 03:32:59.000000000 -0700
@@ -783,6 +783,36 @@
             sscanf(s, "%*i %f", &f1);
             Conf.autoraise.delay = f1;
             break;
+         case CONTROL_ST_BORDER:
+            Conf.st_transparency.border = i2;
+            break;
+         case CONTROL_ST_WIDGET:
+            Conf.st_transparency.widget = i2;
+            break;
+         case CONTROL_ST_ICON:
+            Conf.st_transparency.icon = i2;
+            break;
+         case CONTROL_ST_MENU:
+            Conf.st_transparency.menu = i2;
+            break;
+         case CONTROL_ST_MENU_ITEM:
+            Conf.st_transparency.menu_item = i2;
+            break;
+         case CONTROL_ST_TOOLTIP:
+            Conf.st_transparency.tooltip = i2;
+            break;
+         case CONTROL_ST_DIALOG:
+            Conf.st_transparency.dialog = i2;
+            break;
+         case CONTROL_ST_HILIGHT:
+            Conf.st_transparency.hilight = i2;
+            break;
+         case CONTROL_ST_PAGER:
+            Conf.st_transparency.pager = i2;
+            break;
+         case CONTROL_ST_WARP:
+            Conf.st_transparency.warp = i2;
+            break;
          case CONTROL_GROUP_BORDER:
             Conf.group_config.set_border = i2;
             break;
@@ -3896,6 +3926,16 @@
        fprintf(autosavefile, "1372 %i\n", (int)Conf.group_swapmove);
        fprintf(autosavefile, "1367 %i\n", (int)Conf.focus.clickraises);
        fprintf(autosavefile, "1368 %i\n", (int)Conf.tooltips.showroottooltip);
+        fprintf(autosavefile, "1375 %i\n", (int)Conf.st_transparency.border);
+        fprintf(autosavefile, "1376 %i\n", (int)Conf.st_transparency.widget);
+        fprintf(autosavefile, "1377 %i\n", (int)Conf.st_transparency.icon);
+        fprintf(autosavefile, "1378 %i\n", (int)Conf.st_transparency.menu);
+        fprintf(autosavefile, "1379 %i\n", (int)Conf.st_transparency.menu_item);
+        fprintf(autosavefile, "1380 %i\n", (int)Conf.st_transparency.tooltip);
+        fprintf(autosavefile, "1381 %i\n", (int)Conf.st_transparency.dialog);
+        fprintf(autosavefile, "1382 %i\n", (int)Conf.st_transparency.hilight);
+        fprintf(autosavefile, "1383 %i\n", (int)Conf.st_transparency.pager);
+        fprintf(autosavefile, "1384 %i\n", (int)Conf.st_transparency.warp);
        fprintf(autosavefile, "1369 %i %i %i\n", (int)Conf.pagers.sel_button,
                (int)Conf.pagers.win_button, (int)Conf.pagers.menu_button);
        fprintf(autosavefile, "1373 %i\n", (int)Conf.theme.transparency);
diff -ur e.orig/src/coords.c e/src/coords.c
--- e.orig/src/coords.c 2004-05-30 20:18:20.000000000 -0700
+++ e/src/coords.c      2004-06-01 00:29:37.000000000 -0700
@@ -99,7 +99,7 @@
    EMoveResizeWindow(disp, c_win, cx, cy, cw, ch);
    pq = Mode.queue_up;
    Mode.queue_up = 0;
-   IclassApply(ic, c_win, cw, ch, 1, 0, STATE_NORMAL, 0);
+   IclassApply(ic, c_win, cw, ch, 1, 0, STATE_NORMAL, 0, ST_UNKNWN);
    TclassApply(ic, c_win, cw, ch, 0, 0, STATE_NORMAL, 0, tc, s);
    Mode.queue_up = pq;
    XFlush(disp);
diff -ur e.orig/src/dialog.c e/src/dialog.c
--- e.orig/src/dialog.c 2004-05-30 20:18:20.000000000 -0700
+++ e/src/dialog.c      2004-06-01 00:34:12.000000000 -0700
@@ -481,7 +481,7 @@
        state = STATE_CLICKED;
      }
    IclassApply(d->button[bnum]->iclass, d->button[bnum]->win,
-              d->button[bnum]->w, d->button[bnum]->h, 0, 0, state, 0);
+              d->button[bnum]->w, d->button[bnum]->h, 0, 0, state, 0, ST_WIDGET);
    TclassApply(d->button[bnum]->iclass, d->button[bnum]->win,
               d->button[bnum]->w, d->button[bnum]->h, 0, 0, state, 1,
               d->button[bnum]->tclass, d->button[bnum]->text);
@@ -557,7 +557,7 @@
    if ((!d->tclass) || (!d->iclass))
       return;
 
-   IclassApply(d->iclass, d->win, d->w, d->h, 0, 0, STATE_NORMAL, 0);
+   IclassApply(d->iclass, d->win, d->w, d->h, 0, 0, STATE_NORMAL, 0, ST_DIALOG);
 
    for (i = 0; i < d->num_buttons; i++)
       DialogDrawButton(d, i);
@@ -1634,6 +1634,7 @@
        dq->di = di;
        dq->x = x;
        dq->y = y;
+       dq->image_type = ST_DIALOG;
        AddItem(dq, "DRAW", 0, LIST_TYPE_DRAW);
        EDBUG_RETURN_;
      }
@@ -1684,15 +1685,17 @@
                                  di->y + di->item.slider.knob_y,
                                  di->item.slider.knob_w,
                                  di->item.slider.knob_h);
-            if (di->item.slider.base_win)
+            if (di->item.slider.base_win) {
                IclassApply(di->item.slider.ic_base, di->item.slider.base_win,
                            di->item.slider.base_w, di->item.slider.base_h, 0,
-                           0, STATE_NORMAL, 0);
-            if (di->item.slider.border_win)
+                           0, STATE_NORMAL, 0, ST_WIDGET);
+             }
+            if (di->item.slider.border_win) {
                IclassApply(di->item.slider.ic_border,
                            di->item.slider.border_win,
                            di->item.slider.border_w,
-                           di->item.slider.border_h, 0, 0, STATE_NORMAL, 0);
+                           di->item.slider.border_h, 0, 0, STATE_NORMAL, 0, 
ST_WIDGET);
+             }
             state = STATE_NORMAL;
             if ((di->hilited) && (di->clicked))
                state = STATE_CLICKED;
@@ -1700,10 +1703,11 @@
                state = STATE_HILITED;
             else if (!(di->hilited) && (di->clicked))
                state = STATE_CLICKED;
-            if (di->item.slider.knob_win)
+            if (di->item.slider.knob_win) {
                IclassApply(di->item.slider.ic_knob, di->item.slider.knob_win,
                            di->item.slider.knob_w, di->item.slider.knob_h, 0,
-                           0, state, 0);
+                           0, state, 0, ST_WIDGET);
+             }
             break;
          case DITEM_BUTTON:
             state = STATE_NORMAL;
@@ -1713,16 +1717,18 @@
                state = STATE_HILITED;
             else if (!(di->hilited) && (di->clicked))
                state = STATE_CLICKED;
-            IclassApply(di->iclass, di->win, di->w, di->h, 0, 0, state, 0);
+
+            IclassApply(di->iclass, di->win, di->w, di->h, 0, 0, state, 0, ST_WIDGET);
             TclassApply(di->iclass, di->win, di->w, di->h, 0, 0, state, 1,
                         di->tclass, di->item.button.text);
             break;
          case DITEM_AREA:
             IclassApply(di->iclass, di->win, di->w, di->h, 0, 0,
-                        STATE_NORMAL, 0);
+                        STATE_NORMAL, 0, ST_DIALOG);
             break;
          case DITEM_CHECKBUTTON:
             state = STATE_NORMAL;
+
             if ((di->hilited) && (di->clicked))
                state = STATE_CLICKED;
             else if ((di->hilited) && (!di->clicked))
@@ -1732,11 +1738,11 @@
             if (di->item.check_button.onoff)
                IclassApply(di->iclass, di->item.check_button.check_win,
                            di->item.check_button.check_orig_w,
-                           di->item.check_button.check_orig_h, 1, 0, state, 0);
+                           di->item.check_button.check_orig_h, 1, 0, state, 0, 
ST_WIDGET);
             else
                IclassApply(di->iclass, di->item.check_button.check_win,
                            di->item.check_button.check_orig_w,
-                           di->item.check_button.check_orig_h, 0, 0, state, 0);
+                           di->item.check_button.check_orig_h, 0, 0, state, 0, 
ST_WIDGET);
             XClearArea(disp, d->win, di->x, di->y, di->w, di->h, False);
             TextDraw(di->tclass, d->win, 0, 0, STATE_NORMAL,
                      di->item.check_button.text,
@@ -1757,10 +1763,10 @@
          case DITEM_SEPARATOR:
             if (di->item.separator.horizontal)
                IclassApply(di->iclass, di->win, di->w, di->h, 0, 0,
-                           STATE_NORMAL, 0);
+                           STATE_NORMAL, 0, ST_WIDGET);
             else
                IclassApply(di->iclass, di->win, di->w, di->h, 0, 0,
-                           STATE_CLICKED, 0);
+                           STATE_CLICKED, 0, ST_WIDGET);
             break;
          case DITEM_RADIOBUTTON:
             state = STATE_NORMAL;
@@ -1773,11 +1779,11 @@
             if (di->item.radio_button.onoff)
                IclassApply(di->iclass, di->item.radio_button.radio_win,
                            di->item.radio_button.radio_orig_w,
-                           di->item.radio_button.radio_orig_h, 1, 0, state, 0);
+                           di->item.radio_button.radio_orig_h, 1, 0, state, 0, 
ST_WIDGET);
             else
                IclassApply(di->iclass, di->item.radio_button.radio_win,
                            di->item.radio_button.radio_orig_w,
-                           di->item.radio_button.radio_orig_w, 0, 0, state, 0);
+                           di->item.radio_button.radio_orig_w, 0, 0, state, 0, 
ST_WIDGET);
             XClearArea(disp, d->win, di->x, di->y, di->w, di->h, False);
             TextDraw(di->tclass, d->win, 0, 0, STATE_NORMAL,
                      di->item.radio_button.text,
diff -ur e.orig/src/draw.c e/src/draw.c
--- e.orig/src/draw.c   2004-05-30 20:18:20.000000000 -0700
+++ e/src/draw.c        2004-06-01 00:28:00.000000000 -0700
@@ -219,7 +219,7 @@
 /*            printf("I %x\n", dq->win); */
                  if (WinExists(dq->win))
                     IclassApply(dq->iclass, dq->win, dq->w, dq->h, dq->active,
-                                dq->sticky, dq->state, 0);
+                                dq->sticky, dq->state, 0, dq->image_type);
               }
             else if (dq->pager)
               {
diff -ur e.orig/src/iclass.c e/src/iclass.c
--- e.orig/src/iclass.c 2004-05-30 20:18:20.000000000 -0700
+++ e/src/iclass.c      2004-06-01 00:39:42.000000000 -0700
@@ -390,15 +390,55 @@
 
 static void
 ImageStateMakePmapMask(ImageState * is, Drawable win, PmapMask * pmm,
-                      int make_mask, int w, int h)
+                      int make_mask, int w, int h, int image_type)
 {
    int                 apply, trans;
    int                 ww, hh;
+   int                 flags;
    PmapMask            pmml;
 
 #ifdef ENABLE_TRANSPARENCY
    Imlib_Image        *ii = NULL;
 
+   switch(image_type) {
+     case ST_UNKNWN:
+       flags=0;
+       break;
+     case ST_BORDER:
+       flags = Conf.st_transparency.border;
+       break;
+     case ST_WIDGET:
+       flags = Conf.st_transparency.widget;
+       break;
+     case ST_ICON:
+       flags = Conf.st_transparency.icon;
+       break;
+     case ST_MENU:
+       flags = Conf.st_transparency.menu;
+       break;
+     case ST_MENU_ITEM:
+       flags = Conf.st_transparency.menu_item;
+       break;
+     case ST_TOOLTIP:
+       flags = Conf.st_transparency.tooltip;
+       break;
+     case ST_DIALOG:
+       flags = Conf.st_transparency.dialog;
+       break;
+     case ST_HILIGHT:
+       flags = Conf.st_transparency.hilight;
+       break;
+     case ST_PAGER:
+       flags = Conf.st_transparency.pager;
+       break;
+     case ST_WARP:
+       flags = Conf.st_transparency.warp;
+       break;
+     default:
+       flags=0;
+       break;
+   }
+
    /*
     * is->transparent flags:
     *   0x01: Use desktop background pixmap as base
@@ -428,7 +468,7 @@
             imlib_image_has_alpha()));
 
 #ifdef ENABLE_TRANSPARENCY
-   if (trans)
+   if (!(flags & BMASK_ISOPAQUE))
      {
        Window              cr;
        Pixmap              bg;
@@ -440,8 +480,13 @@
          {
             /* Create the background base image */
             bg = BackgroundGetPixmap(desks.desk[desks.current].bg);
-            if ((is->transparent & 0x02) != 0 || bg == None)
+
+             if(flags & BMASK_AQUA) {
+               bg = VRoot.win;
+             } else if (bg == None) {
                bg = VRoot.win;
+             }
+
             imlib_context_set_drawable(bg);
             ii = imlib_create_image_from_drawable(0, xx, yy, w, h, 1);
             imlib_context_set_image(ii);
@@ -461,13 +506,17 @@
          {
             imlib_context_set_blend(1);
 #ifdef ENABLE_THEME_TRANSPARENCY
-            imlib_context_set_color_modifier(icm);
+             if(!(flags & BMASK_ISOPAQUE)) {
+              imlib_context_set_color_modifier(icm);
+             }
 #endif
             imlib_context_set_operation(IMLIB_OP_COPY);
             imlib_blend_image_onto_image(is->im, 0, 0, 0, ww, hh, 0, 0, w, h);
             imlib_context_set_blend(0);
 #ifdef ENABLE_THEME_TRANSPARENCY
-            imlib_context_set_color_modifier(NULL);
+             if(!(flags & BMASK_ISOPAQUE)) {
+              imlib_context_set_color_modifier(NULL);
+             }
 #if 0                          /* Do we ever need to free it? */
             imlib_free_color_modifier();
 #endif
@@ -719,7 +768,7 @@
 
 void
 IclassApply(ImageClass * iclass, Window win, int w, int h, int active,
-           int sticky, int state, char expose)
+           int sticky, int state, char expose, int image_type)
 {
    ImageState         *is;
 
@@ -757,6 +806,7 @@
        dq->di = NULL;
        dq->x = 0;
        dq->y = 0;
+       dq->image_type = image_type;
        AddItem(dq, "DRAW", dq->win, LIST_TYPE_DRAW);
        EDBUG_RETURN_;
      }
@@ -775,7 +825,7 @@
 
        if (is->im)
          {
-            ImageStateMakePmapMask(is, win, NULL, 1, w, h);
+            ImageStateMakePmapMask(is, win, NULL, 1, w, h, image_type);
 
             if ((is->unloadable) || (Conf.memory_paranoia))
               {
@@ -806,7 +856,7 @@
 
 void
 IclassApplyCopy(ImageClass * iclass, Window win, int w, int h, int active,
-               int sticky, int state, PmapMask * pmm, int make_mask)
+               int sticky, int state, PmapMask * pmm, int make_mask, int image_type)
 {
    ImageState         *is;
    XGCValues           gcv;
@@ -827,23 +877,25 @@
       EDBUG_RETURN_;
 
    is = IclassGetImageState2(iclass, state, active, sticky);
+
    if (!is)
       EDBUG_RETURN_;
 
    if (is->im == NULL && is->im_file)
-      ImageStateRealize(is);
+     ImageStateRealize(is);
 
    if (is->im)
      {
-       ImageStateMakePmapMask(is, win, pmm, make_mask, w, h);
+       ImageStateMakePmapMask(is, win, pmm, make_mask, w, h, image_type);
 
-       if ((is->unloadable) || (Conf.memory_paranoia))
+       if ((is->unloadable) || (Conf.memory_paranoia)) 
          {
             imlib_context_set_image(is->im);
             imlib_free_image();
             is->im = NULL;
          }
 
+
        EDBUG_RETURN_;
      }
 
diff -ur e.orig/src/iconify.c e/src/iconify.c
--- e.orig/src/iconify.c        2004-05-30 20:18:20.000000000 -0700
+++ e/src/iconify.c     2004-06-01 00:35:29.000000000 -0700
@@ -824,7 +824,7 @@
    if (!ic)
       return;
 
-   IclassApplyCopy(ic, d, w, h, 0, 0, STATE_NORMAL, &pmm, 1);
+   IclassApplyCopy(ic, d, w, h, 0, 0, STATE_NORMAL, &pmm, 1, ST_ICON);
    PastePixmap(disp, d, pmm.pmap, pmm.mask, x, y);
    FreePmapMask(&pmm);
 }
@@ -839,8 +839,7 @@
    ic = FindItem("DEFAULT_ICON_BUTTON", 0, LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
    if (!ic)
       return;
-
-   IclassApplyCopy(ic, d, w, h, 0, 0, STATE_NORMAL, &pmm, 1);
+   IclassApplyCopy(ic, d, w, h, 0, 0, STATE_NORMAL, &pmm, 1, ST_ICON);
    PasteMask(disp, d, pmm.mask, x, y, w, h);
    FreePmapMask(&pmm);
 }
@@ -1622,8 +1621,9 @@
 
        ic = FindItem("ICONBOX_SCROLLBAR_BASE_VERTICAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
-       if (ic)
-          IclassApply(ic, ib->scroll_win, -1, -1, 0, 0, STATE_NORMAL, 0);
+       if (ic) {
+          IclassApply(ic, ib->scroll_win, -1, -1, 0, 0, STATE_NORMAL, 0, ST_ICON);
+        }
        ic = FindItem("ICONBOX_SCROLLBAR_KNOB_VERTICAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
        if (ic)
@@ -1634,7 +1634,7 @@
                state = STATE_HILITED;
             if (ib->scrollbar_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->scrollbar_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->scrollbar_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_SCROLLKNOB_VERTICAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1646,7 +1646,7 @@
                state = STATE_HILITED;
             if (ib->scrollbar_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->scrollbarknob_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->scrollbarknob_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_ARROW_UP", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1658,7 +1658,7 @@
                state = STATE_HILITED;
             if (ib->arrow1_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->arrow1_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->arrow1_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_ARROW_DOWN", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1670,7 +1670,7 @@
                state = STATE_HILITED;
             if (ib->arrow2_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->arrow2_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->arrow2_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        /* remove this coment when fixed */
      }
@@ -1864,8 +1864,9 @@
 
        ic = FindItem("ICONBOX_SCROLLBAR_BASE_HORIZONTAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
-       if (ic)
-          IclassApply(ic, ib->scroll_win, -1, -1, 0, 0, STATE_NORMAL, 0);
+       if (ic) {
+          IclassApply(ic, ib->scroll_win, -1, -1, 0, 0, STATE_NORMAL, 0, ST_ICON);
+        }
        ic = FindItem("ICONBOX_SCROLLBAR_KNOB_HORIZONTAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
        if (ic)
@@ -1876,7 +1877,7 @@
                state = STATE_HILITED;
             if (ib->scrollbar_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->scrollbar_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->scrollbar_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_SCROLLKNOB_HORIZONTAL", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1888,7 +1889,7 @@
                state = STATE_HILITED;
             if (ib->scrollbar_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->scrollbarknob_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->scrollbarknob_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_ARROW_LEFT", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1900,7 +1901,7 @@
                state = STATE_HILITED;
             if (ib->arrow1_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->arrow1_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->arrow1_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
        ic = FindItem("ICONBOX_ARROW_RIGHT", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
@@ -1912,7 +1913,7 @@
                state = STATE_HILITED;
             if (ib->arrow2_clicked)
                state = STATE_CLICKED;
-            IclassApply(ic, ib->arrow2_win, -1, -1, 0, 0, state, 0);
+            IclassApply(ic, ib->arrow2_win, -1, -1, 0, 0, state, 0, ST_ICON);
          }
      }
    PropagateShapes(ib->win);
@@ -2103,7 +2104,7 @@
      {
        EMoveResizeWindow(disp, ib->cover_win, ib_xlt, ib_ylt, ib_ww, ib_hh);
        EMapWindow(disp, ib->cover_win);
-       IclassApply(ib_ic_cover, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
+       IclassApply(ib_ic_cover, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0, 
ST_ICON);
      }
    else
      {
@@ -2119,7 +2120,7 @@
 
             GetWinWH(ib->icon_win, (unsigned int *)&w, (unsigned int *)&h);
             IclassApplyCopy(ib_ic_box, ib->icon_win, w, h, 0, 0, STATE_NORMAL,
-                            &pmm, 1);
+                            &pmm, 1, ST_ICON);
             EShapeCombineMask(disp, ib->icon_win, ShapeBounding, 0, 0,
                               pmm.mask, ShapeSet);
             PastePixmap(disp, ib->pmap, pmm.pmap, pmm.mask, 0, 0);
diff -ur e.orig/src/ipc.c e/src/ipc.c
--- e.orig/src/ipc.c    2004-05-30 20:18:20.000000000 -0700
+++ e/src/ipc.c 2004-06-01 00:36:14.000000000 -0700
@@ -1295,7 +1295,7 @@
                         }
                       pq = Mode.queue_up;
                       Mode.queue_up = 0;
-                      IclassApply(iclass, win, w, h, 0, 0, st, 0);
+                      IclassApply(iclass, win, w, h, 0, 0, st, 0, ST_UNKNWN);
                       Mode.queue_up = pq;
                    }
               }
@@ -1337,7 +1337,7 @@
                            pq = Mode.queue_up;
                            Mode.queue_up = 0;
                            IclassApplyCopy(iclass, win, w, h, 0, 0, st, &pmm,
-                                           1);
+                                           1, ST_UNKNWN);
                            Mode.queue_up = pq;
                            Esnprintf(buf, sizeof(buf), "0x%08x 0x%08x",
                                      (unsigned)pmm.pmap, (unsigned)pmm.mask);
diff -ur e.orig/src/menus.c e/src/menus.c
--- e.orig/src/menus.c  2004-05-30 20:18:20.000000000 -0700
+++ e/src/menus.c       2004-06-01 00:36:52.000000000 -0700
@@ -770,7 +770,7 @@
             ih = 0;
             GetWinWH(m->items[i]->icon_win, &iw, &ih);
             IclassApply(m->items[i]->icon_iclass, m->items[i]->icon_win, iw,
-                        ih, 0, 0, STATE_NORMAL, 0);
+                        ih, 0, 0, STATE_NORMAL, 0, ST_MENU_ITEM);
          }
        if (x + maxw > mmw)
           mmw = x + maxw;
@@ -828,7 +828,7 @@
        GetWinWH(m->win, &w, &h);
        FreePmapMask(&m->pmm);
        IclassApplyCopy(m->style->bg_iclass, m->win, w, h, 0, 0,
-                       STATE_NORMAL, &m->pmm, 1);
+                       STATE_NORMAL, &m->pmm, 1, ST_MENU);
        ESetWindowBackgroundPixmap(disp, m->win, m->pmm.pmap);
        EShapeCombineMask(disp, m->win, ShapeBounding, 0, 0, m->pmm.mask,
                          ShapeSet);
@@ -882,12 +882,13 @@
                    {
                       PmapMask            pmm;
 
-                      if (mi->child)
+                      if (mi->child) {
                          IclassApplyCopy(m->style->sub_iclass, mi->win, w, h,
-                                         0, 0, mi->state, &pmm, 1);
-                      else
+                                         0, 0, mi->state, &pmm, 1, ST_MENU_ITEM);
+                      } else {
                          IclassApplyCopy(m->style->item_iclass, mi->win, w, h,
-                                         0, 0, mi->state, &pmm, 1);
+                                         0, 0, mi->state, &pmm, 1, ST_MENU_ITEM);
+                       }
                       if (pmm.mask)
                         {
                            XSetClipMask(disp, gc, pmm.mask);
@@ -901,12 +902,13 @@
               }
             else
               {
-                 if (mi->child)
+                 if (mi->child) {
                     IclassApplyCopy(m->style->sub_iclass, mi->win, w, h, 0, 0,
-                                    mi->state, mi_pmm, 1);
-                 else
+                                    mi->state, mi_pmm, 1, ST_MENU_ITEM);
+                 } else {
                     IclassApplyCopy(m->style->item_iclass, mi->win, w, h, 0, 0,
-                                    mi->state, mi_pmm, 1);
+                                    mi->state, mi_pmm, 1, ST_MENU_ITEM);
+                  }
               }
          }
      }
@@ -931,11 +933,10 @@
        GetWinXY(mi->win, &x, &y);
        if (!m->style->use_item_bg)
          {
-            if ((mi->state != STATE_NORMAL) || (mi->child))
+            if ((mi->state != STATE_NORMAL) || (mi->child)) {
                IclassApply(m->style->item_iclass, mi->win, w, h, 0, 0,
-                           mi->state, 0);
-            else
-              {
+                           mi->state, 0, ST_MENU);
+            } else {
                  ESetWindowBackgroundPixmap(disp, mi->win, ParentRelative);
                  EShapeCombineMask(disp, mi->win, ShapeBounding, 0, 0, None,
                                    ShapeSet);
@@ -944,12 +945,13 @@
          }
        else
          {
-            if (mi->child)
+            if (mi->child) {
                IclassApply(m->style->sub_iclass, mi->win, w, h, 0, 0,
-                           mi->state, 0);
-            else
+                           mi->state, 0, ST_MENU);
+            } else {
                IclassApply(m->style->item_iclass, mi->win, w, h, 0, 0,
-                           mi->state, 0);
+                           mi->state, 0, ST_MENU);
+             }
          }
      }
 
diff -ur e.orig/src/pager.c e/src/pager.c
--- e.orig/src/pager.c  2004-05-30 20:18:20.000000000 -0700
+++ e/src/pager.c       2004-06-01 00:37:22.000000000 -0700
@@ -212,8 +212,9 @@
    pq = Mode.queue_up;
    Mode.queue_up = 0;
    ic = FindItem("PAGER_SEL", 0, LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
-   if (ic)
-      IclassApply(ic, p->sel_win, p->w / ax, p->h / ay, 0, 0, STATE_NORMAL, 0);
+   if (ic) {
+      IclassApply(ic, p->sel_win, p->w / ax, p->h / ay, 0, 0, STATE_NORMAL, 0, 
ST_PAGER);
+   }
    Mode.queue_up = pq;
    return p;
 }
@@ -269,7 +270,7 @@
        cy = desks.desk[p->desktop].current_area_y;
        EMoveResizeWindow(disp, p->sel_win, cx * p->dw, cy * p->dh, p->dw,
                          p->dh);
-       IclassApply(ic, p->sel_win, p->dw, p->dh, 0, 0, STATE_NORMAL, 0);
+       IclassApply(ic, p->sel_win, p->dw, p->dh, 0, 0, STATE_NORMAL, 0, ST_PAGER);
      }
    Mode.queue_up = pq;
 
@@ -530,9 +531,10 @@
             ImageClass         *ic = NULL;
 
             ic = FindItem("PAGER_WIN", 0, LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
-            if (ic)
+            if (ic) {
                IclassApplyCopy(ic, ewin->win, w, h, 0, 0, STATE_NORMAL,
-                               &ewin->mini_pmm, 1);
+                               &ewin->mini_pmm, 1, ST_PAGER);
+             }
          }
        else
          {
@@ -624,6 +626,7 @@
        dq->di = NULL;
        dq->x = 0;
        dq->y = 0;
+       dq->image_type = ST_PAGER;
        AddItem(dq, "DRAW", dq->win, LIST_TYPE_DRAW);
        return;
      }
@@ -645,9 +648,10 @@
 
                  ic = FindItem("PAGER_BACKGROUND", 0, LIST_FINDBY_NAME,
                                LIST_TYPE_ICLASS);
-                 if (ic)
+                 if (ic) {
                     IclassApplyCopy(ic, p->win, p->w / ax, p->h / ay, 0, 0,
-                                    STATE_NORMAL, &p->bgpmap, 0);
+                                    STATE_NORMAL, &p->bgpmap, 0, ST_PAGER);
+                  }
               }
             else
               {
@@ -1048,9 +1052,10 @@
                  EMapWindow(disp, p->sel_win);
                  ic = FindItem("PAGER_SEL", 0, LIST_FINDBY_NAME,
                                LIST_TYPE_ICLASS);
-                 if (ic)
+                 if (ic) {
                     IclassApply(ic, p->sel_win, p->dw, p->dh, 0, 0,
-                                STATE_NORMAL, 0);
+                                STATE_NORMAL, 0, ST_PAGER);
+                  }
               }
          }
        Efree(pl);
@@ -1215,7 +1220,7 @@
                  hh = (i * h) / w;
                  xx = x + ((w - ww) / 2);
                  yy = y + ((h - hh) / 2);
-                 IclassApply(ic, p->hi_win, ww, hh, 0, 0, STATE_NORMAL, 0);
+                 IclassApply(ic, p->hi_win, ww, hh, 0, 0, STATE_NORMAL, 0, ST_PAGER);
                  EMoveResizeWindow(disp, p->hi_win, xx, yy, ww, hh);
                  XClearWindow(disp, p->hi_win);
                  {
@@ -1239,7 +1244,7 @@
                  hh = i;
                  xx = x + ((w - ww) / 2);
                  yy = y + ((h - hh) / 2);
-                 IclassApply(ic, p->hi_win, ww, hh, 0, 0, STATE_NORMAL, 0);
+                 IclassApply(ic, p->hi_win, ww, hh, 0, 0, STATE_NORMAL, 0, ST_PAGER);
                  EMoveResizeWindow(disp, p->hi_win, xx, yy, ww, hh);
                  XClearWindow(disp, p->hi_win);
                  {
diff -ur e.orig/src/progress.c e/src/progress.c
--- e.orig/src/progress.c       2004-05-30 20:18:20.000000000 -0700
+++ e/src/progress.c    2004-05-30 20:45:09.000000000 -0700
@@ -97,7 +97,7 @@
    Mode.queue_up = 0;
    TclassApply(p->inc, p->n_win, p->h * 5, p->h, 0, 0, STATE_CLICKED, 0,
               p->tnc, s);
-   IclassApply(p->inc, p->p_win, w, p->h, 1, 0, STATE_NORMAL, 0);
+   IclassApply(p->inc, p->p_win, w, p->h, 1, 0, STATE_NORMAL, 0, ST_UNKNWN);
    EResizeWindow(disp, p->p_win, w, p->h);
    Mode.queue_up = pq;
    XFlush(disp);
@@ -119,9 +119,9 @@
       w = p->w;
    pq = Mode.queue_up;
    Mode.queue_up = 0;
-   IclassApply(p->ic, p->win, p->w - (p->h * 5), p->h, 0, 0, STATE_NORMAL, 0);
-   IclassApply(p->inc, p->n_win, (p->h * 5), p->h, 0, 0, STATE_CLICKED, 0);
-   IclassApply(p->ipc, p->p_win, w, p->h, 1, 0, STATE_NORMAL, 0);
+   IclassApply(p->ic, p->win, p->w - (p->h * 5), p->h, 0, 0, STATE_NORMAL, 0, 
ST_UNKNWN);
+   IclassApply(p->inc, p->n_win, (p->h * 5), p->h, 0, 0, STATE_CLICKED, 0, ST_UNKNWN);
+   IclassApply(p->ipc, p->p_win, w, p->h, 1, 0, STATE_NORMAL, 0, ST_UNKNWN);
    EMapRaised(disp, p->win);
    EMapRaised(disp, p->n_win);
    EMapRaised(disp, p->p_win);
diff -ur e.orig/src/settings.c e/src/settings.c
--- e.orig/src/settings.c       2004-05-30 20:18:20.000000000 -0700
+++ e/src/settings.c    2004-06-01 00:16:00.000000000 -0700
@@ -1058,7 +1058,7 @@
        ic = FindItem("SETTINGS_DESKTOP_AREA", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
        if (ic)
-          IclassApply(ic, win, w, h, 0, 0, STATE_NORMAL, 0);
+          IclassApply(ic, win, w, h, 0, 0, STATE_NORMAL, 0, ST_UNKNWN);
        for (i = 0; i < ENLIGHTENMENT_CONF_NUM_DESKTOPS; i++)
           wins[i] = 0;
        called = 1;
@@ -1268,13 +1268,13 @@
        ic = FindItem("SETTINGS_AREA_AREA", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
        if (ic)
-          IclassApply(ic, win, w, h, 0, 0, STATE_NORMAL, 0);
+          IclassApply(ic, win, w, h, 0, 0, STATE_NORMAL, 0, ST_UNKNWN);
        awin = ECreateWindow(win, 0, 0, 18, 14, 0);
        ic = FindItem("SETTINGS_AREADESK_AREA", 0, LIST_FINDBY_NAME,
                      LIST_TYPE_ICLASS);
        if (ic)
          {
-            IclassApplyCopy(ic, awin, 18, 14, 0, 0, STATE_NORMAL, &pmm, 0);
+            IclassApplyCopy(ic, awin, 18, 14, 0, 0, STATE_NORMAL, &pmm, 0, ST_UNKNWN);
             ESetWindowBackgroundPixmap(disp, awin, pmm.pmap);
             FreePmapMask(&pmm);
          }
@@ -2442,6 +2442,25 @@
 static char         tmp_userbg;
 static int          tmp_bg_timeout;
 static int          tmp_theme_transparency;
+static char         tmp_st_enabled;
+static char         tmp_st_border_isopaque;
+static char         tmp_st_widget_isopaque;
+static char         tmp_st_tooltip_isopaque;
+static char         tmp_st_tooltip_isaqua;
+static char         tmp_st_menu_isopaque;
+static char         tmp_st_menu_isaqua;
+static char         tmp_st_menu_item_isopaque;
+static char         tmp_st_menu_item_isaqua;
+static char         tmp_st_hilight_isopaque;
+static char         tmp_st_hilight_isaqua;
+static char         tmp_st_dialog_isopaque;
+static char         tmp_st_dialog_aqua;
+static char         tmp_st_pager_isopaque;
+static char         tmp_st_pager_aqua;
+static char         tmp_st_warp_isopaque;
+static char         tmp_st_warp_isaqua;
+static char         tmp_st_icon_isopaque;
+static char         tmp_st_icon_isaqua;
 
 static void         BG_RedrawView(char nuke_old);
 
@@ -2456,6 +2475,62 @@
        Conf.backgrounds.hiquality = tmp_hiq;
        Conf.backgrounds.user = tmp_userbg;
 #ifdef ENABLE_THEME_TRANSPARENCY
+
+        if(tmp_st_border_isopaque == 1) {
+          Conf.st_transparency.border |= BMASK_ISOPAQUE;
+        } else {
+          Conf.st_transparency.border &= ~BMASK_ISOPAQUE;
+        }
+        if(tmp_st_dialog_isopaque == 1) {
+          Conf.st_transparency.dialog |= BMASK_ISOPAQUE;
+        } else {
+          Conf.st_transparency.dialog &= ~BMASK_ISOPAQUE;
+        }
+        if(tmp_st_widget_isopaque == 1) {
+          Conf.st_transparency.widget |= BMASK_ISOPAQUE;
+        } else {
+          Conf.st_transparency.widget &= ~BMASK_ISOPAQUE;
+        }
+        if(tmp_st_menu_isopaque == 1) {
+          Conf.st_transparency.menu |= BMASK_ISOPAQUE;
+          Conf.st_transparency.menu &= ~BMASK_AQUA;
+        } else if(tmp_st_menu_isaqua == 1) {
+          Conf.st_transparency.menu &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.menu |= BMASK_AQUA;
+        } else {
+          Conf.st_transparency.menu &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.menu &= ~BMASK_AQUA;
+        }
+        if(tmp_st_menu_item_isopaque == 1) {
+          Conf.st_transparency.menu_item &= ~BMASK_AQUA;
+          Conf.st_transparency.menu_item |= BMASK_ISOPAQUE;
+        } else if(tmp_st_menu_item_isaqua == 1) {
+          Conf.st_transparency.menu_item &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.menu_item |= BMASK_AQUA;
+        } else {
+          Conf.st_transparency.menu_item &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.menu_item &= ~BMASK_AQUA;
+        }
+        if(tmp_st_tooltip_isopaque == 1) {
+          Conf.st_transparency.tooltip &= ~BMASK_AQUA;
+          Conf.st_transparency.tooltip |= BMASK_ISOPAQUE;
+        } else if(tmp_st_tooltip_isaqua == 1) {
+          Conf.st_transparency.tooltip &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.tooltip |= BMASK_AQUA;
+        } else {
+          Conf.st_transparency.tooltip &= ~BMASK_AQUA;
+          Conf.st_transparency.tooltip &= ~BMASK_ISOPAQUE;
+        }
+        if(tmp_st_icon_isopaque == 1) {
+          Conf.st_transparency.icon &= ~BMASK_AQUA;
+          Conf.st_transparency.icon |= BMASK_ISOPAQUE;
+        } else if(tmp_st_icon_isaqua == 1) {
+          Conf.st_transparency.icon &= ~BMASK_ISOPAQUE;
+          Conf.st_transparency.icon |= BMASK_AQUA;
+        } else {
+          Conf.st_transparency.icon &= ~BMASK_AQUA;
+          Conf.st_transparency.icon &= ~BMASK_ISOPAQUE;
+        }
        TransparencySet(tmp_theme_transparency);
 #endif
        ESetColor(&(tmp_bg->bg_solid), tmp_bg_r, tmp_bg_g, tmp_bg_b);
@@ -2498,6 +2573,7 @@
      {
        BackgroundImagesKeep(tmp_bg, 0);
      }
+   HandleDrawQueue();
    autosave();
 
    data = NULL;
@@ -2772,10 +2848,10 @@
 
                  if (i == tmp_bg_selected)
                     IclassApplyCopy(ic, pmap, 64 + 8, 48 + 8, 0, 0,
-                                    STATE_CLICKED, &pmm, 0);
+                                    STATE_CLICKED, &pmm, 0, ST_UNKNWN);
                  else
                     IclassApplyCopy(ic, pmap, 64 + 8, 48 + 8, 0, 0,
-                                    STATE_NORMAL, &pmm, 0);
+                                    STATE_NORMAL, &pmm, 0, ST_UNKNWN);
                  XCopyArea(disp, pmm.pmap, pmap, gc, 0, 0, 64 + 8, 48 + 8, x,
                            0);
                  FreePmapMask(&pmm);
@@ -3180,6 +3256,36 @@
    tmp_bg_timeout = Conf.backgrounds.timeout;
    tmp_theme_transparency = Conf.theme.transparency;
 
+   if(Conf.st_transparency.border & BMASK_ISOPAQUE) {
+     tmp_st_border_isopaque = 1;
+   }
+   if(Conf.st_transparency.widget & BMASK_ISOPAQUE) {
+     tmp_st_widget_isopaque = 1;
+   }
+   if(Conf.st_transparency.dialog & BMASK_ISOPAQUE) {
+     tmp_st_dialog_isopaque = 1;
+   }
+   if(Conf.st_transparency.tooltip & BMASK_ISOPAQUE) {
+     tmp_st_tooltip_isopaque = 1;
+   } else if(Conf.st_transparency.tooltip & BMASK_AQUA) {
+     tmp_st_tooltip_isaqua = 1;
+   }
+   if(Conf.st_transparency.icon & BMASK_ISOPAQUE) {
+     tmp_st_icon_isopaque = 1;
+   } else if(Conf.st_transparency.icon & BMASK_AQUA) {
+     tmp_st_icon_isaqua = 1;
+   }
+   if(Conf.st_transparency.menu & BMASK_ISOPAQUE) {
+     tmp_st_menu_isopaque = 1;
+   } else if(Conf.st_transparency.menu & BMASK_AQUA) {
+     tmp_st_menu_isaqua = 1;
+   }
+   if(Conf.st_transparency.menu_item & BMASK_ISOPAQUE) {
+     tmp_st_menu_item_isopaque = 1;
+   } else if(Conf.st_transparency.menu_item & BMASK_AQUA) {
+     tmp_st_menu_item_isaqua = 1;
+   }
+
    d = bg_sel_dialog = DialogCreate("CONFIGURE_BG");
    DialogSetTitle(d, _("Desktop Background Settings"));
 
@@ -3570,6 +3676,108 @@
    DialogItemSetPadding(di, 2, 2, 2, 2);
    DialogItemSetFill(di, 1, 0);
    DialogItemSeparatorSetOrientation(di, 0);
+
+   di = DialogAddItem(table, DITEM_TEXT);
+   DialogItemSetColSpan(di, 3);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 0, 0);
+   DialogItemSetAlign(di, 0, 512);
+   DialogItemTextSetText(di, _("Selective Transparency (Changes might require 
restart):"));
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 3);
+   DialogItemCheckButtonSetText(di, _("Keep Borders Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_border_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_border_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 1);
+   DialogItemCheckButtonSetText(di, _("Keep Tooltips Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_tooltip_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_tooltip_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 2);
+   DialogItemCheckButtonSetText(di, _("Enable Aqua Transparency [Tooltips]"));
+   DialogItemCheckButtonSetState(di, tmp_st_tooltip_isaqua);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_tooltip_isaqua);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 3);
+   DialogItemCheckButtonSetText(di, _("Keep Dialog Contents Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_dialog_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_dialog_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 3);
+   DialogItemCheckButtonSetText(di, _("Keep Dialog Widgets Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_widget_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_widget_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 1);
+   DialogItemCheckButtonSetText(di, _("Keep Menus Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_menu_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_menu_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 2);
+   DialogItemCheckButtonSetText(di, _("Enable Aqua Transparency [Menus]"));
+   DialogItemCheckButtonSetState(di, tmp_st_menu_isaqua);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_menu_isaqua);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 1);
+   DialogItemCheckButtonSetText(di, _("Keep Menu Items Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_menu_item_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_menu_item_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 2);
+   DialogItemCheckButtonSetText(di, _("Enable Aqua Transparency [Menu Items]"));
+   DialogItemCheckButtonSetState(di, tmp_st_menu_item_isaqua);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_menu_item_isaqua);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 1);
+   DialogItemCheckButtonSetText(di, _("Keep Icons Opaque"));
+   DialogItemCheckButtonSetState(di, tmp_st_icon_isopaque);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_icon_isopaque);
+
+   di = DialogAddItem(table, DITEM_CHECKBUTTON);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSetColSpan(di, 2);
+   DialogItemCheckButtonSetText(di, _("Enable Aqua Transparency [Icons]"));
+   DialogItemCheckButtonSetState(di, tmp_st_icon_isaqua);
+   DialogItemCheckButtonSetPtr(di, &tmp_st_icon_isaqua);
+
+   di = DialogAddItem(table, DITEM_SEPARATOR);
+   DialogItemSetColSpan(di, 3);
+   DialogItemSetPadding(di, 2, 2, 2, 2);
+   DialogItemSetFill(di, 1, 0);
+   DialogItemSeparatorSetOrientation(di, 0);
+
 #endif /* ENABLE_THEME_TRANSPARENCY */
 
    DialogAddButton(d, _("OK"), CB_ConfigureBG, 1);
diff -ur e.orig/src/setup.c e/src/setup.c
--- e.orig/src/setup.c  2004-05-30 20:18:20.000000000 -0700
+++ e/src/setup.c       2004-06-01 00:05:01.000000000 -0700
@@ -436,6 +436,12 @@
    Conf.warpmenus = 1;
    Conf.manual_placement = 0;
    Conf.edge_flip_resistance = 15;
+   Conf.st_transparency.menu |= BMASK_AQUA;
+   Conf.st_transparency.menu_item |= BMASK_ISOPAQUE;
+   Conf.st_transparency.tooltip |= BMASK_AQUA;
+   Conf.st_transparency.widget |= BMASK_ISOPAQUE;
+   Conf.st_transparency.border |= BMASK_ISOPAQUE;
+   Conf.st_transparency.icon |= BMASK_ISOPAQUE;
 
    ScreenInit();
 
diff -ur e.orig/src/startup.c e/src/startup.c
--- e.orig/src/startup.c        2004-05-30 20:18:20.000000000 -0700
+++ e/src/startup.c     2004-05-30 20:46:06.000000000 -0700
@@ -219,8 +219,8 @@
 
        pq = Mode.queue_up;
        Mode.queue_up = 0;
-       IclassApply(ic, b1, VRoot.w, Conf.desks.dragbar_width, 0, 0, 0, 0);
-       IclassApply(ic, b2, VRoot.w, Conf.desks.dragbar_width, 0, 0, 0, 0);
+       IclassApply(ic, b1, VRoot.w, Conf.desks.dragbar_width, 0, 0, 0, 0, ST_UNKNWN);
+       IclassApply(ic, b2, VRoot.w, Conf.desks.dragbar_width, 0, 0, 0, 0, ST_UNKNWN);
        Mode.queue_up = pq;
        BackgroundApply(bg, win1, 1);
        BackgroundApply(bg, win2, 1);
diff -ur e.orig/src/tooltips.c e/src/tooltips.c
--- e.orig/src/tooltips.c       2004-05-30 20:18:20.000000000 -0700
+++ e/src/tooltips.c    2004-06-01 00:37:51.000000000 -0700
@@ -272,7 +272,7 @@
        iy = (h - ih) / 2;
        EMoveResizeWindow(disp, tt->iwin, ix, iy, iw, ih);
        EMapWindow(disp, tt->iwin);
-       IclassApply(tt->tooltippic, tt->iwin, iw, ih, 0, 0, STATE_NORMAL, 0);
+       IclassApply(tt->tooltippic, tt->iwin, iw, ih, 0, 0, STATE_NORMAL, 0, 
ST_TOOLTIP);
      }
    else
       EUnmapWindow(disp, tt->iwin);
@@ -374,13 +374,13 @@
 
    EMoveResizeWindow(disp, tt->win, xx - ww, yy - hh, w, h);
 
-   IclassApply(tt->s_iclass[0], tt->s_win[0], 8, 8, 0, 0, STATE_NORMAL, 0);
-   IclassApply(tt->s_iclass[1], tt->s_win[1], 16, 16, 0, 0, STATE_NORMAL, 0);
-   IclassApply(tt->s_iclass[2], tt->s_win[2], 24, 24, 0, 0, STATE_NORMAL, 0);
-   IclassApply(tt->s_iclass[3], tt->s_win[3], 32, 32, 0, 0, STATE_NORMAL, 0);
+   IclassApply(tt->s_iclass[0], tt->s_win[0], 8, 8, 0, 0, STATE_NORMAL, 0, 
ST_TOOLTIP);
+   IclassApply(tt->s_iclass[1], tt->s_win[1], 16, 16, 0, 0, STATE_NORMAL, 0, 
ST_TOOLTIP);
+   IclassApply(tt->s_iclass[2], tt->s_win[2], 24, 24, 0, 0, STATE_NORMAL, 0, 
ST_TOOLTIP);
+   IclassApply(tt->s_iclass[3], tt->s_win[3], 32, 32, 0, 0, STATE_NORMAL, 0, 
ST_TOOLTIP);
    if (Conf.theme.transparency && tt->iclass->norm.normal->transparent == 0)
       tt->iclass->norm.normal->transparent = 2;
-   IclassApply(tt->iclass, tt->win, w, h, 0, 0, STATE_NORMAL, 0);
+   IclassApply(tt->iclass, tt->win, w, h, 0, 0, STATE_NORMAL, 0, ST_TOOLTIP);
    EMapRaised(disp, tt->s_win[0]);
    EMapRaised(disp, tt->s_win[1]);
    EMapRaised(disp, tt->s_win[2]);
diff -ur e.orig/src/warp.c e/src/warp.c
--- e.orig/src/warp.c   2004-05-30 20:18:20.000000000 -0700
+++ e/src/warp.c        2004-06-01 00:38:15.000000000 -0700
@@ -240,9 +240,9 @@
             EMoveResizeWindow(disp, warplist[i].win, 0, (h * i), mw, mh);
             if (ewin == warplist[i].ewin)
                IclassApply(ic, warplist[i].win, mw, mh, 0, 0, STATE_CLICKED,
-                           0);
+                           0, ST_WARP);
             else
-               IclassApply(ic, warplist[i].win, mw, mh, 0, 0, STATE_NORMAL, 0);
+               IclassApply(ic, warplist[i].win, mw, mh, 0, 0, STATE_NORMAL, 0, 
ST_WARP);
          }
        PropagateShapes(warpFocusTitleWindow);
        EMapWindow(disp, warpFocusTitleWindow);
@@ -266,7 +266,7 @@
 
             state = (ewin == warplist[i].ewin) ? STATE_CLICKED : STATE_NORMAL;
 
-            IclassApply(ic, warplist[i].win, mw, mh, 0, 0, state, 0);
+            IclassApply(ic, warplist[i].win, mw, mh, 0, 0, state, 0, ST_WARP);
             TclassApply(ic, warplist[i].win, mw, mh, 0, 0, state, 0,
                         tc, warplist[i].txt);
          }


-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
enlightenment-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to