[gnome-tour/wip/exalm/fix] paginator: Update position after adding pages



commit 91d1d5934da553a6f91647e39647313313b180ae
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue Jul 14 04:30:11 2020 +0500

    paginator: Update position after adding pages
    
    Otherwise it's mixed state until we swipe carousel the first time or
    press Next.

 src/widgets/paginator.rs | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)
---
diff --git a/src/widgets/paginator.rs b/src/widgets/paginator.rs
index e957742..fc9571a 100644
--- a/src/widgets/paginator.rs
+++ b/src/widgets/paginator.rs
@@ -56,26 +56,32 @@ impl PaginatorWidget {
         let page_nr = self.pages.borrow().len();
         self.carousel.insert(&page.get_widget(), page_nr as i32);
         self.pages.borrow_mut().push(page);
+
+        self.update_position();
     }
 
-    fn init(&self, p: Rc<Self>) {
-        self.carousel.set_property_expand(true);
-        self.carousel.set_animation_duration(300);
+    fn update_position(&self) {
+        let n_pages = self.carousel.get_n_pages() as f64;
+        let position = self.carousel.get_position();
+        let opacity = (position - n_pages + 2_f64).max(0_f64);
 
-        self.carousel.connect_property_position_notify(clone!(@weak p => move |carousel| {
-            let n_pages = carousel.get_n_pages() as f64;
-            let position = carousel.get_position();
-            let opacity = (position - n_pages + 2_f64).max(0_f64);
+        self.close_btn.set_opacity(opacity);
+        self.close_btn.set_visible(opacity > 0_f64);
 
-            p.close_btn.set_opacity(opacity);
-            p.close_btn.set_visible(opacity > 0_f64);
+        let page_nr = position.round() as u32;
+        let pages = &self.pages.borrow();
+        let page = pages.get(page_nr as usize).unwrap();
 
-            let page_nr = position.round() as u32;
-            let pages = &p.pages.borrow();
-            let page = pages.get(page_nr as usize).unwrap();
+        self.headerbar.set_title(Some(&page.get_title()));
+        self.current_page.replace(page_nr);
+    }
+
+    fn init(&self, p: Rc<Self>) {
+        self.carousel.set_property_expand(true);
+        self.carousel.set_animation_duration(300);
 
-            p.headerbar.set_title(Some(&page.get_title()));
-            p.current_page.replace(page_nr);
+        self.carousel.connect_property_position_notify(clone!(@weak p => move |_| {
+            p.update_position();
         }));
 
         let previous_btn = gtk::Button::with_label(&gettext("_Previous"));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]