Index: compiz-0.7.4/src/window.c =================================================================== --- compiz-0.7.4.orig/src/window.c 2008-08-15 15:32:16.000000000 -0400 +++ compiz-0.7.4/src/window.c 2008-08-15 15:36:19.000000000 -0400 @@ -1887,6 +1887,43 @@ wa->screen = NULL; } +Bool +focusWindowAllowUnmanaged (CompWindow *w) +{ + if (w->attrib.override_redirect) + return FALSE; + + if (!onCurrentDesktop (w)) + return FALSE; + + if (!w->shaded && (w->state & CompWindowStateHiddenMask)) + return FALSE; + + if (w->attrib.x + w->width <= 0 || + w->attrib.y + w->height <= 0 || + w->attrib.x >= w->screen->width || + w->attrib.y >= w->screen->height) + return FALSE; + + return TRUE; +} + +Bool +isWindowDesktopHideable(CompWindow *w) +{ + CompDisplay *d = w->screen->display; + CompOption *st = &d->opt[COMP_DISPLAY_OPTION_HIDE_SKIP_TASKBAR_WINDOWS]; + + if ((w->wmType & ~(CompWindowTypeDesktopMask | CompWindowTypeDockMask)) && + (!(w->state & CompWindowStateSkipTaskbarMask) || st->value.b) && + !w->inShowDesktopMode && + !w->grabbed && + focusWindowAllowUnmanaged (w)) + return TRUE; + else + return FALSE; +} + void addWindow (CompScreen *screen, Window id, @@ -2271,6 +2308,17 @@ w->attrib.x, w->attrib.y, w->attrib.width, ++w->attrib.height - 1, w->attrib.border_width); + + + if (isWindowDesktopHideable (w)) + { + unsigned long data = 0; + /* Declare that we are no longer showing the desktop */ + XChangeProperty (screen->display->display, screen->root, + screen->display->showingDesktopAtom, + XA_CARDINAL, 32, PropModeReplace, + (unsigned char *) &data, 1); + } } void @@ -4528,6 +4576,7 @@ showWindow (CompWindow *w) { Bool onDesktop = onCurrentDesktop (w); + unsigned long data = 0; if (!w->managed) return; @@ -4569,6 +4618,15 @@ XMapWindow (w->screen->display->display, w->id); changeWindowState (w, w->state & ~CompWindowStateHiddenMask); + + if (isWindowDesktopHideable (w)) + { + /* Declare that we are no longer showing the desktop */ + XChangeProperty (w->screen->display->display, w->screen->root, + w->screen->display->showingDesktopAtom, + XA_CARDINAL, 32, PropModeReplace, + (unsigned char *) &data, 1); + } } static void