diff --git a/cups-pk-helper-jobcancelpurge.patch b/cups-pk-helper-jobcancelpurge.patch
new file mode 100644
index 0000000..40b38ce
--- /dev/null
+++ b/cups-pk-helper-jobcancelpurge.patch
@@ -0,0 +1,113 @@
+--- cups-pk-helper-0.0.4/src/cups.c 2010-03-22 15:41:36.000000000 +0100
++++ cups-pk-helper-0.0.4/src/cups.c 2010-03-22 15:41:36.000000000 +0100
+@@ -1726,8 +1726,11 @@ cph_cups_server_set_settings (CphCups
+ gboolean
+ cph_cups_job_cancel (CphCups *cups,
+ int job_id,
++ gboolean purge_job,
+ const char *user_name)
+ {
++ ipp_t *request;
++
+ g_return_val_if_fail (CPH_IS_CUPS (cups), FALSE);
+
+ if (!_cph_cups_is_job_id_valid (cups, job_id))
+@@ -1735,10 +1738,19 @@ cph_cups_job_cancel (CphCups *cups,
+ /* we don't check if the user name is valid or not because it comes
+ * from getpwuid(), and not dbus */
+
+- return _cph_cups_send_new_simple_job_request (cups, IPP_CANCEL_JOB,
+- job_id,
+- user_name,
+- CPH_RESOURCE_JOBS);
++ request = ippNewRequest (IPP_CANCEL_JOB);
++ _cph_cups_add_job_uri (request, job_id);
++
++ if (user_name != NULL)
++ ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME,
++ "requesting-user-name", NULL, user_name);
++
++#if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 4) || CUPS_VERSION_MAJOR > 1
++ if (purge_job)
++ ippAddBoolean (request, IPP_TAG_OPERATION, "purge-job", 1);
++#endif
++
++ return _cph_cups_send_request (cups, request, CPH_RESOURCE_JOBS);
+ }
+
+ gboolean
+--- cups-pk-helper-0.0.4/src/cups.h 2010-03-22 15:41:36.000000000 +0100
++++ cups-pk-helper-0.0.4/src/cups.h 2010-03-22 15:41:36.000000000 +0100
+@@ -169,6 +169,7 @@ gboolean cph_cups_is_printer_uri_local (
+
+ gboolean cph_cups_job_cancel (CphCups *cups,
+ int job_id,
++ gboolean purge_job,
+ const char *user_name);
+
+ gboolean cph_cups_job_restart (CphCups *cups,
+--- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2010-03-22 15:41:36.000000000 +0100
++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2010-03-22 15:43:33.000000000 +0100
+@@ -988,6 +988,15 @@ cph_mechanism_job_cancel (CphMechanism
+ int id,
+ DBusGMethodInvocation *context)
+ {
++ return cph_mechanism_job_cancel_purge (mechanism, id, FALSE, context);
++}
++
++gboolean
++cph_mechanism_job_cancel_purge (CphMechanism *mechanism,
++ int id,
++ gboolean purge,
++ DBusGMethodInvocation *context)
++{
+ CphJobStatus job_status;
+ gboolean ret;
+ char *user_name;
+@@ -1023,7 +1032,7 @@ cph_mechanism_job_cancel (CphMechanism
+ }
+ }
+
+- ret = cph_cups_job_cancel (mechanism->priv->cups, id, user_name);
++ ret = cph_cups_job_cancel (mechanism->priv->cups, id, purge, user_name);
+ _cph_mechanism_return_error (mechanism, context, !ret);
+
+ g_free (user_name);
+--- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2010-03-22 15:41:36.000000000 +0100
++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2010-03-22 15:41:36.000000000 +0100
+@@ -226,6 +226,12 @@ cph_mechanism_job_cancel (CphMechanism
+ DBusGMethodInvocation *context);
+
+ gboolean
++cph_mechanism_job_cancel_purge (CphMechanism *mechanism,
++ int id,
++ gboolean purge,
++ DBusGMethodInvocation *context);
++
++gboolean
+ cph_mechanism_job_restart (CphMechanism *mechanism,
+ int id,
+ DBusGMethodInvocation *context);
+--- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2010-03-22 15:41:36.000000000 +0100
++++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2010-03-22 15:44:36.000000000 +0100
+@@ -174,12 +174,20 @@
+
+
+
++
+
+
+
+
+
+
++
++
++
++
++
++
++
+
+
+
diff --git a/cups-pk-helper.spec b/cups-pk-helper.spec
index 78e1f38..c0a713c 100644
--- a/cups-pk-helper.spec
+++ b/cups-pk-helper.spec
@@ -1,6 +1,6 @@
Name: cups-pk-helper
Version: 0.0.4
-Release: 12%{?dist}
+Release: 13%{?dist}
Summary: A helper that makes system-config-printer use PolicyKit
Group: System Environment/Base
@@ -17,6 +17,7 @@ Patch5: allow_authentication.patch
Patch6: cups-pk-helper-add-printer-ppd-optional.patch
Patch7: cups-pk-helper-job-status.patch
Patch8: cups-pk-helper-invalid-job.patch
+Patch9: cups-pk-helper-jobcancelpurge.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -55,6 +56,7 @@ interfaces available under control of PolicyKit.
%patch6 -p1 -b .ppd
%patch7 -p1 -b .job-status
%patch8 -p1 -b .invalid-job
+%patch9 -p1 -b .jobcancelpurge
%build
# Patch0 modifies configure.ac
@@ -84,6 +86,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Mar 22 2010 Marek Kasik - 0.0.4-13
+- Add JobCancelPurge method
+- Related: #548756
+
* Tue Feb 23 2010 Marek Kasik - 0.0.4-12
- Avoid timeout on job-related methods for invalid jobs
- Make sure to return an error via dbus in case of failure