homescreenapp/hsdomainmodel/src/hscontentservice.cpp
changeset 60 30f14686fb04
parent 55 03646e8da489
child 61 2b1b11a301d2
--- a/homescreenapp/hsdomainmodel/src/hscontentservice.cpp	Fri Jun 11 13:30:16 2010 +0300
+++ b/homescreenapp/hsdomainmodel/src/hscontentservice.cpp	Wed Jun 23 18:03:36 2010 +0300
@@ -23,26 +23,40 @@
 #include "hswidgethost.h"
 
 
+/*!
+    \class HsContentService
+    \ingroup group_hsdomainmodel
+    \brief 
+*/
+
+/*!
+
+*/
 HsContentService::HsContentService(QObject *parent)
-    : QObject(parent)
+    : QObject(parent),mWidgetStartFaulted(false)
 {
    
 }
 
+/*!
+
+*/
 HsContentService::~HsContentService()
 {
 }
 
+/*!
 
+*/
 bool HsContentService::createWidget(const QVariantHash &params)
 {
-    HsWidgetHost *widget = createWidgetForPreview(params);
-    if (!widget) {
-        return false;
-    }     
-    return HsScene::instance()->activePage()->addNewWidget(widget);
+    return addWidget(params.value("uri").toString(),params.value("preferences").toHash());
 }
 
+// This method will be removed.
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
 HsWidgetHost *HsContentService::createWidgetForPreview(const QVariantHash &params)
 {
     HsWidgetData widgetData;
@@ -51,6 +65,9 @@
     return HsWidgetHost::createInstance(
         widgetData, params.value("preferences").toHash());
 }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 /*!
 
@@ -70,9 +87,15 @@
         widget->remove();
         return false;
     }
-
-    widget->startWidget();
-    page->layoutNewWidgets();
+    connect(widget,SIGNAL(event_faulted()),SLOT(widgetStartFaulted()));
+    mWidgetStartFaulted = false; 
+    widget->startWidget(); // synchronous operation
+    if (mWidgetStartFaulted) {
+        // page will destroy widget instance
+        return false;
+    }
+    widget->disconnect(this);
+  
     return true;
 }
 
@@ -88,6 +111,14 @@
 }
 
 /*!
+
+*/
+void HsContentService::widgetStartFaulted()
+{
+    mWidgetStartFaulted = true;
+}
+
+/*!
     Points to the content service instance.
 */
 HsContentService *HsContentService::mInstance(0);