Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37517952
en ru br
ALT Linux repos
S:0.2.3-alt7
5.0: 0.2.3-alt2
4.1: 0.2.3-alt1
4.0: 0.2.2-alt2
3.0: 0.2.0-alt1

Group :: System/Libraries
RPM: libgnomecups

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: libgnomecups-0.2.3-dbus.patch
Download


diff -p -up libgnomecups-0.2.3/libgnomecups/Makefile.am.dbus libgnomecups-0.2.3/libgnomecups/Makefile.am
--- libgnomecups-0.2.3/libgnomecups/Makefile.am.dbus	2007-01-02 00:18:51.000000000 +0000
+++ libgnomecups-0.2.3/libgnomecups/Makefile.am	2008-01-28 16:00:20.000000000 +0000
@@ -2,6 +2,7 @@ INCLUDES = 						\
 	-I$(top_srcdir) 				\
 	-I$(top_builddir) 				\
 	$(WARN_CFLAGS)                                  \
+	$(DBUS_CFLAGS)                                  \
 	$(CUPS_CFLAGS)                                  \
 	$(LIBGNOMECUPS_CFLAGS)                          \
 	-DDATADIR=\""$(datadir)"\"
@@ -9,7 +10,8 @@ INCLUDES = 						\
 lib_LTLIBRARIES=libgnomecups-1.0.la
 libgnomecups_1_0_la_LIBADD = \
 	$(LIBGNOMECUPS_LIBS) \
-	$(CUPS_LIBS) 
+	$(CUPS_LIBS) \
+	$(DBUS_LIBS)
 libgnomecups_1_0_la_LDFLAGS = $(LT_VERSION_INFO)
 
 libgnomecups_1_0_la_SOURCES = \
diff -p -up libgnomecups-0.2.3/libgnomecups/gnome-cups-printer.c.dbus libgnomecups-0.2.3/libgnomecups/gnome-cups-printer.c
--- libgnomecups-0.2.3/libgnomecups/gnome-cups-printer.c.dbus	2007-01-02 00:18:51.000000000 +0000
+++ libgnomecups-0.2.3/libgnomecups/gnome-cups-printer.c	2008-01-28 15:59:13.000000000 +0000
@@ -25,6 +25,10 @@
 
 #include "gnome-cups-printer.h"
 
+#ifdef WITH_DBUS
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#endif
 #include <cups/cups.h>
 #include <time.h>
 #include <stdlib.h>
@@ -99,6 +103,7 @@ enum {
 };
 
 static void update_printers (void);
+static gboolean init_dbus (void);
 static void set_timeout (void);
 
 static GList *printer_names = NULL;
@@ -622,7 +627,8 @@ remove_from_printers (gpointer user_data
 	char *printer_name = user_data;
 
 	g_hash_table_remove (printers, printer_name);
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 }
 
 static void
@@ -782,6 +788,96 @@ update_printers_timeout (void)
 	return TRUE;
 }
 
