diff -up compiz-0.8.2/include/compiz-core.h.flip compiz-0.8.2/include/compiz-core.h --- compiz-0.8.2/include/compiz-core.h.flip 2009-07-31 13:00:46.120940112 -0400 +++ compiz-0.8.2/include/compiz-core.h 2009-07-31 13:00:57.625815409 -0400 @@ -219,6 +219,8 @@ extern Bool useCow; extern Bool noDetection; extern Bool useDesktopHints; extern Bool onlyCurrentScreen; +extern Bool noWait; +extern Bool alwaysSwap; extern char **initialPlugins; extern int nInitialPlugins; diff -up compiz-0.8.2/src/display.c.flip compiz-0.8.2/src/display.c --- compiz-0.8.2/src/display.c.flip 2009-07-31 13:00:46.121940240 -0400 +++ compiz-0.8.2/src/display.c 2009-07-31 13:00:57.627815245 -0400 @@ -1488,6 +1488,9 @@ eventLoop (void) s->idle ? s->redrawTime : timeDiff); + if (alwaysSwap == TRUE) + damageScreen (s); + /* substract top most overlay window region */ if (s->overlayWindowCount) { @@ -1547,9 +1550,11 @@ eventLoop (void) targetScreen = NULL; targetOutput = &s->outputDev[0]; - waitForVideoSync (s); + if (!noWait) + waitForVideoSync (s); - if (mask & COMP_SCREEN_DAMAGE_ALL_MASK) + if ((mask & COMP_SCREEN_DAMAGE_ALL_MASK) || + (alwaysSwap == TRUE)) { glXSwapBuffers (d->display, s->output); } diff -up compiz-0.8.2/src/main.c.flip compiz-0.8.2/src/main.c --- compiz-0.8.2/src/main.c.flip 2009-07-31 13:00:46.122940228 -0400 +++ compiz-0.8.2/src/main.c 2009-07-31 13:00:57.628820890 -0400 @@ -67,6 +67,8 @@ Bool noDetection = FALSE; Bool useDesktopHints = FALSE; Bool onlyCurrentScreen = FALSE; static Bool debugOutput = FALSE; +Bool noWait = FALSE; +Bool alwaysSwap = FALSE; #ifdef USE_COW Bool useCow = TRUE; @@ -89,7 +91,9 @@ usage (void) "[--replace]\n " "[--sm-disable] " "[--sm-client-id ID] " - "[--only-current-screen]\n " + "[--only-current-screen] " + "[--no-wait]\n " + "[--always-swap] " #ifdef USE_COW " [--use-root-window] " @@ -376,6 +380,14 @@ main (int argc, char **argv) if (i + 1 < argc) backgroundImage = argv[++i]; } + else if (!strcmp (argv[i], "--no-wait")) + { + noWait = TRUE; + } + else if (!strcmp (argv[i], "--always-swap")) + { + alwaysSwap = TRUE; + } else if (*argv[i] == '-') { compLogMessage ("core", CompLogLevelWarn, diff -up compiz-0.8.2/src/screen.c.flip compiz-0.8.2/src/screen.c --- compiz-0.8.2/src/screen.c.flip 2009-02-15 14:26:28.000000000 -0500 +++ compiz-0.8.2/src/screen.c 2009-07-31 13:00:57.631815337 -0400 @@ -2422,6 +2422,9 @@ void damageScreenRegion (CompScreen *screen, Region region) { + if (alwaysSwap) + damageScreen (screen); + if (screen->damageMask & COMP_SCREEN_DAMAGE_ALL_MASK) return;