Tim Waugh 4f25cb
--- cups-1.3b1/backend/ipp.c.eggcups	2007-07-11 22:46:42.000000000 +0100
Tim Waugh 4f25cb
+++ cups-1.3b1/backend/ipp.c	2007-07-18 11:34:16.000000000 +0100
Tim Waugh 4f25cb
@@ -57,6 +57,70 @@
Tim Waugh 4f25cb
 static char	tmpfilename[1024] = "";	/* Temporary spool file name */
Tim Waugh 4f25cb
 static int	job_cancelled = 0;	/* Job cancelled? */
Tim Waugh bd6348
 
Tim Waugh bd6348
+#if HAVE_DBUS
Tim Waugh bd6348
+#include <dbus/dbus.h>
Tim Waugh bd6348
+
Tim Waugh bd6348
+static DBusConnection *dbus_connection = NULL;
Tim Waugh bd6348
+
Tim Waugh bd6348
+static int
Tim Waugh bd6348
+init_dbus (void)
Tim Waugh bd6348
+{
Tim Waugh bd6348
+  DBusConnection *connection;
Tim Waugh bd6348
+  DBusError error;
Tim Waugh bd6348
+
Tim Waugh bd6348
+  if (dbus_connection &&
Tim Waugh bd6348
+      !dbus_connection_get_is_connected (dbus_connection)) {
Tim Waugh bd6348
+    dbus_connection_unref (dbus_connection);
Tim Waugh bd6348
+    dbus_connection = NULL;
Tim Waugh bd6348
+  }
Tim Waugh bd6348
+  
Tim Waugh bd6348
+  dbus_error_init (&error);
Tim Waugh bd6348
+  connection = dbus_bus_get (getuid () ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &error);
Tim Waugh bd6348
+  if (connection == NULL) {
Tim Waugh bd6348
+    dbus_error_free (&error);
Tim Waugh bd6348
+    return -1;
Tim Waugh bd6348
+  }
Tim Waugh bd6348
+
Tim Waugh bd6348
+  dbus_connection = connection;
Tim Waugh bd6348
+  return 0;
Tim Waugh bd6348
+}
Tim Waugh bd6348
+
Tim Waugh bd6348
+int
Tim Waugh bd6348
+dbus_broadcast_queued_remote (const char *printer_uri,
Tim Waugh bd6348
+			      ipp_status_t status,
Tim Waugh bd6348
+			      unsigned int local_job_id,
Tim Waugh bd6348
+			      unsigned int remote_job_id,
Tim Waugh bd6348
+			      const char *username,
Tim Waugh bd6348
+			      const char *printer_name)
Tim Waugh bd6348
+{
Tim Waugh bd6348
+  DBusMessage *message;
Tim Waugh bd6348
+  DBusMessageIter iter;
Tim Waugh bd6348
+  const char *errstr;
Tim Waugh bd6348
+
Tim Waugh bd6348
+  if (!dbus_connection || !dbus_connection_get_is_connected (dbus_connection)) {
Tim Waugh bd6348
+    if (init_dbus () || !dbus_connection)
Tim Waugh bd6348
+      return -1;
Tim Waugh bd6348
+  }
Tim Waugh bd6348
+
Tim Waugh bd6348
+  errstr = ippErrorString (status);
Tim Waugh bd6348
+  message = dbus_message_new_signal ("/com/redhat/PrinterSpooler",
Tim Waugh bd6348
+				     "com.redhat.PrinterSpooler",
Tim Waugh bd6348
+				     "JobQueuedRemote");
Tim Waugh bd6348
+  dbus_message_iter_init_append (message, &iter);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_uri);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &errstr);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &local_job_id);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &remote_job_id);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &username);
Tim Waugh bd6348
+  dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &printer_name);
Tim Waugh bd6348
+
Tim Waugh bd6348
+  dbus_connection_send (dbus_connection, message, NULL);
Tim Waugh bd6348
+  dbus_connection_flush (dbus_connection);
Tim Waugh bd6348
+  dbus_message_unref (message);
Tim Waugh bd6348
+  
Tim Waugh bd6348
+  return 0;
Tim Waugh bd6348
+}
Tim Waugh bd6348
+#endif /* HAVE_DBUS */
Tim Waugh bd6348
 
