- gRegion visible_before = root->m_visible_with_childs;
-
- comp->m_background_region = gRegion(eRect(comp->m_position, comp->m_screen_size));
-
- gRegion visible_new = root->m_visible_with_childs - visible_before;
- gRegion visible_lost = visible_before - root->m_visible_with_childs;
- visible_new.moveBy(root->position());
- visible_lost.moveBy(root->position());
-
- /* this sucks, obviously. */
- invalidate(visible_new);
- invalidate(visible_lost);
-
- calcWidgetClipRegion(root, comp->m_background_region);
+ comp = root->m_comp_buffer[i]; /* it might have changed. */
+
+ if (!comp)
+ continue; /* WAIT, don't we need to invalidate,whatever */
+
+ /* CHECKME: don't we need to recalculate everything? after all, our buffer has changed and is likely to be cleared */
+ gRegion visible_before = root->m_visible_with_childs;
+
+ comp->m_background_region = gRegion(eRect(comp->m_position, comp->m_screen_size));
+
+ gRegion visible_new = root->m_visible_with_childs - visible_before;
+ gRegion visible_lost = visible_before - root->m_visible_with_childs;
+ visible_new.moveBy(root->position());
+ visible_lost.moveBy(root->position());
+
+ invalidate(visible_new, root, i);
+ invalidate(visible_lost, root, i);
+
+ calcWidgetClipRegion(root, comp->m_background_region);
+ }
+ }
+}
+
+void eWidgetDesktop::invalidateWidgetLayer(const gRegion ®ion, const eWidget *widget, int layer)
+{
+ if (m_comp_mode == cmImmediate)
+ {
+ invalidate(region);
+ return;
+ }
+ eWidgetDesktopCompBuffer *comp = widget->m_comp_buffer[layer];
+ if (comp)
+ comp->m_dirty_region |= region;
+}
+
+void eWidgetDesktop::invalidateWidget(const gRegion ®ion, const eWidget *widget, int layer)
+{
+ if (m_comp_mode == cmImmediate)
+ {
+ invalidate(region);
+ return;