[Gallery] Hot-fix change 52/124852/1
authorIgor Nazarov <i.nazarov@samsung.com>
Wed, 12 Apr 2017 15:55:37 +0000 (18:55 +0300)
committerIgor Nazarov <i.nazarov@samsung.com>
Wed, 12 Apr 2017 15:55:37 +0000 (18:55 +0300)
- Fixed undefined behavior in ImageGrid related to item selection;
- Fixed erroneous animation in some cases when performing select mode zoom
  out in ImageGrid;
- UCL changes.

Change-Id: I467834554a671ab0e8722029403d4e36df84c60c

inc/view/ImageGrid.h
src/model/GalleryAlbum.cpp
src/presenters/PreviewPage.cpp
src/view/ImageGrid.cpp
ucl/inc/ucl/gui/Window.hpp
ucl/inc/ucl/misc/TString.h
ucl/inc/ucl/misc/TString.hpp

index 9c7756c7f445d0baddc6cfca052f68f72cb545e1..c707646c438b2a71e70e1e0564efbf5f2d34a71e 100644 (file)
@@ -128,6 +128,7 @@ namespace gallery {
                void evalSlotSizes();
                void finalizeTransition();
                Eina_Bool onAnimationFrame();
+               void onSlotResize(Widget &widget, void *eventInfo);
                void onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo);
                void onTransitonFinished(Evas_Object *obj, const char *emission,
                                const char *source);
@@ -225,6 +226,7 @@ namespace gallery {
                int m_eventsLock;
 
                Ecore_Animator *m_animator;
+               int m_scrollLockIndex;
                bool m_isInSelectMode;
                bool m_isRotaryActive;
        };
index 7fe098c6832385e83783ac18df1ebe6f378bc0a1..33f08e8ad875e854035fab772df83c1d595c113b 100644 (file)
@@ -67,7 +67,7 @@ namespace gallery {
                        return RES_FAIL;
                }
 