+#ifdef WITH_DBUS
+static DBusHandlerResult
+handle_system_dbus_message (DBusConnection     *connection,
+			    DBusMessage        *message,
+			    void               *user_data)
+{
+	DBusError error;
+	gboolean is_addition;
+	char *printer_name;
+
+	if (dbus_message_is_signal (message,
+				    "com.redhat.PrinterSpooler",
+				    "PrinterAdded")) {
+		is_addition = TRUE;
+	} else if (dbus_message_is_signal (message,
+				    "com.redhat.PrinterSpooler",
+				    "PrinterRemoved")) {
+		is_addition = FALSE;
+	} else {
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+	}
+
+	dbus_error_init (&error);
+	if (!dbus_message_get_args (message, &error,
+				    DBUS_TYPE_STRING, &printer_name,
+				    DBUS_TYPE_INVALID)) {
+		g_message ("Couldn't parse arguments for DBus message");
+		dbus_error_free (&error);
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+	}
+
+	if (is_addition) {
+		printer_names = g_list_append (printer_names,
+					       g_strdup (printer_name));
+		printer_added (printer_name);
+	} else {
+		GList *link = g_list_find_custom (printer_names,
+						  printer_name,
+						  (GCompareFunc) strcmp);
+		if (link) {
+			printer_names = g_list_remove_link (printer_names,
+							    link);
+			g_free (link->data);
+		}
+		printer_removed (printer_name);
+	}
+	
+	
+	return DBUS_HANDLER_RESULT_HANDLED;
+}
+#endif
+
+static gboolean
+init_dbus (void)
+{
+#ifdef WITH_DBUS
+	static DBusConnection *dbus_connection = NULL;
+	DBusConnection *connection;
+	DBusError error;
+
+	if (dbus_connection &&
+	    dbus_connection_get_is_connected (dbus_connection))
+		return TRUE;
+
+	if (dbus_connection &&
+	    !dbus_connection_get_is_connected (dbus_connection)) {
+		dbus_connection_unref (dbus_connection);
+		dbus_connection = NULL;
+	}
+  
+	dbus_error_init (&error);
+	connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+	if (connection == NULL || dbus_error_is_set (&error)) {
+		g_warning ("Couldn't connect to system bus");
+		dbus_error_free (&error);
+		return FALSE;
+	}
+
+	dbus_bus_add_match (connection,
+			    "type='signal',"
+			    "interface='com.redhat.PrinterSpooler'",
+			    NULL);
+	dbus_connection_add_filter (connection, handle_system_dbus_message,
+				    NULL, NULL);
+	dbus_connection_setup_with_g_main (connection, NULL);
+	dbus_connection = connection;
+#endif
+	return TRUE;
+}
+
 static void
 set_timeout (void)
 {
@@ -816,7 +912,8 @@ gnome_cups_printer_new_printer_notify_ad
 	
 	add_notifies = g_list_append (add_notifies, notify);
 
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 
 	return notify->id;
 }
@@ -859,7 +956,8 @@ gnome_cups_printer_new_printer_notify_re
 		}
 	}
 
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 }
 
 guint
@@ -879,7 +977,8 @@ gnome_cups_printer_printer_removed_notif
 	
 	removed_notifies = g_list_append (removed_notifies, notify);
 
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 
 	return notify->id;
 }
@@ -898,7 +997,8 @@ gnome_cups_printer_printer_removed_notif
 		}
 	}
 
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 }
 
 GnomeCupsPrinter *
@@ -953,7 +1053,8 @@ gnome_cups_printer_get (const char *prin
 	key = g_strdup (printer_name);
 	g_hash_table_insert (printers, key, printer);
 	g_object_weak_ref (G_OBJECT (printer), remove_from_printers, key);
-	set_timeout ();
+	if (!init_dbus ())
+		set_timeout ();
 	
 	if (default_printer && !strcmp (printer_name, default_printer)) {
 		printer->details->is_default = TRUE;
@@ -1157,7 +1258,7 @@ gnome_cups_printer_get_ppd (GnomeCupsPri
 
 	gnome_cups_request_file (host, ppdpath, fd, &error);
 	if (error != NULL) {
-		g_warning ("Couldn't retrieve PPD for %s: %s",
+		g_message ("Couldn't retrieve PPD for %s: %s",
 			   printer->details->printer_name,
 			   error->message);
 		g_error_free (error);
diff -p -up libgnomecups-0.2.3/configure.in.dbus libgnomecups-0.2.3/configure.in
--- libgnomecups-0.2.3/configure.in.dbus	2008-01-23 07:17:22.000000000 +0000
+++ libgnomecups-0.2.3/configure.in	2008-01-28 15:59:13.000000000 +0000
@@ -27,6 +27,26 @@ if test "$CUPS_CONFIG" = "no"; then
   AC_MSG_ERROR([Please install cups development packages])
 fi
 
+AC_ARG_WITH(dbus, [--with-dbus	Use DBus], ac_dbus=$withval, ac_dbus=auto)
+if test x"$ac_dbus" != xno; then
+  PKG_CHECK_MODULES(DBUS, dbus-glib-1, have_dbus=yes, have_dbus=no)
+else
+  have_dbus=no
+fi 
+if test x"$have_dbus" = xno; then
+   if test x"$ac_dbus" = xyes; then
+      AC_MSG_ERROR([DBus explicitly requested but not found on system])
+   fi
+   ac_dbus=no
+else
+   if test x"$ac_dbus" != xno; then
+     AC_DEFINE(WITH_DBUS, 1, [Define if you have DBus])
+     DBUS_CFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE $DBUS_CFLAGS"
+     AC_SUBST(DBUS_CFLAGS)
+     AC_SUBST(DBUS_LIBS)
+   fi
+fi
+
 CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
 CUPS_LIBS=`cups-config --libs`
 
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin