Fix the problem that other dynamic box is disappeared after opening pd
authorYunchan Cho <yunchan.cho@samsung.com>
Wed, 12 Jun 2013 13:42:52 +0000 (22:42 +0900)
committerYunchan Cho <yunchan.cho@samsung.com>
Fri, 14 Jun 2013 08:39:18 +0000 (17:39 +0900)
Change-Id: Id4c829c33f6369fceb4c466ceb7c86ce10b9c98c

src/Core/Box.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.h

index d4729be..08b1235 100644 (file)
@@ -104,8 +104,10 @@ bool Box::hide()
 
     try {
         m_updateTimer->stop();
+        m_boxBuffer->stopCanvasUpdate();
         m_view->hideBox();
         m_boxBuffer->free();
+        m_boxBuffer.reset();
     } catch (...) {
         return false;
     }
@@ -199,8 +201,8 @@ bool Box::openPd(int width, int height, double x, double y)
                             m_boxInfo->pdWidth,
                             m_boxInfo->pdHeight);
         m_pdBuffer->allocate();
-        RenderInfoPtr renderInfo = makeRenderInfo(renderTypeOpenPd);
         m_pdBuffer->stopCanvasUpdate();
+        RenderInfoPtr renderInfo = makeRenderInfo(renderTypeOpenPd);
         m_view->showPd(m_pdBuffer->getWindow(), renderInfo);
         ecore_idler_add(startUpdateRenderBufferIdlerCallback, m_pdBuffer.get());
     } catch (...) {
@@ -217,8 +219,10 @@ bool Box::closePd()
     CHECK_BOX_STATE(m_state, permitClosePd);
 
     try {
+        m_pdBuffer->stopCanvasUpdate();
         m_view->hidePd();
         m_pdBuffer->free();
+        m_pdBuffer.reset();
         m_updateTimer->restart();
     } catch (...) {
         return false;
@@ -238,9 +242,14 @@ bool Box::update()
         return true;
     }
 
-    m_boxBuffer->startCanvasUpdate();
-    RenderInfoPtr renderInfo = makeRenderInfo(renderTypeUpdate);
-    m_view->showBox(renderInfo);
+    try {
+        RenderInfoPtr renderInfo = makeRenderInfo(renderTypeUpdate);
+        m_boxBuffer->stopCanvasUpdate();
+        m_view->showBox(renderInfo);
+        ecore_idler_add(startUpdateRenderBufferIdlerCallback, m_boxBuffer.get());
+    } catch (...) {
+        return false;
+    }
 
     return true;
 }
index e7b90c9..6c0e519 100644 (file)
@@ -278,8 +278,8 @@ void AppBoxRenderView::hidePd()
     m_pdHelper->close();
     m_pdHelper.reset();
 
-    // stop box webview after render timer
-    addRenderTimer();
+    // stop box webview
+    stopRenderBox();
 }
 
 Evas_Object* AppBoxRenderView::getBoxWebView()
@@ -377,31 +377,36 @@ void AppBoxRenderView::deleteRenderTimer()
     }
 }
 
-Eina_Bool AppBoxRenderView::fireRenderTimerCallback(void* data)
+void AppBoxRenderView::stopRenderBox()
 {
-    LogD("enter");
-
-    AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
-    This->m_fireRenderTimer = NULL;
-
-    This->m_renderBuffer->stopCanvasUpdate();
-    if (web_provider_livebox_get_mouse_event(This->m_boxId.c_str())) {
+    deleteRenderTimer();
+    m_renderBuffer->stopCanvasUpdate();
+    if (web_provider_livebox_get_mouse_event(m_boxId.c_str())) {
         // stop touch timer
-        This->m_renderBuffer->deleteTouchTimer();
+        m_renderBuffer->deleteTouchTimer();
 
         // temp condition
-        if (This->m_boxWrt_isSuspended == false)
+        if (m_boxWrt_isSuspended == false)
         {
-            This->m_boxWrt_isSuspended = true;
-            This->m_boxWrt->Suspend();
+            m_boxWrt_isSuspended = true;
+            m_boxWrt->Suspend();
         }
     } else {
         // Before webview should be removed,
         // new evas object with last render data should be created
         // otherwise, after webview is removed, box is white screen.
-        evas_object_show(This->getCurrentSnapShot());
-        This->destroyBoxWrtCore();
+        evas_object_show(getCurrentSnapShot());
+        destroyBoxWrtCore();
     }
+}
+
+Eina_Bool AppBoxRenderView::fireRenderTimerCallback(void* data)
+{
+    LogD("enter");
+
+    AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
+    This->m_fireRenderTimer = NULL;
+    This->stopRenderBox();
 
     return ECORE_CALLBACK_CANCEL;
 }
index ab0f9f7..2194d98 100644 (file)
@@ -73,6 +73,7 @@ class AppBoxRenderView: public IRenderView {
         void clearSnapShot();
         void addRenderTimer();
         void deleteRenderTimer();
+        void stopRenderBox();
 
         // timer and idler callback
         static Eina_Bool fireRenderTimerCallback(void* data);