[libpanel] examples: emulate progress with a timeout
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libpanel] examples: emulate progress with a timeout
- Date: Tue, 13 Sep 2022 22:22:59 +0000 (UTC)
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]