aboutsummaryrefslogtreecommitdiff
path: root/lib/gui/ewidgetdesktop.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-10-15 23:52:16 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-10-15 23:52:16 +0000
commit35278519b9b44c9543126e06841b1cfb8510eb82 (patch)
treef3a5cc5c5f2a5d802980b8f4937d48fb38ba8117 /lib/gui/ewidgetdesktop.cpp
parentb6592b47fa1932132a67a3beabcce7c96856d211 (diff)
downloadenigma2-35278519b9b44c9543126e06841b1cfb8510eb82.tar.gz
enigma2-35278519b9b44c9543126e06841b1cfb8510eb82.zip
fix: invalidate in non-visible widget invalidated visible stuff
Diffstat (limited to 'lib/gui/ewidgetdesktop.cpp')
-rw-r--r--lib/gui/ewidgetdesktop.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp
index dcc2ef60..fb0f39dd 100644
--- a/lib/gui/ewidgetdesktop.cpp
+++ b/lib/gui/ewidgetdesktop.cpp
@@ -66,6 +66,8 @@ void eWidgetDesktop::calcWidgetClipRegion(eWidget *widget, gRegion &parent_visib
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)
@@ -79,7 +81,10 @@ 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;
@@ -94,10 +99,11 @@ void eWidgetDesktop::recalcClipRegions(eWidget *root)
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;
}
@@ -387,3 +393,10 @@ void eWidgetDesktop::notify()
{
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);
+}