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