src/hbwidgets/editors/hbselectioncontrol_p.cpp
branchGCC_SURGE
changeset 15 f378acbc9cfb
parent 7 923ff622b8b9
child 21 4633027730f5
child 34 ed14f46c0e55
--- a/src/hbwidgets/editors/hbselectioncontrol_p.cpp	Thu Jul 15 14:03:49 2010 +0100
+++ b/src/hbwidgets/editors/hbselectioncontrol_p.cpp	Thu Jul 22 16:36:53 2010 +0100
@@ -91,6 +91,7 @@
     void panGestureFinished (HbPanGesture *gesture);
     void show();
     void _q_aboutToChangeView();
+    void detachEditor(bool updateAtthachedEditorState);
 
 public:
 
@@ -126,8 +127,13 @@
     createPrimitives();
 
     q->setVisible(false);
-    q->setFlag(QGraphicsItem::ItemIsFocusable,false);
-    q->setFlag(QGraphicsItem::ItemIsPanel,true);
+    QGraphicsItem::GraphicsItemFlags itemFlags = q->flags();
+#if QT_VERSION >= 0x040600
+    itemFlags |=  QGraphicsItem::ItemSendsGeometryChanges;
+#endif
+    itemFlags &= ~QGraphicsItem::ItemIsFocusable;
+    itemFlags |=  QGraphicsItem::ItemIsPanel;
+    q->setFlags(itemFlags);
     q->setFocusPolicy(Qt::NoFocus);
     q->setActive(false);
 
@@ -466,6 +472,21 @@
     }
 }
 
+void HbSelectionControlPrivate::detachEditor(bool updateAtthachedEditorState)
+{
+    Q_Q(HbSelectionControl);
+    if (mEdit) {
+        q->hideHandles();
+        reparentHandles(q);
+        if (updateAtthachedEditorState) {
+            mEdit->disconnect(q);
+            mEdit->d_func()->selectionControl = 0;
+            mEdit->deselect();
+        }
+        mEdit = 0;
+        mTopLevelAncestor = 0;
+    }
+}
 
 HbSelectionControl::HbSelectionControl() : HbWidget(*new HbSelectionControlPrivate(),0)
 
@@ -510,17 +531,14 @@
 void HbSelectionControl::detachEditor()
 {
     Q_D(HbSelectionControl);
-    if (d->mEdit) {
-        hideHandles();
-        d->reparentHandles(this);
-        d->mEdit->disconnect(this);
-        d->mEdit->d_func()->selectionControl = 0;        
-        d->mEdit->deselect();
-        d->mEdit = 0;
-        d->mTopLevelAncestor = 0;
-    }
+    d->detachEditor(true);
 }
 
+void HbSelectionControl::detachEditorFromDestructor()
+{
+    Q_D(HbSelectionControl);
+    d->detachEditor(false);
+}
 
 void HbSelectionControl::hideHandles()
 {
@@ -597,7 +615,7 @@
         switch(tap->state()) {
         case Qt::GestureStarted:
             if (d->mEdit) {
-                HbWidgetFeedback::triggered(d->mEdit, Hb::InstantPressed);
+                HbWidgetFeedback::triggered(this, Hb::InstantPressed);
             }
             break;
         case Qt::GestureUpdated:
@@ -605,7 +623,7 @@
       case Qt::GestureFinished:
             if (d->mEdit) {
                 d->tapGestureFinished(pos);
-                HbWidgetFeedback::triggered(d->mEdit, Hb::InstantReleased);
+                HbWidgetFeedback::triggered(this, Hb::InstantReleased);
             }
             break;
       case Qt::GestureCanceled:
@@ -630,7 +648,7 @@
         case Qt::GestureFinished:
             if (d->mEdit) {
                 d->panGestureFinished(pan);
-                HbWidgetFeedback::triggered(d->mEdit, Hb::InstantReleased);
+                HbWidgetFeedback::triggered(this, Hb::InstantReleased);
             }
             break;
       case Qt::GestureCanceled: