[gnome-control-center] printers: Make helper functions for callback data



commit 005b18f2f16924676fbecd77222386fbcb32abb8
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Feb 12 14:30:58 2021 +1300

    printers: Make helper functions for callback data

 panels/printers/pp-utils.c | 497 ++++++++++++++++++++++++++-------------------
 1 file changed, 286 insertions(+), 211 deletions(-)
---
diff --git a/panels/printers/pp-utils.c b/panels/printers/pp-utils.c
index 8dc86f057..4ec4af325 100644
--- a/panels/printers/pp-utils.c
+++ b/panels/printers/pp-utils.c
@@ -1179,40 +1179,53 @@ typedef struct
   GMainContext *context;
 } GIAData;
 
-static gboolean
-get_ipp_attributes_idle_cb (gpointer user_data)
+static GIAData *
+gia_data_new (const gchar *printer_name, gchar **attributes_names, GIACallback callback, gpointer user_data)
 {
-  GIAData *data = (GIAData *) user_data;
+  GIAData *data;
 
-  data->callback (data->result, data->user_data);
+  data = g_new0 (GIAData, 1);
+  data->printer_name = g_strdup (printer_name);
+  data->attributes_names = g_strdupv (attributes_names);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->context = g_main_context_ref_thread_default ();
 
-  return FALSE;
+  return data;
 }
 
 static void
-get_ipp_attributes_data_free (gpointer user_data)
+gia_data_free (GIAData *data)
 {
-  GIAData *data = (GIAData *) user_data;
-
-  if (data->context)
-    g_main_context_unref (data->context);
   g_free (data->printer_name);
   if (data->attributes_names)
     g_strfreev (data->attributes_names);
+  if (data->context)
+    g_main_context_unref (data->context);
   g_free (data);
 }
 
+static gboolean
+get_ipp_attributes_idle_cb (gpointer user_data)
+{
+  GIAData *data = (GIAData *) user_data;
+
+  data->callback (data->result, data->user_data);
+
+  return FALSE;
+}
+
 static void
 get_ipp_attributes_cb (gpointer user_data)
 {
-  GIAData *data = (GIAData *) user_data;
+  GIAData *data = user_data;
   GSource *idle_source;
 
   idle_source = g_idle_source_new ();
   g_source_set_callback (idle_source,
                          get_ipp_attributes_idle_cb,
                          data,
-                         get_ipp_attributes_data_free);
+                         (GDestroyNotify) gia_data_free);
   g_source_attach (idle_source, data->context);
   g_source_unref (idle_source);
 }
@@ -1228,7 +1241,7 @@ static gpointer
 get_ipp_attributes_func (gpointer user_data)
 {
   ipp_attribute_t  *attr = NULL;
-  GIAData          *data = (GIAData *) user_data;
+  GIAData          *data = user_data;
   ipp_t            *request;
   ipp_t            *response = NULL;
   g_autofree gchar *printer_uri = NULL;
@@ -1338,12 +1351,7 @@ get_ipp_attributes_async (const gchar  *printer_name,
   g_autoptr(GThread) thread = NULL;
   g_autoptr(GError) error = NULL;
 
-  data = g_new0 (GIAData, 1);
-  data->printer_name = g_strdup (printer_name);
-  data->attributes_names = g_strdupv (attributes_names);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->context = g_main_context_ref_thread_default ();
+  data = gia_data_new (printer_name, attributes_names, callback, user_data);
 
   thread = g_thread_try_new ("get-ipp-attributes",
                              get_ipp_attributes_func,
@@ -1355,7 +1363,7 @@ get_ipp_attributes_async (const gchar  *printer_name,
       g_warning ("%s", error->message);
       callback (NULL, user_data);
 
-      get_ipp_attributes_data_free (data);
+      gia_data_free (data);
     }
 }
 
@@ -1399,8 +1407,6 @@ ipp_attribute_free (IPPAttribute *attr)
     }
 }
 
-
-
 typedef struct
 {
   gchar        *printer_name;
@@ -1410,6 +1416,30 @@ typedef struct
   gpointer      user_data;
 } PSPData;
 
