[fusion-commits] Animation plugin: Changes to 'master' (cba3e37b16e5b9e3176abcd13f80b19c789f1ae3)

cornelius at server.beryl-project.org cornelius at server.beryl-project.org
Sat Jul 14 20:20:10 CEST 2007


New commits:
commit cba3e37b16e5b9e3176abcd13f80b19c789f1ae3
Merge: acbd508bdf0eaca6f8e6d587ba8df181bf35c31a 70b162824144be7821e804067416c4e4d76a67d4
Author: Erkin Bahceci <erkinbah at gmail.com>
Date:   Sat Jul 14 14:18:28 2007 -0400

    Merge branch 'master' of git+ssh://cornelius@git.opencompositing.org/git/fusion/plugins/animation

commit acbd508bdf0eaca6f8e6d587ba8df181bf35c31a
Author: Erkin Bahceci <erkinbah at gmail.com>
Date:   Sat Jul 14 14:15:32 2007 -0400

    Implement multiple effect selection. Rename create -> open.
    And a little cleanup.


 animation-internal.h |   61 ++---
 animation.c          |  829 ++++++++++++++++++++++++--------------------------
 animation.xml.in     |  761 +++++++++++++++-------------------------------
 beamup.c             |    4 +-
 burn.c               |    2 +-
 curvedfold.c         |    2 +-
 magiclamp.c          |    2 +-
 zoomside.c           |   20 +-
 8 files changed, 683 insertions(+), 998 deletions(-)


Modified: fusion/plugins/animation/animation-internal.h
===================================================================
--- fusion/plugins/animation/animation-internal.h
+++ fusion/plugins/animation/animation-internal.h
@@ -154,7 +154,7 @@ typedef enum
     WindowEventMinimize,
     WindowEventUnminimize,
     WindowEventClose,
-    WindowEventCreate,
+    WindowEventOpen,
     WindowEventFocus,
     WindowEventShade,
     WindowEventUnshade
@@ -345,36 +345,26 @@ typedef struct _AnimDisplay
 
 typedef enum
 {
-    // Match settings
-    ANIM_SCREEN_OPTION_MINIMIZE_MATCH = 0,
-    ANIM_SCREEN_OPTION_CLOSE1_MATCH,
-    ANIM_SCREEN_OPTION_CLOSE2_MATCH,
-    ANIM_SCREEN_OPTION_CREATE1_MATCH,
-    ANIM_SCREEN_OPTION_CREATE2_MATCH,
-    ANIM_SCREEN_OPTION_FOCUS_MATCH,
-    ANIM_SCREEN_OPTION_SHADE_MATCH,
     // Event settings
+    ANIM_SCREEN_OPTION_OPEN_EFFECT,
+    ANIM_SCREEN_OPTION_OPEN_DURATION,
+    ANIM_SCREEN_OPTION_OPEN_MATCH,
+    ANIM_SCREEN_OPTION_OPEN_RANDOM_EFFECTS,
+    ANIM_SCREEN_OPTION_CLOSE_EFFECT,
+    ANIM_SCREEN_OPTION_CLOSE_DURATION,
+    ANIM_SCREEN_OPTION_CLOSE_MATCH,
+    ANIM_SCREEN_OPTION_CLOSE_RANDOM_EFFECTS,
     ANIM_SCREEN_OPTION_MINIMIZE_EFFECT,
     ANIM_SCREEN_OPTION_MINIMIZE_DURATION,
+    ANIM_SCREEN_OPTION_MINIMIZE_MATCH,
     ANIM_SCREEN_OPTION_MINIMIZE_RANDOM_EFFECTS,
-    ANIM_SCREEN_OPTION_CLOSE1_EFFECT,
-    ANIM_SCREEN_OPTION_CLOSE1_DURATION,
-    ANIM_SCREEN_OPTION_CLOSE1_RANDOM_EFFECTS,
-    ANIM_SCREEN_OPTION_CREATE1_EFFECT,
-    ANIM_SCREEN_OPTION_CREATE1_DURATION,
-    ANIM_SCREEN_OPTION_CREATE1_RANDOM_EFFECTS,
-    ANIM_SCREEN_OPTION_CLOSE2_EFFECT,
-    ANIM_SCREEN_OPTION_CLOSE2_DURATION,
-    ANIM_SCREEN_OPTION_CLOSE2_RANDOM_EFFECTS,
-    ANIM_SCREEN_OPTION_CREATE2_EFFECT,
-    ANIM_SCREEN_OPTION_CREATE2_DURATION,
-    ANIM_SCREEN_OPTION_CREATE2_RANDOM_EFFECTS,
     ANIM_SCREEN_OPTION_FOCUS_EFFECT,
     ANIM_SCREEN_OPTION_FOCUS_DURATION,
+    ANIM_SCREEN_OPTION_FOCUS_MATCH,
     ANIM_SCREEN_OPTION_SHADE_EFFECT,
     ANIM_SCREEN_OPTION_SHADE_DURATION,
+    ANIM_SCREEN_OPTION_SHADE_MATCH,
     ANIM_SCREEN_OPTION_SHADE_RANDOM_EFFECTS,
-    ANIM_SCREEN_OPTION_ROLLUP_FIXED_INTERIOR,
     // Misc. settings
     ANIM_SCREEN_OPTION_ALL_RANDOM,
     ANIM_SCREEN_OPTION_TIME_STEP,
@@ -420,13 +410,14 @@ typedef enum
     ANIM_SCREEN_OPTION_MAGIC_LAMP_MAX_WAVES,
     ANIM_SCREEN_OPTION_MAGIC_LAMP_WAVE_AMP_MIN,
     ANIM_SCREEN_OPTION_MAGIC_LAMP_WAVE_AMP_MAX,
-    ANIM_SCREEN_OPTION_MAGIC_LAMP_CREATE_START_WIDTH,
+    ANIM_SCREEN_OPTION_MAGIC_LAMP_OPEN_START_WIDTH,
+    ANIM_SCREEN_OPTION_ROLLUP_FIXED_INTERIOR,
     ANIM_SCREEN_OPTION_SIDEKICK_NUM_ROTATIONS,
     ANIM_SCREEN_OPTION_SIDEKICK_SPRINGINESS,
     ANIM_SCREEN_OPTION_SIDEKICK_ZOOM_FROM_CENTER,
     ANIM_SCREEN_OPTION_VACUUM_MOVING_END,
     ANIM_SCREEN_OPTION_VACUUM_GRID_RES,
-    ANIM_SCREEN_OPTION_VACUUM_CREATE_START_WIDTH,
+    ANIM_SCREEN_OPTION_VACUUM_OPEN_START_WIDTH,
     ANIM_SCREEN_OPTION_WAVE_WIDTH,
     ANIM_SCREEN_OPTION_WAVE_AMP,
     ANIM_SCREEN_OPTION_ZOOM_FROM_CENTER,
@@ -445,7 +436,6 @@ typedef struct _AnimScreen
     PaintWindowProc paintWindow;
     DamageWindowRectProc damageWindowRect;
     AddWindowGeometryProc addWindowGeometry;
-    //DrawWindowGeometryProc drawWindowGeometry;
     DrawWindowTextureProc drawWindowTexture;
 
     WindowResizeNotifyProc windowResizeNotify;
@@ -472,24 +462,13 @@ typedef struct _AnimScreen
     // was started
 
     Bool animInProgress;
-    AnimEffect minimizeEffect;
-    AnimEffect create1Effect;
-    AnimEffect create2Effect;
-    AnimEffect close1Effect;
-    AnimEffect close2Effect;
-    AnimEffect focusEffect;
-    AnimEffect shadeEffect;
-
-    AnimEffect close1RandomEffects[NUM_CLOSE_EFFECT];
-    AnimEffect close2RandomEffects[NUM_CLOSE_EFFECT];
-    AnimEffect create1RandomEffects[NUM_CLOSE_EFFECT];
-    AnimEffect create2RandomEffects[NUM_CLOSE_EFFECT];
+
+    AnimEffect openRandomEffects[NUM_CLOSE_EFFECT];
+    AnimEffect closeRandomEffects[NUM_CLOSE_EFFECT];
     AnimEffect minimizeRandomEffects[NUM_MINIMIZE_EFFECT];
     AnimEffect shadeRandomEffects[NUM_SHADE_EFFECT];
-    unsigned int nClose1RandomEffects;
-    unsigned int nClose2RandomEffects;
-    unsigned int nCreate1RandomEffects;
-    unsigned int nCreate2RandomEffects;
+    unsigned int nCloseRandomEffects;
+    unsigned int nOpenRandomEffects;
     unsigned int nMinimizeRandomEffects;
     unsigned int nShadeRandomEffects;
 } AnimScreen;

Modified: fusion/plugins/animation/animation.c
===================================================================
--- fusion/plugins/animation/animation.c
+++ fusion/plugins/animation/animation.c
@@ -87,7 +87,7 @@ CompMetadata animMetadata;
  * elements of these arrays are added or removed.
  */
 
