[seahorse/seahorse-progress-bye-seahorse-widget: 1/3] libseahorse: Port progress.c away from SeahorseWidget




commit 011fe1be563a97602ab8c88de78c41ebc7703d50
Author: Niels De Graef <nielsdegraef gmail com>
Date:   Sun Mar 14 16:35:01 2021 +0100

    libseahorse: Port progress.c away from SeahorseWidget

 libseahorse/seahorse-progress.c | 915 ++++++++++++++++++++--------------------
 1 file changed, 455 insertions(+), 460 deletions(-)
---
diff --git a/libseahorse/seahorse-progress.c b/libseahorse/seahorse-progress.c
index bf9bdeab..5226ba53 100644
--- a/libseahorse/seahorse-progress.c
+++ b/libseahorse/seahorse-progress.c
@@ -21,624 +21,619 @@
 #include "config.h"
 
 #include "seahorse-progress.h"
-#include "seahorse-widget.h"
 
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/time.h>
 
-typedef enum {
-       TASK_PART_PREPPED = 1,
-       TASK_PART_BEGUN,
-       TASK_PART_ENDED
+typedef enum _TrackedState {
+    TASK_PART_PREPPED = 1,
+    TASK_PART_BEGUN,
+    TASK_PART_ENDED
 } TrackedState;
 
-typedef struct {
-       gconstpointer progress_tag;
-       gchar *details;
-       TrackedState state;
+typedef struct _TrackedPart {
+    const void *progress_tag;
+    char *details;
+    TrackedState state;
 } TrackedPart;
 
-typedef struct {
-       GCancellable *cancellable;
-       gulong cancelled_sig;
+typedef struct _TrackedTask {
+    GCancellable *cancellable;
+    unsigned long cancelled_sig;
 
-       SeahorseWidget *swidget;
-       GtkBuilder *builder;
-       gchar *title;
-       gchar *notice;
-       gboolean showing;
+    GtkWidget *dialog;
+    GtkBuilder *builder;
+    char *title;
+    char *notice;
+    gboolean showing;
 
-       GQueue *parts;
-       gint parts_prepped;
-       gint parts_begun;
-       gint parts_ended;
+    GQueue *parts;
+    int parts_prepped;
+    int parts_begun;
+    int parts_ended;
 } TrackedTask;
 
+/* maps GCancellables to TrackedTasks */
 static GHashTable *tracked_tasks = NULL;
 
 static void
-tracked_part_free (gpointer data)
+tracked_part_free (void *data)
 {
-       TrackedPart *part = data;
-       g_free (part->details);
-       g_free (part);
+    TrackedPart *part = data;
+    g_free (part->details);
+    g_free (part);
 }
 
-static gint
-find_part_progress_tag (gconstpointer part_data,
-                        gconstpointer progress_tag)
+static int
+find_part_progress_tag (const void *part_data,
+                        const void *progress_tag)
 {
-       TrackedPart *part = (TrackedPart *)part_data;
-       return (part->progress_tag == progress_tag) ? 0 : 1;
+    TrackedPart *part = (TrackedPart *) part_data;
+    return (part->progress_tag == progress_tag) ? 0 : 1;
 }
 
-static gint
-find_part_begun_with_details (gconstpointer part_data,
-                              gconstpointer unused)
+static int
+find_part_begun_with_details (const void *part_data,
+                              const void *unused)
 {
-       TrackedPart *part = (TrackedPart *)part_data;
-       return (part->state == TASK_PART_BEGUN && part->details) ? 0 : 1;
+    TrackedPart *part = (TrackedPart *) part_data;
+    return (part->state == TASK_PART_BEGUN && part->details) ? 0 : 1;
 }
 
 static TrackedPart *
-tracked_part_find (TrackedTask *task,
-                   GCompareFunc func,
-                   gconstpointer user_data)
+tracked_part_find (TrackedTask  *task,
+                   GCompareFunc  func,
+                   const void   *user_data)
 {
-       GList *part = g_queue_find_custom (task->parts, user_data, func);
-       return part ? part->data : NULL;
+    GList *part = g_queue_find_custom (task->parts, user_data, func);
+    return part ? part->data : NULL;
 }
 
 static void
-on_cancellable_gone (gpointer user_data,
+on_cancellable_gone (void    *user_data,
                      GObject *where_the_object_was)
 {
-       TrackedTask *task;
+    TrackedTask *task;
 
-       g_assert (tracked_tasks);
-       task = g_hash_table_lookup (tracked_tasks, where_the_object_was);
-       g_assert ((gpointer)task->cancellable == (gpointer)where_the_object_was);
-       task->cancellable = NULL;
-       task->cancelled_sig = 0;
+    g_assert (tracked_tasks);
+    task = g_hash_table_lookup (tracked_tasks, where_the_object_was);
+    g_assert ((void *) task->cancellable == (void *) where_the_object_was);
+    task->cancellable = NULL;
+    task->cancelled_sig = 0;
 
-       if (!g_hash_table_remove (tracked_tasks, where_the_object_was))
-               g_assert_not_reached ();
+    if (!g_hash_table_remove (tracked_tasks, where_the_object_was))
+        g_assert_not_reached ();
 }
 
 static void
 on_cancellable_cancelled (GCancellable *cancellable,
-                          gpointer user_data)
+                          void         *user_data)
 {
-       g_assert (tracked_tasks);
-       g_assert (((TrackedTask *)user_data)->cancellable == cancellable);
-       if (!g_hash_table_remove (tracked_tasks, cancellable))
-               g_assert_not_reached ();
+    g_assert (tracked_tasks);
+    g_assert (((TrackedTask *)user_data)->cancellable == cancellable);
+    if (!g_hash_table_remove (tracked_tasks, cancellable))
+        g_assert_not_reached ();
 }
 
 static void
-tracked_task_free (gpointer data)
+tracked_task_free (void *data)
 {
-       TrackedTask *task = data;
-       if (task->cancellable) {
-               g_object_weak_unref (G_OBJECT (task->cancellable),
-                                    on_cancellable_gone, task);
-
-               /* Use this because g_cancellable_disconnect() deadlocks */
-               if (task->cancelled_sig)
-                       g_signal_handler_disconnect (task->cancellable,
-                                                    task->cancelled_sig);
-       }
-
-       g_queue_foreach (task->parts, (GFunc)tracked_part_free, NULL);
-       g_queue_free (task->parts);
-       g_free (task->title);
-       g_free (task->notice);
-       if (task->builder)
-               g_object_unref (task->builder);
-       if (task->swidget)
-               g_object_unref (task->swidget);
-       g_free (task);
+    TrackedTask *task = data;
+    if (task->cancellable) {
+        g_object_weak_unref (G_OBJECT (task->cancellable),
+                             on_cancellable_gone, task);
+
+        /* Use this because g_cancellable_disconnect() deadlocks */
+        if (task->cancelled_sig)
+            g_signal_handler_disconnect (task->cancellable,
+                                         task->cancelled_sig);
+    }
+
+    g_queue_foreach (task->parts, (GFunc)tracked_part_free, NULL);
+    g_queue_free (task->parts);
+    g_free (task->title);
+    g_free (task->notice);
+    g_clear_object (&task->builder);
+    if (task->dialog)
+      gtk_widget_destroy (task->dialog);
+    g_free (task);
 }
 
 static gboolean
-on_pulse_timeout (gpointer user_data)
+on_pulse_timeout (void *user_data)
 {
-       GtkProgressBar *progress = GTK_PROGRESS_BAR (user_data);
+    GtkProgressBar *progress = GTK_PROGRESS_BAR (user_data);
 
-       if (gtk_progress_bar_get_pulse_step (progress) != 0) {
-               gtk_progress_bar_pulse (progress);
-               return TRUE;
-       }
+    if (gtk_progress_bar_get_pulse_step (progress) != 0) {
+        gtk_progress_bar_pulse (progress);
+        return G_SOURCE_CONTINUE;
+    }
 
-       return FALSE;
+    return G_SOURCE_REMOVE;
 }
 
 static void
 start_pulse (GtkProgressBar *progress)
 {
-       guint stag;
+    unsigned int stag;
 
-       gtk_progress_bar_set_pulse_step (progress, 0.05);
-       gtk_progress_bar_pulse (progress);
+    gtk_progress_bar_set_pulse_step (progress, 0.05);
+    gtk_progress_bar_pulse (progress);
 
-       stag = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (progress), "pulse-timer"));
+    stag = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (progress), "pulse-timer"));
 
-       /* Start a pulse timer */
-       if (stag == 0) {
-               stag = g_timeout_add (100, on_pulse_timeout, progress);
-               g_object_set_data_full (G_OBJECT (progress), "pulse-timer",
-                                       GINT_TO_POINTER (stag), (GDestroyNotify)g_source_remove);
-       }
+    /* Start a pulse timer */
+    if (stag == 0) {
+        stag = g_timeout_add (100, on_pulse_timeout, progress);
+        g_object_set_data_full (G_OBJECT (progress), "pulse-timer",
+                                GINT_TO_POINTER (stag), (GDestroyNotify)g_source_remove);
+    }
 }
 
 static void
 stop_pulse (GtkProgressBar *progress)
 {
-       gtk_progress_bar_set_pulse_step (progress, 0.0);
+    gtk_progress_bar_set_pulse_step (progress, 0.0);
 
-       /* This causes the destroy callback to be called */
-       g_object_set_data (G_OBJECT (progress), "pulse-timer", NULL);
+    /* This causes the destroy callback to be called */
+    g_object_set_data (G_OBJECT (progress), "pulse-timer", NULL);
 }
 
 static void
 progress_update_display (TrackedTask *task)
 {
-       GtkProgressBar *progress = NULL;
-       GtkStatusbar *status = NULL;
-       GtkLabel *label = NULL;
-       GtkWidget *widget;
-       TrackedPart *part;
-       gdouble fraction;
-       guint id;
-
-       if (task->builder == NULL)
-               return;
-
-       /* Dig out our progress display stuff */
-       widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "progress-bar"));
-       if (widget == NULL)
-               g_warning ("cannot display progress because seahorse window has no progress widget");
-       else
-               progress = GTK_PROGRESS_BAR (widget);
-       widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "status"));
-       if (GTK_IS_STATUSBAR (widget)) {
-               status = GTK_STATUSBAR (widget);
-       } else {
-               widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "progress-details"));
-               if (GTK_IS_LABEL (widget))
-                       label = GTK_LABEL (widget);
-       }
-
-       /* The details is the first on a begun part */
-       part = tracked_part_find (task, find_part_begun_with_details, NULL);
-       if (status) {
-               id = gtk_statusbar_get_context_id (status, "operation-progress");
-               gtk_statusbar_pop (status, id);
-               if (part != NULL)
-                       gtk_statusbar_push (status, id, part->details);
-       } else if (label) {
-               gtk_label_set_text (label, part ? part->details : "");
-       }
-
-       /* If all parts are running simultaneously then indeterminate */
-       if (task->parts_prepped == 0 && task->parts_ended == 0) {
-               fraction = -1;
-       } else {
-               fraction = (gdouble)task->parts_ended /
-                          (gdouble)task->parts->length;
-       }
-
-       if (progress) {
-               if (fraction >= 0.0) {
-                       stop_pulse (progress);
-                       gtk_progress_bar_set_fraction (progress, fraction);
-               } else {
-                       start_pulse (progress);
-               }
-       }
+    GtkProgressBar *progress = NULL;
+    GtkStatusbar *status = NULL;
+    GtkLabel *label = NULL;
+    GtkWidget *widget;
+    TrackedPart *part;
+    double fraction;
+    unsigned int id;
+
+    if (task->builder == NULL)
+        return;
+
+    /* Dig out our progress display stuff */
+    widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "progress-bar"));
+    if (widget == NULL)
+        g_warning ("cannot display progress because seahorse window has no progress widget");
+    else
+        progress = GTK_PROGRESS_BAR (widget);
+    widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "status"));
+    if (GTK_IS_STATUSBAR (widget)) {
+        status = GTK_STATUSBAR (widget);
+    } else {
+        widget = GTK_WIDGET (gtk_builder_get_object (task->builder, "progress-details"));
+        if (GTK_IS_LABEL (widget))
+            label = GTK_LABEL (widget);
+    }
+
+    /* The details is the first on a begun part */
+    part = tracked_part_find (task, find_part_begun_with_details, NULL);
+    if (status) {
+        id = gtk_statusbar_get_context_id (status, "operation-progress");
+        gtk_statusbar_pop (status, id);
+        if (part != NULL)
+            gtk_statusbar_push (status, id, part->details);
+    } else if (label) {
+        gtk_label_set_text (label, part ? part->details : "");
+    }
+
+    /* If all parts are running simultaneously then indeterminate */
+    if (task->parts_prepped == 0 && task->parts_ended == 0) {
+        fraction = -1;
+    } else {
+        fraction = (double) task->parts_ended /
+                   (double) task->parts->length;
+    }
+
+    if (progress) {
+        if (fraction >= 0.0) {
+            stop_pulse (progress);
+            gtk_progress_bar_set_fraction (progress, fraction);
+        } else {
+            start_pulse (progress);
+        }
+    }
 }
 
 static TrackedTask *
 progress_lookup_or_create_task (GCancellable *cancellable)
 {
-       TrackedTask *task;
-
-       if (tracked_tasks == NULL)
-               tracked_tasks = g_hash_table_new_full (g_direct_hash, g_direct_equal,
-                                                      NULL, tracked_task_free);
-
-       task = g_hash_table_lookup (tracked_tasks, cancellable);
-       if (task == NULL) {
-               if (g_cancellable_is_cancelled (cancellable))
-                       return NULL;
-
-               task = g_new0 (TrackedTask, 1);
-               task->cancellable = cancellable;
-               g_object_weak_ref (G_OBJECT (task->cancellable),
-                                  on_cancellable_gone, task);
-               task->parts = g_queue_new ();
-
-               g_hash_table_insert (tracked_tasks, cancellable, task);
-               task->cancelled_sig = g_cancellable_connect (cancellable,
-                                                            G_CALLBACK (on_cancellable_cancelled),
-                                                            task, NULL);
-       }
-
-       return task;
+    TrackedTask *task;
+
+    if (tracked_tasks == NULL)
+        tracked_tasks = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+                                               NULL, tracked_task_free);
+
+    task = g_hash_table_lookup (tracked_tasks, cancellable);
+    if (task == NULL) {
+        if (g_cancellable_is_cancelled (cancellable))
+            return NULL;
+
+        task = g_new0 (TrackedTask, 1);
+        task->cancellable = cancellable;
+        g_object_weak_ref (G_OBJECT (task->cancellable),
+                           on_cancellable_gone, task);
+        task->parts = g_queue_new ();
+
+        g_hash_table_insert (tracked_tasks, cancellable, task);
+        task->cancelled_sig = g_cancellable_connect (cancellable,
+                                                     G_CALLBACK (on_cancellable_cancelled),
+                                                     task, NULL);
+    }
+
+    return task;
 }
 
 static void
 progress_prep_va (GCancellable *cancellable,
-                  gconstpointer progress_tag,
-                  const gchar *details,
-                  va_list va)
+                  const void   *progress_tag,
+                  const char   *details,
+                  va_list       va)
 {
-       TrackedTask *task;
-       TrackedPart *part;
-
-       task = progress_lookup_or_create_task (cancellable);
-
-       /* Perhaps already cancelled? */
-       if (task == NULL)
-               return;
-
-       part = tracked_part_find (task, find_part_progress_tag, progress_tag);
-       if (part == NULL) {
-               part = g_new0 (TrackedPart, 1);
-               if (details && details[0])
-                       part->details = g_strdup_vprintf (details, va);
-               part->progress_tag = progress_tag;
-               part->state = TASK_PART_PREPPED;
-               g_queue_push_tail (task->parts, part);
-               task->parts_prepped++;
-       } else {
-               g_warning ("already tracking progress for this part of the operation");
-       }
-
-       /* If the dialog is being displayed, update it */
-       g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (gint)task->parts->length);
-       progress_update_display (task);
+    TrackedTask *task;
+    TrackedPart *part;
+
+    task = progress_lookup_or_create_task (cancellable);
+
+    /* Perhaps already cancelled? */
+    if (task == NULL)
+        return;
+
+    part = tracked_part_find (task, find_part_progress_tag, progress_tag);
+    if (part == NULL) {
+        part = g_new0 (TrackedPart, 1);
+        if (details && details[0])
+            part->details = g_strdup_vprintf (details, va);
+        part->progress_tag = progress_tag;
+        part->state = TASK_PART_PREPPED;
+        g_queue_push_tail (task->parts, part);
+        task->parts_prepped++;
+    } else {
+        g_warning ("already tracking progress for this part of the operation");
+    }
+
+    /* If the dialog is being displayed, update it */
+    g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (int) task->parts->length);
+    progress_update_display (task);
 }
 
 void
 seahorse_progress_prep (GCancellable *cancellable,
-                        gconstpointer progress_tag,
-                        const gchar *details,
+                        const void   *progress_tag,
+                        const char   *details,
                         ...)
 {
-       va_list va;
+    va_list va;
 
-       if (!cancellable)
-               return;
+    if (!cancellable)
+        return;
 
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
 
-       va_start (va, details);
-       progress_prep_va (cancellable, progress_tag, details, va);
-       va_end (va);
+    va_start (va, details);
+    progress_prep_va (cancellable, progress_tag, details, va);
+    va_end (va);
 }
 
 void
 seahorse_progress_begin (GCancellable *cancellable,
-                         gconstpointer progress_tag)
+                         const void   *progress_tag)
 {
-       TrackedTask *task = NULL;
-       TrackedPart *part;
-
-       if (!cancellable)
-               return;
-
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
-       if (g_cancellable_is_cancelled (cancellable))
-               return;
-
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, cancellable);
-       if (task == NULL) {
-               g_warning ("caller is trying to begin part for task that does not exist");
-               return;
-       }
-
-       part = tracked_part_find (task, find_part_progress_tag, progress_tag);
-       if (part == NULL) {
-               g_warning ("caller is trying to begin part of task that does not exist");
-               return;
-       }
-
-       switch (part->state) {
-       case TASK_PART_PREPPED:
-               part->state = TASK_PART_BEGUN;
-               task->parts_begun++;
-               task->parts_prepped--;
-               break;
-       case TASK_PART_BEGUN:
-               g_warning ("caller is trying to begin part of task that has already begun");
-               return;
-       case TASK_PART_ENDED:
-               g_warning ("caller is trying to begin part of task that has already ended");
-               return;
-       default:
-               g_assert_not_reached ();
-               break;
-       }
-
-       g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (gint)task->parts->length);
-       progress_update_display (task);
+    TrackedTask *task = NULL;
+    TrackedPart *part;
+
+    if (!cancellable)
+        return;
+
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    if (g_cancellable_is_cancelled (cancellable))
+        return;
+
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, cancellable);
+    if (task == NULL) {
+        g_warning ("caller is trying to begin part for task that does not exist");
+        return;
+    }
+
+    part = tracked_part_find (task, find_part_progress_tag, progress_tag);
+    if (part == NULL) {
+        g_warning ("caller is trying to begin part of task that does not exist");
+        return;
+    }
+
+    switch (part->state) {
+    case TASK_PART_PREPPED:
+        part->state = TASK_PART_BEGUN;
+        task->parts_begun++;
+        task->parts_prepped--;
+        break;
+    case TASK_PART_BEGUN:
+        g_warning ("caller is trying to begin part of task that has already begun");
+        return;
+    case TASK_PART_ENDED:
+        g_warning ("caller is trying to begin part of task that has already ended");
+        return;
+    default:
+        g_assert_not_reached ();
+        break;
+    }
+
+    g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (int) task->parts->length);
+    progress_update_display (task);
 }
 
 void
 seahorse_progress_prep_and_begin (GCancellable *cancellable,
-                                  gconstpointer progress_tag,
-                                  const gchar *details,
+                                  const void   *progress_tag,
+                                  const char   *details,
                                   ...)
 {
-       va_list va;
+    va_list va;
 
-       if (!cancellable)
-               return;
+    if (!cancellable)
+        return;
 
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
 
-       va_start (va, details);
-       progress_prep_va (cancellable, progress_tag, details, va);
-       seahorse_progress_begin (cancellable, progress_tag);
-       va_end (va);
+    va_start (va, details);
+    progress_prep_va (cancellable, progress_tag, details, va);
+    seahorse_progress_begin (cancellable, progress_tag);
+    va_end (va);
 }
 
 void
 seahorse_progress_update (GCancellable *cancellable,
-                          gconstpointer progress_tag,
-                          const gchar *details,
+                          const void   *progress_tag,
+                          const char   *details,
                           ...)
 {
-       TrackedTask *task = NULL;
-       TrackedPart *part;
-       va_list va;
-
-       if (!cancellable)
-               return;
-
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
-       if (g_cancellable_is_cancelled (cancellable))
-               return;
-
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, cancellable);
-       if (task == NULL) {
-               g_warning ("caller is trying to update part for task that does not exist");
-               return;
-       }
-
-       part = tracked_part_find (task, find_part_progress_tag, progress_tag);
-       if (part == NULL) {
-               g_warning ("caller is trying to update part of task that does not exist");
-               return;
-       }
-
-       switch (part->state) {
-       case TASK_PART_PREPPED:
-       case TASK_PART_BEGUN:
-               g_free (part->details);
-               if (details && details[0]) {
-                       va_start (va, details);
-                       part->details = g_strdup_vprintf (details, va);
-                       va_end (va);
-               }
-               break;
-       case TASK_PART_ENDED:
-               g_warning ("caller is trying to update part of task that has already ended");
-               return;
-       default:
-               g_assert_not_reached ();
-               return;
-       }
-
-       g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (gint)task->parts->length);
-       progress_update_display (task);
+    TrackedTask *task = NULL;
+    TrackedPart *part;
+    va_list va;
+
+    if (!cancellable)
+        return;
+
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    if (g_cancellable_is_cancelled (cancellable))
+        return;
+
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, cancellable);
+    if (task == NULL) {
+        g_warning ("caller is trying to update part for task that does not exist");
+        return;
+    }
+
+    part = tracked_part_find (task, find_part_progress_tag, progress_tag);
+    if (part == NULL) {
+        g_warning ("caller is trying to update part of task that does not exist");
+        return;
+    }
+
+    switch (part->state) {
+    case TASK_PART_PREPPED:
+    case TASK_PART_BEGUN:
+        g_free (part->details);
+        if (details && details[0]) {
+            va_start (va, details);
+            part->details = g_strdup_vprintf (details, va);
+            va_end (va);
+        }
+        break;
+    case TASK_PART_ENDED:
+        g_warning ("caller is trying to update part of task that has already ended");
+        return;
+    default:
+        g_assert_not_reached ();
+        return;
+    }
+
+    g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (int) task->parts->length);
+    progress_update_display (task);
 }
 
 void
 seahorse_progress_end (GCancellable *cancellable,
-                       gconstpointer progress_tag)
+                       const void   *progress_tag)
 {
-       TrackedTask *task = NULL;
-       TrackedPart *part;
-
-       if (!cancellable)
-               return;
-
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
-       if (g_cancellable_is_cancelled (cancellable))
-               return;
-
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, cancellable);
-       if (task == NULL) {
-               g_warning ("caller is trying to end part for task that does not exist");
-               return;
-       }
-
-       part = tracked_part_find (task, find_part_progress_tag, progress_tag);
-       if (part == NULL) {
-               g_warning ("caller is trying to end part of task that does not exist");
-               return;
-       }
-
-       switch (part->state) {
-       case TASK_PART_PREPPED:
-               g_warning ("caller is trying to end part of task that has not begun");
-               return;
-       case TASK_PART_BEGUN:
-               part->state = TASK_PART_ENDED;
-               task->parts_begun--;
-               task->parts_ended++;
-               break;
-       case TASK_PART_ENDED:
-               g_warning ("caller is trying to end part of task that has already ended");
-               return;
-       default:
-               g_assert_not_reached ();
-               break;
-       }
-
-       g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (gint)task->parts->length);
-       progress_update_display (task);
+    TrackedTask *task = NULL;
+    TrackedPart *part;
+
+    if (!cancellable)
+        return;
+
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    if (g_cancellable_is_cancelled (cancellable))
+        return;
+
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, cancellable);
+    if (task == NULL) {
+        g_warning ("caller is trying to end part for task that does not exist");
+        return;
+    }
+
+    part = tracked_part_find (task, find_part_progress_tag, progress_tag);
+    if (part == NULL) {
+        g_warning ("caller is trying to end part of task that does not exist");
+        return;
+    }
+
+    switch (part->state) {
+    case TASK_PART_PREPPED:
+        g_warning ("caller is trying to end part of task that has not begun");
+        return;
+    case TASK_PART_BEGUN:
+        part->state = TASK_PART_ENDED;
+        task->parts_begun--;
+        task->parts_ended++;
+        break;
+    case TASK_PART_ENDED:
+        g_warning ("caller is trying to end part of task that has already ended");
+        return;
+    default:
+        g_assert_not_reached ();
+        break;
+    }
+
+    g_assert (task->parts_prepped + task->parts_begun + task->parts_ended == (int) task->parts->length);
+    progress_update_display (task);
 }
 
 static int
 on_window_delete_event (GtkWidget *widget,
-                        GdkEvent *event,
-                        gpointer user_data)
+                        GdkEvent  *event,
+                        void      *user_data)
 {
-       TrackedTask *task = NULL;
+    TrackedTask *task = NULL;
 
-       /* Guard against going away before we display */
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, user_data);
-       if (task != NULL)
-               g_cancellable_cancel (task->cancellable);
+    /* Guard against going away before we display */
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, user_data);
+    if (task != NULL)
+        g_cancellable_cancel (task->cancellable);
 
