diff --git a/escher/include/escher/scroll_view.h b/escher/include/escher/scroll_view.h index a078cffdd..9589cfad3 100644 --- a/escher/include/escher/scroll_view.h +++ b/escher/include/escher/scroll_view.h @@ -14,7 +14,7 @@ public: KDColor indicatorColor = Palette::GreyDark, KDColor backgroundIndicatorColor = Palette::GreyMiddle, KDCoordinate indicatorMargin = 14); - void setContentOffset(KDPoint offset); + void setContentOffset(KDPoint offset, bool forceRelayout = false); KDPoint contentOffset() const; KDCoordinate topMargin() const; KDCoordinate leftMargin() const; diff --git a/escher/include/escher/scrollable_view.h b/escher/include/escher/scrollable_view.h index cf8fb69b9..a6b08bf36 100644 --- a/escher/include/escher/scrollable_view.h +++ b/escher/include/escher/scrollable_view.h @@ -8,7 +8,7 @@ class ScrollableView : public Responder, public ScrollView { public: ScrollableView(Responder * parentResponder, View * view, ScrollViewDataSource * dataSource); bool handleEvent(Ion::Events::Event event) override; - void reloadScroll(); + void reloadScroll(bool forceRelayout = false); protected: void layoutSubviews() override; KDPoint m_manualScrollingOffset; diff --git a/escher/src/scroll_view.cpp b/escher/src/scroll_view.cpp index 44551f827..6d96674f6 100644 --- a/escher/src/scroll_view.cpp +++ b/escher/src/scroll_view.cpp @@ -189,8 +189,8 @@ KDSize ScrollView::contentSize() { return m_contentView->minimalSizeForOptimalDisplay(); } -void ScrollView::setContentOffset(KDPoint offset) { - if (m_dataSource->setOffset(offset)) { +void ScrollView::setContentOffset(KDPoint offset, bool forceRelayout) { + if (m_dataSource->setOffset(offset) || forceRelayout) { layoutSubviews(); } } diff --git a/escher/src/scrollable_view.cpp b/escher/src/scrollable_view.cpp index 80560c8d0..702ee0b81 100644 --- a/escher/src/scrollable_view.cpp +++ b/escher/src/scrollable_view.cpp @@ -43,9 +43,9 @@ bool ScrollableView::handleEvent(Ion::Events::Event event) { return false; } -void ScrollableView::reloadScroll() { +void ScrollableView::reloadScroll(bool forceReLayout) { m_manualScrollingOffset = KDPointZero; - setContentOffset(m_manualScrollingOffset); + setContentOffset(m_manualScrollingOffset, forceReLayout); } void ScrollableView::layoutSubviews() { diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index f914f4ee1..7b5aab457 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -312,7 +312,7 @@ bool TextField::privateHandleEvent(Ion::Events::Event event) { int cursorLoc = cursorLocation(); setEditing(false, m_hasTwoBuffers); if (m_delegate->textFieldDidFinishEditing(this, text(), event)) { - reloadScroll(); + reloadScroll(true); return true; } /* if the text was refused (textFieldDidFinishEditing returned false, we