From: Yunchan Cho Date: Wed, 12 Jun 2013 13:42:52 +0000 (+0900) Subject: Fix the problem that other dynamic box is disappeared after opening pd X-Git-Tag: submit/tizen_2.2/20130927.092158^2~84 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=261975ec97d5cbfbd8786f302e943fc4af04a908;p=platform%2Fframework%2Fweb%2Fweb-provider.git Fix the problem that other dynamic box is disappeared after opening pd Change-Id: Id4c829c33f6369fceb4c466ceb7c86ce10b9c98c --- diff --git a/src/Core/Box.cpp b/src/Core/Box.cpp index d4729be..08b1235 100644 --- a/src/Core/Box.cpp +++ b/src/Core/Box.cpp @@ -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; } diff --git a/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp b/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp index e7b90c9..6c0e519 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp +++ b/src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp @@ -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(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(data); + This->m_fireRenderTimer = NULL; + This->stopRenderBox(); return ECORE_CALLBACK_CANCEL; } diff --git a/src/Plugin/AppBoxPlugin/AppBoxRenderView.h b/src/Plugin/AppBoxPlugin/AppBoxRenderView.h index ab0f9f7..2194d98 100644 --- a/src/Plugin/AppBoxPlugin/AppBoxRenderView.h +++ b/src/Plugin/AppBoxPlugin/AppBoxRenderView.h @@ -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);