TizenRefApp-8671 [Gallery] Replace regular listeners on weak 29/133529/1
authorIgor Nazarov <i.nazarov@samsung.com>
Mon, 12 Jun 2017 15:21:48 +0000 (18:21 +0300)
committerIgor Nazarov <i.nazarov@samsung.com>
Mon, 12 Jun 2017 15:21:48 +0000 (18:21 +0300)
Change-Id: Ic3519cdb1cbb63b125cfcaf9457ca079d7edc94d

21 files changed:
inc/model/MediaItem.h
inc/presenters/NoContentPage.h
inc/presenters/Page.h
inc/presenters/PreviewPage.h
inc/presenters/ThumbnailPage.h
inc/presenters/VideoPlayerPage.h
inc/presenters/ViewerPage.h
inc/view/TouchParser.h
src/model/MediaItem.cpp
src/presenters/Instance.cpp
src/presenters/NoContentPage.cpp
src/presenters/Page.cpp
src/presenters/PreviewPage.cpp
src/presenters/ThumbnailPage.cpp
src/presenters/VideoPlayerPage.cpp
src/presenters/ViewerPage.cpp
src/view/ImageGrid.cpp
src/view/TouchParser.cpp
ucl/inc/ucl/appfw/SysEventProvider.h
ucl/inc/ucl/appfw/SysEventProvider.hpp
ucl/inc/ucl/appfw/types.h