+static PSPData *
+psp_data_new (const gchar *printer_name, const gchar *ppd_copy, GCancellable *cancellable, PSPCallback 
callback, gpointer user_data)
+{
+  PSPData *data;
+
+  data = g_new0 (PSPData, 1);
+  data->printer_name = g_strdup (printer_name);
+  data->ppd_copy = g_strdup (ppd_copy);
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+  return data;
+}
+
+static void
+psp_data_free (PSPData *data)
+{
+  g_free (data->printer_name);
+  g_free (data->ppd_copy);
+  g_clear_object (&data->cancellable);
+  g_free (data);
+}
+
 static void
 printer_set_ppd_async_dbus_cb (GObject      *source_object,
                                GAsyncResult *res,
@@ -1417,7 +1447,7 @@ printer_set_ppd_async_dbus_cb (GObject      *source_object,
 {
   g_autoptr(GVariant) output = NULL;
   gboolean            result = FALSE;
-  PSPData            *data = (PSPData *) user_data;
+  PSPData            *data = user_data;
   g_autoptr(GError)   error = NULL;
 
   output = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
@@ -1447,16 +1477,13 @@ printer_set_ppd_async_dbus_cb (GObject      *source_object,
                     result,
                     data->user_data);
 
-  g_clear_object (&data->cancellable);
-
   if (data->ppd_copy)
     {
       g_unlink (data->ppd_copy);
       g_free (data->ppd_copy);
     }
 
-  g_free (data->printer_name);
-  g_free (data);
+  psp_data_free (data);
 }
 
 /*
@@ -1471,16 +1498,8 @@ printer_set_ppd_async (const gchar  *printer_name,
                        gpointer      user_data)
 {
   g_autoptr(GDBusConnection) bus = NULL;
-  PSPData          *data;
   g_autoptr(GError) error = NULL;
 
-  data = g_new0 (PSPData, 1);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->printer_name = g_strdup (printer_name);
-
   if (printer_name == NULL ||
       printer_name[0] == '\0')
     {
@@ -1508,18 +1527,14 @@ printer_set_ppd_async (const gchar  *printer_name,
                           G_VARIANT_TYPE ("(s)"),
                           G_DBUS_CALL_FLAGS_NONE,
                           -1,
-                          data->cancellable,
+                          cancellable,
                           printer_set_ppd_async_dbus_cb,
-                          data);
+                          psp_data_new (printer_name, NULL, cancellable, callback, user_data));
 
   return;
 
 out:
   callback (printer_name, FALSE, user_data);
-
-  g_clear_object (&data->cancellable);
-  g_free (data->printer_name);
-  g_free (data);
 }
 
 static void
@@ -1529,7 +1544,7 @@ printer_set_ppd_file_async_scb (GObject      *source_object,
 {
   g_autoptr(GDBusConnection) bus = NULL;
   gboolean          success;
-  PSPData          *data = (PSPData *) user_data;
+  PSPData          *data = user_data;
   g_autoptr(GError) error = NULL;
 
   success = g_file_copy_finish (G_FILE (source_object),
@@ -1572,10 +1587,7 @@ printer_set_ppd_file_async_scb (GObject      *source_object,
 out:
   data->callback (data->printer_name, FALSE, data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data->printer_name);
-  g_free (data->ppd_copy);
-  g_free (data);
+  psp_data_free (data);
 }
 
 /*
@@ -1590,17 +1602,9 @@ printer_set_ppd_file_async (const gchar  *printer_name,
                             gpointer      user_data)
 {
   g_autoptr(GFileIOStream) stream = NULL;
-  PSPData       *data;
   g_autoptr(GFile) source_ppd_file = NULL;
   g_autoptr(GFile) destination_ppd_file = NULL;
 
-  data = g_new0 (PSPData, 1);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->printer_name = g_strdup (printer_name);
-
   if (printer_name == NULL ||
       printer_name[0] == '\0')
     {
@@ -1613,7 +1617,6 @@ printer_set_ppd_file_async (const gchar  *printer_name,
    */
   source_ppd_file = g_file_new_for_path (ppd_filename);
   destination_ppd_file = g_file_new_tmp ("g-c-c-XXXXXX.ppd", &stream, NULL);
-  data->ppd_copy = g_strdup (g_file_get_path (destination_ppd_file));
 
   g_file_copy_async (source_ppd_file,
                      destination_ppd_file,
@@ -1623,16 +1626,12 @@ printer_set_ppd_file_async (const gchar  *printer_name,
                      NULL,
                      NULL,
                      printer_set_ppd_file_async_scb,
-                     data);
+                     psp_data_new (printer_name, g_file_get_path (destination_ppd_file), cancellable, 
callback, user_data));
 
   return;
 
 out:
   callback (printer_name, FALSE, user_data);
-
-  g_clear_object (&data->cancellable);
-  g_free (data->printer_name);
-  g_free (data);
 }
 
 
@@ -1650,28 +1649,41 @@ typedef struct
   GMainContext  *context;
 } GPAData;
 
