--- compiz-plugins-extra-0.8.6/src/wallpaper/wallpaper.c 2010-03-29 16:09:18.000000000 +0200 +++ compiz-plugins-extra-0.8.6.new/src/wallpaper/wallpaper.c 2010-12-29 11:27:05.293817389 +0100 @@ -34,6 +34,8 @@ static int WallpaperDisplayPrivateIndex; +Damage damage; + typedef struct _WallpaperBackground { char *image; @@ -375,6 +377,10 @@ CWBackPixel | CWBorderPixel | CWColormap, &attr); +/** LOR **/ +damage = XDamageCreate (dpy, s->root , XDamageReportRawRectangles); +/** LOR **/ + XSetWMProperties (dpy, ws->fakeDesktop, NULL, NULL, programArgv, programArgc, &xsh, &xwmh, NULL); @@ -392,8 +398,10 @@ XFixesDestroyRegion (dpy, region); +/*** LOR2 XMapWindow (dpy, ws->fakeDesktop); XLowerWindow (dpy, ws->fakeDesktop); +****/ } static void @@ -405,6 +413,12 @@ XDestroyWindow (s->display->display, ws->fakeDesktop); ws->fakeDesktop = None; + +/*** LOR4 ****/ + if (damage) + XDamageDestroy (s->display->display, damage); +/*** LOR4 ****/ + } static void @@ -585,14 +599,43 @@ CompScreen *s; WALLPAPER_DISPLAY (d); + +/*** LOR5-1 ***/ + int damage_event,damage_error; +/*** LOR5-1 ***/ + + UNWRAP (wd, d, handleEvent); (*d->handleEvent) (d, event); + + WRAP (wd, d, handleEvent, wallpaperHandleEvent); + for (s = d->screens; s; s = s->next) { + + WALLPAPER_SCREEN (s); +/*** LOR5 ****/ +Display *dpy=s->display->display; +XDamageQueryExtension (dpy, &damage_event, &damage_error); + if (event->type == damage_event + XDamageNotify) + { + XDamageNotifyEvent *de = (XDamageNotifyEvent*) event; + + + if (s->root == de->drawable) + { + + XMapWindow ( dpy , ws->fakeDesktop); + XLowerWindow ( dpy , ws->fakeDesktop); + } + } +/*** LOR5 ****/ + + if (!s->desktopWindowCount && ws->fakeDesktop == None && ws->nBackgrounds) createFakeDesktopWindow (s);