ewidgetdesktop: don't abort if no target_pixmap is set
[vuplus_dvbapp] / lib / gui / ewidgetdesktop.cpp
index 63aeaac..08bd047 100644 (file)
@@ -7,7 +7,7 @@ extern void dumpRegion(const gRegion &region);
 
 void eWidgetDesktop::addRootWidget(eWidget *root)
 {
-       assert(!root->m_desktop);
+       ASSERT(!root->m_desktop);
        
        int invert_sense = 0;
                /* buffered mode paints back-to-front, while immediate mode is front-to-back. */
@@ -145,6 +145,9 @@ void eWidgetDesktop::recalcClipRegions(eWidget *root)
                                createBufferForWidget(root, 0);
 
                        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;
@@ -329,6 +332,10 @@ void eWidgetDesktop::paint()
        if (m_comp_mode == cmBuffered)
        {
 //             redrawComposition(0);
+       } else
+       {
+               gPainter painter(m_screen.m_dc);
+               painter.flush();
        }
 }
 
@@ -374,7 +381,10 @@ void eWidgetDesktop::makeCompatiblePixmap(gPixmap &pm)
        ePtr<gPixmap> target_pixmap;
        m_screen.m_dc->getPixmap(target_pixmap);
        
-       assert(target_pixmap);
+       if (!target_pixmap) {
+               eDebug("no target pixmap! assuming bpp > 8 for accelerated graphics.");
+               return;
+       }
        
        if (target_pixmap->surface && target_pixmap->surface->bpp > 8)
                return;
@@ -462,7 +472,7 @@ void eWidgetDesktop::redrawComposition(int notified)
        if (m_comp_mode != cmBuffered)
                return;
        
-       assert(m_screen.m_dc);
+       ASSERT(m_screen.m_dc);
        
        gPainter p(m_screen.m_dc);
        p.resetClip(eRect(ePoint(0, 0), m_screen.m_screen_size));