index 20d2a3f6960ca3193409f2460677ea13d9b9aa5e..df35b8d76454495234d4496ce19fda95fc2febf8 100644 (file)
@@ -34,7 +34,7 @@ namespace gallery {
        class MediaItem : public ucl::Polymorphic {
        public:
                using ThumbnailPathGetCb =
-                               ucl::Delegate<void(ucl::Result, const std::string &path)>;
+                               ucl::WeakDelegate<void(ucl::Result, const std::string &path)>;
 
                class Remover;
                class RemoverBuilder final {
@@ -80,7 +80,7 @@ namespace gallery {
 
                const std::string &getFilePath() const;
 
-               ucl::Result getThumbnailPath(ThumbnailPathGetCb cb) const;
+               ucl::Result getThumbnailPath(const ThumbnailPathGetCb &cb) const;
                void cancelThumbnailPathGet() const;
 
                ucl::Result removeFile();
index c107a8eab6ea989ab227b450754c98447300552c..b02900d53803815378956cc7c74411da188e0f72 100644 (file)
@@ -30,7 +30,8 @@ namespace gallery {
                        Builder();
                        ~Builder();
                        Builder &setNaviframe(const ucl::NaviframeSRef &navi);
-                       NoContentPageWRef build(ExitRequestHandler onExitRequest) const;
+                       NoContentPageWRef build(
+                                       const ExitRequestHandler &onExitRequest) const;
                private:
                        ucl::NaviframeSRef m_navi;
                };
@@ -38,7 +39,7 @@ namespace gallery {
        private:
                friend class ucl::RefCountObj<NoContentPage>;
                NoContentPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest);
+                               const ExitRequestHandler &onExitRequest);
                virtual ~NoContentPage();
 
                ucl::Result prepare();
index efeded61fd79fe2bb374e486c523a4458e1821aa..4be629e2a6c8c4fe6e21eef93a6ec6a65c5218fe 100644 (file)
@@ -27,7 +27,7 @@ namespace gallery {
 
        class Page : public Presenter {
        public:
-               using ExitRequestHandler = ucl::Delegate<void(Page &page)>;
+               using ExitRequestHandler = ucl::WeakDelegate<void(Page &page)>;
 
        public:
                ucl::Naviframe &getNaviframe();
@@ -50,7 +50,7 @@ namespace gallery {
 
        protected:
                Page(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest);
+                               const ExitRequestHandler &onExitRequest);
                virtual ~Page();
 
                template <class ITEM_FACTORY>
index 076d4c8cea4f519e947abe7840d2bc25996e3c29..aa0c70d1cdf52036479fc8ca98bd15d58e706421 100644 (file)
@@ -48,7 +48,8 @@ namespace gallery {
                        Builder &setStartItemIndex(int index);
                        Builder &setSelectModeStartup(bool value);
                        Builder &setAutoSelectStartItem(bool value);
-                       PreviewPageWRef build(ExitRequestHandler onExitRequest) const;
+                       PreviewPageWRef build(
+                                       const ExitRequestHandler &onExitRequest) const;
                private:
                        ucl::NaviframeSRef m_navi;
                        IMediaAlbumSRef m_album;
@@ -63,8 +64,8 @@ namespace gallery {
        private:
                friend class ucl::RefCountObj<PreviewPage>;
                PreviewPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest, const IMediaAlbumSRef &album,
-                               bool selectModeStartup);
+                               const ExitRequestHandler &onExitRequest,
+                               const IMediaAlbumSRef &album, bool selectModeStartup);
                virtual ~PreviewPage();
 
                ucl::Result prepare(int startItemIndex);
@@ -124,13 +125,13 @@ namespace gallery {
 
        private:
                class Item;
-               using ItemUPtr = std::unique_ptr<Item>;
+               using ItemSRef = ucl::SharedRef<Item>;
 
        private:
                const IMediaAlbumSRef m_album;
                const bool m_selectModeStartup;
                ImageGridSRef m_imageGrid;
-               std::vector<ItemUPtr> m_items;
+               std::vector<ItemSRef> m_items;
                IJobSRef m_job;
 
                PageContentSRef m_content;
index 26fead485a0a799803296b5964a69064952ad997..066a017a434bb7d4c91e047a373821ed315d5d15 100644 (file)
@@ -41,7 +41,8 @@ namespace gallery {
                        ~Builder();
                        Builder &setNaviframe(const ucl::NaviframeSRef &navi);
                        Builder &setAlbum(const IMediaAlbumSRef &album);
-                       ThumbnailPageWRef build(ExitRequestHandler onExitRequest) const;
+                       ThumbnailPageWRef build(
+                                       const ExitRequestHandler &onExitRequest) const;
                private:
                        ucl::NaviframeSRef m_navi;
                        IMediaAlbumSRef m_album;
@@ -50,7 +51,8 @@ namespace gallery {
        private:
                friend class ucl::RefCountObj<ThumbnailPage>;
                ThumbnailPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest, const IMediaAlbumSRef &album);
+                               const ExitRequestHandler &onExitRequest,
+                               const IMediaAlbumSRef &album);
                virtual ~ThumbnailPage();
 
                ucl::Result prepare();
@@ -86,13 +88,13 @@ namespace gallery {
 
        private:
                class RealizedItem;
-               using RealizedItemUPtr = std::unique_ptr<RealizedItem>;
+               using RealizedItemSRef = ucl::SharedRef<RealizedItem>;
 
        private:
                const IMediaAlbumSRef m_album;
                MediaItems m_mediaItems;
 
-               std::vector<RealizedItemUPtr> m_realizedItems;
+               std::vector<RealizedItemSRef> m_realizedItems;
 
                PageContentSRef m_content;
                ImageGridSRef m_imageGrid;
index 3750f386200eea0cd8b285699c18fe1c1cf0dd3b..440a33658140eb1232883ff34261bc9ad007349d 100644 (file)
@@ -40,7 +40,8 @@ namespace gallery {
                        ~Builder();
                        Builder &setNaviframe(const ucl::NaviframeSRef &navi);
                        Builder &setMedia(const MediaItemSRef &media);
-                       VideoPlayerPageWRef build(ExitRequestHandler onExitRequest) const;
+                       VideoPlayerPageWRef build(
+                                       const ExitRequestHandler &onExitRequest) const;
                private:
                        ucl::NaviframeSRef m_navi;
                        MediaItemSRef m_media;
@@ -50,7 +51,7 @@ namespace gallery {
                friend class ucl::RefCountObj<VideoPlayerPage>;
                VideoPlayerPage(ucl::RefCountObjBase &rc,
                                const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest,
+                               const ExitRequestHandler &onExitRequest,
                                const MediaItemSRef &media);
                virtual ~VideoPlayerPage();
 
index caffed4bb4cde1d9a008878b3b7c48225cd0e413..3e44887af227fe30324e18480c25636b47a2e5f4 100644 (file)
@@ -44,7 +44,8 @@ namespace gallery {
                        Builder &setZoomIn(int x, int y);
                        Builder &setImageLoadSize(int size, bool isFull);
                        Builder &setExitOnZoomOut(bool value);
-                       ViewerPageWRef build(ExitRequestHandler onExitRequest) const;
+                       ViewerPageWRef build(
+                                       const ExitRequestHandler &onExitRequest) const;
                private:
                        ucl::NaviframeSRef m_navi;
                        MediaItemSRef m_media;
@@ -61,8 +62,8 @@ namespace gallery {
        private:
                friend class ucl::RefCountObj<ViewerPage>;
                ViewerPage(ucl::RefCountObjBase &rc, const ucl::NaviframeSRef &navi,
-                               ExitRequestHandler onExitRequest, const MediaItemSRef &media,
-                               bool exitOnZoomOut);
+                               const ExitRequestHandler &onExitRequest,
+                               const MediaItemSRef &media, bool exitOnZoomOut);
                virtual ~ViewerPage();
 
                ucl::Result prepare(int imageLoadSize, bool isImageLoadSizeFull);
index 659a51204f16e706e8aa134829d2e5321dc542eb..484fb8438a3313c03a4a53d60767b9c4bd4504c4 100644 (file)
@@ -27,7 +27,7 @@ namespace gallery {
 
        class TouchParser final : public ucl::RefCountAware {
        public:
-               using TapHandler = ucl::Delegate<void(int x, int y)>;
+               using TapHandler = ucl::WeakDelegate<void(int x, int y)>;
 
        private:
                friend class ucl::RefCountObj<TouchParser>;
@@ -35,9 +35,9 @@ namespace gallery {
                virtual ~TouchParser();
 
        public:
-               void setTapHandler(TapHandler handler);
-               void setDoubleTapHandler(TapHandler handler);
-               void setTapAndHoldHandler(TapHandler handler);
+               void setTapHandler(const TapHandler &handler);
+               void setDoubleTapHandler(const TapHandler &handler);
+               void setTapAndHoldHandler(const TapHandler &handler);
 
        private:
                void onMouseDown(ucl::Widget &widget, void *eventInfo);
index 6a95ac1adf052e52bac509c9cfa9a8084f2541b7..67f8212c5d9fe48b394b160cc1c8ed0cddf4dea0 100644 (file)
@@ -401,7 +401,7 @@ namespace gallery {
                return RES_FAIL;
        }
 
-       Result MediaItem::getThumbnailPath(ThumbnailPathGetCb cb) const
+       Result MediaItem::getThumbnailPath(const ThumbnailPathGetCb &cb) const
        {
                if (!(m_flags & FLAG_THUMBNAIL)) {
                        LOG_RETURN(RES_NOT_SUPPORTED, "Operation not supported!");
index 636bfc45b0dae382902f56cf9bdd7aa3d98473d2..cceb71896be60703c31102b82d8402373ed1941f 100644 (file)
@@ -82,7 +82,7 @@ namespace gallery {
                                "util::createCircleSurface() failed!");
 
                m_sysEventProvider.addEventHandler(
-                               DELEGATE(Instance::onSysEvent, this));
+                               WEAK_DELEGATE(Instance::onSysEvent, asWeak(*this)));
 
                return RES_OK;
        }
@@ -281,7 +281,8 @@ namespace gallery {
        {
                DLOG("Creating NoContentPage.");
                m_page = NoContentPage::Builder().setNaviframe(m_navi).
-                               build(DELEGATE(Instance::onPageExitRequest, this));
+                               build(WEAK_DELEGATE(
+                                       Instance::onPageExitRequest, asWeak(*this)));
        }
 
        void Instance::createThumbnailPage()
@@ -291,7 +292,8 @@ namespace gallery {
 
                m_page = ThumbnailPage::Builder().setNaviframe(m_navi).
                                setAlbum(m_gallery->getAlbum()).
-                               build(DELEGATE(Instance::onPageExitRequest, this));
+                               build(WEAK_DELEGATE(
+                                       Instance::onPageExitRequest, asWeak(*this)));
        }
 
        void Instance::createViewerPage(const MediaItemSRef &media)
@@ -300,7 +302,8 @@ namespace gallery {
                m_page = ViewerPage::Builder().setNaviframe(m_navi).
                                setMedia(media).
                                setExitOnZoomOut(false).
-                               build(DELEGATE(Instance::onPageExitRequest, this));
+                               build(WEAK_DELEGATE(
+                                       Instance::onPageExitRequest, asWeak(*this)));
        }
 
        void Instance::createVideoPlayerPage(const MediaItemSRef &media)
@@ -308,7 +311,8 @@ namespace gallery {
                DLOG("Creating VideoPlayerPage.");
                m_page = VideoPlayerPage::Builder().setNaviframe(m_navi).
                                setMedia(media).
-                               build(DELEGATE(Instance::onPageExitRequest, this));
+                               build(WEAK_DELEGATE(
+                                       Instance::onPageExitRequest, asWeak(*this)));
        }
 
        void Instance::onAlbumChanged()
index 9a57ee6804c9c63df8f041aea5c43f081060023b..f2537fed24a84ea54fd0b544f907571e251c44a6 100644 (file)
@@ -47,7 +47,7 @@ namespace gallery {
        }
 
        NoContentPageWRef NoContentPage::Builder::build(
-                       const ExitRequestHandler onExitRequest) const
+                       const ExitRequestHandler &onExitRequest) const
        {
                if (!onExitRequest) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
@@ -68,7 +68,7 @@ namespace gallery {
 
        NoContentPage::NoContentPage(RefCountObjBase &rc,
                        const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest) :
+                       const ExitRequestHandler &onExitRequest) :
                Page(rc, navi, onExitRequest)
        {
        }
index 787eb6f5852926e5e212d04ccb2a6e28d1823177..2bc1870bc550963570099b7e4912c40b064b9b85 100644 (file)
@@ -32,7 +32,7 @@ namespace gallery {
        using ucl::NAVI_TRANSITION_FINISHED;
 
        Page::Page(RefCountObjBase &rc, const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest) :
+                       const ExitRequestHandler &onExitRequest) :
                Presenter(rc),
                m_navi(navi),
                m_onExitRequest(onExitRequest)
@@ -148,7 +148,12 @@ namespace gallery {
 
        void Page::requestExit()
        {
-               m_onExitRequest(*this);
+               if (m_onExitRequest) {
+                       m_onExitRequest(*this);
+               } else {
+                       WLOG("m_onExitRequest is NULL");
+                       exit();
+               }
        }
 
        void Page::updateActiveState()
index c582d54103a241c787e4ff76a1dc30bda647dff2..b741e7499b4772fe0cc1a64882639a4e6207eab9 100644 (file)
@@ -36,6 +36,7 @@ namespace gallery { namespace { namespace impl {
 namespace gallery {
 
        using ucl::NaviframeSRef;
+       using ucl::RefCountAware;
 
        // PreviewPage::Builder //
 
@@ -86,7 +87,7 @@ namespace gallery {
        }
 
        PreviewPageWRef PreviewPage::Builder::build(
-                       const ExitRequestHandler onExitRequest) const
+                       const ExitRequestHandler &onExitRequest) const
        {
                if (!onExitRequest) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
@@ -114,9 +115,11 @@ namespace gallery {
 
        // PreviewPage::Item //
 
-       class PreviewPage::Item : public NonCopyable {
+       class PreviewPage::Item : public RefCountAware {
        public:
-               Item(MediaItemSRef &&media, ImageGrid &imageGrid, const int itemIndex) :
+               Item(RefCountObjBase &rc, MediaItemSRef &&media,
+                               ImageGrid &imageGrid, const int itemIndex) :
+                       RefCountAware(&rc),
                        m_media(std::move(media)),
                        m_imageGrid(imageGrid),
                        m_index(itemIndex),
@@ -127,7 +130,7 @@ namespace gallery {
                void realize()
                {
                        FAIL_LOG(m_media->getThumbnailPath(
-                                       DELEGATE(Item::onThumbnail, this)),
+                                       WEAK_DELEGATE(Item::onThumbnail, asWeak(*this))),
                                        "getThumbnailPath() failed!");
                }
 
@@ -197,7 +200,7 @@ namespace gallery {
 
        PreviewPage::PreviewPage(RefCountObjBase &rc,
                        const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest,
+                       const ExitRequestHandler &onExitRequest,
                        const IMediaAlbumSRef &album,
                        const bool selectModeStartup) :
                Page(rc, navi, onExitRequest),
@@ -253,7 +256,7 @@ namespace gallery {
                                dynamicRefCast<ViewerPage>(m_page)) {
                        const auto mediaId = viewerPage->getMediaId();
                        const auto it = std::find_if(m_items.begin(), m_items.end(),
-                               [&mediaId](const ItemUPtr &item)
+                               [&mediaId](const ItemSRef &item)
                                {
                                        return (item->getMedia()->getId() == mediaId);
                                });
@@ -392,8 +395,8 @@ namespace gallery {
 
        bool PreviewPage::onEachMedia(MediaItemSRef &&media)
        {
-               m_items.emplace_back(
-                               new Item(std::move(media), *m_imageGrid, m_items.size()));
+               m_items.emplace_back(makeShared<Item>(
+                               std::move(media), *m_imageGrid, m_items.size()));
                return true;
        }
 
@@ -720,7 +723,8 @@ namespace gallery {
                                        info.isImageLoadSizeFull);
                }
 
-               m_page = builder.build(DELEGATE(PreviewPage::onPageExitRequest, this));
+               m_page = builder.build(WEAK_DELEGATE(
+                               PreviewPage::onPageExitRequest, asWeak(*this)));
        }
 
        void PreviewPage::onPageExitRequest(Page &page)
index b3a392c2df60a8b1a63a31c0ba5eb7780f36b345..d341a5bbf57e8be8490f535d48fcc645f0ef7ece 100644 (file)
@@ -36,6 +36,7 @@ namespace gallery { namespace { namespace impl {
 namespace gallery {
 
        using ucl::NaviframeSRef;
+       using ucl::RefCountAware;
 
        // ThumbnailPage::Builder //
 
@@ -62,7 +63,7 @@ namespace gallery {
        }
 
        ThumbnailPageWRef ThumbnailPage::Builder::build(
-                       const ExitRequestHandler onExitRequest) const
+                       const ExitRequestHandler &onExitRequest) const
        {
                if (!onExitRequest) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
@@ -85,18 +86,20 @@ namespace gallery {
 
        // ThumbnailPage::RealizedItem //
 
-       class ThumbnailPage::RealizedItem : public NonCopyable {
+       class ThumbnailPage::RealizedItem : public RefCountAware {
        public:
-               RealizedItem(ThumbnailPage &parent, const int index) :
+               RealizedItem(RefCountObjBase &rc,
+                               ThumbnailPage &parent, const int index) :
+                       RefCountAware(&rc),
                        m_parent(parent),
                        m_index(index)
                {
                        FAIL_LOG(m_parent.m_mediaItems[m_index]->getThumbnailPath(
-                                       DELEGATE(RealizedItem::onThumbnail, this)),
+                                       WEAK_DELEGATE(RealizedItem::onThumbnail, asWeak(this))),
                                        "getThumbnailPath() failed!");
                }
 
-               ~RealizedItem()
+               virtual ~RealizedItem()
                {
                        m_parent.m_mediaItems[m_index]->cancelThumbnailPathGet();
                }
@@ -128,7 +131,7 @@ namespace gallery {
 
        ThumbnailPage::ThumbnailPage(RefCountObjBase &rc,
                        const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest,
+                       const ExitRequestHandler &onExitRequest,
                        const IMediaAlbumSRef &album) :
                Page(rc, navi, onExitRequest),
                m_album(album)
@@ -271,14 +274,15 @@ namespace gallery {
 
        void ThumbnailPage::onItemRealized(const int itemIndex)
        {
-               m_realizedItems.emplace_back(new RealizedItem(*this, itemIndex));
+               m_realizedItems.emplace_back(
+                               makeShared<RealizedItem>(*this, itemIndex));
        }
 
        void ThumbnailPage::onItemUnrealized(const int itemIndex)
        {
                const auto it = std::find_if(
                                m_realizedItems.begin(), m_realizedItems.end(),
-                               [itemIndex](const RealizedItemUPtr &item)
+                               [itemIndex](const RealizedItemSRef &item)
                                {
                                        return (item->getIndex() == itemIndex);
                                });
@@ -314,7 +318,8 @@ namespace gallery {
                                setStartItemIndex(itemIndex).
                                setSelectModeStartup(selectModeStartup).
                                setAutoSelectStartItem(true).
-                               build(DELEGATE(ThumbnailPage::onPageExitRequest, this));
+                               build(WEAK_DELEGATE(
+                                       ThumbnailPage::onPageExitRequest, asWeak(*this)));
        }
 
        void ThumbnailPage::onMoreOptionClicked(MoreOptionsPresenter &sender,
@@ -328,7 +333,8 @@ namespace gallery {
                                        setAlbum(m_album).
                                        setStartItemIndex(m_imageGrid->getScrolledToItemIndex()).
                                        setSelectModeStartup(true).
-                                       build(DELEGATE(ThumbnailPage::onPageExitRequest, this));
+                                       build(WEAK_DELEGATE(
+                                               ThumbnailPage::onPageExitRequest, asWeak(*this)));
                        break;
                default:
                        sender.setOpened(false);
index bab03b6f91e4df32d48d2186321881e35655f381..e9e1cdb2c4b37fe76c7688f0e97f0dd4916128bc 100644 (file)
@@ -106,7 +106,7 @@ namespace gallery {
        }
 
        VideoPlayerPageWRef VideoPlayerPage::Builder::build(
-                       const ExitRequestHandler onExitRequest) const
+                       const ExitRequestHandler &onExitRequest) const
        {
                if (!onExitRequest) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
@@ -134,7 +134,7 @@ namespace gallery {
 
        VideoPlayerPage::VideoPlayerPage(RefCountObjBase &rc,
                        const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest,
+                       const ExitRequestHandler &onExitRequest,
                        const MediaItemSRef &media) :
                Page(rc, navi, onExitRequest),
                m_media(media),
@@ -198,8 +198,8 @@ namespace gallery {
                updatePlayTimeText();
 
                m_touchParser = makeShared<TouchParser>(*m_image);
-               m_touchParser->setTapHandler(
-                               DELEGATE(VideoPlayerPage::onTap, this));
+               m_touchParser->setTapHandler(WEAK_DELEGATE(
+                               VideoPlayerPage::onTap, asWeak(*this)));
 
                getWindow().addEventHandler(INSTANCE_PAUSED, WEAK_DELEGATE(
                                VideoPlayerPage::onInstancePaused, asWeak(*this)));
index 047de81815d58ed84a075dbeab45d9b25629a44a..2e2805c66ac828d156fd6077f65eb0dcba295ef2 100644 (file)
@@ -82,7 +82,7 @@ namespace gallery {
        }
 
        ViewerPageWRef ViewerPage::Builder::build(
-                       const ExitRequestHandler onExitRequest) const
+                       const ExitRequestHandler &onExitRequest) const
        {
                if (!onExitRequest) {
                        LOG_RETURN_VALUE(RES_INVALID_ARGUMENTS, {},
@@ -115,7 +115,7 @@ namespace gallery {
 
        ViewerPage::ViewerPage(RefCountObjBase &rc,
                        const NaviframeSRef &navi,
-                       const ExitRequestHandler onExitRequest,
+                       const ExitRequestHandler &onExitRequest,
                        const MediaItemSRef &media,
                        const bool exitOnZoomOut) :
                Page(rc, navi, onExitRequest),
@@ -180,8 +180,8 @@ namespace gallery {
                }
 
                if (useThumb) {
-                       FAIL_RETURN(m_media->getThumbnailPath(DELEGATE(
-                                       ViewerPage::onThumbnail, this)),
+                       FAIL_RETURN(m_media->getThumbnailPath(WEAK_DELEGATE(
+                                       ViewerPage::onThumbnail, asWeak(*this))),
                                        "m_media->getThumbnailPath() failed!");
                } else if (!forceLoad) {
                        m_imageViewer->setLowResImagePath(m_media->getFilePath());
@@ -203,8 +203,8 @@ namespace gallery {
                        "Page::prepare() failed!");
 
                m_touchParser = makeShared<TouchParser>(*m_imageViewer);
-               m_touchParser->setDoubleTapHandler(
-                               DELEGATE(ViewerPage::onDoubleTap, this));
+               m_touchParser->setDoubleTapHandler(WEAK_DELEGATE(
+                               ViewerPage::onDoubleTap, asWeak(*this)));
 
                return RES_OK;
        }
index 9b24547573acab28a994ad7ffe8782077edf1fe2..c3a2b7cfdaa3e0ccf30da05f6cb795dfa4ac2129 100644 (file)
@@ -280,9 +280,9 @@ namespace gallery {
 
                                m_touchParser = makeShared<TouchParser>(m_btn);
                                m_touchParser->setDoubleTapHandler(
-                                               DELEGATE(Item::onDoubleTap, this));
+                                               WEAK_DELEGATE(Item::onDoubleTap, asWeak(*this)));
                                m_touchParser->setTapAndHoldHandler(
-                                               DELEGATE(Item::onTapAndHold, this));
+                                               WEAK_DELEGATE(Item::onTapAndHold, asWeak(*this)));
                        }
 
                        ~Item()
index ecda732b304a3eb9468a367d3882f96d34ac9dd9..bed06bf97ded4b42d0043544ec1d77f5aba5ce49 100644 (file)
@@ -53,17 +53,17 @@ namespace gallery {
                stopHoldTimer();
        }
 
-       void TouchParser::setTapHandler(TapHandler handler)
+       void TouchParser::setTapHandler(const TapHandler &handler)
        {
                m_tapHandler = handler;
        }
 
-       void TouchParser::setDoubleTapHandler(TapHandler handler)
+       void TouchParser::setDoubleTapHandler(const TapHandler &handler)
        {
                m_doubleTapHandler = handler;
        }
 
-       void TouchParser::setTapAndHoldHandler(TapHandler handler)
+       void TouchParser::setTapAndHoldHandler(const TapHandler &handler)
        {
                m_tapAndHoldHandler = handler;
        }
index 7d224f42183caa57f56e223db1111d198b38b993..64c6f5ff66cc5e6693bd4247f26799822f0b4e18 100644 (file)
@@ -37,8 +37,8 @@ namespace ucl {
                                EventHandlerDelFunc delFunc);
                ~SysEventProvider();
 
-               void addEventHandler(SysEventHandler handler);
-               void delEventHandler(SysEventHandler handler);
+               void addEventHandler(const SysEventHandler &handler);
+               void delEventHandler(const SysEventHandler &handler);
 
        private:
                int addEventHandler(app_event_handler_h *handler,
index 867e62f9226b5c257a8594a7ee949723b9fa1e6e..1d523949eb437a50aa9c4572ba683dbd913c5565 100644 (file)
 
 namespace ucl {
 
-       inline void SysEventProvider::addEventHandler(SysEventHandler handler)
+       inline void SysEventProvider::addEventHandler(
+                       const SysEventHandler &handler)
        {
                m_event += handler;
        }
 
-       inline void SysEventProvider::delEventHandler(SysEventHandler handler)
+       inline void SysEventProvider::delEventHandler(
+                       const SysEventHandler &handler)
        {
                m_event -= handler;
        }
index 5f10426cfa1feeaf717fa2d5a9249984fb7f7776..48f8adc0233ee4e8138d3ce6d696c8301acda3e9 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "ucl/util/types.h"
 #include "ucl/util/delegation.h"
+#include "ucl/util/smartDelegation.h"
 
 #include "ucl/misc/HashMap.h"
 #include "ucl/misc/Event.h"
@@ -54,7 +55,7 @@ namespace ucl {
                UPDATE_REQUESTED
        };
 
-       using SysEventHandler = Delegate<void(SysEvent)>;
+       using SysEventHandler = WeakDelegate<void(SysEvent)>;
 
        using AutoAppCtrl = AutoHandle<app_control_h, int, app_control_destroy>;
 }