-static AnimEffect minimizeEffectType[] = {
+static AnimEffect minimizeEffects[] = {
     AnimEffectNone,
     AnimEffectRandom,
     AnimEffectBeamUp,
@@ -107,7 +107,7 @@ static AnimEffect minimizeEffectType[] = {
     AnimEffectZoom
 };
 
-static AnimEffect closeEffectType[] = {
+static AnimEffect closeEffects[] = {
     AnimEffectNone,
     AnimEffectRandom,
     AnimEffectBeamUp,
@@ -129,14 +129,14 @@ static AnimEffect closeEffectType[] = {
     AnimEffectZoom
 };
 
-static AnimEffect focusEffectType[] = {
+static AnimEffect focusEffects[] = {
     AnimEffectNone,
     AnimEffectDodge,
     AnimEffectFocusFade,
     AnimEffectWave
 };
 
-static AnimEffect shadeEffectType[] = {
+static AnimEffect shadeEffects[] = {
     AnimEffectNone,
     AnimEffectRandom,
     AnimEffectCurvedFold,
@@ -197,7 +197,7 @@ void defaultMinimizeAnimInit(CompScreen * s, CompWindow * w)
     defaultAnimInit(s, w);
 }
 
-static Bool
+static inline Bool
 defaultLetOthersDrawGeoms (CompScreen *s, CompWindow *w)
 {
     return TRUE;
@@ -240,6 +240,156 @@ animStoreRandomEffectList (CompOptionValue *value,
     *targetCount = count;
 }
 
+
+static Bool
+matchWithString(CompWindow *w, const char *matchStr)
+{
+    CompDisplay *d = w->screen->display;
+    CompMatch match;
+
+    matchInit (&match);
+    matchAddFromString (&match, (char *)matchStr);
+    matchUpdate (d, &match);
+
+    return matchEval (&match, w);
+}
+
+// Can be moved to the Workarounds plugin when
+// it is ready to be included and enabled by default in plugins-main.
+static unsigned int
+getActualWinType(CompWindow *w)
+{
+    if (isQtTransientWindow(w))
+	return CompWindowTypeDropdownMenuMask;
+
+    // Match Mozilla (Firefox, Thunderbird, etc.) menus
+    // and Java menus
+    if (matchWithString (w, "(type=Normal & override_redirect=1) | \
+ name=sun-awt-X11-XMenuWindow | name=sun-awt-X11-XWindowPeer"))
+	return CompWindowTypeDropdownMenuMask;
+
+    // Match Qt3 and Qt4 tooltips, respectively
+    // Requires the Regexp plugin
+    if (matchWithString(w, "role=toolTipTip | role=qtooltip_label"))
+	return CompWindowTypeTooltipMask;
+
+    // Match Java normal windows
+    if (w->resName &&
+	strcmp(w->resName, "sun-awt-X11-XFramePeer") == 0)
+	return CompWindowTypeNormalMask;
+
+    // Match Java dialog windows
+    if (w->resName &&
+	strcmp(w->resName, "sun-awt-X11-XDialogPeer") == 0)
+	return CompWindowTypeDialogMask;
+
+    return w->wmType;
+}
+
+// Can be removed when getActualWinType is moved.
+static Bool
+matchEvalProxy(CompMatch *match, CompWindow *w)
+{
+    Bool result;
+
+    // Backup window type
+    int winType = w->wmType;
+
+    w->wmType = getActualWinType(w);
+
+    result = matchEval(match, w);
+
+    // Restore window type
+    w->wmType = winType;
+
+    return result;
+}
+
+// Assumes events in the metadata are in
+// [Open, Close, Minimize, Focus, Shade] order
+// and effects among those are in alphabetical order
+// but with "(Event) None" first and "(Event) Random" last.
+static AnimEffect
+getMatchingAnimSelection (CompWindow *w,
+			  WindowEvent event,
+			  float *duration)
+{
+    ANIM_SCREEN(w->screen);
+
+    if (duration == NULL)
+    {
+	compLogMessage
+	    (w->screen->display, "animation", CompLogLevelError,
+	     "%s:%d: Null duration passed.", __FILE__, __LINE__);
+	return AnimEffectNone;
+    }
+    CompOptionValue *valMatch;
+    CompOptionValue *valEffect;
+    CompOptionValue *valDuration;
+    AnimEffect *effects;
+
+    switch (event)
+    {
+    case WindowEventOpen:
+	effects = closeEffects;
+	valMatch = &as->opt[ANIM_SCREEN_OPTION_OPEN_MATCH].value;
+	valEffect = &as->opt[ANIM_SCREEN_OPTION_OPEN_EFFECT].value;
+	valDuration = &as->opt[ANIM_SCREEN_OPTION_OPEN_DURATION].value;
+	break;
+    case WindowEventClose:
+	effects = closeEffects;
+	valMatch = &as->opt[ANIM_SCREEN_OPTION_CLOSE_MATCH].value;
+	valEffect = &as->opt[ANIM_SCREEN_OPTION_CLOSE_EFFECT].value;
+	valDuration = &as->opt[ANIM_SCREEN_OPTION_CLOSE_DURATION].value;
+	break;
+    case WindowEventMinimize:
+    case WindowEventUnminimize:
+	effects = minimizeEffects;
+	valMatch = &as->opt[ANIM_SCREEN_OPTION_MINIMIZE_MATCH].value;
+	valEffect = &as->opt[ANIM_SCREEN_OPTION_MINIMIZE_EFFECT].value;
+	valDuration = &as->opt[ANIM_SCREEN_OPTION_MINIMIZE_DURATION].value;
+	break;
+    case WindowEventFocus:
+	effects = focusEffects;
+	valMatch = &as->opt[ANIM_SCREEN_OPTION_FOCUS_MATCH].value;
+	valEffect = &as->opt[ANIM_SCREEN_OPTION_FOCUS_EFFECT].value;
+	valDuration = &as->opt[ANIM_SCREEN_OPTION_FOCUS_DURATION].value;
+	break;
+    case WindowEventShade:
+    case WindowEventUnshade:
+	effects = shadeEffects;
+	valMatch = &as->opt[ANIM_SCREEN_OPTION_SHADE_MATCH].value;
+	valEffect = &as->opt[ANIM_SCREEN_OPTION_SHADE_EFFECT].value;
+	valDuration = &as->opt[ANIM_SCREEN_OPTION_SHADE_DURATION].value;
+	break;
+    case WindowEventNone:
+	return AnimEffectNone;
+    }
+
+    int nRows = valMatch->list.nValue;
+    if (nRows != valEffect->list.nValue ||
+	nRows != valDuration->list.nValue)
+    {
+	compLogMessage
+	    (w->screen->display, "animation", CompLogLevelError,
+	     "Number of animation selection effects, durations, matches, and options are not the same.");
+	return AnimEffectNone;
+    }
+
+    // Find the first row that matches this window for this event
+    int i;
+    for (i = 0; i < nRows; i++)
+    {
+	if (!matchEvalProxy (&valMatch->list.value[i].match, w))
+	    continue;
+
+	*duration = valDuration->list.value[i].f;
+
+	return effects[valEffect->list.value[i].i];
+    }
+    return AnimEffectNone;
+}
+
 static inline AnimEffect
 animGetAnimEffect (AnimEffect effect,
 		   AnimEffect *randomEffects,
@@ -343,7 +493,7 @@ float defaultAnimProgress(AnimWindow * aw)
     forwardProgress = MIN(forwardProgress, 1);
     forwardProgress = MAX(forwardProgress, 0);
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventUnminimize ||
 	aw->curWindowEvent == WindowEventUnshade ||
 	aw->curWindowEvent == WindowEventFocus)
@@ -364,7 +514,7 @@ float sigmoidAnimProgress(AnimWindow * aw)
 	(sigmoid(forwardProgress) - sigmoid(0)) /
 	(sigmoid(1) - sigmoid(0));
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventUnminimize ||
 	aw->curWindowEvent == WindowEventUnshade ||
 	aw->curWindowEvent == WindowEventFocus)
@@ -624,107 +774,76 @@ animSetScreenOptions(CompPlugin *plugin,
 
     switch (index)
     {
-    case ANIM_SCREEN_OPTION_MINIMIZE_EFFECT:
-	if (compSetIntOption(o, value))
-	{
-	    as->minimizeEffect = minimizeEffectType[o->value.i];
-	    return TRUE;
-	}
-	break;
-    case ANIM_SCREEN_OPTION_CLOSE1_EFFECT:
-	if (compSetIntOption(o, value))
-	{
-	    as->close1Effect = closeEffectType[o->value.i];
-	    return TRUE;
-	}
-	break;
-    case ANIM_SCREEN_OPTION_CLOSE2_EFFECT:
-	if (compSetIntOption(o, value))
-	{
-	    as->close2Effect = closeEffectType[o->value.i];
-	    return TRUE;
-	}
-	break;
-    case ANIM_SCREEN_OPTION_CREATE1_EFFECT:
-	if (compSetIntOption(o, value))
-	{
-	    as->create1Effect = closeEffectType[o->value.i];
-	    return TRUE;
-	}
-	break;
-    case ANIM_SCREEN_OPTION_CREATE2_EFFECT:
-	if (compSetIntOption(o, value))
+    case ANIM_SCREEN_OPTION_OPEN_MATCH:
+	if (compSetOptionList(o, value))
 	{
-	    as->create2Effect = closeEffectType[o->value.i];
-	    return TRUE;
+	    int i;
+	    for (i = 0; i < o->value.list.nValue; i++)
+		matchUpdate (screen->display, &o->value.list.value[i].match);
 	}
 	break;
-    case ANIM_SCREEN_OPTION_FOCUS_EFFECT:
-	if (compSetIntOption(o, value))
+    case ANIM_SCREEN_OPTION_CLOSE_MATCH:
+	if (compSetOptionList(o, value))
 	{
-	    as->focusEffect = focusEffectType[o->value.i];
-	    return TRUE;
+	    int i;
+	    for (i = 0; i < o->value.list.nValue; i++)
+		matchUpdate (screen->display, &o->value.list.value[i].match);
 	}
 	break;
-    case ANIM_SCREEN_OPTION_SHADE_EFFECT:
-	if (compSetIntOption(o, value))
+    case ANIM_SCREEN_OPTION_MINIMIZE_MATCH:
+	if (compSetOptionList(o, value))
 	{
-	    as->shadeEffect = shadeEffectType[o->value.i];
-	    return TRUE;
+	    int i;
+	    for (i = 0; i < o->value.list.nValue; i++)
+		matchUpdate (screen->display, &o->value.list.value[i].match);
 	}
 	break;
-    case ANIM_SCREEN_OPTION_MINIMIZE_RANDOM_EFFECTS:
+    case ANIM_SCREEN_OPTION_FOCUS_MATCH:
 	if (compSetOptionList(o, value))
 	{
-	    animStoreRandomEffectList (&o->value,
-				       minimizeEffectType + RANDOM_EFFECT_OFFSET,
-				       NUM_MINIMIZE_EFFECT - RANDOM_EFFECT_OFFSET,
-				       as->minimizeRandomEffects,
-				       &as->nMinimizeRandomEffects);
-	    return TRUE;
+	    int i;
+	    for (i = 0; i < o->value.list.nValue; i++)
+		matchUpdate (screen->display, &o->value.list.value[i].match);
 	}
 	break;
-    case ANIM_SCREEN_OPTION_CLOSE1_RANDOM_EFFECTS:
+    case ANIM_SCREEN_OPTION_SHADE_MATCH:
 	if (compSetOptionList(o, value))
 	{
-	    animStoreRandomEffectList (&o->value,
-				       closeEffectType + RANDOM_EFFECT_OFFSET,
-				       NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-				       as->close1RandomEffects,
-				       &as->nClose1RandomEffects);
-	    return TRUE;
+	    int i;
+	    for (i = 0; i < o->value.list.nValue; i++)
+		matchUpdate (screen->display, &o->value.list.value[i].match);
 	}
 	break;
-    case ANIM_SCREEN_OPTION_CLOSE2_RANDOM_EFFECTS:
+    case ANIM_SCREEN_OPTION_OPEN_RANDOM_EFFECTS:
 	if (compSetOptionList(o, value))
 	{
 	    animStoreRandomEffectList (&o->value,
-				       closeEffectType + RANDOM_EFFECT_OFFSET,
+				       closeEffects + RANDOM_EFFECT_OFFSET,
 				       NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-				       as->close2RandomEffects,
-				       &as->nClose2RandomEffects);
+				       as->openRandomEffects,
+				       &as->nOpenRandomEffects);
 	    return TRUE;
 	}
 	break;
-    case ANIM_SCREEN_OPTION_CREATE1_RANDOM_EFFECTS:
+    case ANIM_SCREEN_OPTION_CLOSE_RANDOM_EFFECTS:
 	if (compSetOptionList(o, value))
 	{
 	    animStoreRandomEffectList (&o->value,
-				       closeEffectType + RANDOM_EFFECT_OFFSET,
+				       closeEffects + RANDOM_EFFECT_OFFSET,
 				       NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-				       as->create1RandomEffects,
-				       &as->nCreate1RandomEffects);
+				       as->closeRandomEffects,
+				       &as->nCloseRandomEffects);
 	    return TRUE;
 	}
 	break;
-    case ANIM_SCREEN_OPTION_CREATE2_RANDOM_EFFECTS:
+    case ANIM_SCREEN_OPTION_MINIMIZE_RANDOM_EFFECTS:
 	if (compSetOptionList(o, value))
 	{
 	    animStoreRandomEffectList (&o->value,
-				       closeEffectType + RANDOM_EFFECT_OFFSET,
-				       NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-				       as->create2RandomEffects,
-				       &as->nCreate2RandomEffects);
+				       minimizeEffects + RANDOM_EFFECT_OFFSET,
+				       NUM_MINIMIZE_EFFECT - RANDOM_EFFECT_OFFSET,
+				       as->minimizeRandomEffects,
+				       &as->nMinimizeRandomEffects);
 	    return TRUE;
 	}
 	break;
@@ -732,7 +851,7 @@ animSetScreenOptions(CompPlugin *plugin,
 	if (compSetOptionList(o, value))
 	{
 	    animStoreRandomEffectList (&o->value,
-				       shadeEffectType + RANDOM_EFFECT_OFFSET,
+				       shadeEffects + RANDOM_EFFECT_OFFSET,
 				       NUM_SHADE_EFFECT - RANDOM_EFFECT_OFFSET,
 				       as->shadeRandomEffects,
 				       &as->nShadeRandomEffects);
@@ -748,37 +867,31 @@ animSetScreenOptions(CompPlugin *plugin,
 }
 
 static const CompMetadataOptionInfo animScreenOptionInfo[] = {
-    { "minimize_match", "match", 0, 0, 0 },
-    { "close1_match", "match", 0, 0, 0 },
-    { "close2_match", "match", 0, 0, 0 },
-    { "create1_match", "match", 0, 0, 0 },
-    { "create2_match", "match", 0, 0, 0 },
-    { "focus_match", "match", 0, 0, 0 },
-    { "shade_match", "match", 0, 0, 0 },
-    { "minimize_effect", "int", RESTOSTRING (0, LAST_MINIMIZE_EFFECT), 0, 0 },
-    { "minimize_duration", "float", "<min>0.1</min>", 0, 0 },
+    // Event settings
+    { "open_effect", "list", "<type>int</type>" RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
+    { "open_duration", "list", "<type>float</type><min>0.02</min>", 0, 0 },
+    { "open_match", "list", "<type>match</type>", 0, 0 },
+    { "open_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
+    { "close_effect", "list", "<type>int</type>" RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
+    { "close_duration", "list", "<type>float</type><min>0.02</min>", 0, 0 },
+    { "close_match", "list", "<type>match</type>", 0, 0 },
+    { "close_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
+    { "minimize_effect", "list", "<type>int</type>" RESTOSTRING (0, LAST_MINIMIZE_EFFECT), 0, 0 },
+    { "minimize_duration", "list", "<type>float</type><min>0.02</min>", 0, 0 },
+    { "minimize_match", "list", "<type>match</type>", 0, 0 },
     { "minimize_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_MINIMIZE_EFFECT), 0, 0 },
-    { "close1_effect", "int", RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
-    { "close1_duration", "float", "<min>0.1</min>", 0, 0 },
-    { "close1_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
-    { "create1_effect", "int", RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
-    { "create1_duration", "float", "<min>0.1</min>", 0, 0 },
-    { "create1_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
-    { "close2_effect", "int", RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
-    { "close2_duration", "float", "<min>0.1</min>", 0, 0 },
-    { "close2_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
-    { "create2_effect", "int", RESTOSTRING (0, LAST_CLOSE_EFFECT), 0, 0 },
-    { "create2_duration", "float", "<min>0.1</min>", 0, 0 },
-    { "create2_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_CLOSE_EFFECT), 0, 0 },
-    { "focus_effect", "int", RESTOSTRING (0, LAST_FOCUS_EFFECT), 0, 0 },
-    { "focus_duration", "float", "<min>0.1</min>", 0, 0 },
-    { "shade_effect", "int", RESTOSTRING (0, LAST_SHADE_EFFECT), 0, 0 },
-    { "shade_duration", "float", "<min>0.1</min>", 0, 0 },
+    { "focus_effect", "list", "<type>int</type>" RESTOSTRING (0, LAST_FOCUS_EFFECT), 0, 0 },
+    { "focus_duration", "list", "<type>float</type><min>0.02</min>", 0, 0 },
+    { "focus_match", "list", "<type>match</type>", 0, 0 },
+    { "shade_effect", "list", "<type>int</type>" RESTOSTRING (0, LAST_SHADE_EFFECT), 0, 0 },
+    { "shade_duration", "list", "<type>float</type><min>0.02</min>", 0, 0 },
+    { "shade_match", "list", "<type>match</type>", 0, 0 },
     { "shade_random_effects", "list", "<type>int</type>" RESTOSTRING (0, LAST_RANDOM_SHADE_EFFECT), 0, 0 },
-    { "rollup_fixed_interior", "bool", 0, 0, 0 },
+    // Misc. settings
     { "all_random", "bool", 0, 0, 0 },
     { "time_step", "int", "<min>1</min>", 0, 0 },
     { "time_step_intense", "int", "<min>1</min>", 0, 0 },
+    // Effect settings
     { "beam_size", "float", "<min>0.1</min>", 0, 0 },
     { "beam_spacing", "int", "<min>1</min>", 0, 0 },
     { "beam_color", "color", 0, 0, 0 },
@@ -819,13 +932,14 @@ static const CompMetadataOptionInfo animScreenOptionInfo[] = {
     { "magic_lamp_max_waves", "int", "<min>3</min>", 0, 0 },
     { "magic_lamp_amp_min", "float", "<min>200</min>", 0, 0 },
     { "magic_lamp_amp_max", "float", "<min>200</min>", 0, 0 },
-    { "magic_lamp_create_start_width", "int", "<min>0</min>", 0, 0 },
+    { "magic_lamp_open_start_width", "int", "<min>0</min>", 0, 0 },
+    { "rollup_fixed_interior", "bool", 0, 0, 0 },
     { "sidekick_num_rotations", "float", "<min>0</min>", 0, 0 },
     { "sidekick_springiness", "float", "<min>0</min><max>1</max>", 0, 0 },
     { "sidekick_zoom_from_center", "int", RESTOSTRING (0, LAST_ZOOM_FROM_CENTER), 0, 0 },
     { "vacuum_moving_end", "bool", 0, 0, 0 },
     { "vacuum_grid_res", "int", "<min>4</min>", 0, 0 },
-    { "vacuum_create_start_width", "int", "<min>0</min>", 0, 0 },
+    { "vacuum_open_start_width", "int", "<min>0</min>", 0, 0 },
     { "wave_width", "float", "<min>0</min>", 0, 0 },
     { "wave_amp", "float", "<min>0</min>", 0, 0 },
     { "zoom_from_center", "int", RESTOSTRING (0, LAST_ZOOM_FROM_CENTER), 0, 0 },
@@ -1270,70 +1384,6 @@ getHostedOnWin (AnimScreen *as,
     aw->winThisIsPaintedBefore = wHost;
 }
 
-static Bool
-matchWithString(CompWindow *w, const char *matchStr)
-{
-    CompDisplay *d = w->screen->display;
-    CompMatch match;
-
-    matchInit (&match);
-    matchAddFromString (&match, (char *)matchStr);
-    matchUpdate (d, &match);
-
-    return matchEval (&match, w);
-}
-
-// Can be moved to the Workarounds plugin when
-// it is ready to be included and enabled by default in plugins-main.
-static unsigned int
-getActualWinType(CompWindow *w)
-{
-    if (isQtTransientWindow(w))
-	return CompWindowTypeDropdownMenuMask;
-
-    // Match Mozilla (Firefox, Thunderbird, etc.) menus
-    // and Java menus
-    if (matchWithString (w, "(type=Normal & override_redirect=1) | \
- name=sun-awt-X11-XMenuWindow | name=sun-awt-X11-XWindowPeer"))
-	return CompWindowTypeDropdownMenuMask;
-
-    // Match Qt3 and Qt4 tooltips, respectively
-    // Requires the Regexp plugin
-    if (matchWithString(w, "role=toolTipTip | role=qtooltip_label"))
-	return CompWindowTypeTooltipMask;
-
-    // Match Java normal windows
-    if (w->resName &&
-	strcmp(w->resName, "sun-awt-X11-XFramePeer") == 0)
-	return CompWindowTypeNormalMask;
-
-    // Match Java dialog windows
-    if (w->resName &&
-	strcmp(w->resName, "sun-awt-X11-XDialogPeer") == 0)
-	return CompWindowTypeDialogMask;
-
-    return w->wmType;
-}
-
-// Can be removed when getActualWinType is moved.
-static Bool
-matchEvalProxy(CompMatch *match, CompWindow *w)
-{
-    Bool result;
-
-    // Backup window type
-    int winType = w->wmType;
-
-    w->wmType = getActualWinType(w);
-
-    result = matchEval(match, w);
-
-    // Restore window type
-    w->wmType = winType;
-
-    return result;
-}
-
 static Bool inline
 otherPluginsActive(AnimScreen *as)
 {
@@ -1351,15 +1401,17 @@ initiateFocusAnimation(CompWindow *w)
     if (aw->curWindowEvent != WindowEventNone || otherPluginsActive(as))
 	return;
 
-    if (matchEvalProxy
-	(&as->opt[ANIM_SCREEN_OPTION_FOCUS_MATCH].value.match, w) &&
-	as->focusEffect &&
+    float duration = 0.2f;
+    AnimEffect chosenEffect =
+	getMatchingAnimSelection (w, WindowEventFocus, &duration);
+
+    if (chosenEffect &&
 	// On unminimization, focus event is fired first.
 	// When this happens and minimize is in progress,
 	// don't prevent rewinding of minimize when unminimize is fired
 	// right after this focus event.
 	aw->curWindowEvent != WindowEventMinimize &&
-	animEnsureModel(w, WindowEventFocus, as->focusEffect))
+	animEnsureModel(w, WindowEventFocus, chosenEffect))
     {
 	CompWindow *wStart = NULL;
 	CompWindow *wEnd = NULL;
@@ -1376,8 +1428,10 @@ initiateFocusAnimation(CompWindow *w)
 	    raised = restackInfo->raised;
 	}
 
-	if (as->focusEffect == AnimEffectFocusFade ||
-	    as->focusEffect == AnimEffectDodge)
+	// FOCUS event!
+
+	if (chosenEffect == AnimEffectFocusFade ||
+	    chosenEffect == AnimEffectDodge)
 	{
 	    // Find union region of all windows that will be
 	    // faded through by w. If the region is empty, don't
@@ -1418,7 +1472,7 @@ initiateFocusAnimation(CompWindow *w)
 		XUnionRegion(fadeRegion, thisAndSubjectIntersection,
 			     fadeRegion);
 
-		if (as->focusEffect == AnimEffectDodge &&
+		if (chosenEffect == AnimEffectDodge &&
 		    !XEmptyRegion(thisAndSubjectIntersection))
 		{
 		    AnimWindow *adw = GET_ANIM_WINDOW(dw, as);
@@ -1437,8 +1491,8 @@ initiateFocusAnimation(CompWindow *w)
 	    if (XEmptyRegion(fadeRegion))
 		return; // empty -> won't be drawn
 
-	    if ((as->focusEffect == AnimEffectFocusFade ||
-		 as->focusEffect == AnimEffectDodge) && wOldAbove)
+	    if ((chosenEffect == AnimEffectFocusFade ||
+		 chosenEffect == AnimEffectDodge) && wOldAbove)
 	    {
 		// Store this window in the next window
 		// so that this is drawn before that,
@@ -1449,9 +1503,9 @@ initiateFocusAnimation(CompWindow *w)
 	    float dodgeMaxStartProgress =
 		numDodgingWins *
 		as->opt[ANIM_SCREEN_OPTION_DODGE_GAP_RATIO].value.f *
-		as->opt[ANIM_SCREEN_OPTION_FOCUS_DURATION].value.f;
+		duration;
 
-	    if (as->focusEffect == AnimEffectDodge)
+	    if (chosenEffect == AnimEffectDodge)
 	    {
 		CompWindow *wDodgeChainLastVisited = NULL;
 
@@ -1493,8 +1547,7 @@ initiateFocusAnimation(CompWindow *w)
 			transformTotalProgress;
 
 		    adw->animTotalTime =
-			transformTotalProgress * 1000 *
-			as->opt[ANIM_SCREEN_OPTION_FOCUS_DURATION].value.f;
+			transformTotalProgress * 1000 * duration;
 		    adw->animRemainingTime = adw->animTotalTime;
 
 		    if (maxTransformTotalProgress < transformTotalProgress)
@@ -1567,15 +1620,11 @@ initiateFocusAnimation(CompWindow *w)
 		    aw->dodgeChainStart = wDodgeChainLastVisited;
 		}
 
-		aw->animTotalTime = maxTransformTotalProgress * 1000 *
-		    as->opt[ANIM_SCREEN_OPTION_FOCUS_DURATION].value.f;
+		aw->animTotalTime =
+		    maxTransformTotalProgress * 1000 * duration;
 	    }
 	}
 
-	// FOCUS event!
-
-	//printf("FOCUS event! %X\n", (unsigned)w->id);
-
 	if (aw->curWindowEvent != WindowEventNone)
 	{
 	    postAnimationCleanup(w, TRUE);
@@ -1583,10 +1632,9 @@ initiateFocusAnimation(CompWindow *w)
 
 	animActivateEvent(s, TRUE);
 	aw->curWindowEvent = WindowEventFocus;
-	aw->curAnimEffect = as->focusEffect;
-	if (as->focusEffect != AnimEffectDodge)
-	    aw->animTotalTime =
-		as->opt[ANIM_SCREEN_OPTION_FOCUS_DURATION].value.f * 1000;
+	aw->curAnimEffect = chosenEffect;
+	if (chosenEffect != AnimEffectDodge)
+	    aw->animTotalTime = duration * 1000;
 	aw->animRemainingTime = aw->animTotalTime;
 
 	// Store coords in this viewport to omit 3d effect
@@ -1602,14 +1650,15 @@ initiateFocusAnimation(CompWindow *w)
 static Bool
 relevantForFadeFocus(CompWindow *nw)
 {
-    ANIM_SCREEN(nw->screen);
-
     if (!((nw->wmType &
 	   // these two are to be used as "host" windows
 	   // to host the painting of windows being focused
 	   // at a stacking order lower than them
 	   (CompWindowTypeDockMask | CompWindowTypeSplashMask)) ||
-	  matchEval(&as->opt[ANIM_SCREEN_OPTION_FOCUS_MATCH].value.match, nw)))
+	  nw->wmType == CompWindowTypeNormalMask ||
+	  nw->wmType == CompWindowTypeDialogMask ||
+	  nw->wmType == CompWindowTypeUtilMask ||
+	  nw->wmType == CompWindowTypeUnknownMask))
     {
 	return FALSE;
     }
@@ -1645,8 +1694,8 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint)
 
     ANIM_SCREEN(s);
 
-    if (as->focusEffect == AnimEffectFocusFade ||
-	as->focusEffect == AnimEffectDodge)
+    //if (as->focusEffect == AnimEffectFocusFade ||
+    //as->focusEffect == AnimEffectDodge)
     {
 	if (as->aWinWasRestackedJustNow)
 	{
@@ -1710,7 +1759,7 @@ static void animPreparePaintScreen(CompScreen * s, int msSinceLastPaint)
 		    initiateFocusAnimation(w);
 		}
 	    }
-	    if (as->focusEffect == AnimEffectDodge)
+	    //if (as->focusEffect == AnimEffectDodge)
 	    {
 		for (w = s->reverseWindows; w; w = w->prev)
 		{
@@ -2459,11 +2508,6 @@ animDrawWindowGeometry(CompWindow * w)
 {
     ANIM_WINDOW(w);
 
-    //if (aw->animRemainingTime > 0 &&
-    //	!animEffectProperties[aw->curAnimEffect].letOthersDrawGeoms)
-    //{
-    //printf("animDrawWindowGeometry: %X: coords: %d, %d, %f\n",
-    //       (unsigned)w->id, WIN_X (w), WIN_Y (w), aw->animRemainingTime);
     aw->nDrawGeometryCalls++;
 
     ANIM_SCREEN(w->screen);
@@ -2842,19 +2886,19 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 	    if (w->pendingUnmaps && onCurrentDesktop(w))	// Normal -> Iconic
 	    {
 		ANIM_WINDOW(w);
+
+		float duration = 0.2f;
+		AnimEffect chosenEffect =
+		    getMatchingAnimSelection (w, WindowEventShade, &duration);
+
 		if (w->shaded)
 		{
 		    // SHADE event!
 
-		    //printf("SHADE event! %X\n", (unsigned)w->id);
-
 		    aw->nowShaded = TRUE;
 
-		    if (as->shadeEffect && 
-			matchEvalProxy
-			(&as->opt[ANIM_SCREEN_OPTION_SHADE_MATCH].value.match, w))
+		    if (chosenEffect)
 		    {
-			//IPCS_SetBool(IPCS_OBJECT(w), aw->animatedAtom, TRUE);
 			Bool startingNew = TRUE;
 
 			if (aw->curWindowEvent != WindowEventNone)
@@ -2886,7 +2930,7 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 			{
 			    AnimEffect effectToBePlayed;
 			    effectToBePlayed = animGetAnimEffect(
-				as->shadeEffect,
+				chosenEffect,
 				as->shadeRandomEffects,
 				as->nShadeRandomEffects,
 				as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
@@ -2896,9 +2940,7 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 				break;
 						
 			    aw->curAnimEffect = effectToBePlayed;
-
-			    aw->animTotalTime =
-				as->opt[ANIM_SCREEN_OPTION_SHADE_DURATION].value.f * 1000;
+			    aw->animTotalTime = duration * 1000;
 			    aw->animRemainingTime = aw->animTotalTime;
 			}
 
@@ -2923,94 +2965,93 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 		    }
 		}
 		else if (!w->invisible &&
-			 as->minimizeEffect &&
-			 animGetWindowIconGeometry(w, &aw->icon) &&
-			 matchEvalProxy
-			 (&as->opt[ANIM_SCREEN_OPTION_MINIMIZE_MATCH].value.match, w))
+			 animGetWindowIconGeometry(w, &aw->icon))
 		{
 		    // MINIMIZE event!
 
-		    //printf("MINIMIZE event! %X\n", (unsigned)w->id);
+		    aw->newState = IconicState;
 
-		    Bool startingNew = TRUE;
+		    chosenEffect =
+			getMatchingAnimSelection (w, WindowEventMinimize, &duration);
 
-		    if (aw->curWindowEvent != WindowEventNone)
+		    if (chosenEffect)
 		    {
-			if (aw->curWindowEvent != WindowEventUnminimize)
-			{
-			    postAnimationCleanup(w, TRUE);
-			}
-			else
+			Bool startingNew = TRUE;
+
+			if (aw->curWindowEvent != WindowEventNone)
 			{
-			    // Play the unminimize effect backwards from where it left
-			    aw->animRemainingTime =
-				aw->animTotalTime - aw->animRemainingTime;
+			    if (aw->curWindowEvent != WindowEventUnminimize)
+			    {
+				postAnimationCleanup(w, TRUE);
+			    }
+			    else
+			    {
+				// Play the unminimize effect backwards from where it left
+				aw->animRemainingTime =
+				    aw->animTotalTime - aw->animRemainingTime;
 
-			    // avoid window remains
-			    if (aw->animRemainingTime == 0)
-				aw->animRemainingTime = 1;
+				// avoid window remains
+				if (aw->animRemainingTime == 0)
+				    aw->animRemainingTime = 1;
 
-			    startingNew = FALSE;
-			    if (aw->animOverrideProgressDir == 0)
-				aw->animOverrideProgressDir = 2;
-			    else if (aw->animOverrideProgressDir == 1)
-				aw->animOverrideProgressDir = 0;
+				startingNew = FALSE;
+				if (aw->animOverrideProgressDir == 0)
+				    aw->animOverrideProgressDir = 2;
+				else if (aw->animOverrideProgressDir == 1)
+				    aw->animOverrideProgressDir = 0;
+			    }
 			}
-		    }
 
-		    if (startingNew)
-		    {
-			AnimEffect effectToBePlayed;
+			if (startingNew)
+			{
+			    AnimEffect effectToBePlayed;
 						
-			effectToBePlayed = animGetAnimEffect(
-			    as->minimizeEffect,
-			    as->minimizeRandomEffects,
-			    as->nMinimizeRandomEffects,
-			    as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
-
-			// handle empty random effect list
-			if (effectToBePlayed == AnimEffectNone)
-			    break;
-
-			aw->curAnimEffect = effectToBePlayed;
-
-			aw->animTotalTime =
-			    as->opt[ANIM_SCREEN_OPTION_MINIMIZE_DURATION].value.f * 1000;
-
-			aw->animRemainingTime = aw->animTotalTime;
-		    }
+			    effectToBePlayed = animGetAnimEffect(
+				chosenEffect,
+				as->minimizeRandomEffects,
+				as->nMinimizeRandomEffects,
+				as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
 
-		    aw->newState = IconicState;
-		    animActivateEvent(w->screen, TRUE);
-		    aw->curWindowEvent = WindowEventMinimize;
+			    // handle empty random effect list
+			    if (effectToBePlayed == AnimEffectNone)
+				break;
 
-		    // Store coords in this viewport to omit 3d effect
-		    // painting in other viewports
-		    aw->lastKnownCoords.x = w->attrib.x;
-		    aw->lastKnownCoords.y = w->attrib.y;
+			    aw->curAnimEffect = effectToBePlayed;
+			    aw->animTotalTime = duration * 1000;
+			    aw->animRemainingTime = aw->animTotalTime;
+			}
 
-		    if (!animEnsureModel
-			(w, WindowEventMinimize, aw->curAnimEffect))
-		    {
-			postAnimationCleanup(w, TRUE);
-		    }
-		    else
-		    {
-			/*
-			  if (!animGetWindowIconGeometry(w, &aw->icon))
-			  {
-			  // minimize to bottom-center if there is no window list
-			  aw->icon.x = w->screen->width / 2;
-			  aw->icon.y = w->screen->height;
-			  aw->icon.width = 100;
-			  aw->icon.height = 20;
-			  }
-			*/
+			animActivateEvent(w->screen, TRUE);
+			aw->curWindowEvent = WindowEventMinimize;
 
-			aw->unmapCnt++;
-			w->unmapRefCnt++;
+			// Store coords in this viewport to omit 3d effect
+			// painting in other viewports
+			aw->lastKnownCoords.x = w->attrib.x;
+			aw->lastKnownCoords.y = w->attrib.y;
 
-			addWindowDamage(w);
+			if (!animEnsureModel
+			    (w, WindowEventMinimize, aw->curAnimEffect))
+			{
+			    postAnimationCleanup(w, TRUE);
+			}
+			else
+			{
+			    /*
+			      if (!animGetWindowIconGeometry(w, &aw->icon))
+			      {
+			      // minimize to bottom-center if there is no window list
+			      aw->icon.x = w->screen->width / 2;
+			      aw->icon.y = w->screen->height;
+			      aw->icon.width = 100;
+			      aw->icon.height = 20;
+			      }
+			    */
+
+			    aw->unmapCnt++;
+			    w->unmapRefCnt++;
+
+			    addWindowDamage(w);
+			}
 		    }
 		}
 	    }
@@ -3023,42 +3064,30 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 		if (!(w->resName || isQtTransientWindow(w)))
 		    break;
 
-		AnimEffect windowsCloseEffect = AnimEffectNone;
-		int whichClose = 1;	// either 1 or 2
-
-		if (as->close1Effect && 
-		    matchEvalProxy
-		    (&as->opt[ANIM_SCREEN_OPTION_CLOSE1_MATCH].value.match, w))
-		{
-		    windowsCloseEffect = as->close1Effect;
-		}
-		else if (as->close2Effect && 
-			 matchEvalProxy
-			 (&as->opt[ANIM_SCREEN_OPTION_CLOSE2_MATCH].value.match, w))
-		{
-		    windowsCloseEffect = as->close2Effect;
-		    whichClose = 2;
-		}
+		float duration = 0.2f;
+		AnimEffect chosenEffect =
+		    getMatchingAnimSelection (w, WindowEventClose, &duration);
 
 		// CLOSE event!
 
-		if (windowsCloseEffect)
+		aw->state = NormalState;
+		aw->newState = WithdrawnState;
+
+		if (chosenEffect)
 		{
 		    int tmpSteps = 0;
 
-		    //printf("CLOSE event! %X\n", (unsigned)w->id);
-
 		    Bool startingNew = TRUE;
 
 		    if (aw->animRemainingTime > 0 &&
-			aw->curWindowEvent != WindowEventCreate)
+			aw->curWindowEvent != WindowEventOpen)
 		    {
 			tmpSteps = aw->animRemainingTime;
 			aw->animRemainingTime = 0;
 		    }
 		    if (aw->curWindowEvent != WindowEventNone)
 		    {
-			if (aw->curWindowEvent == WindowEventCreate)
+			if (aw->curWindowEvent == WindowEventOpen)
 			{
 			    // Play the create effect backward from where it left
 			    aw->animRemainingTime =
@@ -3092,11 +3121,9 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 		    {
 			AnimEffect effectToBePlayed;
 			effectToBePlayed = animGetAnimEffect(
-			    windowsCloseEffect,
-			    (whichClose == 1) ? as->close1RandomEffects : 
-			    as->close2RandomEffects,
-			    (whichClose == 1) ? as->nClose1RandomEffects :
-			    as->nClose2RandomEffects,
+			    chosenEffect,
+			    as->closeRandomEffects,
+			    as->nCloseRandomEffects,
 			    as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
 
 			// handle empty random effect list
@@ -3104,17 +3131,10 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 			    break;
 					
 			aw->curAnimEffect = effectToBePlayed;
-
-			aw->animTotalTime =	
-			    as->opt[whichClose == 1 ?
-				    ANIM_SCREEN_OPTION_CLOSE1_DURATION :
-				    ANIM_SCREEN_OPTION_CLOSE2_DURATION].value.f * 1000;
-
+			aw->animTotalTime = duration * 1000;
 			aw->animRemainingTime = aw->animTotalTime;
 		    }
 
-		    aw->state = NormalState;
-		    aw->newState = WithdrawnState;
 		    animActivateEvent(w->screen, TRUE);
 		    aw->curWindowEvent = WindowEventClose;
 
@@ -3137,11 +3157,11 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 			if (aw->curAnimEffect == AnimEffectMagicLamp)
 			    aw->icon.width = 
 				MAX(aw->icon.width,
-				    as->opt[ANIM_SCREEN_OPTION_MAGIC_LAMP_CREATE_START_WIDTH].value.i);
+				    as->opt[ANIM_SCREEN_OPTION_MAGIC_LAMP_OPEN_START_WIDTH].value.i);
 			else if (aw->curAnimEffect == AnimEffectVacuum)
 			    aw->icon.width =
 				MAX(aw->icon.width,
-				    as->opt[ANIM_SCREEN_OPTION_VACUUM_CREATE_START_WIDTH].value.i);
+				    as->opt[ANIM_SCREEN_OPTION_VACUUM_OPEN_START_WIDTH].value.i);
 
 			aw->unmapCnt++;
 			w->unmapRefCnt++;
@@ -3149,17 +3169,12 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 			addWindowDamage(w);
 		    }
 		}
-		else if ((as->create1Effect &&
-			  matchEvalProxy
-			  (&as->opt[ANIM_SCREEN_OPTION_CREATE1_MATCH].value.match, w)) ||
-			 (as->create2Effect &&
-			  matchEvalProxy
-			  (&as->opt[ANIM_SCREEN_OPTION_CREATE2_MATCH].value.match, w)))
+		else if (getMatchingAnimSelection (w, WindowEventOpen, &duration))
 		{
 		    // stop the current animation and prevent it from rewinding
 
 		    if (aw->animRemainingTime > 0 &&
-			aw->curWindowEvent != WindowEventCreate)
+			aw->curWindowEvent != WindowEventOpen)
 		    {
 			aw->animRemainingTime = 0;
 		    }
@@ -3169,10 +3184,8 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 			postAnimationCleanup(w, TRUE);
 		    }
 		    // set some properties to make sure this window will use the
-		    // correct create effect the next time it's "created"
+		    // correct open effect the next time it's "opened"
 
-		    aw->state = NormalState;
-		    aw->newState = WithdrawnState;
 		    animActivateEvent(w->screen, TRUE);
 		    aw->curWindowEvent = WindowEventClose;
 
@@ -3367,12 +3380,15 @@ static void animHandleEvent(CompDisplay * d, XEvent * event)
 	{
 	    ad->activeWindow = d->activeWindow;
 	    w = findWindowAtDisplay(d, d->activeWindow);
-			
+
 	    if (w)
 	    {
-		ANIM_SCREEN(w->screen);
-		if (!(as->focusEffect == AnimEffectFocusFade ||
-		      as->focusEffect == AnimEffectDodge))
+		float duration = 0.2f;
+		AnimEffect chosenEffect =
+		    getMatchingAnimSelection (w, WindowEventFocus, &duration);
+
+		if (!(chosenEffect == AnimEffectFocusFade ||
+		      chosenEffect == AnimEffectDodge))
 		    initiateFocusAnimation(w);
 	    }
 	}
@@ -3388,23 +3404,24 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 
     ANIM_SCREEN(w->screen);
 
-    if (initial)				// Unminimize or Create
+    if (initial)				// Unminimize or Open
     {
 	ANIM_WINDOW(w);
 
+	float duration = 0.2f;
+	AnimEffect chosenEffect;
+
 	if (aw->state == IconicState)
 	{
+	    chosenEffect =
+		getMatchingAnimSelection (w, WindowEventUnminimize, &duration);
+
 	    if (!w->invisible &&
-		as->minimizeEffect &&
-		!as->fadeDesktopActive &&
-		matchEvalProxy
-		(&as->opt[ANIM_SCREEN_OPTION_MINIMIZE_MATCH].value.match, w))
+		chosenEffect &&
+		!as->fadeDesktopActive)
 	    {
 		// UNMINIMIZE event!
 
-		//printf("UNMINIMIZE event! %X\n", (unsigned)w->id);
-
-		//IPCS_SetBool(IPCS_OBJECT(w), aw->animatedAtom, TRUE);
 		Bool startingNew = TRUE;
 
 		if (aw->curWindowEvent != WindowEventNone)
@@ -3437,7 +3454,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		{
 		    AnimEffect effectToBePlayed;
 		    effectToBePlayed = animGetAnimEffect(
-			as->minimizeEffect,
+			chosenEffect,
 			as->minimizeRandomEffects,
 			as->nMinimizeRandomEffects,
 			as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
@@ -3449,10 +3466,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		    if (playEffect)
 		    {
 			aw->curAnimEffect = effectToBePlayed;
-
-			aw->animTotalTime =
-			    as->opt[ANIM_SCREEN_OPTION_MINIMIZE_DURATION].value.f * 1000;
-
+			aw->animTotalTime = duration * 1000;
 			aw->animRemainingTime = aw->animTotalTime;
 		    }
 		}
@@ -3489,15 +3503,14 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 	}
 	else if (aw->nowShaded)
 	{
+	    chosenEffect =
+		getMatchingAnimSelection (w, WindowEventUnshade, &duration);
+
 	    // UNSHADE event!
-	    //printf("UNSHADE event! %X\n", (unsigned)w->id);
 
-	    //IPCS_SetBool(IPCS_OBJECT(w), aw->animatedAtom, TRUE);
 	    aw->nowShaded = FALSE;
 
-	    if (as->shadeEffect && 
-		matchEvalProxy
-		(&as->opt[ANIM_SCREEN_OPTION_SHADE_MATCH].value.match, w))
+	    if (chosenEffect)
 	    {
 		Bool startingNew = TRUE;
 
@@ -3531,7 +3544,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		{
 		    AnimEffect effectToBePlayed;
 		    effectToBePlayed = animGetAnimEffect(
-			as->shadeEffect,
+			chosenEffect,
 			as->shadeRandomEffects,
 			as->nShadeRandomEffects,
 			as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
@@ -3543,9 +3556,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		    if (playEffect)
 		    {
 			aw->curAnimEffect = effectToBePlayed;
-
-			aw->animTotalTime =
-			    as->opt[ANIM_SCREEN_OPTION_SHADE_DURATION].value.f * 1000;
+			aw->animTotalTime = duration * 1000;
 			aw->animRemainingTime = aw->animTotalTime;
 		    }
 		}
@@ -3573,25 +3584,13 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 	{
 	    aw->created = TRUE;
 
-	    AnimEffect windowsCreateEffect = AnimEffectNone;
+	    float duration = 0.2f;
+	    AnimEffect chosenEffect =
+		getMatchingAnimSelection (w, WindowEventOpen, &duration);
 
-	    int whichCreate = 1;	// either 1 or 2
+	    // OPEN event!
 
-	    if (as->create1Effect &&
-		matchEvalProxy
-		(&as->opt[ANIM_SCREEN_OPTION_CREATE1_MATCH].value.match, w))
-	    {
-		windowsCreateEffect = as->create1Effect;
-	    }
-	    else if (as->create2Effect &&
-		     matchEvalProxy
-		     (&as->opt[ANIM_SCREEN_OPTION_CREATE2_MATCH].value.match, w))
-	    {
-		windowsCreateEffect = as->create2Effect;
-		whichCreate = 2;
-	    }
-
-	    if (windowsCreateEffect &&
+	    if (chosenEffect &&
 		// don't animate windows that don't have properties
 		// like the fullscreen darkening layer of gksudo
 		(w->resName || isQtTransientWindow(w)) &&
@@ -3600,10 +3599,6 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		(!as->switcherActive || as->switcherWinOpeningSuppressed) &&
 		getMousePointerXY(w->screen, &aw->icon.x, &aw->icon.y))
 	    {
-		// CREATE event!
-
-		//printf("CREATE event! %X\n", (unsigned)w->id);
-
 		Bool startingNew = TRUE;
 
 		if (aw->curWindowEvent != WindowEventNone)
@@ -3636,11 +3631,9 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		{
 		    AnimEffect effectToBePlayed;
 		    effectToBePlayed = animGetAnimEffect(
-			windowsCreateEffect,
-			(whichCreate == 1) ? as->create1RandomEffects :
-			as->create2RandomEffects,
-			(whichCreate == 1) ? as->nCreate1RandomEffects :
-			as->nCreate2RandomEffects,
+			chosenEffect,
+			as->openRandomEffects,
+			as->nOpenRandomEffects,
 			as->opt[ANIM_SCREEN_OPTION_ALL_RANDOM].value.b);
 
 		    // handle empty random effect list
@@ -3650,12 +3643,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		    if (playEffect)
 		    {
 			aw->curAnimEffect = effectToBePlayed;
-
-			aw->animTotalTime =
-			    as->opt[whichCreate == 1 ?
-				    ANIM_SCREEN_OPTION_CREATE1_DURATION	:
-				    ANIM_SCREEN_OPTION_CREATE2_DURATION].value.f * 1000;
-
+			aw->animTotalTime = duration * 1000;
 			aw->animRemainingTime = aw->animTotalTime;
 		    }
 		}
@@ -3663,7 +3651,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		if (playEffect)
 		{
 		    animActivateEvent(w->screen, TRUE);
-		    aw->curWindowEvent = WindowEventCreate;
+		    aw->curWindowEvent = WindowEventOpen;
 
 		    aw->icon.width = FAKE_ICON_SIZE;
 		    aw->icon.height = FAKE_ICON_SIZE;
@@ -3671,17 +3659,15 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 		    if (aw->curAnimEffect == AnimEffectMagicLamp)
 			aw->icon.width = 
 			    MAX(aw->icon.width,
-				as->opt[ANIM_SCREEN_OPTION_MAGIC_LAMP_CREATE_START_WIDTH].value.i);
+				as->opt[ANIM_SCREEN_OPTION_MAGIC_LAMP_OPEN_START_WIDTH].value.i);
 		    else if (aw->curAnimEffect == AnimEffectVacuum)
 			aw->icon.width =
 			    MAX(aw->icon.width,
-				as->opt[ANIM_SCREEN_OPTION_VACUUM_CREATE_START_WIDTH].value.i);
+				as->opt[ANIM_SCREEN_OPTION_VACUUM_OPEN_START_WIDTH].value.i);
 
 		    aw->icon.x -= aw->icon.width / 2;
 		    aw->icon.y -= aw->icon.height / 2;
 
-		    aw->state = IconicState;	// we're doing this as a hack, it may not be necessary
-
 		    // Store coords in this viewport to omit 3d effect
 		    // painting in other viewports
 		    if (aw->lastKnownCoords.x != NOT_INITIALIZED)
@@ -3689,7 +3675,7 @@ static Bool animDamageWindowRect(CompWindow * w, Bool initial, BoxPtr rect)
 			aw->lastKnownCoords.x = w->attrib.x;
 			aw->lastKnownCoords.y = w->attrib.y;
 		    }
-		    if (animEnsureModel(w, WindowEventCreate, aw->curAnimEffect))
+		    if (animEnsureModel(w, WindowEventOpen, aw->curAnimEffect))
 		    {
 			addWindowDamage(w);
 		    }
@@ -3722,7 +3708,7 @@ static void animWindowResizeNotify(CompWindow * w, int dx, int dy, int dwidth, i
     ANIM_WINDOW(w);
 
     // Don't let transient window open anim be interrupted with a resize notify
-    if (!(aw->curWindowEvent == WindowEventCreate &&
+    if (!(aw->curWindowEvent == WindowEventOpen &&
 	  (isQtTransientWindow(w) ||
 	   (w->wmType &
 	    (CompWindowTypeDropdownMenuMask |
@@ -3944,8 +3930,9 @@ static void animFiniDisplay(CompPlugin * p, CompDisplay * d)
 static Bool animInitScreen(CompPlugin * p, CompScreen * s)
 {
     AnimScreen *as;
-	
-    ANIM_DISPLAY(s->display);
+    CompDisplay *d = s->display;
+
+    ANIM_DISPLAY(d);
 
     as = calloc(1, sizeof(AnimScreen));
     if (!as)
@@ -3971,54 +3958,30 @@ static Bool animInitScreen(CompPlugin * p, CompScreen * s)
 
     as->animInProgress = FALSE;
 
-    as->minimizeEffect = minimizeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_MINIMIZE_EFFECT].value.i];
-    as->create1Effect = closeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_CREATE1_EFFECT].value.i];
-    as->create2Effect = closeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_CREATE2_EFFECT].value.i];
-    as->close1Effect = closeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_CLOSE1_EFFECT].value.i];
-    as->close2Effect = closeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_CLOSE2_EFFECT].value.i];
-    as->focusEffect = focusEffectType[
-	as->opt[ANIM_SCREEN_OPTION_FOCUS_EFFECT].value.i];
-    as->shadeEffect = shadeEffectType[
-	as->opt[ANIM_SCREEN_OPTION_SHADE_EFFECT].value.i];
-	
     animStoreRandomEffectList (
 	&as->opt[ANIM_SCREEN_OPTION_MINIMIZE_RANDOM_EFFECTS].value,
-	minimizeEffectType + RANDOM_EFFECT_OFFSET,
+	minimizeEffects + RANDOM_EFFECT_OFFSET,
 	NUM_MINIMIZE_EFFECT - RANDOM_EFFECT_OFFSET,
 	as->minimizeRandomEffects,
 	&as->nMinimizeRandomEffects);
+
     animStoreRandomEffectList (
-	&as->opt[ANIM_SCREEN_OPTION_CLOSE1_RANDOM_EFFECTS].value,
-	closeEffectType + RANDOM_EFFECT_OFFSET,
-	NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-	as->close1RandomEffects,
-	&as->nClose1RandomEffects);
-    animStoreRandomEffectList (
-	&as->opt[ANIM_SCREEN_OPTION_CLOSE2_RANDOM_EFFECTS].value,
-	closeEffectType + RANDOM_EFFECT_OFFSET,
-	NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-	as->close2RandomEffects,
-	&as->nClose2RandomEffects);
-    animStoreRandomEffectList (
-	&as->opt[ANIM_SCREEN_OPTION_CREATE1_RANDOM_EFFECTS].value,
-	closeEffectType + RANDOM_EFFECT_OFFSET,
+	&as->opt[ANIM_SCREEN_OPTION_CLOSE_RANDOM_EFFECTS].value,
+	closeEffects + RANDOM_EFFECT_OFFSET,
 	NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-	as->create1RandomEffects,
-	&as->nCreate1RandomEffects);
+	as->closeRandomEffects,
+	&as->nCloseRandomEffects);
+
     animStoreRandomEffectList (
-	&as->opt[ANIM_SCREEN_OPTION_CREATE2_RANDOM_EFFECTS].value,
-	closeEffectType + RANDOM_EFFECT_OFFSET,
+	&as->opt[ANIM_SCREEN_OPTION_OPEN_RANDOM_EFFECTS].value,
+	closeEffects + RANDOM_EFFECT_OFFSET,
 	NUM_CLOSE_EFFECT - RANDOM_EFFECT_OFFSET,
-	as->create2RandomEffects,
-	&as->nCreate2RandomEffects);
+	as->openRandomEffects,
+	&as->nOpenRandomEffects);
+
     animStoreRandomEffectList (
 	&as->opt[ANIM_SCREEN_OPTION_SHADE_RANDOM_EFFECTS].value,
-	shadeEffectType + RANDOM_EFFECT_OFFSET,
+	shadeEffects + RANDOM_EFFECT_OFFSET,
 	NUM_SHADE_EFFECT - RANDOM_EFFECT_OFFSET,
 	as->shadeRandomEffects,
 	&as->nShadeRandomEffects);
@@ -4038,7 +4001,6 @@ static Bool animInitScreen(CompPlugin * p, CompScreen * s)
     WRAP(as, s, damageWindowRect, animDamageWindowRect);
     WRAP(as, s, addWindowGeometry, animAddWindowGeometry);
     WRAP(as, s, drawWindowTexture, animDrawWindowTexture);
-    //WRAP(as, s, drawWindowGeometry, animDrawWindowGeometry);
     WRAP(as, s, windowResizeNotify, animWindowResizeNotify);
     WRAP(as, s, windowMoveNotify, animWindowMoveNotify);
     WRAP(as, s, windowGrabNotify, animWindowGrabNotify);
@@ -4070,7 +4032,6 @@ static void animFiniScreen(CompPlugin * p, CompScreen * s)
     UNWRAP(as, s, damageWindowRect);
     UNWRAP(as, s, addWindowGeometry);
     UNWRAP(as, s, drawWindowTexture);
-    //UNWRAP(as, s, drawWindowGeometry);
     UNWRAP(as, s, windowResizeNotify);
     UNWRAP(as, s, windowMoveNotify);
     UNWRAP(as, s, windowGrabNotify);

Modified: fusion/plugins/animation/animation.xml.in
===================================================================
--- fusion/plugins/animation/animation.xml.in
+++ fusion/plugins/animation/animation.xml.in
@@ -13,18 +13,25 @@
 	<plugin>fade</plugin>
       </relation>
     </deps>
+
     <screen>
+
       <group>
 	<_short>Close Animation</_short>
 
 	<subgroup>
-	  <_short>Close Animation (Dialogs &amp; Windows)</_short>
-	  <option name="close1_effect" type="int">
+	  <_short>Animation Selection</_short>
+	  <option name="close_effect" type="list">
 	    <_short>Close Effect</_short>
 	    <_long>The animation effect shown when closing a window.</_long>
+	    <type>int</type>
 	    <min>0</min>
 	    <max>18</max>
-	    <default>18</default>
+	    <default>
+	      <value>18</value>
+	      <value>8</value>
+	      <value>8</value>
+	    </default>
 	    <desc>
 	      <value>0</value>
 	      <_name>None</_name>
@@ -102,17 +109,46 @@
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="close1_duration" type="float">
-	    <_short>Animation Duration</_short>
+	  <option name="close_duration" type="list">
+	    <_short>Duration</_short>
 	    <_long>Animation duration in seconds for close effect.</_long>
-	    <default>0.2</default>
+	    <type>float</type>
 	    <min>0.1</min>
 	    <max>10</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
+	    <default>
+	      <value>0.2</value>
+	      <value>0.15</value>
+	      <value>0.15</value>
+	    </default>
+	  </option>
+	  <option name="close_match" type="list">
+	    <_short>Window Match</_short>
+	    <_long>The windows that will be animated.</_long>
+	    <type>match</type>
+	    <default>
+	      <value>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</value>
+	      <value>(type=Menu | PopupMenu | DropdownMenu) &amp; !(name=gnome-screensaver)</value>
+	      <value>(type=Tooltip | Notification)</value>
+	    </default>
 	  </option>
-	  <option name="close1_random_effects" type="list">
-	    <_short>Random Effect Pool</_short>
-	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
+	  <option name="close_options" type="list">
+	    <_short> </_short>
+	    <_long>(This part will be used in the near future. This place-holder is here now to prevent problems when it starts being used.)</_long>
+	    <type>string</type>
+	    <default>
+	      <value></value>
+	      <value></value>
+	      <value></value>
+	    </default>
+	  </option>
+	</subgroup>
+
+	<subgroup>
+	  <_short>Random Effects</_short>
+	  <option name="close_random_effects" type="list">
+	    <_short>Pool</_short>
+	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list.</_long>
 	    <type>int</type>
 	    <min>0</min>
 	    <max>16</max>
@@ -204,21 +240,26 @@
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="close1_match" type="match">
-	    <_short>Window Match</_short>
-	    <_long>The windows that will be animated.</_long>
-	    <default>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</default>
-	  </option>
 	</subgroup>
 
+      </group>
+
+      <group>
+	<_short>Open Animation</_short>
+
 	<subgroup>
-	  <_short>Close Animation (Menus &amp; Tooltips)</_short>
-	  <option name="close2_effect" type="int">
-	    <_short>Close Effect</_short>
-	    <_long>The animation effect shown when closing a window.</_long>
+	  <_short>Animation Selection</_short>
+	  <option name="open_effect" type="list">
+	    <_short>Open Effect</_short>
+	    <_long>The animation effect shown when creating a window.</_long>
+	    <type>int</type>
 	    <min>0</min>
 	    <max>18</max>
-	    <default>8</default>
+	    <default>
+	      <value>18</value>
+	      <value>8</value>
+	      <value>8</value>
+	    </default>
 	    <desc>
 	      <value>0</value>
 	      <_name>None</_name>
@@ -296,17 +337,46 @@
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="close2_duration" type="float">
-	    <_short>Animation Duration</_short>
-	    <_long>Animation duration in seconds for close effect.</_long>
-	    <default>0.15</default>
+	  <option name="open_duration" type="list">
+	    <_short>Duration</_short>
+	    <_long>Animation duration in seconds for open effect.</_long>
+	    <type>float</type>
 	    <min>0.1</min>
 	    <max>10</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
+	    <default>
+	      <value>0.2</value>
+	      <value>0.15</value>
+	      <value>0.15</value>
+	    </default>
+	  </option>
+	  <option name="open_match" type="list">
+	    <_short>Window Match</_short>
+	    <_long>The windows that will be animated.</_long>
+	    <type>match</type>
+	    <default>
+	      <value>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</value>
+	      <value>(type=Menu | PopupMenu | DropdownMenu) &amp; !(name=gnome-screensaver)</value>
+	      <value>(type=Tooltip | Notification)</value>
+	    </default>
 	  </option>
-	  <option name="close2_random_effects" type="list">
-	    <_short>Random Effect Pool</_short>
-	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
+	  <option name="open_options" type="list">
+	    <_short> </_short>
+	    <_long>(This part will be used in the near future. This place-holder is here now to prevent problems when it starts being used.)</_long>
+	    <type>string</type>
+	    <default>
+	      <value></value>
+	      <value></value>
+	      <value></value>
+	    </default>
+	  </option>
+	</subgroup>
+
+	<subgroup>
+	  <_short>Random Effects</_short>
+	  <option name="open_random_effects" type="list">
+	    <_short>Pool</_short>
+	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list.</_long>
 	    <type>int</type>
 	    <min>0</min>
 	    <max>16</max>
@@ -398,25 +468,24 @@
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="close2_match" type="match">
-	    <_short>Window Match</_short>
-	    <_long>The windows that will be animated.</_long>
-	    <default>(type=Menu | PopupMenu | DropdownMenu | Tooltip | Notification) &amp; !(name=gnome-screensaver)</default>
-	  </option>
 	</subgroup>
+
       </group>
 
       <group>
-	<_short>Create Animation</_short>
+	<_short>Minimize Animation</_short>
 
 	<subgroup>
-	  <_short>Create Animation (Dialogs &amp; Windows)</_short>
-	  <option name="create1_effect" type="int">
-	    <_short>Create Effect</_short>
-	    <_long>The animation effect shown when creating a window.</_long>
+	  <_short>Animation Selection</_short>
+	  <option name="minimize_effect" type="list">
+	    <_short>Minimize Effect</_short>
+	    <_long>The animation effect shown when minimizing a window.</_long>
+	    <type>int</type>
 	    <min>0</min>
-	    <max>18</max>
-	    <default>18</default>
+	    <max>16</max>
+	    <default>
+	      <value>13</value>
+	    </default>
 	    <desc>
 	      <value>0</value>
 	      <_name>None</_name>
@@ -483,31 +552,46 @@
 	    </desc>
 	    <desc>
 	      <value>16</value>
-	      <_name>Vacuum</_name>
-	    </desc>
-	    <desc>
-	      <value>17</value>
-	      <_name>Wave</_name>
-	    </desc>
-	    <desc>
-	      <value>18</value>
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="create1_duration" type="float">
-	    <_short>Animation Duration</_short>
-	    <_long>Animation duration in seconds for create effect.</_long>
-	    <default>0.2</default>
+	  <option name="minimize_duration" type="list">
+	    <_short>Duration</_short>
+	    <_long>Animation duration in seconds for minimize effect.</_long>
+	    <type>float</type>
+	    <default>
+	      <value>0.3</value>
+	    </default>
 	    <min>0.1</min>
 	    <max>10</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
 	  </option>
-	  <option name="create1_random_effects" type="list">
-	    <_short>Random Effect Pool</_short>
-	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
+	  <option name="minimize_match" type="list">
+	    <_short>Window Match</_short>
+	    <_long>The windows that will be animated.</_long>
+	    <type>match</type>
+	    <default>
+	      <value>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</value>
+	    </default>
+	  </option>
+	  <option name="minimize_options" type="list">
+	    <_short> </_short>
+	    <_long>(This part will be used in the near future. This place-holder is here now to prevent problems when it starts being used.)</_long>
+	    <type>string</type>
+	    <default>
+	      <value></value>
+	    </default>
+	  </option>
+	</subgroup>
+
+	<subgroup>
+	  <_short>Random Effects</_short>
+	  <option name="minimize_random_effects" type="list">
+	    <_short>Pool</_short>
+	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list.</_long>
 	    <type>int</type>
 	    <min>0</min>
-	    <max>16</max>
+	    <max>14</max>
 	    <default>
 	      <value>0</value>
 	      <value>1</value>
@@ -524,8 +608,6 @@
 	      <value>12</value>
 	      <value>13</value>
 	      <value>14</value>
-	      <value>15</value>
-	      <value>16</value>
 	    </default>
 	    <desc>
 	      <value>0</value>
@@ -585,32 +667,27 @@
 	    </desc>
 	    <desc>
 	      <value>14</value>
-	      <_name>Vacuum</_name>
-	    </desc>
-	    <desc>
-	      <value>15</value>
-	      <_name>Wave</_name>
-	    </desc>
-	    <desc>
-	      <value>16</value>
 	      <_name>Zoom</_name>
 	    </desc>
 	  </option>
-	  <option name="create1_match" type="match">
-	    <_short>Window Match</_short>
-	    <_long>Window that should animate with this effect when created.</_long>
-	    <default>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</default>
-	  </option>
 	</subgroup>
 
+      </group>
+
+      <group>
+	<_short>Shade Animation</_short>
+
 	<subgroup>
-	  <_short>Create Animation (Menus &amp; Tooltips)</_short>
-	  <option name="create2_effect" type="int">
-	    <_short>Create Effect</_short>
-	    <_long>The animation effect shown when creating a window.</_long>
+	  <_short>Animation Selection</_short>
+	  <option name="shade_effect" type="list">
+	    <_short>Shade Effect</_short>
+	    <_long>The animation effect shown when shading a window.</_long>
+	    <type>int</type>
 	    <min>0</min>
-	    <max>18</max>
-	    <default>8</default>
+	    <max>4</max>
+	    <default>
+	      <value>4</value>
+	    </default>
 	    <desc>
 	      <value>0</value>
 	      <_name>None</_name>
@@ -621,465 +698,134 @@
 	    </desc>
 	    <desc>
 	      <value>2</value>
-	      <_name>Beam Up</_name>
-	    </desc>
-	    <desc>
-	      <value>3</value>
-	      <_name>Burn</_name>
-	    </desc>
-	    <desc>
-	      <value>4</value>
 	      <_name>Curved Fold</_name>
 	    </desc>
 	    <desc>
-	      <value>5</value>
-	      <_name>Domino</_name>
-	    </desc>
-	    <desc>
-	      <value>6</value>
-	      <_name>Dream</_name>
-	    </desc>
-	    <desc>
-	      <value>7</value>
-	      <_name>Explode</_name>
-	    </desc>
-	    <desc>
-	      <value>8</value>
-	      <_name>Fade</_name>
-	    </desc>
-	    <desc>
-	      <value>9</value>
-	      <_name>Glide 1</_name>
-	    </desc>
-	    <desc>
-	      <value>10</value>
-	      <_name>Glide 2</_name>
-	    </desc>
-	    <desc>
-	      <value>11</value>
+	      <value>3</value>
 	      <_name>Horizontal Folds</_name>
 	    </desc>
 	    <desc>
-	      <value>12</value>
-	      <_name>Leaf Spread</_name>
-	    </desc>
-	    <desc>
-	      <value>13</value>
-	      <_name>Magic Lamp</_name>
-	    </desc>
-	    <desc>
-	      <value>14</value>
-	      <_name>Razr</_name>
-	    </desc>
-	    <desc>
-	      <value>15</value>
-	      <_name>Sidekick</_name>
-	    </desc>
-	    <desc>
-	      <value>16</value>
-	      <_name>Vacuum</_name>
-	    </desc>
-	    <desc>
-	      <value>17</value>
-	      <_name>Wave</_name>
-	    </desc>
-	    <desc>
-	      <value>18</value>
-	      <_name>Zoom</_name>
+	      <value>4</value>
+	      <_name>Roll Up</_name>
 	    </desc>
 	  </option>
-	  <option name="create2_duration" type="float">
-	    <_short>Animation Duration</_short>
-	    <_long>Animation duration in seconds for create effect.</_long>
-	    <default>0.15</default>
+	  <option name="shade_duration" type="list">
+	    <_short>Duration</_short>
+	    <_long>Animation duration in seconds for shade effect.</_long>
+	    <type>float</type>
+	    <default>
+	      <value>0.3</value>
+	    </default>
 	    <min>0.1</min>
 	    <max>10</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
+	  </option>
+	  <option name="shade_match" type="list">
+	    <_short>Window Match</_short>
+	    <_long>Window that should animate with this effect when shaded.</_long>
+	    <type>match</type>
+	    <default>
+	      <value>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</value>
+	    </default>
+	  </option>
+	  <option name="shade_options" type="list">
+	    <_short> </_short>
+	    <_long>(This part will be used in the near future. This place-holder is here now to prevent problems when it starts being used.)</_long>
+	    <type>string</type>
+	    <default>
+	      <value></value>
+	    </default>
 	  </option>
-	  <option name="create2_random_effects" type="list">
-	    <_short>Random Effect Pool</_short>
-	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
+	</subgroup>
+
+	<subgroup>
+	  <_short>Random Effects</_short>
+	  <option name="shade_random_effects" type="list">
+	    <_short>Pool</_short>
+	    <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list.</_long>
 	    <type>int</type>
 	    <min>0</min>
-	    <max>16</max>
+	    <max>2</max>
 	    <default>
 	      <value>0</value>
 	      <value>1</value>
 	      <value>2</value>
-	      <value>3</value>
-	      <value>4</value>
-	      <value>5</value>
-	      <value>6</value>
-	      <value>7</value>
-	      <value>8</value>
-	      <value>9</value>
-	      <value>10</value>
-	      <value>11</value>
-	      <value>12</value>
-	      <value>13</value>
-	      <value>14</value>
-	      <value>15</value>
-	      <value>16</value>
 	    </default>
 	    <desc>
 	      <value>0</value>
-	      <_name>Beam Up</_name>
+	      <_name>Curved Fold</_name>
 	    </desc>
 	    <desc>
 	      <value>1</value>
-	      <_name>Burn</_name>
+	      <_name>Horizontal Folds</_name>
 	    </desc>
 	    <desc>
 	      <value>2</value>
-	      <_name>Curved Fold</_name>
-	    </desc>
-	    <desc>
-	      <value>3</value>
-	      <_name>Domino</_name>
+	      <_name>Roll Up</_name>
 	    </desc>
+	  </option>
+	</subgroup>
+
+      </group>
+
+      <group>
+	<_short>Focus Animation</_short>
+	<subgroup>
+	  <_short>Animation Selection</_short>
+	  <option name="focus_effect" type="list">
+	    <_short>Focus Effect</_short>
+	    <_long>The animation effect shown when focusing a window.</_long>
+	    <type>int</type>
+	    <min>0</min>
+	    <max>3</max>
+	    <default>
+	      <value>0</value>
+	    </default>
 	    <desc>
-	      <value>4</value>
-	      <_name>Dream</_name>
+	      <value>0</value>
+	      <_name>None</_name>
 	    </desc>
 	    <desc>
-	      <value>5</value>
-	      <_name>Explode</_name>
+	      <value>1</value>
+	      <_name>Dodge</_name>
 	    </desc>
 	    <desc>
-	      <value>6</value>
+	      <value>2</value>
 	      <_name>Fade</_name>
 	    </desc>
 	    <desc>
-	      <value>7</value>
-	      <_name>Glide 1</_name>
-	    </desc>
-	    <desc>
-	      <value>8</value>
-	      <_name>Glide 2</_name>
-	    </desc>
-	    <desc>
-	      <value>9</value>
-	      <_name>Horizontal Folds</_name>
-	    </desc>
-	    <desc>
-	      <value>10</value>
-	      <_name>Leaf Spread</_name>
-	    </desc>
-	    <desc>
-	      <value>11</value>
-	      <_name>Magic Lamp</_name>
-	    </desc>
-	    <desc>
-	      <value>12</value>
-	      <_name>Razr</_name>
-	    </desc>
-	    <desc>
-	      <value>13</value>
-	      <_name>Sidekick</_name>
-	    </desc>
-	    <desc>
-	      <value>14</value>
-	      <_name>Vacuum</_name>
-	    </desc>
-	    <desc>
-	      <value>15</value>
+	      <value>3</value>
 	      <_name>Wave</_name>
 	    </desc>
-	    <desc>
-	      <value>16</value>
-	      <_name>Zoom</_name>
-	    </desc>
 	  </option>
-	  <option name="create2_match" type="match">
+	  <option name="focus_duration" type="list">
+	    <_short>Duration</_short>
+	    <_long>Animation duration in seconds for focus effect.</_long>
+	    <type>float</type>
+	    <min>0.1</min>
+	    <max>10</max>
+	    <precision>0.01</precision>
+	    <default>
+	      <value>0.3</value>
+	    </default>
+	  </option>
+	  <option name="focus_match" type="list">
 	    <_short>Window Match</_short>
-	    <_long>Window that should animate with this effect when created.</_long>
-	    <default>(type=Menu | PopupMenu | DropdownMenu | Tooltip | Notification) &amp; !(name=gnome-screensaver)</default>
+	    <_long>Window that should animate with this effect when focused.</_long>
+	    <type>match</type>
+	    <default>
+	      <value>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</value>
+	    </default>
 	  </option>
-	</subgroup>
-      </group>
-
-      <group>
-	<_short>Minimize Animation</_short>
-	<option name="minimize_effect" type="int">
-	  <_short>Minimize Effect</_short>
-	  <_long>The animation effect shown when minimizing a window.</_long>
-	  <min>0</min>
-	  <max>16</max>
-	  <default>13</default>
-	  <desc>
-	    <value>0</value>
-	    <_name>None</_name>
-	  </desc>
-	  <desc>
-	    <value>1</value>
-	    <_name>Random</_name>
-	  </desc>
-	  <desc>
-	    <value>2</value>
-	    <_name>Beam Up</_name>
-	  </desc>
-	  <desc>
-	    <value>3</value>
-	    <_name>Burn</_name>
-	  </desc>
-	  <desc>
-	    <value>4</value>
-	    <_name>Curved Fold</_name>
-	  </desc>
-	  <desc>
-	    <value>5</value>
-	    <_name>Domino</_name>
-	  </desc>
-	  <desc>
-	    <value>6</value>
-	    <_name>Dream</_name>
-	  </desc>
-	  <desc>
-	    <value>7</value>
-	    <_name>Explode</_name>
-	  </desc>
-	  <desc>
-	    <value>8</value>
-	    <_name>Fade</_name>
-	  </desc>
-	  <desc>
-	    <value>9</value>
-	    <_name>Glide 1</_name>
-	  </desc>
-	  <desc>
-	    <value>10</value>
-	    <_name>Glide 2</_name>
-	  </desc>
-	  <desc>
-	    <value>11</value>
-	    <_name>Horizontal Folds</_name>
-	  </desc>
-	  <desc>
-	    <value>12</value>
-	    <_name>Leaf Spread</_name>
-	  </desc>
-	  <desc>
-	    <value>13</value>
-	    <_name>Magic Lamp</_name>
-	  </desc>
-	  <desc>
-	    <value>14</value>
-	    <_name>Razr</_name>
-	  </desc>
-	  <desc>
-	    <value>15</value>
-	    <_name>Sidekick</_name>
-	  </desc>
-	  <desc>
-	    <value>16</value>
-	    <_name>Zoom</_name>
-	  </desc>
-	</option>
-	<option name="minimize_duration" type="float">
-	  <_short>Animation Duration</_short>
-	  <_long>Animation duration in seconds for minimize effect.</_long>
-	  <default>0.3</default>
-	  <min>0.1</min>
-	  <max>10</max>
-	  <precision>0.02</precision>
-	</option>
-	<option name="minimize_random_effects" type="list">
-	  <_short>Random Effect Pool</_short>
-	  <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
-	  <type>int</type>
-	  <min>0</min>
-	  <max>14</max>
-	  <default>
-	    <value>0</value>
-	    <value>1</value>
-	    <value>2</value>
-	    <value>3</value>
-	    <value>4</value>
-	    <value>5</value>
-	    <value>6</value>
-	    <value>7</value>
-	    <value>8</value>
-	    <value>9</value>
-	    <value>10</value>
-	    <value>11</value>
-	    <value>12</value>
-	    <value>13</value>
-	    <value>14</value>
-	  </default>
-	  <desc>
-	    <value>0</value>
-	    <_name>Beam Up</_name>
-	  </desc>
-	  <desc>
-	    <value>1</value>
-	    <_name>Burn</_name>
-	  </desc>
-	  <desc>
-	    <value>2</value>
-	    <_name>Curved Fold</_name>
-	  </desc>
-	  <desc>
-	    <value>3</value>
-	    <_name>Domino</_name>
-	  </desc>
-	  <desc>
-	    <value>4</value>
-	    <_name>Dream</_name>
-	  </desc>
-	  <desc>
-	    <value>5</value>
-	    <_name>Explode</_name>
-	  </desc>
-	  <desc>
-	    <value>6</value>
-	    <_name>Fade</_name>
-	  </desc>
-	  <desc>
-	    <value>7</value>
-	    <_name>Glide 1</_name>
-	  </desc>
-	  <desc>
-	    <value>8</value>
-	    <_name>Glide 2</_name>
-	  </desc>
-	  <desc>
-	    <value>9</value>
-	    <_name>Horizontal Folds</_name>
-	  </desc>
-	  <desc>
-	    <value>10</value>
-	    <_name>Leaf Spread</_name>
-	  </desc>
-	  <desc>
-	    <value>11</value>
-	    <_name>Magic Lamp</_name>
-	  </desc>
-	  <desc>
-	    <value>12</value>
-	    <_name>Razr</_name>
-	  </desc>
-	  <desc>
-	    <value>13</value>
-	    <_name>Sidekick</_name>
-	  </desc>
-	  <desc>
-	    <value>14</value>
-	    <_name>Zoom</_name>
-	  </desc>
-	</option>
-	<option name="minimize_match" type="match">
-	  <_short>Window Match</_short>
-	  <_long>The windows that will be animated.</_long>
-	  <default>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</default>
-	</option>
-      </group>
-
-      <group>
-	<_short>Shade Animation</_short>
-	<option name="shade_effect" type="int">
-	  <_short>Shade Effect</_short>
-	  <_long>The animation effect shown when shading a window.</_long>
-	  <min>0</min>
-	  <max>4</max>
-	  <default>4</default>
-	  <desc>
-	    <value>0</value>
-	    <_name>None</_name>
-	  </desc>
-	  <desc>
-	    <value>1</value>
-	    <_name>Random</_name>
-	  </desc>
-	  <desc>
-	    <value>2</value>
-	    <_name>Curved Fold</_name>
-	  </desc>
-	  <desc>
-	    <value>3</value>
-	    <_name>Horizontal Folds</_name>
-	  </desc>
-	  <desc>
-	    <value>4</value>
-	    <_name>Roll Up</_name>
-	  </desc>
-	</option>
-	<option name="shade_duration" type="float">
-	  <_short>Animation Duration</_short>
-	  <_long>Animation duration in seconds for shade effect.</_long>
-	  <default>0.3</default>
-	  <min>0.1</min>
-	  <max>10</max>
-	  <precision>0.02</precision>
-	</option>
-	<option name="shade_random_effects" type="list">
-	  <_short>Random Effect Pool</_short>
-	  <_long>Pool of effects to be chosen from if Random effect is selected. Click reset to restore full list. If the list is empty, the default effect will be used.</_long>
-	  <type>int</type>
-	  <min>0</min>
-	  <max>2</max>
-	  <default>
-	    <value>0</value>
-	    <value>1</value>
-	    <value>2</value>
-	  </default>
-	  <desc>
-	    <value>0</value>
-	    <_name>Curved Fold</_name>
-	  </desc>
-	  <desc>
-	    <value>1</value>
-	    <_name>Horizontal Folds</_name>
-	  </desc>
-	  <desc>
-	    <value>2</value>
-	    <_name>Roll Up</_name>
-	  </desc>
-	</option>
-	<option name="shade_match" type="match">
-	  <_short>Window Match</_short>
-	  <_long>Window that should animate with this effect when shaded.</_long>
-	  <default>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</default>
-	</option>
-      </group>
-
-      <group>
-	<_short>Focus Animation</_short>
-	<option name="focus_effect" type="int">
-	  <_short>Focus Effect</_short>
-	  <_long>The animation effect shown when focusing a window.</_long>
-	  <min>0</min>
-	  <max>3</max>
-	  <default>0</default>
-	  <desc>
-	    <value>0</value>
-	    <_name>None</_name>
-	  </desc>
-	  <desc>
-	    <value>1</value>
-	    <_name>Dodge</_name>
-	  </desc>
-	  <desc>
-	    <value>2</value>
-	    <_name>Fade</_name>
-	  </desc>
-	  <desc>
-	    <value>3</value>
-	    <_name>Wave</_name>
-	  </desc>
-	</option>
-	<option name="focus_duration" type="float">
-	  <_short>Animation Duration</_short>
-	  <_long>Animation duration in seconds for focus effect.</_long>
-	  <default>0.3</default>
-	  <min>0.1</min>
-	  <max>10</max>
-	  <precision>0.02</precision>
-	</option>
-	<option name="focus_match" type="match">
-	  <_short>Window Match</_short>
-	  <_long>Window that should animate with this effect when focused.</_long>
-	  <default>(type=Normal | Dialog | ModalDialog | Utility | Unknown)</default>
-	</option>
+	  <option name="focus_options" type="list">
+	    <_short> </_short>
+	    <_long>(This part will be used in the near future. This place-holder is here now to prevent problems when it starts being used.)</_long>
+	    <type>string</type>
+	    <default>
+	      <value></value>
+	    </default>
+	  </option>
+        </subgroup>
       </group>
 
       <group>
@@ -1305,7 +1051,7 @@
 	    </desc>
 	    <desc>
 	      <value>2</value>
-	      <_name>Create/Close Only</_name>
+	      <_name>Open/Close Only</_name>
 	    </desc>
 	    <desc>
 	      <value>3</value>
@@ -1365,7 +1111,7 @@
 	    </desc>
 	    <desc>
 	      <value>2</value>
-	      <_name>Create/Close Only</_name>
+	      <_name>Open/Close Only</_name>
 	    </desc>
 	    <desc>
 	      <value>3</value>
@@ -1382,7 +1128,7 @@
 	    <default>0.5</default>
 	    <min>0</min>
 	    <max>1</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
 	  </option>
 	</subgroup>
 
@@ -1403,7 +1149,7 @@
 	    <default>0.7</default>
 	    <min>0.02</min>
 	    <max>3</max>
-	    <precision>0.02</precision>
+	    <precision>0.01</precision>
 	  </option>
 	  <option name="wave_amp" type="float">
 	    <_short>Wave Amplitude</_short>
@@ -1452,9 +1198,9 @@
 	    <max>2000</max>
 	    <precision>5</precision>
 	  </option>
-	  <option name="magic_lamp_create_start_width" type="int">
-	    <_short>Magic Lamp Create Start Width</_short>
-	    <_long>Starting width of create effect and ending width of close effect for Magic Lamp.</_long>
+	  <option name="magic_lamp_open_start_width" type="int">
+	    <_short>Magic Lamp Open Start Width</_short>
+	    <_long>Starting width of open effect and ending width of close effect for Magic Lamp.</_long>
 	    <default>30</default>
 	    <min>0</min>
 	    <max>500</max>
@@ -1475,9 +1221,9 @@
 	    <min>2</min>
 	    <max>200</max>
 	  </option>
-	  <option name="vacuum_create_start_width" type="int">
-	    <_short>Vacuum Create Start Width</_short>
-	    <_long>Starting width of create effect and ending width of close effect for Vacuum.</_long>
+	  <option name="vacuum_open_start_width" type="int">
+	    <_short>Vacuum Open Start Width</_short>
+	    <_long>Starting width of open effect and ending width of close effect for Vacuum.</_long>
 	    <default>30</default>
 	    <min>0</min>
 	    <max>500</max>
@@ -1660,4 +1406,3 @@
     </screen>
   </plugin>
 </compiz>
-

Modified: fusion/plugins/animation/beamup.c
===================================================================
--- fusion/plugins/animation/beamup.c
+++ fusion/plugins/animation/beamup.c
@@ -199,7 +199,7 @@ Bool fxBeamUpModelStep(CompScreen * s, CompWindow * w, float time)
 
     stepSize = new - old;
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventUnminimize ||
 	aw->curWindowEvent == WindowEventUnshade)
     {
@@ -286,7 +286,7 @@ fxBeamupUpdateWindowAttrib(AnimScreen * as,
     forwardProgress = MIN(forwardProgress, 1);
     forwardProgress = MAX(forwardProgress, 0);
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventUnminimize)
     {
 	forwardProgress = forwardProgress * forwardProgress;

Modified: fusion/plugins/animation/burn.c
===================================================================
--- fusion/plugins/animation/burn.c
+++ fusion/plugins/animation/burn.c
@@ -295,7 +295,7 @@ Bool fxBurnModelStep(CompScreen * s, CompWindow * w, float time)
 
     stepSize = new - old;
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventUnminimize ||
 	aw->curWindowEvent == WindowEventUnshade)
     {

Modified: fusion/plugins/animation/curvedfold.c
===================================================================
--- fusion/plugins/animation/curvedfold.c
+++ fusion/plugins/animation/curvedfold.c
@@ -158,7 +158,7 @@ fxFoldUpdateWindowAttrib(AnimScreen * as,
 {
     ANIM_WINDOW(w);
 
-    if (aw->curWindowEvent == WindowEventCreate ||
+    if (aw->curWindowEvent == WindowEventOpen ||
 	aw->curWindowEvent == WindowEventClose ||
 	((aw->curWindowEvent == WindowEventMinimize ||
 	  aw->curWindowEvent == WindowEventUnminimize) &&

Modified: fusion/plugins/animation/magiclamp.c
===================================================================
--- fusion/plugins/animation/magiclamp.c
+++ fusion/plugins/animation/magiclamp.c
@@ -296,7 +296,7 @@ Bool fxMagicLampModelStep(CompScreen * s, CompWindow * w, float time)
 
     Model *model = aw->model;
 
-    if ((aw->curWindowEvent == WindowEventCreate ||
+    if ((aw->curWindowEvent == WindowEventOpen ||
 	 aw->curWindowEvent == WindowEventClose) &&
 	((aw->curAnimEffect == AnimEffectMagicLamp &&
 	  as->opt[ANIM_SCREEN_OPTION_MAGIC_LAMP_MOVING_END].value.b) ||

Modified: fusion/plugins/animation/zoomside.c
===================================================================
--- fusion/plugins/animation/zoomside.c
+++ fusion/plugins/animation/zoomside.c
@@ -79,7 +79,7 @@ void fxZoomInit(CompScreen * s, CompWindow * w)
 	    aw->curWindowEvent == WindowEventUnminimize) &&
 	   as->opt[ANIM_SCREEN_OPTION_SIDEKICK_ZOOM_FROM_CENTER].value.i ==
 	   ZoomFromCenterMin) ||
-	  ((aw->curWindowEvent == WindowEventCreate ||
+	  ((aw->curWindowEvent == WindowEventOpen ||
 	    aw->curWindowEvent == WindowEventClose) &&
 	   as->opt[ANIM_SCREEN_OPTION_SIDEKICK_ZOOM_FROM_CENTER].value.i ==
 	   ZoomFromCenterCreate))) ||
@@ -90,7 +90,7 @@ void fxZoomInit(CompScreen * s, CompWindow * w)
 	    aw->curWindowEvent == WindowEventUnminimize) &&
 	   as->opt[ANIM_SCREEN_OPTION_ZOOM_FROM_CENTER].value.i ==
 	   ZoomFromCenterMin) ||
-	  ((aw->curWindowEvent == WindowEventCreate ||
+	  ((aw->curWindowEvent == WindowEventOpen ||
 	    aw->curWindowEvent == WindowEventClose) &&
 	   as->opt[ANIM_SCREEN_OPTION_ZOOM_FROM_CENTER].value.i ==
 	   ZoomFromCenterCreate))))
@@ -103,14 +103,14 @@ void fxZoomInit(CompScreen * s, CompWindow * w)
 
     // allow extra time for spring damping / deceleration
     if ((aw->curWindowEvent == WindowEventUnminimize ||
-	 aw->curWindowEvent == WindowEventCreate) &&
+	 aw->curWindowEvent == WindowEventOpen) &&
 	fxZoomGetSpringiness(as, aw) > 1e-4)
     {
 	aw->animTotalTime /= SPRINGY_ZOOM_PERCEIVED_T;
     }
     else if ((aw->curAnimEffect == AnimEffectZoom ||
 	      aw->curAnimEffect == AnimEffectSidekick) &&
-	     (aw->curWindowEvent == WindowEventCreate ||
+	     (aw->curWindowEvent == WindowEventOpen ||
 	      aw->curWindowEvent == WindowEventClose))
     {
 	aw->animTotalTime /= NONSPRINGY_ZOOM_PERCEIVED_T;
@@ -141,13 +141,13 @@ void fxZoomAnimProgress(AnimScreen * as,
     int animProgressDir = 1;
 
     if (aw->curWindowEvent == WindowEventUnminimize ||
-	aw->curWindowEvent == WindowEventCreate)
+	aw->curWindowEvent == WindowEventOpen)
 	animProgressDir = 2;
     if (aw->animOverrideProgressDir != 0)
 	animProgressDir = aw->animOverrideProgressDir;
     if ((animProgressDir == 1 &&
 	 (aw->curWindowEvent == WindowEventUnminimize ||
-	  aw->curWindowEvent == WindowEventCreate)) ||
+	  aw->curWindowEvent == WindowEventOpen)) ||
 	(animProgressDir == 2 &&
 	 (aw->curWindowEvent == WindowEventMinimize ||
 	  aw->curWindowEvent == WindowEventClose)))
@@ -171,7 +171,7 @@ void fxZoomAnimProgress(AnimScreen * as,
 
 	// springy only when appearing
 	if ((aw->curWindowEvent == WindowEventUnminimize ||
-	     aw->curWindowEvent == WindowEventCreate) &&
+	     aw->curWindowEvent == WindowEventOpen) &&
 	    !neverSpringy)
 	{
 	    springiness = fxZoomGetSpringiness(as, aw);
@@ -203,14 +203,14 @@ void fxZoomAnimProgress(AnimScreen * as,
 	    *moveProgress = nonSpringyProgress;
 	}
 	if (aw->curWindowEvent == WindowEventUnminimize ||
-	    aw->curWindowEvent == WindowEventCreate)
+	    aw->curWindowEvent == WindowEventOpen)
 	    *moveProgress = 1 - *moveProgress;
 	if (backwards)
 	    *moveProgress = 1 - *moveProgress;
 
 	float scProgress = nonSpringyProgress;
 	if (aw->curWindowEvent == WindowEventUnminimize ||
-	    aw->curWindowEvent == WindowEventCreate)
+	    aw->curWindowEvent == WindowEventOpen)
 	    scProgress = 1 - scProgress;
 	if (backwards)
 	    scProgress = 1 - scProgress;
@@ -284,7 +284,7 @@ fxZoomUpdateWindowTransform(CompScreen *s, CompWindow *w, CompTransform *wTransf
     if (fxZoomGetSpringiness(as, aw) == 0.0f &&
 	(aw->curAnimEffect == AnimEffectZoom ||
 	 aw->curAnimEffect == AnimEffectSidekick) &&
-	(aw->curWindowEvent == WindowEventCreate ||
+	(aw->curWindowEvent == WindowEventOpen ||
 	 aw->curWindowEvent == WindowEventClose))
     {
 	matrixTranslate (wTransform,


More information about the commits mailing list