homescreenapp/hsdomainmodel/src/hspagenewwidgetlayout.cpp
changeset 95 32e56106abf2
parent 90 3ac3aaebaee5
--- 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<QRectF> 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<QRectF> calculatedRects =
-            algorithm->convert(pageRect, existingRects, newRects, QPointF());
-        // set new widgets to screen and save presentation for each widget
-        for (int i=0; i<mNewWidgets.count(); i++) {
-            mNewWidgets.at(i)->visual()->setGeometry(calculatedRects.at(i));
-            mNewWidgets.at(i)->savePresentation();
+        HsWidgetPositioningOnWidgetAdd::Result result;
+        result = algorithm->convert(pageRect, existingRects, newRects, QPointF());
+        if (result.rectOrder != QList<int>()) {
+            // 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();
+            }
         }
     }
 }