homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp
changeset 95 32e56106abf2
parent 90 3ac3aaebaee5
child 97 66b5fe3c07fd
--- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp	Mon Sep 20 10:19:07 2010 +0300
+++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp	Mon Sep 27 11:52:00 2010 +0300
@@ -124,6 +124,8 @@
     mContinuousFeedback(0),
     mTrashBinFeedbackAlreadyPlayed(false),
     mDeltaX(0),
+    mWidgetX(0),
+    mWidgetY(0),
     mSceneMenu(0)
 #ifdef Q_OS_SYMBIAN
     ,mSettingsMgr(0)
@@ -261,8 +263,7 @@
         this, SIGNAL(event_waitInput()), state_waitInput);
     state_moveWidgetMoving->addTransition(
         this, SIGNAL(event_MoveWidgetDelete()), state_moveWidgetDelete);
-    state_moveWidgetDelete->addTransition(
-        this, SIGNAL(event_waitInput()), state_waitInput);
+    state_moveWidgetDelete->addTransition(state_waitInput);
 
     state_moveScene->addTransition(
         this, SIGNAL(event_waitInput()), state_waitInput);
@@ -606,7 +607,13 @@
     HbPanGesture *gesture = qobject_cast<HbPanGesture *>(
         event->gesture(Qt::PanGesture));
 
-    mDeltaX = gesture->sceneOffset().x();
+    qreal temp = gesture->sceneOffset().x();
+    // for small movement take into consideration also previous delta to remove "shaking" effect
+    if (abs(mDeltaX - temp) < 10) {
+        mDeltaX = 0.9 * temp + 0.1 * mDeltaX;
+    } else {
+        mDeltaX = temp;
+    }
 
     HsScene *scene = HsScene::instance();
     int bounceEffect = HSCONFIGURATION_GET(bounceEffect);
@@ -673,9 +680,18 @@
     qreal widgetX = qBound(lowerBoundX, widgetRect.x(), upperBoundX);
     qreal widgetY = qBound(lowerBoundY, widgetRect.y(), upperBoundY);
 
+    // for small movement take into consideration also previous value to remove "shaking" effect
+    if ((abs(mWidgetX - widgetX) < 10) && (abs(mWidgetY - widgetY) < 10)) {
+        mWidgetX = 0.9 * widgetX + 0.1 * mWidgetX;
+        mWidgetY = 0.9 * widgetY + 0.1 * mWidgetY;
+    } else {
+        mWidgetX = widgetX;
+        mWidgetY = widgetY;
+    }
+
     // If using ItemClipsChildrenToShape-flag in widgethost then
     // setPos does not update position here, however setGeometry does it, QT bug?
-    widget->visual()->setGeometry(widgetX, widgetY, widgetRect.width(), widgetRect.height());
+    widget->visual()->setGeometry(mWidgetX, mWidgetY, widgetRect.width(), widgetRect.height());
     
     if (HSCONFIGURATION_GET(isSnapEnabled)) {
         mSnapResult = HsWidgetPositioningOnWidgetMove::instance()->run(widget->visual()->sceneBoundingRect());
@@ -1110,7 +1126,6 @@
         widget->remove();
         scene->setActiveWidget(0);
     }
-    emit event_waitInput();
 }
 
 /*!