-       return TRUE; /* allow window to close */
+    return TRUE; /* allow window to close */
 }
 
 static void
 on_cancel_button_clicked (GtkButton *button,
-                          gpointer user_data)
+                          void      *user_data)
 {
-       TrackedTask *task = NULL;
+    TrackedTask *task = NULL;
 
-       /* Guard against going away before we display */
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, user_data);
-       if (task != NULL)
-               g_cancellable_cancel (task->cancellable);
+    /* Guard against going away before we display */
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, user_data);
+    if (task != NULL)
+        g_cancellable_cancel (task->cancellable);
 }
 
 static gboolean
-on_timeout_show_progress (gpointer user_data)
+on_timeout_show_progress (void *user_data)
 {
-       TrackedTask *task = NULL;
-       SeahorseWidget *swidget;
-       GtkWidget *widget;
-       GtkWindow *window;
-       gchar *text;
-
-       /* Guard against going away before we display */
-       if (tracked_tasks)
-               task = g_hash_table_lookup (tracked_tasks, user_data);
-       if (task == NULL)
-               return FALSE; /* don't call again */
-
-       swidget = seahorse_widget_new_allow_multiple ("progress", NULL);
-       g_return_val_if_fail (swidget != NULL, FALSE);
-
-       window = GTK_WINDOW (seahorse_widget_get_toplevel (swidget));
-       g_signal_connect (window, "delete_event",
-                         G_CALLBACK (on_window_delete_event), task->cancellable);
-       gtk_window_move (window, 10, 10);
-
-       /* Setup the title */
-       if (task->title) {
-               gtk_window_set_title (window, task->title);
-
-               /* The main message title */
-               widget = seahorse_widget_get_widget (swidget, "progress-title");
-               text = g_strdup_printf ("<b>%s</b>", task->title);
-               gtk_label_set_markup (GTK_LABEL (widget), text);
-               g_free (text);
-       }
-
-       /* Setup the notice */
-       if (task->notice) {
-               widget = seahorse_widget_get_widget (swidget, "progress-notice");
-               gtk_label_set_label (GTK_LABEL (widget), task->notice);
-               gtk_widget_show (widget);
-       }
-
-       /* Setup the cancel button */
-       widget = seahorse_widget_get_widget (swidget, "progress-cancel");
-       g_signal_connect (widget, "clicked", G_CALLBACK (on_cancel_button_clicked),
-                         task->cancellable);
-
-       /* Allow attach to work */
-       task->showing = FALSE;
-       seahorse_progress_attach (task->cancellable, swidget->gtkbuilder);
-       gtk_widget_show (GTK_WIDGET (window));
-       task->swidget = swidget;
-
-       return FALSE; /* don't call again */
+    TrackedTask *task = NULL;
+    g_autoptr(GtkBuilder) builder = NULL;
+    GtkWidget *widget;
+
+    /* Guard against going away before we display */
+    if (tracked_tasks)
+        task = g_hash_table_lookup (tracked_tasks, user_data);
+    if (task == NULL)
+        return G_SOURCE_REMOVE;
+
+    builder = gtk_builder_new_from_resource ("/org/gnome/Seahorse/seahorse-progress.ui");
+
+    task->dialog = GTK_WIDGET (gtk_builder_get_object (builder, "progress"));
+    g_signal_connect (task->dialog, "delete-event",
+                      G_CALLBACK (on_window_delete_event), task->cancellable);
+
+    /* Setup the title */
+    if (task->title) {
+        g_autofree char *text = NULL;
+
+        gtk_window_set_title (GTK_WINDOW (task->dialog), task->title);
+
+        /* The main message title */
+        widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress-title"));
+        text = g_strdup_printf ("<b>%s</b>", task->title);
+        gtk_label_set_markup (GTK_LABEL (widget), text);
+    }
+
+    /* Setup the notice */
+    if (task->notice) {
+        widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress-notice"));
+        gtk_label_set_label (GTK_LABEL (widget), task->notice);
+        gtk_widget_show (widget);
+    }
+
+    /* Setup the cancel button */
+    widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress-cancel"));
+    g_signal_connect (widget, "clicked", G_CALLBACK (on_cancel_button_clicked),
+                      task->cancellable);
+
+    /* Allow attach to work */
+    task->showing = FALSE;
+    seahorse_progress_attach (task->cancellable, builder);
+    gtk_widget_show (task->dialog);
+
+    return G_SOURCE_REMOVE;
 }
 
 void
 seahorse_progress_show (GCancellable *cancellable,
-                        const gchar *title,
-                        gboolean delayed)
+                        const char   *title,
+                        gboolean      delayed)
 {
-       seahorse_progress_show_with_notice (cancellable, title, NULL, delayed);
+    seahorse_progress_show_with_notice (cancellable, title, NULL, delayed);
 }
 
 void
 seahorse_progress_show_with_notice (GCancellable *cancellable,
-                                    const gchar *title,
-                                    const gchar *notice,
-                                    gboolean delayed)
+                                    const char   *title,
+                                    const char   *notice,
+                                    gboolean      delayed)
 {
-       TrackedTask *task;
+    TrackedTask *task;
 
-       g_return_if_fail (title != NULL && title[0] != '\0');
+    g_return_if_fail (title != NULL && title[0] != '\0');
 
-       if (!cancellable)
-               return;
+    if (!cancellable)
+        return;
 
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
 
-       task = progress_lookup_or_create_task (cancellable);
+    task = progress_lookup_or_create_task (cancellable);
 
-       /* Perhaps already cancelled? */
-       if (task == NULL)
-               return;
+    /* Perhaps already cancelled? */
+    if (task == NULL)
+        return;
 
-       if (task->showing) {
-               g_warning ("caller is trying to show progress for a task which already has displayed 
progress");
-               return;
-       }
+    if (task->showing) {
+        g_warning ("caller is trying to show progress for a task which already has displayed progress");
+        return;
+    }
 
-       g_free (task->title);
-       task->title = g_strdup (title);
-       task->notice = g_strdup (notice);
-       task->showing = TRUE;
+    g_free (task->title);
+    task->title = g_strdup (title);
+    task->notice = g_strdup (notice);
+    task->showing = TRUE;
 
-       if (delayed)
-               g_timeout_add_seconds (2, on_timeout_show_progress, cancellable);
-       else
-               on_timeout_show_progress (cancellable);
+    if (delayed)
+        g_timeout_add_seconds (2, on_timeout_show_progress, cancellable);
+    else
+        on_timeout_show_progress (cancellable);
 }
 
 void
 seahorse_progress_attach (GCancellable *cancellable,
                           GtkBuilder *builder)
 {
-       TrackedTask *task;
+    TrackedTask *task;
 
-       if (!cancellable)
-               return;
+    if (!cancellable)
+        return;
 
-       g_return_if_fail (G_IS_CANCELLABLE (cancellable));
+    g_return_if_fail (G_IS_CANCELLABLE (cancellable));
 
-       task = progress_lookup_or_create_task (cancellable);
+    task = progress_lookup_or_create_task (cancellable);
 
-       /* Perhaps already cancelled? */
-       if (task == NULL)
-               return;
+    /* Perhaps already cancelled? */
+    if (task == NULL)
+        return;
 
-       if (task->showing) {
-               g_warning ("caller is trying to show progress for a task which already has displayed 
progress");
-               return;
-       }
+    if (task->showing) {
+        g_warning ("caller is trying to show progress for a task which already has displayed progress");
+        return;
+    }
 
-       task->showing = TRUE;
-       task->builder = g_object_ref (builder);
+    task->showing = TRUE;
+    task->builder = g_object_ref (builder);
 
-       progress_update_display (task);
+    progress_update_display (task);
 }


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