From: SooChan Lim Date: Fri, 21 Aug 2020 05:14:57 +0000 (+0900) Subject: DSDisplayArea: destory DSRenderView and DSDisplayDeviceHWCWindow X-Git-Tag: accepted/tizen/unified/20200827.105812~71 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=356198ae9a1a860ec340f23b1c2880311bfa1f77;p=platform%2Fcore%2Fuifw%2Flibds.git DSDisplayArea: destory DSRenderView and DSDisplayDeviceHWCWindow Change-Id: Id79476dfabdbb4c6726783f47be648265fb8b0bc --- diff --git a/src/DSDisplayArea/DSDisplayArea.cpp b/src/DSDisplayArea/DSDisplayArea.cpp index fdcadd4..ecfd519 100644 --- a/src/DSDisplayArea/DSDisplayArea.cpp +++ b/src/DSDisplayArea/DSDisplayArea.cpp @@ -130,16 +130,40 @@ bool DSDisplayAreaPrivate::addZone(std::shared_ptr zone) { __zone = zone; __zone->registerCallbackWindowCreated(this, std::bind(&DSDisplayAreaPrivate::__onWindowCreated, this, std::placeholders::_1)); + __zone->registerCallbackWindowDestroy(this, std::bind(&DSDisplayAreaPrivate::__onWindowDestroy, this, std::placeholders::_1)); return true; } void DSDisplayAreaPrivate::__onWindowCreated(std::shared_ptr window) { + // TODO: think about using unordered_map __renderViewList.push_back(__renderEngine->makeRenderView(window)); __displayDeviceHWCWindowList.push_back(__displayDeviceHWC->makeHWCWindow(window)); } +void DSDisplayAreaPrivate::__onWindowDestroy(std::shared_ptr window) +{ + // TODO: think about using unordered_map + for (auto renderView : __renderViewList) { + auto tmpWindow = renderView->getWindow(); + if (tmpWindow.get() == window.get()) { + __renderViewList.remove(renderView); + renderView.reset(); + break; + } + } + + for (auto displayDeviceHWCWindow : __displayDeviceHWCWindowList) { + auto tmpHWCWindow = displayDeviceHWCWindow->getWindow(); + if (tmpHWCWindow.get() == window.get()) { + __displayDeviceHWCWindowList.remove(displayDeviceHWCWindow); + displayDeviceHWCWindow.reset(); + break; + } + } +} + void DSDisplayAreaPrivate::__onEventIdleEnterer(void *data) { DSLOG_INF("DSDisplayAreaPrivate", "__onEventIdleEnterer"); diff --git a/src/DSDisplayArea/DSDisplayAreaPrivate.h b/src/DSDisplayArea/DSDisplayAreaPrivate.h index 1b92f99..cb16595 100644 --- a/src/DSDisplayArea/DSDisplayAreaPrivate.h +++ b/src/DSDisplayArea/DSDisplayAreaPrivate.h @@ -54,6 +54,7 @@ public: private: void __onWindowCreated(std::shared_ptr window); + void __onWindowDestroy(std::shared_ptr window); void __onEventIdleEnterer(void *data); std::shared_ptr __output;