Blame SOURCES/cups-eggcups.patch

1d75c0
diff -up cups-2.2.5/backend/ipp.c.eggcups cups-2.2.5/backend/ipp.c
1d75c0
--- cups-2.2.5/backend/ipp.c.eggcups	2017-10-13 20:22:26.000000000 +0200
1d75c0
+++ cups-2.2.5/backend/ipp.c	2017-10-17 18:56:42.409024451 +0200
1d75c0
@@ -149,6 +149,70 @@ static char		tmpfilename[1024] = "";
1d75c0
 static char		mandatory_attrs[1024] = "";
1d75c0
 					/* cupsMandatory value */
1d75c0
 
1d75c0
+#if HAVE_DBUS
1d75c0
+#include <dbus/dbus.h>
1d75c0
+
1d75c0
+static DBusConnection *dbus_connection = NULL;
1d75c0
+
1d75c0
+static int
1d75c0
+init_dbus (void)
1d75c0
+{
1d75c0
+  DBusConnection *connection;
1d75c0
+  DBusError error;
1d75c0
+
1d75c0
+  if (dbus_connection &&
1d75c0
+      !dbus_connection_get_is_connected (dbus_connection)) {
1d75c0
+    dbus_connection_unref (dbus_connection);
1d75c0
+    dbus_connection = NULL;
1d75c0
+  }
1d75c0
+
1d75c0
+  dbus_error_init (&error);
1d75c0
+  connection = dbus_bus_get (getuid () ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &error);
1d75c0
+  if (connection == NULL) {
1d75c0
+    dbus_error_free (&error);
1d75c0
+    return -1;
1d75c0
+  }
1d75c0
+
1d75c0
+  dbus_connection = connection;
1d75c0
+  return 0;
1d75c0
+}
1d75c0
+
1d75c0
+int
1d75c0
+dbus_broadcast_queued_remote (const char *printer_uri,
1d75c0
+			      ipp_status_t status,
1d75c0
+			      unsigned int local_job_id,
1d75c0
+			      unsigned int remote_job_id,
1d75c0
+			      const char *username,
1d75c0
+			      const char *printer_name)
1d75c0
+{
1d75c0
+  DBusMessage *message;
1d75c0
+  DBusMessageIter iter;
1d75c0
+  const char *errstr;
1d75c0
+
1d75c0
+  if (!dbus_connection || !dbus_connection_get_is_connected (dbus_connection)) {
1d75c0
+    if (init_dbus () || !dbus_connection)
1d75c0
+      return -1;
1d75c0
+  }
1d75c0
+
1d75c0
+  errstr = ippErrorString (status);
1d75c0
+  message = dbus_message_new_signal ("/com/redhat/PrinterSpooler",
1d75c0
+				     "com.redhat.PrinterSpooler",
1d75c0
+				     "JobQueuedRemote");
1d75c0
+  dbus_message_iter_init_append (message, &iter);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_uri);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &errstr);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &local_job_id);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &remote_job_id);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &username);
1d75c0
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_name);
1d75c0
+
1d75c0
+  dbus_connection_send (dbus_connection, message, NULL);
1d75c0
+  dbus_connection_flush (dbus_connection);
1d75c0
+  dbus_message_unref (message);
1d75c0
+
1d75c0
+  return 0;
1d75c0
+}
1d75c0
+#endif /* HAVE_DBUS */
1d75c0
 
1d75c0
 /*
1d75c0
  * Local functions...
1d75c0
@@ -1743,6 +1807,15 @@ main(int  argc,				/* I - Number of comm
1d75c0
       fprintf(stderr, "DEBUG: Print job accepted - job ID %d.\n", job_id);
1d75c0
     }
1d75c0
 
1d75c0
+#if HAVE_DBUS
1d75c0
+    dbus_broadcast_queued_remote (argv[0],
1d75c0
+				  ipp_status,
1d75c0
+				  atoi (argv[1]),
1d75c0
+				  job_id,
1d75c0
+				  argv[2],
1d75c0
+				  getenv ("PRINTER"));
1d75c0
+#endif /* HAVE_DBUS */
1d75c0
+
1d75c0
     ippDelete(response);
1d75c0
 
1d75c0
     if (job_canceled)
1d75c0
diff -up cups-2.2.5/backend/Makefile.eggcups cups-2.2.5/backend/Makefile
1d75c0
--- cups-2.2.5/backend/Makefile.eggcups	2017-10-17 18:56:42.409024451 +0200
1d75c0
+++ cups-2.2.5/backend/Makefile	2017-10-17 18:59:11.696781116 +0200
1d75c0
@@ -262,7 +262,7 @@ dnssd:	dnssd.o ../cups/$(LIBCUPS) libbac
1d75c0
 
1d75c0
 ipp:	ipp.o ../cups/$(LIBCUPS) libbackend.a
1d75c0
 	echo Linking $@...
1d75c0
-	$(LD_CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS)
1d75c0
+	$(LD_CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS) $(SERVERLIBS)
1d75c0
 	$(RM) http
1d75c0
 	$(LN) ipp http
1d75c0
 
1d75c0
diff -up cups-2.2.5/scheduler/subscriptions.c.eggcups cups-2.2.5/scheduler/subscriptions.c
1d75c0
--- cups-2.2.5/scheduler/subscriptions.c.eggcups	2017-10-13 20:22:26.000000000 +0200
1d75c0
+++ cups-2.2.5/scheduler/subscriptions.c	2017-10-17 18:56:42.409024451 +0200
1d75c0
@@ -1291,13 +1291,13 @@ cupsd_send_dbus(cupsd_eventmask_t event,
1d75c0
     what = "PrinterAdded";
1d75c0
   else if (event & CUPSD_EVENT_PRINTER_DELETED)
1d75c0
     what = "PrinterRemoved";
1d75c0
-  else if (event & CUPSD_EVENT_PRINTER_CHANGED)
1d75c0
-    what = "QueueChanged";
1d75c0
   else if (event & CUPSD_EVENT_JOB_CREATED)
1d75c0
     what = "JobQueuedLocal";
1d75c0
   else if ((event & CUPSD_EVENT_JOB_STATE) && job &&
1d75c0
            job->state_value == IPP_JOB_PROCESSING)
1d75c0
     what = "JobStartedLocal";
1d75c0
+  else if (event & (CUPSD_EVENT_PRINTER_CHANGED|CUPSD_EVENT_JOB_STATE_CHANGED|CUPSD_EVENT_PRINTER_STATE_CHANGED))
1d75c0
+    what = "QueueChanged";
1d75c0
   else
1d75c0
     return;
1d75c0
 
1d75c0
@@ -1333,7 +1333,7 @@ cupsd_send_dbus(cupsd_eventmask_t event,
1d75c0
   dbus_message_append_iter_init(message, &iter);
1d75c0
   if (dest)
1d75c0
     dbus_message_iter_append_string(&iter, dest->name);
1d75c0
-  if (job)
1d75c0
+  if (job && strcmp (what, "QueueChanged") != 0)
1d75c0
   {
1d75c0
     dbus_message_iter_append_uint32(&iter, job->id);
1d75c0
     dbus_message_iter_append_string(&iter, job->username);