Hello community, here is the log from the commit of package compiz for openSUSE:Factory checked in at Tue Feb 10 01:14:57 CET 2009. -------- --- compiz/compiz.changes 2009-02-06 19:59:19.000000000 +0100 +++ /mounts/work_src_done/STABLE/compiz/compiz.changes 2009-02-09 22:49:20.000000000 +0100 @@ -1,0 +2,8 @@ +Mon Feb 9 16:34:29 EST 2009 - davidr@novell.com + +- Fix broken handling reparented windows. (bnc#474096) +- Avoid possible freeze when closing rdesktop. (bnc#474086) +- Make sure window has a parent before handling unmap + notify event. (bnc#474090) + +------------------------------------------------------------------- calling whatdependson for head-i586 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ compiz.spec ++++++ --- /var/tmp/diff_new_pack.N28199/_old 2009-02-10 01:14:36.000000000 +0100 +++ /var/tmp/diff_new_pack.N28199/_new 2009-02-10 01:14:36.000000000 +0100 @@ -41,7 +41,7 @@ %endif AutoReqProv: on Version: 0.7.8 -Release: 22 +Release: 25 Requires: compiz-decorator = %{version} compiz-branding = %{version} Provides: windowmanager Summary: OpenGL window and compositing manager. @@ -427,6 +427,11 @@ %_datadir/compiz/sle.png %changelog +* Mon Feb 09 2009 davidr@novell.com +- Fix broken handling reparented windows. (bnc#474096) +- Avoid possible freeze when closing rdesktop. (bnc#474086) +- Make sure window has a parent before handling unmap + notify event. (bnc#474090) * Fri Feb 06 2009 davidr@novell.com - Avoid independent output painting. (bnc#449168) * Tue Feb 03 2009 davidr@novell.com ++++++ compiz-0.7.8-NOMAD.diff ++++++ --- /var/tmp/diff_new_pack.N28199/_old 2009-02-10 01:14:36.000000000 +0100 +++ /var/tmp/diff_new_pack.N28199/_new 2009-02-10 01:14:36.000000000 +0100 @@ -7066,7 +7066,7 @@ zd = malloc (sizeof (ZoomDisplay)); diff --git a/src/display.c b/src/display.c -index 23b0ba1..6fedae3 100644 +index 23b0ba1..72515b6 100644 --- a/src/display.c +++ b/src/display.c @@ -195,8 +195,8 @@ mainMenu (CompDisplay *d, @@ -7176,7 +7176,7 @@ s->idle = FALSE; } } -@@ -1797,6 +1786,30 @@ eventLoop (void) +@@ -1797,6 +1786,38 @@ eventLoop (void) doPoll (-1); } } @@ -7188,12 +7188,20 @@ + /* remove destroyed windows */ + while (s->pendingDestroys) + { -+ CompWindow *w; ++ CompWindow *w, *c; + + for (w = s->root.windows; w; w = walkDepthFirst (w)) + { + if (w->destroyed) + { ++ for (c = w->windows; ++ c && c != w; ++ c = walkDepthFirst (c)) ++ { ++ if (c->destroyed) ++ s->pendingDestroys--; ++ } ++ + addWindowDamage (w); + removeWindow (w); + break; @@ -7207,7 +7215,7 @@ } for (d = core.displays; d; d = d->next) -@@ -1864,7 +1877,8 @@ compCheckForError (Display *dpy) +@@ -1864,7 +1885,8 @@ compCheckForError (Display *dpy) static void addScreenActions (CompScreen *s) { @@ -7217,7 +7225,7 @@ for (i = 0; i < COMP_DISPLAY_OPTION_NUM; i++) { -@@ -1874,6 +1888,27 @@ addScreenActions (CompScreen *s) +@@ -1874,6 +1896,27 @@ addScreenActions (CompScreen *s) if (s->display->opt[i].value.action.state & CompActionStateAutoGrab) addScreenAction (s, &s->display->opt[i].value.action); } @@ -7245,7 +7253,7 @@ } void -@@ -1920,12 +1955,10 @@ addDisplay (const char *name) +@@ -1920,12 +1963,10 @@ addDisplay (const char *name) CompDisplay *d; CompPrivate *privates; Display *dpy; @@ -7259,7 +7267,7 @@ d = malloc (sizeof (CompDisplay)); if (!d) -@@ -2198,6 +2231,8 @@ addDisplay (const char *name) +@@ -2198,6 +2239,8 @@ addDisplay (const char *name) d->startupIdAtom = XInternAtom (dpy, "_NET_STARTUP_ID", 0); @@ -7268,7 +7276,7 @@ d->snDisplay = sn_display_new (dpy, NULL, NULL); if (!d->snDisplay) return FALSE; -@@ -2288,7 +2323,7 @@ addDisplay (const char *name) +@@ -2288,7 +2331,7 @@ addDisplay (const char *name) &d->xineramaEvent, &d->xineramaError); @@ -7277,7 +7285,7 @@ d->screenInfo = XineramaQueryScreens (dpy, &d->nScreenInfo); d->escapeKeyCode = XKeysymToKeycode (dpy, XStringToKeysym ("Escape")); -@@ -2301,6 +2336,49 @@ addDisplay (const char *name) +@@ -2301,6 +2344,49 @@ addDisplay (const char *name) (*core.objectAdd) (&core.base, &d->base); @@ -7327,7 +7335,7 @@ if (onlyCurrentScreen) { firstScreen = DefaultScreen (dpy); -@@ -2319,7 +2397,7 @@ addDisplay (const char *name) +@@ -2319,7 +2405,7 @@ addDisplay (const char *name) Time wmSnTimestamp = 0; XEvent event; XSetWindowAttributes attr; @@ -7336,7 +7344,7 @@ char buf[128]; Window rootDummy, childDummy; unsigned int uDummy; -@@ -2328,7 +2406,8 @@ addDisplay (const char *name) +@@ -2328,7 +2414,8 @@ addDisplay (const char *name) sprintf (buf, "WM_S%d", i); wmSnAtom = XInternAtom (dpy, buf, 0); @@ -7346,7 +7354,7 @@ if (currentWmSnOwner != None) { -@@ -2366,6 +2445,9 @@ addDisplay (const char *name) +@@ -2366,6 +2453,9 @@ addDisplay (const char *name) continue; } @@ -7356,7 +7364,7 @@ } attr.override_redirect = TRUE; -@@ -2394,36 +2476,60 @@ addDisplay (const char *name) +@@ -2394,36 +2484,60 @@ addDisplay (const char *name) wmSnTimestamp = event.xproperty.time; @@ -7435,7 +7443,7 @@ { do { XWindowEvent (dpy, currentWmSnOwner, -@@ -2433,54 +2539,59 @@ addDisplay (const char *name) +@@ -2433,54 +2547,59 @@ addDisplay (const char *name) compCheckForError (dpy); @@ -7533,7 +7541,7 @@ } if (!addScreen (d, i, newWmSnOwner, wmSnAtom, wmSnTimestamp)) -@@ -2503,74 +2614,50 @@ addDisplay (const char *name) +@@ -2503,74 +2622,50 @@ addDisplay (const char *name) if (!d->screens) { compLogMessage ("core", CompLogLevelFatal, @@ -7638,7 +7646,7 @@ } Time -@@ -2596,7 +2683,7 @@ findScreenAtDisplay (CompDisplay *d, +@@ -2596,7 +2691,7 @@ findScreenAtDisplay (CompDisplay *d, for (s = d->screens; s; s = s->next) { @@ -7647,7 +7655,7 @@ return s; } -@@ -2632,6 +2719,23 @@ findWindowAtDisplay (CompDisplay *d, +@@ -2632,6 +2727,23 @@ findWindowAtDisplay (CompDisplay *d, } CompWindow * @@ -7671,7 +7679,7 @@ findTopLevelWindowAtDisplay (CompDisplay *d, Window id) { -@@ -2823,7 +2927,7 @@ warpPointer (CompScreen *s, +@@ -2823,7 +2935,7 @@ warpPointer (CompScreen *s, pointerY = 0; XWarpPointer (display->display, @@ -7681,7 +7689,7 @@ pointerX, pointerY); diff --git a/src/event.c b/src/event.c -index ac61749..8916dd0 100644 +index ac61749..f9edcfc 100644 --- a/src/event.c +++ b/src/event.c @@ -45,37 +45,46 @@ handleWindowDamageRect (CompWindow *w, @@ -7855,6 +7863,15 @@ { if (w->id == d->activeWindow) moveInputFocusToWindow (w); +@@ -1356,7 +1362,7 @@ handleEvent (CompDisplay *d, + break; + case UnmapNotify: + w = findWindowAtDisplay (d, event->xunmap.window); +- if (w) ++ if (w && w->parent) + { + /* Normal -> Iconic */ + if (w->pendingUnmaps) @@ -1364,7 +1370,7 @@ handleEvent (CompDisplay *d, setWmState (d, IconicState, w->id); w->pendingUnmaps--; @@ -7884,7 +7901,7 @@ } + + w = findWindowAtDisplay (d, event->xreparent.parent); -+ if (w) ++ if (w && (w->redirectSubwindows || w->substructureRedirect)) + addWindow (w, event->xreparent.window, getTopWindow (w)); + break; @@ -8885,7 +8902,7 @@ + glPopMatrix (); +} diff --git a/src/screen.c b/src/screen.c -index 33cb3cc..897d367 100644 +index 33cb3cc..12ac091 100644 --- a/src/screen.c +++ b/src/screen.c @@ -184,6 +184,9 @@ setDesktopHints (CompScreen *s) @@ -9334,6 +9351,15 @@ static void freeScreen (CompScreen *s) { +@@ -1611,7 +1722,7 @@ addScreen (CompDisplay *display, + GLfloat light0Position[] = { -0.5f, 0.5f, -9.0f, 1.0f }; + CompWindow *w; + +- s = malloc (sizeof (CompScreen)); ++ s = calloc (1, sizeof (CompScreen)); + if (!s) + return FALSE; + @@ -1652,9 +1763,6 @@ addScreen (CompDisplay *display, s->hsize = s->opt[COMP_SCREEN_OPTION_HSIZE].value.i; s->vsize = s->opt[COMP_SCREEN_OPTION_VSIZE].value.i; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org