-static gboolean
-get_ppds_attribute_idle_cb (gpointer user_data)
+static GPAData *
+gpa_data_new (gchar **ppds_names, gchar *attribute_name, GPACallback callback, gpointer user_data)
 {
-  GPAData *data = (GPAData *) user_data;
+  GPAData *data;
 
-  data->callback (data->result, data->user_data);
+  data = g_new0 (GPAData, 1);
+  data->ppds_names = g_strdupv (ppds_names);
+  data->attribute_name = g_strdup (attribute_name);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->context = g_main_context_ref_thread_default ();
 
-  return FALSE;
+  return data;
 }
 
 static void
-get_ppds_attribute_data_free (gpointer user_data)
+gpa_data_free (GPAData *data)
 {
-  GPAData *data = (GPAData *) user_data;
-
-  if (data->context)
-    g_main_context_unref (data->context);
   g_free (data->attribute_name);
   g_strfreev (data->ppds_names);
+  if (data->context)
+    g_main_context_unref (data->context);
   g_free (data);
 }
 
+static gboolean
+get_ppds_attribute_idle_cb (gpointer user_data)
+{
+  GPAData *data = (GPAData *) user_data;
+
+  data->callback (data->result, data->user_data);
+
+  return FALSE;
+}
+
 static void
 get_ppds_attribute_cb (gpointer user_data)
 {
@@ -1682,7 +1694,7 @@ get_ppds_attribute_cb (gpointer user_data)
   g_source_set_callback (idle_source,
                          get_ppds_attribute_idle_cb,
                          data,
-                         get_ppds_attribute_data_free);
+                         (GDestroyNotify) gpa_data_free);
   g_source_attach (idle_source, data->context);
   g_source_unref (idle_source);
 }
@@ -1692,7 +1704,7 @@ get_ppds_attribute_func (gpointer user_data)
 {
   ppd_file_t  *ppd_file;
   ppd_attr_t  *ppd_attr;
-  GPAData     *data = (GPAData *) user_data;
+  GPAData     *data = user_data;
   gint         i;
 
   data->result = g_new0 (gchar *, g_strv_length (data->ppds_names) + 1);
@@ -1739,12 +1751,7 @@ get_ppds_attribute_async (gchar       **ppds_names,
       return;
     }
 
-  data = g_new0 (GPAData, 1);
-  data->ppds_names = g_strdupv (ppds_names);
-  data->attribute_name = g_strdup (attribute_name);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->context = g_main_context_ref_thread_default ();
+  data = gpa_data_new (ppds_names, attribute_name, callback, user_data);
 
   thread = g_thread_try_new ("get-ppds-attribute",
                              get_ppds_attribute_func,
@@ -1756,7 +1763,7 @@ get_ppds_attribute_async (gchar       **ppds_names,
       g_warning ("%s", error->message);
       callback (NULL, user_data);
 
-      get_ppds_attribute_data_free (data);
+      gpa_data_free (data);
     }
 }
 
@@ -1777,6 +1784,30 @@ typedef struct
   gpointer      user_data;
 } GDAData;
 
