summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2021-02-12 14:30:58 +1300
committerRobert Ancell <robert.ancell@canonical.com>2021-02-15 10:34:32 +1300
commit005b18f2f16924676fbecd77222386fbcb32abb8 (patch)
tree1adb733b8a506343db62dbc7ab48c0b3c586fbd1
parenta165c04061c7af0b111de87b0fe33ae786e33ec7 (diff)
downloadgnome-control-center-005b18f2f16924676fbecd77222386fbcb32abb8.tar.gz
printers: Make helper functions for callback data
-rw-r--r--panels/printers/pp-utils.c497
1 files 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)
{
@@ -2381,27 +2430,16 @@ get_all_ppds_idle_cb (gpointer user_data)
}
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 *