[libpanel] examples: emulate progress with a timeout



commit 634016d710c696320b6ddb4cbcc1c585e2e65ce3
Author: Christian Hergert <chergert redhat com>
Date:   Tue Sep 13 15:20:30 2022 -0700

    examples: emulate progress with a timeout

 example/example-page.c       | 29 ++++++++++++++++++++++++++++-
 src/panel-save-dialog-row.c  |  5 +++++
 src/panel-save-dialog-row.ui |  9 ++++++++-
 3 files changed, 41 insertions(+), 2 deletions(-)
---
diff --git a/example/example-page.c b/example/example-page.c
index b9087f6..42d6421 100644
--- a/example/example-page.c
+++ b/example/example-page.c
@@ -49,6 +49,29 @@ example_page_new (void)
   return g_object_new (EXAMPLE_TYPE_PAGE, NULL);
 }
 
+static gboolean
+tick_cb (gpointer user_data)
+{
+  GTask *task = user_data;
+  PanelSaveDelegate *delegate = g_task_get_source_object (task);
+  double progress = panel_save_delegate_get_progress (delegate);
+
+  if (g_task_had_error (task) ||
+      g_task_return_error_if_cancelled (task))
+    return G_SOURCE_REMOVE;
+
+  progress = CLAMP (progress+.005, .0, 1.);
+  panel_save_delegate_set_progress (delegate, progress);
+
+  if (progress >= 1.)
+    {
+      g_task_return_boolean (task, TRUE);
+      return G_SOURCE_REMOVE;
+    }
+
+  return G_SOURCE_CONTINUE;
+}
+
 static gboolean
 example_page_save (ExamplePage       *self,
                    GTask             *task,
@@ -58,7 +81,11 @@ example_page_save (ExamplePage       *self,
   g_assert (G_IS_TASK (task));
   g_assert (PANEL_IS_SAVE_DELEGATE (delegate));
 
-  g_task_return_boolean (task, TRUE);
+  g_timeout_add_full (G_PRIORITY_DEFAULT,
+                      30,
+                      tick_cb,
+                      g_object_ref (task),
+                      g_object_unref);
 
   return TRUE;
 }
diff --git a/src/panel-save-dialog-row.c b/src/panel-save-dialog-row.c
index 87ebc34..749ecba 100644
--- a/src/panel-save-dialog-row.c
+++ b/src/panel-save-dialog-row.c
@@ -22,6 +22,7 @@
 
 #include <glib/gi18n.h>
 
+#include "panel-progress-icon-private.h"
 #include "panel-save-delegate.h"
 #include "panel-save-dialog-row-private.h"
 
@@ -32,6 +33,7 @@ struct _PanelSaveDialogRow
   PanelSaveDelegate *delegate;
 
   GtkCheckButton    *check;
+  PanelProgressIcon *progress;
 };
 
 enum {
@@ -174,7 +176,10 @@ panel_save_dialog_row_class_init (PanelSaveDialogRowClass *klass)
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/libpanel/panel-save-dialog-row.ui");
   gtk_widget_class_bind_template_child (widget_class, PanelSaveDialogRow, check);
+  gtk_widget_class_bind_template_child (widget_class, PanelSaveDialogRow, progress);
   gtk_widget_class_bind_template_callback (widget_class, on_notify_active_cb);
+
+  g_type_ensure (PANEL_TYPE_PROGRESS_ICON);
 }
 
 static void
diff --git a/src/panel-save-dialog-row.ui b/src/panel-save-dialog-row.ui
index 4ee0e98..327db22 100644
--- a/src/panel-save-dialog-row.ui
+++ b/src/panel-save-dialog-row.ui
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <template class="PanelSaveDialogRow" parent="AdwActionRow">
+    <property name="activatable-widget">check</property>
     <child type="prefix">
       <object class="GtkCheckButton" id="check">
         <property name="active">true</property>
@@ -8,6 +9,12 @@
         <signal name="notify::active" handler="on_notify_active_cb" swapped="true" 
object="PanelSaveDialogRow"/>
       </object>
     </child>
-    <property name="activatable-widget">check</property>
+    <child type="suffix">
+      <object class="PanelProgressIcon" id="progress">
+        <property name="progress">.66</property>
+        <property name="valign">center</property>
+        <property name="margin-start">6</property>
+      </object>
+    </child>
   </template>
 </interface>


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