+static GDAData *
+gda_data_new (const gchar *printer_name, GCancellable *cancellable, GDACallback callback, gpointer user_data)
+{
+  GDAData *data;
+
+  data = g_new0 (GDAData, 1);
+  data->printer_name = g_strdup (printer_name);
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+
+  return data;
+}
+
+static void
+gda_data_free (GDAData *data)
+{
+  g_free (data->printer_name);
+  g_free (data->device_uri);
+  g_clear_object (&data->cancellable);
+  g_free (data);
+}
+
 typedef struct
 {
   gchar         *printer_name;
@@ -1787,11 +1818,35 @@ typedef struct
   gpointer       user_data;
 } GPNData;
 
+static GPNData *
+gpn_data_new (const gchar *printer_name, gint count, GCancellable *cancellable, GPNCallback callback, 
gpointer user_data)
+{
+  GPNData *data;
+
+  data = g_new0 (GPNData, 1);
+  data->printer_name = g_strdup (printer_name);
+  data->count = count;
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+
+  return data;
+}
+
+static void
+gpn_data_free (GPNData *data)
+{
+  g_free (data->printer_name);
+  g_clear_object (&data->cancellable);
+  g_free (data);
+}
+
 static void
 get_ppd_names_async_cb (gchar    **attribute_values,
                         gpointer   user_data)
 {
-  GPNData *data = (GPNData *) user_data;
+  GPNData *data = user_data;
   gint     i;
 
   if (g_cancellable_is_cancelled (data->cancellable))
@@ -1824,9 +1879,7 @@ out:
                   g_cancellable_is_cancelled (data->cancellable),
                   data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data->printer_name);
-  g_free (data);
+  gpn_data_free (data);
 }
 
 static void
@@ -1837,7 +1890,7 @@ get_ppd_names_async_dbus_scb (GObject      *source_object,
   g_autoptr(GVariant) output = NULL;
   PPDName            *ppd_item;
   PPDName           **result = NULL;
-  GPNData            *data = (GPNData *) user_data;
+  GPNData            *data = user_data;
   g_autoptr(GError)   error = NULL;
   GList              *driver_list = NULL;
   GList              *iter;
@@ -1935,9 +1988,7 @@ get_ppd_names_async_dbus_scb (GObject      *source_object,
                       g_cancellable_is_cancelled (data->cancellable),
                       data->user_data);
 
-      g_clear_object (&data->cancellable);
-      g_free (data->printer_name);
-      g_free (data);
+      gpn_data_free (data);
     }
 }
 
@@ -1988,9 +2039,7 @@ out:
                   g_cancellable_is_cancelled (data->cancellable),
                   data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data->printer_name);
-  g_free (data);
+  gpn_data_free (data);
 }
 
 /*
@@ -2054,7 +2103,7 @@ get_device_attributes_async_dbus_cb (GObject      *source_object,
 
 {
   g_autoptr(GVariant) output = NULL;
-  GDAData            *data = (GDAData *) user_data;
+  GDAData            *data = user_data;
   g_autoptr(GError)   error = NULL;
   GList              *tmp;
   gchar              *device_id = NULL;
@@ -2181,7 +2230,7 @@ get_device_attributes_async_dbus_cb (GObject      *source_object,
                                   DBUS_TIMEOUT,
                                   data->cancellable,
                                   get_device_attributes_async_dbus_cb,
-                                  user_data);
+                                  data);
 
           if (include_scheme_builder)
             g_variant_builder_unref (include_scheme_builder);
@@ -2204,10 +2253,7 @@ get_device_attributes_async_dbus_cb (GObject      *source_object,
                   data->device_uri,
                   data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data->device_uri);
-  g_free (data->printer_name);
-  g_free (data);
+  gda_data_free (data);
 }
 
 static void
@@ -2217,7 +2263,7 @@ get_device_attributes_async_scb (GHashTable *result,
   g_autoptr(GDBusConnection) bus = NULL;
   GVariantBuilder   include_scheme_builder;
   IPPAttribute     *attr;
-  GDAData          *data = (GDAData *) user_data;
+  GDAData          *data = user_data;
   g_autoptr(GError) error = NULL;
   GList            *tmp;
 
@@ -2274,10 +2320,7 @@ get_device_attributes_async_scb (GHashTable *result,
 out:
   data->callback (NULL, NULL, NULL, data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data->device_uri);
-  g_free (data->printer_name);
-  g_free (data);
+  gda_data_free (data);
 }
 
 /*
@@ -2289,7 +2332,6 @@ get_device_attributes_async (const gchar  *printer_name,
                              GDACallback   callback,
                              gpointer      user_data)
 {
-  GDAData  *data;
   gchar   **attributes;
 
   if (!printer_name)
@@ -2298,20 +2340,13 @@ get_device_attributes_async (const gchar  *printer_name,
      return;
    }
 
-  data = g_new0 (GDAData, 1);
-  data->printer_name = g_strdup (printer_name);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-
   attributes = g_new0 (gchar *, 2);
   attributes[0] = g_strdup ("device-uri");
 
   get_ipp_attributes_async (printer_name,
                             attributes,
                             get_device_attributes_async_scb,
-                            data);
+                            gda_data_new (printer_name, cancellable, callback, user_data));
 
   g_strfreev (attributes);
 }
@@ -2326,29 +2361,19 @@ get_ppd_names_async (gchar        *printer_name,
                      GPNCallback   callback,
                      gpointer      user_data)
 {
-  GPNData *data;
-
   if (!printer_name)
     {
       callback (NULL, NULL, TRUE, user_data);
       return;
     }
 
-  data = g_new0 (GPNData, 1);
-  data->printer_name = g_strdup (printer_name);
-  data->count = count;
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-
   /*
    * We have to find out device-id for this printer at first.
    */
   get_device_attributes_async (printer_name,
                                cancellable,
                                get_device_attributes_cb,
-                               data);
+                               gpn_data_new (printer_name, count, cancellable, callback, user_data));
 }
 
 typedef struct