Tim Waugh bd6348
 /*
Tim Waugh 4f25cb
  * Local functions...
Tim Waugh 4f25cb
@@ -974,6 +1038,15 @@
Tim Waugh 4f25cb
       fprintf(stderr, _("NOTICE: Print file accepted - job ID %d.\n"), job_id);
Tim Waugh bd6348
     }
Tim Waugh bd6348
 
Tim Waugh bd6348
+#if HAVE_DBUS
Tim Waugh bd6348
+    dbus_broadcast_queued_remote (argv[0],
Tim Waugh bd6348
+				  ipp_status,
Tim Waugh bd6348
+				  atoi (argv[1]),
Tim Waugh bd6348
+				  job_id,
Tim Waugh bd6348
+				  argv[2],
Tim Waugh bd6348
+				  getenv ("PRINTER"));
Tim Waugh bd6348
+#endif /* HAVE_DBUS */
Tim Waugh bd6348
+
Tim Waugh bd6348
     ippDelete(response);
Tim Waugh bd6348
 
Tim Waugh bd6348
     if (job_cancelled)
Tim Waugh 4f25cb
--- cups-1.3b1/backend/Makefile.eggcups	2007-07-11 22:46:42.000000000 +0100
Tim Waugh 4f25cb
+++ cups-1.3b1/backend/Makefile	2007-07-18 11:36:35.000000000 +0100
Tim Waugh 4f25cb
@@ -131,7 +131,7 @@
Tim Waugh bd6348
 
Tim Waugh bd6348
 ipp:	ipp.o ../cups/$(LIBCUPS)
Tim Waugh bd6348
 	echo Linking $@...
Tim Waugh bd6348
-	$(CC) $(LDFLAGS) -o ipp ipp.o $(LIBS)
Tim Waugh 4f25cb
+	$(CC) $(LDFLAGS) -o ipp ipp.o $(LIBS) $(CUPSDLIBS)
Tim Waugh bd6348
 	$(RM) http
Tim Waugh bd6348
 	$(LN) ipp http
Tim Waugh bd6348
 
Tim Waugh 4f25cb
--- cups-1.3b1/scheduler/subscriptions.c.eggcups	2007-07-11 22:46:42.000000000 +0100
Tim Waugh 4f25cb
+++ cups-1.3b1/scheduler/subscriptions.c	2007-07-18 11:34:16.000000000 +0100
Tim Waugh 4f25cb
@@ -1292,13 +1292,13 @@
Tim Waugh eb99a8
     what = "PrinterAdded";
Tim Waugh eb99a8
   else if (event & CUPSD_EVENT_PRINTER_DELETED)
Tim Waugh eb99a8
     what = "PrinterRemoved";
Tim Waugh eb99a8
-  else if (event & CUPSD_EVENT_PRINTER_CHANGED)
Tim Waugh eb99a8
-    what = "QueueChanged";
Tim Waugh eb99a8
   else if (event & CUPSD_EVENT_JOB_CREATED)
Tim Waugh eb99a8
     what = "JobQueuedLocal";
Tim Waugh eb99a8
   else if ((event & CUPSD_EVENT_JOB_STATE) && job &&
Tim Waugh eb99a8
            job->state_value == IPP_JOB_PROCESSING)
Tim Waugh eb99a8
     what = "JobStartedLocal";
Tim Waugh eb99a8
+  else if (event & (CUPSD_EVENT_PRINTER_CHANGED|CUPSD_EVENT_JOB_STATE_CHANGED|CUPSD_EVENT_PRINTER_STATE_CHANGED))
Tim Waugh eb99a8
+    what = "QueueChanged";
Tim Waugh eb99a8
   else
Tim Waugh eb99a8
     return;
Tim Waugh eb99a8
 
Tim Waugh 4f25cb
@@ -1334,7 +1334,7 @@
Tim Waugh eb99a8
   dbus_message_append_iter_init(message, &iter);
Tim Waugh eb99a8
   if (dest)
Tim Waugh eb99a8
     dbus_message_iter_append_string(&iter, dest->name);
Tim Waugh eb99a8
-  if (job)
Tim Waugh eb99a8
+  if (job && strcmp (what, "QueueChanged") != 0)
Tim Waugh eb99a8
   {
Tim Waugh eb99a8
     dbus_message_iter_append_uint32(&iter, job->id);
Tim Waugh eb99a8
     dbus_message_iter_append_string(&iter, job->username);