Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h eobj.c ewin-ops.c ewins.c ewmh.c hints.c ipc.c moveresize.c snaps.c windowmatch.c Log Message: Fix various opacity setting bugs. =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v retrieving revision 1.396 retrieving revision 1.397 diff -u -3 -r1.396 -r1.397 --- E.h 23 Mar 2005 18:28:31 -0000 1.396 +++ E.h 24 Mar 2005 23:38:07 -0000 1.397 @@ -538,6 +538,7 @@ #define EoSetLayer(eo, _l) EobjSetLayer(&((eo)->o), (_l)) #if USE_COMPOSITE #define EoSetOpacity(eo, _o) (eo)->o.opacity = (_o) +#define EoGetOpacity(eo) ((eo)->o.opacity) #define EoChangeOpacity(eo, _o) EobjChangeOpacity(&((eo)->o), _o) #define EoSetShadow(eo, _x) (eo)->o.shadow = (_x) #define EoGetShadow(eo) ((eo)->o.shadow) @@ -728,7 +729,6 @@ unsigned vroot:1; /* Virtual root window */ unsigned inhibit_iconify:1; unsigned autosave:1; - unsigned int opacity; } props; struct { @@ -751,6 +751,7 @@ { char *wm_name; char *wm_icon_name; + unsigned int opacity; } ewmh; int shape_x, shape_y; int req_x, req_y; @@ -1558,6 +1559,7 @@ #define EWIN_CHANGE_ICON_PMAP (1<<2) #define EWIN_CHANGE_DESKTOP (1<<3) #define EWIN_CHANGE_LAYER (1<<4) +#define EWIN_CHANGE_OPACITY (1<<5) void EwinRefresh(EWin * ewin); void EwinUpdateAfterMoveResize(EWin * ewin, int resize); @@ -1589,8 +1591,6 @@ void EwinRememberPositionGet(EWin * ewin, int *px, int *py); void EwinChange(EWin * ewin, unsigned int flag); -void EwinChangesStart(EWin * ewin); -void EwinChangesProcess(EWin * ewin); void EwinsEventsConfigure(int mode); void EwinsSetFree(void); @@ -1655,8 +1655,8 @@ void EWMH_SetWindowName(Window win, const char *name); void EWMH_SetWindowDesktop(const EWin * ewin); void EWMH_SetWindowState(const EWin * ewin); -void EWMH_SetWindowBorder(EWin * ewin); -void EWMH_SetWindowOpacity(EWin * ewin, unsigned int opacity); +void EWMH_SetWindowBorder(const EWin * ewin); +void EWMH_SetWindowOpacity(const EWin * ewin); void EWMH_GetWindowHints(EWin * ewin); void EWMH_DelWindowHints(const EWin * ewin); void EWMH_ProcessClientMessage(XClientMessageEvent * event); @@ -1811,7 +1811,7 @@ void HintsSetWindowDesktop(EWin * ewin); void HintsSetWindowArea(EWin * ewin); void HintsSetWindowState(EWin * ewin); -void HintsSetWindowOpacity(EWin * ewin, unsigned int opacity); +void HintsSetWindowOpacity(EWin * ewin); void HintsSetWindowHints(EWin * ewin); void HintsSetWindowBorder(EWin * ewin); void HintsGetWindowHints(EWin * ewin); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/eobj.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- eobj.c 19 Mar 2005 16:40:01 -0000 1.14 +++ eobj.c 24 Mar 2005 23:38:08 -0000 1.15 @@ -261,6 +261,7 @@ void EobjChangeOpacity(EObj * eo, unsigned int opacity) { + eo->opacity = opacity; ECompMgrWinChangeOpacity(eo, opacity); } #endif =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewin-ops.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- ewin-ops.c 19 Mar 2005 16:40:01 -0000 1.17 +++ ewin-ops.c 24 Mar 2005 23:38:08 -0000 1.18 @@ -1656,7 +1656,8 @@ unsigned int op; op = OpacityExt(opacity); - HintsSetWindowOpacity(ewin, op); + ewin->ewmh.opacity = op; + HintsSetWindowOpacity(ewin); EoChangeOpacity(ewin, op); SnapshotEwinUpdate(ewin, SNAP_USE_OPACITY); } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewins.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- ewins.c 21 Mar 2005 19:02:49 -0000 1.33 +++ ewins.c 24 Mar 2005 23:38:08 -0000 1.34 @@ -41,6 +41,9 @@ /* StructureNotifyMask | */ ResizeRedirectMask | \ PropertyChangeMask | ColormapChangeMask | VisibilityChangeMask) +static void EwinChangesStart(EWin * ewin); +static void EwinChangesProcess(EWin * ewin); + static void EwinHandleEventsToplevel(XEvent * ev, void *prm); static void EwinHandleEventsContainer(XEvent * ev, void *prm); static void EwinHandleEventsClient(XEvent * ev, void *prm); @@ -94,6 +97,9 @@ ewin->client.mwm_func_minimize = 1; ewin->client.mwm_func_maximize = 1; ewin->client.mwm_func_close = 1; + + ewin->ewmh.opacity = 0xFFFFFFFF; + EoSetWin(ewin, ECreateWindow(VRoot.win, -10, -10, 1, 1, 1)); ewin->win_container = ECreateWindow(EoGetWin(ewin), 0, 0, 1, 1, 0); #if 0 /* ENABLE_GNOME - Not actually used */ @@ -106,7 +112,6 @@ EobjInit(&ewin->o, EOBJ_TYPE_EWIN, -1, -1, -1, -1); EoSetDesk(ewin, DesksGetCurrent()); EoSetLayer(ewin, 4); - ewin->props.opacity = 0xFFFFFFFF; att.event_mask = EWIN_CONTAINER_EVENT_MASK; att.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask; @@ -524,6 +529,8 @@ SnapshotEwinMatch(ewin); /* Saved settings */ if (Mode.wm.startup) EHintsGetInfo(ewin); /* E restart hints */ + EoSetOpacity(ewin, ewin->ewmh.opacity); + ICCCM_MatchSize(ewin); EwinAdopt(ewin); @@ -538,6 +545,7 @@ EwinInstantShade(ewin, 1); HintsSetWindowState(ewin); + HintsSetWindowOpacity(ewin); HintsSetClientList(); if (EventDebug(EDBUG_TYPE_EWINS)) @@ -570,6 +578,8 @@ WindowMatchEwinOps(ewin); /* Window matches */ SnapshotEwinMatch(ewin); /* Saved settings */ + EoSetOpacity(ewin, ewin->ewmh.opacity); + ICCCM_MatchSize(ewin); EwinAdopt(ewin); @@ -584,6 +594,7 @@ EwinInstantShade(ewin, 1); HintsSetWindowState(ewin); + HintsSetWindowOpacity(ewin); HintsSetClientList(); return ewin; @@ -1724,6 +1735,12 @@ ModulesSignal(ESIGNAL_EWIN_CHANGE_ICON, ewin); } + if (EWinChanges.flags & EWIN_CHANGE_OPACITY) + { + EoChangeOpacity(ewin, ewin->ewmh.opacity); + SnapshotEwinUpdate(ewin, SNAP_USE_OPACITY); + } + EWinChanges.flags = 0; } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ewmh.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -3 -r1.67 -r1.68 --- ewmh.c 19 Mar 2005 16:40:02 -0000 1.67 +++ ewmh.c 24 Mar 2005 23:38:08 -0000 1.68 @@ -391,7 +391,7 @@ } void -EWMH_SetWindowBorder(EWin * ewin) +EWMH_SetWindowBorder(const EWin * ewin) { int val[4]; @@ -410,15 +410,10 @@ } void -EWMH_SetWindowOpacity(EWin * ewin, unsigned int opacity) +EWMH_SetWindowOpacity(const EWin * ewin) { - if (ewin->props.opacity != opacity) - { - ecore_x_netwm_opacity_set(ewin->client.win, opacity); - ewin->props.opacity = opacity; - } - EoSetOpacity(ewin, opacity); - ecore_x_netwm_opacity_set(EoGetWin(ewin), opacity); + ecore_x_netwm_opacity_set(ewin->client.win, ewin->ewmh.opacity); + ecore_x_netwm_opacity_set(EoGetWin(ewin), ewin->ewmh.opacity); } /* @@ -465,7 +460,7 @@ num = ecore_x_netwm_desktop_get(ewin->client.win, &desk); if (num <= 0) - goto done; + return; if (desk == 0xFFFFFFFF) { @@ -479,9 +474,6 @@ EoSetSticky(ewin, 0); } EwinChange(ewin, EWIN_CHANGE_DESKTOP); - - done: - ; } static void @@ -494,7 +486,7 @@ ECORE_X_ATOM_NET_WM_STATE, &p_atoms); if (n_atoms <= 0) - goto done; + return; /* We must clear/set all according to not present/present */ /* EoSetSticky(ewin, 0); Do not override if set via _NET_WM_DESKTOP */ @@ -533,9 +525,6 @@ #endif } Efree(p_atoms); - - done: - ; } static void @@ -548,7 +537,7 @@ ECORE_X_ATOM_NET_WM_WINDOW_TYPE, &p_atoms); if (n_atoms <= 0) - goto done; + return; atom = p_atoms[0]; if (atom == ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP) @@ -599,9 +588,6 @@ } #endif Efree(p_atoms); - - done: - ; } static void @@ -630,8 +616,15 @@ if (num <= 0) return; - ewin->props.opacity = opacity; - EWMH_SetWindowOpacity(ewin, opacity); + if (ewin->ewmh.opacity == opacity) + return; + + ewin->ewmh.opacity = opacity; + + /* Set frame window hint for xcompmgr */ + ecore_x_netwm_opacity_set(EoGetWin(ewin), opacity); + + EwinChange(ewin, EWIN_CHANGE_OPACITY); } static void =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/hints.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -3 -r1.37 -r1.38 --- hints.c 19 Mar 2005 16:40:03 -0000 1.37 +++ hints.c 24 Mar 2005 23:38:09 -0000 1.38 @@ -184,10 +184,10 @@ } void -HintsSetWindowOpacity(EWin * ewin, unsigned int opacity) +HintsSetWindowOpacity(EWin * ewin) { #if ENABLE_EWMH - EWMH_SetWindowOpacity(ewin, opacity); + EWMH_SetWindowOpacity(ewin); #endif } =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/ipc.c,v retrieving revision 1.210 retrieving revision 1.211 diff -u -3 -r1.210 -r1.211 --- ipc.c 20 Mar 2005 15:58:51 -0000 1.210 +++ ipc.c 24 Mar 2005 23:38:09 -0000 1.211 @@ -442,11 +442,10 @@ EwinOpIconify(ewin, !ewin->iconified); break; -#if USE_COMPOSITE case EWIN_OP_OPACITY: if (!strcmp(param1, "?")) { - IpcPrintf("opacity: %u", ewin->props.opacity >> 24); + IpcPrintf("opacity: %u", ewin->ewmh.opacity >> 24); goto done; } val = 0xff; @@ -454,6 +453,7 @@ EwinOpSetOpacity(ewin, val); break; +#if USE_COMPOSITE case EWIN_OP_SHADOW: on = EoGetShadow(ewin); if (SetEwinBoolean("shadow", &on, param1, 0)) @@ -1064,7 +1064,13 @@ "Desktop %i Layer %i(%i)\n" "Iconified %i Sticky %i Shaded %i Docked %i\n" "State %i Shown %i Active %i Floating %i\n" - "Member of groups %i\n", + "Member of groups %i\n" +#if USE_COMPOSITE + "Opacity %3i(%x) Shadow %i\n" +#else + "Opacity %3i\n" +#endif + , SS(ewin->icccm.wm_name), SS(ewin->icccm.wm_icon_name), SS(ewin->icccm.wm_res_name), SS(ewin->icccm.wm_res_class), @@ -1103,7 +1109,11 @@ EoGetLayer(ewin), ewin->o.ilayer, ewin->iconified, EoIsSticky(ewin), ewin->shaded, ewin->docked, ewin->state, ewin->shown, ewin->active, - EoIsFloating(ewin), ewin->num_groups); + EoIsFloating(ewin), ewin->num_groups, ewin->ewmh.opacity +#if USE_COMPOSITE + , EoGetOpacity(ewin), EoGetShadow(ewin) +#endif + ); } static void =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/moveresize.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -3 -r1.33 -r1.34 --- moveresize.c 19 Mar 2005 16:40:07 -0000 1.33 +++ moveresize.c 24 Mar 2005 23:38:11 -0000 1.34 @@ -142,7 +142,7 @@ gwins[i]->shape_y); } - EoChangeOpacity(ewin, ewin->props.opacity); + EoChangeOpacity(ewin, ewin->ewmh.opacity); RaiseEwin(gwins[i]); } StackDesktop(EoGetDesk(ewin)); /* Restack to "un-float" */ =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/snaps.c,v retrieving revision 1.89 retrieving revision 1.90 diff -u -3 -r1.89 -r1.90 --- snaps.c 24 Mar 2005 09:40:59 -0000 1.89 +++ snaps.c 24 Mar 2005 23:38:11 -0000 1.90 @@ -353,7 +353,7 @@ static void SnapEwinOpacity(Snapshot * sn, EWin * ewin) { - sn->opacity = ewin->props.opacity >> 24; + sn->opacity = ewin->ewmh.opacity >> 24; } static void @@ -1461,7 +1461,7 @@ #if USE_COMPOSITE if (sn->use_flags & SNAP_USE_OPACITY) - ewin->props.opacity = OpacityExt(sn->opacity); + ewin->ewmh.opacity = OpacityExt(sn->opacity); if (sn->use_flags & SNAP_USE_SHADOW) EoSetShadow(ewin, sn->shadow); =================================================================== RCS file: /cvsroot/enlightenment/e16/e/src/windowmatch.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -3 -r1.28 -r1.29 --- windowmatch.c 19 Mar 2005 16:40:18 -0000 1.28 +++ windowmatch.c 24 Mar 2005 23:38:12 -0000 1.29 @@ -702,11 +702,11 @@ ewin->skipfocus = ewin->skiptask = ewin->skipwinlist; break; -#if USE_COMPOSITE case EWIN_OP_OPACITY: - EoSetOpacity(ewin, OpacityExt(atoi(args))); + ewin->ewmh.opacity = OpacityExt(atoi(args)); break; +#if USE_COMPOSITE case EWIN_OP_SHADOW: WINOP_GET_BOOL(ewin->o.shadow, args); break; ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs