X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6f55cd01cf53108209c299e66c2fe189dc61a344..db6ca522bdfbde29c214b41435a10876ff72a0a4:/lib/gui/ewidgetdesktop.cpp?ds=sidebyside diff --git a/lib/gui/ewidgetdesktop.cpp b/lib/gui/ewidgetdesktop.cpp index 04bc85d9..223b5c86 100644 --- a/lib/gui/ewidgetdesktop.cpp +++ b/lib/gui/ewidgetdesktop.cpp @@ -5,18 +5,27 @@ extern void dumpRegion(const gRegion ®ion); -void eWidgetDesktop::addRootWidget(eWidget *root, int top) +void eWidgetDesktop::addRootWidget(eWidget *root) { assert(!root->m_desktop); + int invert_sense = 0; /* buffered mode paints back-to-front, while immediate mode is front-to-back. */ if (m_comp_mode == cmBuffered) - top = !top; + invert_sense = 1; + + ePtrList::iterator insert_position = m_root.begin(); + + for (;;) + { + if ((insert_position == m_root.end()) || (invert_sense ^ (insert_position->m_z_position > root->m_z_position))) + { + m_root.insert(insert_position, root); + break; + } + ++insert_position; + } - if (top) - m_root.push_back(root); - else - m_root.push_front(root); root->m_desktop = this; /* the creation will be postponed. */