if ((m_comp_mode == cmBuffered) && (root->m_comp_buffer))
{
root->m_comp_buffer->m_position = root->position();
- redrawComposition(0);
+// redrawComposition(0);
return 0;
}
for (ePtrList<eWidget>::iterator i(widget->m_childs.begin()); i != widget->m_childs.end(); ++i)
if (i->m_vis & eWidget::wVisShow)
calcWidgetClipRegion(*i, widget->m_visible_region);
+ else
+ clearVisibility(*i);
}
void eWidgetDesktop::recalcClipRegions(eWidget *root)
for (ePtrList<eWidget>::iterator i(m_root.begin()); i != m_root.end(); ++i)
{
if (!(i->m_vis & eWidget::wVisShow))
+ {
+ clearVisibility(i);
continue;
+ }
gRegion visible_before = i->m_visible_with_childs;
gRegion redraw = (background_before - m_screen.m_background_region) | (m_screen.m_background_region - background_before);
invalidate(redraw);
- } else
+ } else if (m_comp_mode == cmBuffered)
{
+ if (!root->m_vis & eWidget::wVisShow)
+ {
+ clearVisibility(root);
+ removeBufferForWidget(root);
+ return;
+ }
if ((!root->m_comp_buffer) || (root->size() != root->m_comp_buffer->m_screen_size))
createBufferForWidget(root);
void eWidgetDesktop::paint()
{
- eDebug("paint");
m_require_redraw = 0;
/* walk all root windows. */
if (m_comp_mode == cmBuffered)
{
- eDebug("redraw composition");
- redrawComposition(0);
+// redrawComposition(0);
}
}
if (m_comp_mode != cmImmediate)
return;
- eDebug("widgetDesktop: make compatible pixmap of %p\n", &pm);
+// eDebug("widgetDesktop: make compatible pixmap of %p", &pm);
if (!m_screen.m_dc)
{
eWarning("eWidgetDesktop: no DC to make pixmap compatible with!");
{
redrawComposition(1);
}
+
+void eWidgetDesktop::clearVisibility(eWidget *widget)
+{
+ widget->m_visible_with_childs = gRegion();
+ for (ePtrList<eWidget>::iterator i(widget->m_childs.begin()); i != widget->m_childs.end(); ++i)
+ clearVisibility(*i);
+}