@@ -2360,6 +2385,30 @@ typedef struct
   GMainContext *context;
 } GAPData;
 
+static GAPData *
+gap_data_new (GCancellable *cancellable, GAPCallback callback, gpointer user_data)
+{
+  GAPData *data;
+
+  data = g_new0 (GAPData, 1);
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->context = g_main_context_ref_thread_default ();
+
+  return data;
+}
+
+static void
+gap_data_free (GAPData *data)
+{
+  g_clear_object (&data->cancellable);
+  if (data->context)
+    g_main_context_unref (data->context);
+  g_free (data);
+}
+
 static gboolean
 get_all_ppds_idle_cb (gpointer user_data)
 {
@@ -2380,28 +2429,17 @@ get_all_ppds_idle_cb (gpointer user_data)
   return FALSE;
 }
 
-static void
-get_all_ppds_data_free (gpointer user_data)
-{
-  GAPData *data = (GAPData *) user_data;
-
-  if (data->context)
-    g_main_context_unref (data->context);
-  g_clear_object (&data->cancellable);
-  g_free (data);
-}
-
 static void
 get_all_ppds_cb (gpointer user_data)
 {
-  GAPData *data = (GAPData *) user_data;
+  GAPData *data = user_data;
   GSource *idle_source;
 
   idle_source = g_idle_source_new ();
   g_source_set_callback (idle_source,
                          get_all_ppds_idle_cb,
                          data,
-                         get_all_ppds_data_free);
+                         (GDestroyNotify) gap_data_free);
   g_source_attach (idle_source, data->context);
   g_source_unref (idle_source);
 }
@@ -2488,7 +2526,7 @@ get_all_ppds_func (gpointer user_data)
   ipp_attribute_t *attr;
   GHashTable      *ppds_hash = NULL;
   GHashTable      *manufacturers_hash = NULL;
-  GAPData         *data = (GAPData *) user_data;
+  GAPData         *data = user_data;
   PPDName         *item;
   ipp_t           *request;
   ipp_t           *response;
@@ -2713,12 +2751,7 @@ get_all_ppds_async (GCancellable *cancellable,
   g_autoptr(GThread) thread = NULL;
   g_autoptr(GError)  error = NULL;
 
-  data = g_new0 (GAPData, 1);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->context = g_main_context_ref_thread_default ();
+  data = gap_data_new (cancellable, callback, user_data);
 
   thread = g_thread_try_new ("get-all-ppds",
                              get_all_ppds_func,
@@ -2730,7 +2763,7 @@ get_all_ppds_async (GCancellable *cancellable,
       g_warning ("%s", error->message);
       callback (NULL, user_data);
 
-      get_all_ppds_data_free (data);
+      gap_data_free (data);
     }
 }
 
@@ -2837,40 +2870,54 @@ typedef struct
   GMainContext *context;
 } PGPData;
 