-               ret = media_filter_set_condition(m_filter, impl::CONDITION,
+               ret = media_filter_set_condition(m_filter, impl::CONDITION.c_str(),
                                MEDIA_CONTENT_COLLATE_DEFAULT);
                if (ret != 0) {
                        ELOG("media_filter_set_condition() failed: %d", ret);
index 143243f1d3c9af7b7fdb918b0902de59a4b65034..f7ee75fa4efeb421d7457a3506806add6b809624 100644 (file)
@@ -339,6 +339,7 @@ namespace gallery {
                if (m_imageGrid->isInSelectMode()) {
                        if (event == ImageGrid::ITEM_EVENT_CLICK) {
                                toggleItemSelected(itemIndex);
+                               m_imageGrid->bringInItem(itemIndex);
                        }
                        return;
                }
index 690c1bc2cd9ddd3981ebb92ba799e071cab6a483..1f792a18f10cb00fc94e70ea15f19197c665952b 100644 (file)
@@ -445,8 +445,8 @@ namespace gallery {
                        for (int i = 0; i < length; ++i) {
                                m_items.emplace_back(makeShared<Item>(imageGrid, m_layout));
 
-                               m_layout.setContent(
-                                               EdjePart(impl::SLOT_PART_FMT.format(i)),
+                               const auto partName = impl::SLOT_PART_FMT.format(i);
+                               m_layout.setContent(EdjePart(partName.c_str()),
                                                m_items.back()->getWidget());
                        }
                }
@@ -520,10 +520,10 @@ namespace gallery {
                        if (!m_items[itemOffset]->setSelected(selected)) {
                                return;
                        }
-                       const auto aSignal = EdjeSignal(selected ?
+                       const auto signalName = (selected ?
                                        impl::SIGNAL_SELECT_ITEM_FMT.format(itemOffset) :
                                        impl::SIGNAL_UNSELECT_ITEM_FMT.format(itemOffset));
-                       m_layout.emitSignal(aSignal);
+                       m_layout.emitSignal(EdjeSignal(signalName.c_str()));
                }
 
        private:
@@ -581,6 +581,7 @@ namespace gallery {
                m_eventsLock(0),
 
                m_animator(nullptr),
+               m_scrollLockIndex(0),
                m_isInSelectMode(selectModeStartup),
                m_isRotaryActive(false)
        {
@@ -736,6 +737,8 @@ namespace gallery {
                        return RES_FAIL;
                }
 
+               m_scrollLockIndex = (m_scrollOffset / m_slotSize);
+
                m_isInSelectMode = enabled;
 
                elm_object_scroll_freeze_push(*m_scroller);
@@ -760,8 +763,12 @@ namespace gallery {
                                        EVAS_CALLBACK_RESIZE, EO_CALLBACK_PRIORITY_AFTER,
                                        CALLBACK_A(ImageGrid::onBoxResize), this);
 
-               elm_object_signal_callback_add(
-                               m_slots[m_beginSlotIndex & 1]->getLayout(),
+               auto &slotlayout = m_slots[m_beginSlotIndex & 1]->getLayout();
+
+               slotlayout.addEventHandler(WidgetEvent::CHANGED_SIZE_HINTS,
+                               WEAK_DELEGATE(ImageGrid::onSlotResize, asWeak(*this)));
+
+               elm_object_signal_callback_add(slotlayout,
                                impl::SIGNAL_TRANSITION_FINISHED.name, "",
                                CALLBACK_A(ImageGrid::onTransitonFinished), this);
 
@@ -806,8 +813,12 @@ namespace gallery {
                evas_object_event_callback_del_full(m_box, EVAS_CALLBACK_RESIZE,
                                CALLBACK_A(ImageGrid::onBoxResize), this);
 
-               elm_object_signal_callback_del(
-                               m_slots[m_beginSlotIndex & 1]->getLayout(),
+               auto &slotlayout = m_slots[m_beginSlotIndex & 1]->getLayout();
+
+               slotlayout.delEventHandler(WidgetEvent::CHANGED_SIZE_HINTS,
+                               WEAK_DELEGATE(ImageGrid::onSlotResize, asWeak(*this)));
+
+               elm_object_signal_callback_del(slotlayout,
                                "gallery,transition,finished", "",
                                CALLBACK_A(ImageGrid::onTransitonFinished));
        }
@@ -825,27 +836,27 @@ namespace gallery {
                }
        }
 
-       void ImageGrid::onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo)
+       void ImageGrid::onSlotResize(Widget &widget, void *eventInfo)
        {
-               const int scrollLockIndex = (m_scrollOffset / m_slotSize);
-
                if (updateSlotSize()) {
-
-                       m_scrollOffset = (scrollLockIndex * m_slotSize);
-                       if (m_info.isHorizontal) {
-                               elm_scroller_region_show(*m_scroller,
-                                               m_scrollOffset, 0, m_scrollerSize, 1);
-                       } else {
-                               elm_scroller_region_show(*m_scroller,
-                                               0, m_scrollOffset, 1, m_scrollerSize);
-                       }
-
                        updatePadSizes();
                        updateScrollBias();
                        updateRectMins();
                }
        }
 
+       void ImageGrid::onBoxResize(Evas *e, Evas_Object *obj, void *eventInfo)
+       {
+               m_scrollOffset = (m_scrollLockIndex * m_slotSize);
+               if (m_info.isHorizontal) {
+                       elm_scroller_region_show(*m_scroller,
+                                       m_scrollOffset, 0, m_scrollerSize, 1);
+               } else {
+                       elm_scroller_region_show(*m_scroller,
+                                       0, m_scrollOffset, 1, m_scrollerSize);
+               }
+       }
+
        void ImageGrid::update()
        {
                Unrealizer(*this);
index f1add02bca5eaac89356ef8fa80fa53a67168972..3d4c959a4c20870c8dcdd8a24ef2ccd749153350 100644 (file)
@@ -113,7 +113,7 @@ namespace ucl {
 
        inline std::string Window::getTitle() const
        {
-               return elm_win_title_get(getEo());
+               return nz(elm_win_title_get(getEo()));
        }
 
        inline void Window::setIndicatorVisible(bool value)
index 72ea460eecca04911b2df4dfdeda9d2bcc8014d3..5ad240d85f0df33878dfab11c11bb19d670e22d5 100644 (file)
@@ -56,7 +56,7 @@ namespace ucl {
                const char *translate() const;
 
                template <typename ...ARGS>
-               TString format(ARGS ...args) const;
+               std::string format(ARGS ...args) const;
 
        private:
                const char *doTranslate(const char *strId) const;
index f9403854be438929d3d1e43c19bcfa5b697749f4..01c1327a39c7e02a72650fc17fbb3e16528c5cf0 100644 (file)
@@ -115,7 +115,7 @@ namespace ucl {
        }
 
        template <typename ...ARGS>
-       inline TString TString::format(ARGS ...args) const
+       inline std::string TString::format(ARGS ...args) const
        {
                constexpr auto STR_LEN_ADJUST = 1.7f;
 
@@ -141,6 +141,6 @@ namespace ucl {
                        strLen = n + 1;
                }
 
-               return {result, false};
+               return result;
        }
 }