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<eWidget>::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. */
public:
eWidgetDesktop(eSize screen);
~eWidgetDesktop();
- void addRootWidget(eWidget *root, int top);
+ void addRootWidget(eWidget *root);
void removeRootWidget(eWidget *root);
/* try to move widget content. */
#include <lib/gdi/epng.h>
-eWindow::eWindow(eWidgetDesktop *desktop): eWidget(0)
+eWindow::eWindow(eWidgetDesktop *desktop, int z): eWidget(0)
{
m_flags = 0;
/* ask style manager for current style */
style = new eWindowStyleSimple();
setStyle(style);
+
+ setZPosition(z); /* must be done before addRootWidget */
/* we are the parent for the child window. */
/* as we are in the constructor, this is thread safe. */
m_child = this;
m_child = new eWidget(this);
- desktop->addRootWidget(this, 0);
+ desktop->addRootWidget(this);
}
eWindow::~eWindow()
{
friend class eWindowStyle;
public:
- eWindow(eWidgetDesktop *desktop);
+ eWindow(eWidgetDesktop *desktop, int z = 0);
~eWindow();
void setTitle(const std::string &string);
std::string getTitle() const;