-static gboolean
-printer_get_ppd_idle_cb (gpointer user_data)
+static PGPData *
+pgp_data_new (const gchar *printer_name, const gchar *host_name, gint port, PGPCallback callback, gpointer 
user_data)
 {
-  PGPData *data = (PGPData *) user_data;
+  PGPData *data;
 
-  data->callback (data->result, data->user_data);
+  data = g_new0 (PGPData, 1);
+  data->printer_name = g_strdup (printer_name);
+  data->host_name = g_strdup (host_name);
+  data->port = port;
+  data->callback = callback;
+  data->user_data = user_data;
+  data->context = g_main_context_ref_thread_default ();
 
-  return FALSE;
+  return data;
 }
 
 static void
-printer_get_ppd_data_free (gpointer user_data)
+pgp_data_free (PGPData *data)
 {
-  PGPData *data = (PGPData *) user_data;
-
-  if (data->context)
-    g_main_context_unref (data->context);
-  g_free (data->result);
   g_free (data->printer_name);
   g_free (data->host_name);
+  g_free (data->result);
+  if (data->context)
+    g_main_context_unref (data->context);
   g_free (data);
 }
 
+static gboolean
+printer_get_ppd_idle_cb (gpointer user_data)
+{
+  PGPData *data = user_data;
+
+  data->callback (data->result, data->user_data);
+
+  return FALSE;
+}
+
 static void
 printer_get_ppd_cb (gpointer user_data)
 {
-  PGPData *data = (PGPData *) user_data;
+  PGPData *data = user_data;
   GSource *idle_source;
 
   idle_source = g_idle_source_new ();
   g_source_set_callback (idle_source,
                          printer_get_ppd_idle_cb,
                          data,
-                         printer_get_ppd_data_free);
+                         (GDestroyNotify) pgp_data_free);
   g_source_attach (idle_source, data->context);
   g_source_unref (idle_source);
 }
