diff -r 3ac3aaebaee5 -r 32e56106abf2 homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp --- a/homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp Mon Sep 20 10:19:07 2010 +0300 +++ b/homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp Mon Sep 27 11:52:00 2010 +0300 @@ -109,6 +109,11 @@ QList newRects; foreach (HsWidgetHost *newWidget, mNewWidgets) { newRects << QRectF(QPointF(), newWidget->visual()->preferredSize()); + // temp fix for double setGeometry call + QRectF defaultRect = QRectF(0,0,58.625, 58.625); + if (QRectF(QPointF(), newWidget->visual()->preferredSize()) == defaultRect) { + return; + } } /* if there is touch point defined (widget added from context menu) @@ -139,16 +144,24 @@ existingRects << QRectF(widget->visual()->pos(), widget->visual()->preferredSize()); } } - + // calculate new widget positions with "stuck 'em all"-algorithm HsWidgetPositioningOnWidgetAdd *algorithm = HsWidgetPositioningOnWidgetAdd::instance(); - QList calculatedRects = - algorithm->convert(pageRect, existingRects, newRects, QPointF()); - // set new widgets to screen and save presentation for each widget - for (int i=0; ivisual()->setGeometry(calculatedRects.at(i)); - mNewWidgets.at(i)->savePresentation(); + HsWidgetPositioningOnWidgetAdd::Result result; + result = algorithm->convert(pageRect, existingRects, newRects, QPointF()); + if (result.rectOrder != QList()) { + // set new widgets to screen in sorted order and save presentation for each widget + for (int i = 0; i < mNewWidgets.count(); i++) { + int id = result.rectOrder.at(i); + // take visual + HsWidgetHostVisual *visual(mNewWidgets.at(id)->visual()); + visual->setGeometry(result.calculatedRects.at(id)); + // update z value + int zValue = visual->zValue(); + visual->setZValue(zValue - id + i); + mNewWidgets.at(id)->savePresentation(); + } } } }