[epiphany/wip/exalm/spinner: 3/4] page-row: Stop spinner when not visible




commit cd24fadc7182d7ef44e3787d721016ef1e1a7b27
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Mon Feb 8 18:22:54 2021 +0500

    page-row: Stop spinner when not visible

 src/ephy-page-row.c           | 14 ++++++++++++++
 src/resources/gtk/page-row.ui |  6 ++----
 2 files changed, 16 insertions(+), 4 deletions(-)
---
diff --git a/src/ephy-page-row.c b/src/ephy-page-row.c
index 8e8d694d3..932e8f37e 100644
--- a/src/ephy-page-row.c
+++ b/src/ephy-page-row.c
@@ -43,6 +43,16 @@ struct _EphyPageRow {
 
 G_DEFINE_TYPE (EphyPageRow, ephy_page_row, GTK_TYPE_LIST_BOX_ROW)
 
+static void
+update_spinner (EphyPageRow *self)
+{
+  if (gtk_widget_get_mapped (GTK_WIDGET (self)) &&
+      hdy_tab_page_get_loading (self->page))
+    gtk_spinner_start (self->spinner);
+  else
+    gtk_spinner_stop (self->spinner);
+}
+
 static void
 close_clicked_cb (EphyPageRow *self)
 {
@@ -78,6 +88,7 @@ ephy_page_row_class_init (EphyPageRowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, spinner);
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, title);
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, close_button);
+  gtk_widget_class_bind_template_callback (widget_class, update_spinner);
   gtk_widget_class_bind_template_callback (widget_class, close_clicked_cb);
   gtk_widget_class_bind_template_callback (widget_class, button_release_event);
 }
@@ -165,6 +176,9 @@ ephy_page_row_new (EphyTabView *tab_view,
                                (GBindingTransformFunc)loading_to_visible_child,
                                NULL,
                                self, NULL);
+  g_signal_connect_object (page, "notify::loading",
+                           G_CALLBACK (update_spinner), self,
+                           G_CONNECT_SWAPPED);
 
   g_signal_connect_object (view, "notify::icon",
                            G_CALLBACK (update_icon_cb), self,
diff --git a/src/resources/gtk/page-row.ui b/src/resources/gtk/page-row.ui
index f77a0e81b..e8d406349 100644
--- a/src/resources/gtk/page-row.ui
+++ b/src/resources/gtk/page-row.ui
@@ -4,6 +4,8 @@
   <requires lib="gtk+" version="3.16"/>
   <template class="EphyPageRow" parent="GtkListBoxRow">
     <property name="can_focus">True</property>
+    <signal name="map" handler="update_spinner" swapped="true"/>
+    <signal name="unmap" handler="update_spinner" swapped="true"/>
     <child>
       <object class="GtkEventBox">
         <property name="visible">True</property>
@@ -34,11 +36,7 @@
                   <object class="GtkSpinner" id="spinner">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="active">True</property>
                   </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </object>
               <packing>


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