@@ -2878,7 +2925,7 @@ printer_get_ppd_cb (gpointer user_data)
 static gpointer
 printer_get_ppd_func (gpointer user_data)
 {
-  PGPData *data = (PGPData *) user_data;
+  PGPData *data = user_data;
 
   if (data->host_name)
     {
@@ -2917,13 +2964,7 @@ printer_get_ppd_async (const gchar *printer_name,
   g_autoptr(GThread) thread = NULL;
   g_autoptr(GError) error = NULL;
 
-  data = g_new0 (PGPData, 1);
-  data->printer_name = g_strdup (printer_name);
-  data->host_name = g_strdup (host_name);
-  data->port = port;
-  data->callback = callback;
-  data->user_data = user_data;
-  data->context = g_main_context_ref_thread_default ();
+  data = pgp_data_new (printer_name, host_name, port, callback, user_data);
 
   thread = g_thread_try_new ("printer-get-ppd",
                              printer_get_ppd_func,
@@ -2935,7 +2976,7 @@ printer_get_ppd_async (const gchar *printer_name,
       g_warning ("%s", error->message);
       callback (NULL, user_data);
 
-      printer_get_ppd_data_free (data);
+      pgp_data_free (data);
     }
 }
 
@@ -2948,38 +2989,50 @@ typedef struct
   GMainContext *context;
 } GNDData;
 
-static gboolean
-get_named_dest_idle_cb (gpointer user_data)
+static GNDData *
+gnd_data_new (const gchar *printer_name, GNDCallback callback, gpointer user_data)
 {
-  GNDData *data = (GNDData *) user_data;
+  GNDData *data;
 
-  data->callback (data->result, data->user_data);
+  data = g_new0 (GNDData, 1);
+  data->printer_name = g_strdup (printer_name);
+  data->callback = callback;
+  data->user_data = user_data;
+  data->context = g_main_context_ref_thread_default ();
 
-  return FALSE;
+  return data;
 }
 
 static void
-get_named_dest_data_free (gpointer user_data)
+gnd_data_free (GNDData *data)
 {
-  GNDData *data = (GNDData *) user_data;
-
+  g_free (data->printer_name);
   if (data->context)
     g_main_context_unref (data->context);
-  g_free (data->printer_name);
   g_free (data);
 }
 
+static gboolean
+get_named_dest_idle_cb (gpointer user_data)
+{
+  GNDData *data = user_data;
+
+  data->callback (data->result, data->user_data);
+
+  return FALSE;
+}
+
 static void
 get_named_dest_cb (gpointer user_data)
 {
-  GNDData *data = (GNDData *) user_data;
+  GNDData *data = user_data;
   GSource *idle_source;
 
   idle_source = g_idle_source_new ();
   g_source_set_callback (idle_source,
                          get_named_dest_idle_cb,
                          data,
-                         get_named_dest_data_free);
+                         (GDestroyNotify) gnd_data_free);
   g_source_attach (idle_source, data->context);
   g_source_unref (idle_source);
 }
@@ -2987,7 +3040,7 @@ get_named_dest_cb (gpointer user_data)
 static gpointer
 get_named_dest_func (gpointer user_data)
 {
-  GNDData *data = (GNDData *) user_data;
+  GNDData *data = user_data;
 
   data->result = cupsGetNamedDest (CUPS_HTTP_DEFAULT, data->printer_name, NULL);
 
@@ -3005,11 +3058,7 @@ get_named_dest_async (const gchar *printer_name,
   g_autoptr(GThread) thread = NULL;
   g_autoptr(GError) error = NULL;
 
-  data = g_new0 (GNDData, 1);
-  data->printer_name = g_strdup (printer_name);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->context = g_main_context_ref_thread_default ();
+  data = gnd_data_new (printer_name, callback, user_data);
 
   thread = g_thread_try_new ("get-named-dest",
                              get_named_dest_func,
@@ -3021,7 +3070,7 @@ get_named_dest_async (const gchar *printer_name,
       g_warning ("%s", error->message);
       callback (NULL, user_data);
 
-      get_named_dest_data_free (data);
+      gnd_data_free (data);
     }
 }
 
@@ -3032,6 +3081,26 @@ typedef struct
   gpointer      user_data;
 } PAOData;
 
+static PAOData *
+pao_data_new (GCancellable *cancellable, PAOCallback callback, gpointer user_data)
+{
+  PAOData *data;
+
+  data = g_new0 (PAOData, 1);
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+  return data;
+}
+
+static void
+pao_data_free (PAOData *data)
+{
+  g_clear_object (&data->cancellable);
+  g_free (data);
+}
+
 static void
 printer_add_option_async_dbus_cb (GObject      *source_object,
                                   GAsyncResult *res,
@@ -3039,7 +3108,7 @@ printer_add_option_async_dbus_cb (GObject      *source_object,
 {
   g_autoptr(GVariant) output = NULL;
   gboolean            success = FALSE;
-  PAOData            *data = (PAOData *) user_data;
+  PAOData            *data = user_data;
   g_autoptr(GError)   error = NULL;
 
   output = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object),
@@ -3065,8 +3134,7 @@ printer_add_option_async_dbus_cb (GObject      *source_object,
   if (!g_cancellable_is_cancelled (data->cancellable))
     data->callback (success, data->user_data);
 
-  g_clear_object (&data->cancellable);
-  g_free (data);
+  pao_data_free (data);
 }
 
 void
@@ -3080,7 +3148,6 @@ printer_add_option_async (const gchar   *printer_name,
 {
   GVariantBuilder   array_builder;
   g_autoptr(GDBusConnection) bus = NULL;
-  PAOData          *data;
   g_autoptr(GError) error = NULL;
   gint              i;
 
@@ -3099,12 +3166,6 @@ printer_add_option_async (const gchar   *printer_name,
         g_variant_builder_add (&array_builder, "s", values[i]);
     }
 
-  data = g_new0 (PAOData, 1);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-
   g_dbus_connection_call (bus,
                           MECHANISM_BUS,
                           "/",
@@ -3120,7 +3181,7 @@ printer_add_option_async (const gchar   *printer_name,
                           DBUS_TIMEOUT,
                           cancellable,
                           printer_add_option_async_dbus_cb,
-                          data);
+                          pao_data_new (cancellable, callback, user_data));
 }
 
 typedef struct
@@ -3131,6 +3192,29 @@ typedef struct
   GList        *backend_list;
 } GCDData;
 
+static GCDData *
+gcd_data_new (GList *backend_list, GCancellable *cancellable, GCDCallback callback, gpointer user_data)
+{
+  GCDData *data;
+
+  data = g_new0 (GCDData, 1);
+  data->backend_list = backend_list;
+  if (cancellable)
+    data->cancellable = g_object_ref (cancellable);
+  data->callback = callback;
+  data->user_data = user_data;
+
+  return data;
+}
+
+static void
+gcd_data_free (GCDData *data)
+{
+  g_list_free_full (data->backend_list, g_free);
+  g_clear_object (&data->cancellable);
+  g_free (data);
+}
+
 static gint
 get_suffix_index (const gchar *string)
 {
@@ -3158,7 +3242,7 @@ get_cups_devices_async_dbus_cb (GObject      *source_object,
 {
   g_autoptr(GPtrArray) devices = NULL;
   g_autoptr(GVariant) output = NULL;
-  GCDData            *data = (GCDData *) user_data;
+  GCDData            *data = user_data;
   g_autoptr(GError)   error = NULL;
   gint                num_of_devices = 0;
 
@@ -3246,10 +3330,7 @@ get_cups_devices_async_dbus_cb (GObject      *source_object,
                       g_cancellable_is_cancelled (data->cancellable),
                       data->user_data);
 
-      g_list_free_full (data->backend_list, g_free);
-      data->backend_list = NULL;
-      g_clear_object (&data->cancellable);
-      g_free (data);
+      gcd_data_free (data);
 
       return;
     }
@@ -3296,7 +3377,7 @@ get_cups_devices_async_dbus_cb (GObject      *source_object,
                                   DBUS_TIMEOUT,
                                   data->cancellable,
                                   get_cups_devices_async_dbus_cb,
-                                  user_data);
+                                  data);
 
           if (include_scheme_builder)
             g_variant_builder_unref (include_scheme_builder);
@@ -3325,8 +3406,7 @@ get_cups_devices_async_dbus_cb (GObject      *source_object,
                       data->user_data);
     }
 
-  g_clear_object (&data->cancellable);
-  g_free (data);
+  gcd_data_free (data);
 }
 
 void
@@ -3336,7 +3416,7 @@ get_cups_devices_async (GCancellable *cancellable,
 {
   g_autoptr(GDBusConnection) bus = NULL;
   GVariantBuilder   include_scheme_builder;
-  GCDData          *data;
+  GList *backend_list;
   g_autoptr(GError) error = NULL;
   g_autofree gchar *backend_name = NULL;
 
@@ -3348,19 +3428,14 @@ get_cups_devices_async (GCancellable *cancellable,
      return;
    }
 
-  data = g_new0 (GCDData, 1);
-  if (cancellable)
-    data->cancellable = g_object_ref (cancellable);
-  data->callback = callback;
-  data->user_data = user_data;
-  data->backend_list = create_backends_list ();
+  backend_list = create_backends_list ();
 
-  backend_name = data->backend_list->data;
+  backend_name = backend_list->data;
 
   g_variant_builder_init (&include_scheme_builder, G_VARIANT_TYPE ("as"));
   g_variant_builder_add (&include_scheme_builder, "s", backend_name);
 
-  data->backend_list = g_list_remove_link (data->backend_list, data->backend_list);
+  backend_list = g_list_remove_link (backend_list, backend_list);
 
   g_dbus_connection_call (bus,
                           MECHANISM_BUS,
@@ -3377,7 +3452,7 @@ get_cups_devices_async (GCancellable *cancellable,
                           DBUS_TIMEOUT,
                           cancellable,
                           get_cups_devices_async_dbus_cb,
-                          data);
+                          gcd_data_new (backend_list, cancellable, callback, user_data));
 }
 
 gchar *


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