gnome-scan r499 - in trunk: . lib src tests



Author: bersace
Date: Sun Feb 24 15:30:19 2008
New Revision: 499
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=499&view=rev

Log:
Fixed tons of ref/unref leaks.


Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/lib/gnome-scan-dialog.c
   trunk/lib/gnome-scan-init.h
   trunk/lib/gnome-scan-job.c
   trunk/lib/gnome-scan-job.h
   trunk/lib/gnome-scan-param-widget.c
   trunk/lib/gnome-scan-settings.c
   trunk/lib/gnome-scan-settings.h
   trunk/src/flegita-gimp.c
   trunk/src/flegita-sink.c
   trunk/src/flegita.c
   trunk/tests/Makefile.am

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Sun Feb 24 15:30:19 2008
@@ -60,7 +60,7 @@
 AC_SUBST(API_VERSION)
 
 
-PKG_CHECK_MODULES(GNOME_SCAN, [gmodule-2.0 gthread-2.0 glib-2.0 gdk-2.0 >= 2.11 gdk-pixbuf-2.0 gtk+-2.0 gegl >= 0.0.15])
+PKG_CHECK_MODULES(GNOME_SCAN, [gmodule-2.0 gthread-2.0 glib-2.0 gdk-2.0 >= 2.11 gdk-pixbuf-2.0 gtk+-2.0 gegl >= 0.0.15 gconf-2.0 ])
 AC_SUBST(GNOME_SCAN_CFLAGS)
 AC_SUBST(GNOME_SCAN_LIBS)
 

Modified: trunk/lib/gnome-scan-dialog.c
==============================================================================
--- trunk/lib/gnome-scan-dialog.c	(original)
+++ trunk/lib/gnome-scan-dialog.c	Sun Feb 24 15:30:19 2008
@@ -100,7 +100,7 @@
 	GtkWidget*		preview_box;
 	GtkWidget*		preview_area;
 	GtkWidget*		preview_bbox;
-	GnomeScanJob*	        preview_job;
+	GnomeScanJob*	preview_job;
 	GValue*		preview_res;
 	GValue*		saved_res;
 	GValue*		saved_origin;
@@ -190,6 +190,8 @@
 static void	gsd_build_scanner_ui		(GnomeScanDialog *gsd);
 static void	gsd_scanner_selected		(GtkTreeSelection *selection,
 											GnomeScanDialog *dialog);
+static void gsd_destroy_param			(GParamSpec *param,
+										  GnomeScanDialog *dialog);
 
 /* PREVIEW */
 static void	gsd_preview_scanner_selected	(GnomeScanDialog *gsd);
@@ -218,17 +220,7 @@
 gnome_scan_dialog_init (GnomeScanDialog *object)
 {
 	GnomeScanDialogPrivate* priv = GET_PRIVATE (object);
-	
-	g_object_set (object,
-				  "border-width", 6,
-				  "window-position", GTK_WIN_POS_CENTER,
-				  "default-width", 320,
-				  "default-height", 420,
-				  "title", _("Scan"),
-				  "has-separator", FALSE,
-				  "modal", TRUE,
-				  NULL);
-	
+
 	priv->preview_res = g_new0 (GValue, 1);
 	g_value_init (priv->preview_res, G_TYPE_DOUBLE);
 	g_value_set_double (priv->preview_res, PREVIEW_RES);
@@ -332,14 +324,13 @@
 	gsd_build_sink_ui (dialog);
 	
 	/* configure preview job */
-	priv->preview_job = gnome_scan_job_new ();
-	gnome_scan_job_set_settings (priv->preview_job,
-								 gnome_scan_job_get_settings (priv->job));
+	GnomeScanSink*sink = gnome_scan_preview_sink_new();
+	priv->preview_job = gnome_scan_job_new (gnome_scan_job_get_settings(priv->job),
+											sink);
+	g_object_unref(sink);
 	for (node = gnome_scan_job_get_processors (priv->job)->next; node; node = node->next)
 		gnome_scan_job_add_processor (priv->preview_job, node->data);
 	
-	GnomeScanSink*sink = gnome_scan_preview_sink_new ();
-	gnome_scan_job_set_sink (priv->preview_job, sink);
 	
 	return object;
 }
@@ -349,12 +340,41 @@
 {
 	GnomeScanDialogPrivate *priv = GET_PRIVATE (object);
 	GSList *node;
+	GnomeScanner *scanner;
+	GnomeScanSink *sink;
 	
 	if (!priv->disposed) {
+		/* freeing all scanner params */
+		if (scanner = gnome_scan_job_get_scanner(priv->job)) {
+			gnome_scan_plugin_params_foreach (GNOME_SCAN_PLUGIN(scanner),
+											  (GFunc) gsd_destroy_param,
+											  object);
+		}
+		
+		/* unref all processors params */
+		for (node = gnome_scan_job_get_processors (priv->job); node; node = node->next) {
+			gnome_scan_plugin_params_foreach (GNOME_SCAN_PLUGIN(node->data),
+											  (GFunc) gsd_destroy_param,
+											  object);
+		}
+		
+		/* unref all sink params */
+		if (sink = gnome_scan_job_get_sink(priv->job)) {
+			gnome_scan_plugin_params_foreach (GNOME_SCAN_PLUGIN(sink),
+											  (GFunc) gsd_destroy_param,
+											  object);
+		}
+		
+		/* unref scanners and backends */
 		g_object_unref (priv->scanners);
 		for (node = priv->backends; node; node = node->next) {
 			g_object_unref (node->data);
 		}
+
+		/* unref jobs */
+		g_object_unref(priv->job);
+		g_object_unref(priv->preview_job);
+		
 		priv->disposed = TRUE;
 	}
 	
@@ -449,10 +469,14 @@
 GtkWidget*
 gnome_scan_dialog_new (GtkWindow *parent, GnomeScanJob *job)
 {
-	if (!GNOME_IS_SCAN_JOB (job))
-		job = gnome_scan_job_new ();
-	
 	GObject* object = g_object_new (GNOME_TYPE_SCAN_DIALOG,
+									"border-width", 6,
+									"window-position", GTK_WIN_POS_CENTER,
+									"default-width", 320,
+									"default-height", 420,
+									"title", _("Scan"),
+									"has-separator", FALSE,
+									"modal", TRUE,
 									"icon-name", "scanner",
 									"transient-for", parent,
 									"job", job,
@@ -728,8 +752,8 @@
 }
 
 static void
-	gsd_destroy_param (GParamSpec *param, GnomeScanDialog *dialog)
-{
+gsd_destroy_param (GParamSpec *param, GnomeScanDialog *dialog)
+{	
 	GtkWidget *widget = g_param_spec_get_qdata (param, GSD_WIDGET_QUARK);
 	if (!widget) {
 		GnomeScanPreviewPlugin *plugin = g_param_spec_get_qdata (param, GSD_PLUGIN_QUARK);
@@ -950,7 +974,7 @@
 }
 
 static void
-	gsd_scanner_selected (GtkTreeSelection *selection, GnomeScanDialog *dialog)
+gsd_scanner_selected (GtkTreeSelection *selection, GnomeScanDialog *dialog)
 {
 	GnomeScanDialogPrivate *priv = GET_PRIVATE (dialog);
 	GnomeScanner *scanner;

Modified: trunk/lib/gnome-scan-init.h
==============================================================================
--- trunk/lib/gnome-scan-init.h	(original)
+++ trunk/lib/gnome-scan-init.h	Sun Feb 24 15:30:19 2008
@@ -22,6 +22,7 @@
 #include <glib-object.h>
 
 #define	GS_STOCK_SCAN	"scan"
+#define REFDBG(o)   g_debug(G_STRLOC " %s ref count = %i", #o, G_OBJECT(o)->ref_count)
 
 G_BEGIN_DECLS
 

Modified: trunk/lib/gnome-scan-job.c
==============================================================================
--- trunk/lib/gnome-scan-job.c	(original)
+++ trunk/lib/gnome-scan-job.c	Sun Feb 24 15:30:19 2008
@@ -79,16 +79,16 @@
 	GnomeScanJobPrivate *priv = GET_PRIVATE (object);
 	
 	priv->processors = NULL;
-	priv->settings = gnome_scan_settings_new ();
-	gnome_scan_job_add_processor (GNOME_SCAN_JOB(object),
-								  gnome_scan_processor_common_new());
+	priv->settings  = NULL;
+	priv->sink		= NULL;
 }
 
 static void
 gnome_scan_job_finalize (GObject *object)
 {
-	/* TODO: Add deinitalization code here */
-
+	GnomeScanJobPrivate *priv = GET_PRIVATE(object);
+	g_object_unref(priv->settings);
+	g_object_unref(priv->sink);
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -101,15 +101,15 @@
 		{
 		case PROP_SETTINGS:
 			gnome_scan_job_set_settings (GNOME_SCAN_JOB (object),
-										 GNOME_SCAN_SETTINGS (g_value_dup_object (value)));
+										 GNOME_SCAN_SETTINGS (g_value_get_object (value)));
 			break;
 		case PROP_SCANNER:
 			gnome_scan_job_set_scanner (GNOME_SCAN_JOB (object),
-										GNOME_SCANNER (g_value_dup_object (value)));
+										GNOME_SCANNER (g_value_get_object (value)));
 			break;
 		case PROP_SINK:
 			gnome_scan_job_set_sink (GNOME_SCAN_JOB (object),
-									 GNOME_SCAN_SINK (g_value_dup_object (value)));
+									 GNOME_SCAN_SINK (g_value_get_object (value)));
 			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -206,9 +206,17 @@
  * Returns: a new #GnomeScanJob
  **/
 GnomeScanJob*
-gnome_scan_job_new ()
+gnome_scan_job_new (GnomeScanSettings *settings,
+					GnomeScanSink *sink)
 {
-	GObject *object = g_object_new (GNOME_TYPE_SCAN_JOB, NULL);
+	GObject *object = g_object_new (GNOME_TYPE_SCAN_JOB,
+									"settings", settings,
+									"sink", sink,
+									NULL);
+	
+	gnome_scan_job_add_processor (GNOME_SCAN_JOB(object),
+								  gnome_scan_processor_common_new());
+	
 	return GNOME_SCAN_JOB (object);
 }
 
@@ -223,7 +231,12 @@
 gnome_scan_job_set_settings (GnomeScanJob *job,
 							 GnomeScanSettings *settings)
 {
-	GET_PRIVATE (job)->settings = settings;
+	GnomeScanJobPrivate *priv = GET_PRIVATE(job);
+	
+	if (priv->settings)
+		g_object_unref(priv->settings);
+	
+	priv->settings = g_object_ref(settings);
 }
 
 /**
@@ -301,7 +314,12 @@
 gnome_scan_job_set_sink (GnomeScanJob *job,
 						 GnomeScanSink *sink)
 {
-	GET_PRIVATE (job)->sink = sink;
+	GnomeScanJobPrivate *priv = GET_PRIVATE(job);
+	
+	if (priv->sink)
+		g_object_unref(priv->sink);
+		
+	priv->sink = g_object_ref(sink);
 }
 
 /**

Modified: trunk/lib/gnome-scan-job.h
==============================================================================
--- trunk/lib/gnome-scan-job.h	(original)
+++ trunk/lib/gnome-scan-job.h	Sun Feb 24 15:30:19 2008
@@ -75,7 +75,8 @@
 
 GType		gnome_scan_job_get_type (void) G_GNUC_CONST;
 GnomeScanJob*
-gnome_scan_job_new (void);
+gnome_scan_job_new (GnomeScanSettings *settings,
+					GnomeScanSink *sink);
 
 void		gnome_scan_job_set_settings (GnomeScanJob *job,
 										 GnomeScanSettings *settings);

Modified: trunk/lib/gnome-scan-param-widget.c
==============================================================================
--- trunk/lib/gnome-scan-param-widget.c	(original)
+++ trunk/lib/gnome-scan-param-widget.c	Sun Feb 24 15:30:19 2008
@@ -151,6 +151,8 @@
 								 priv->settings_changed_handler);
 	g_value_unset (gspw->value);
 	g_free (gspw->value);
+	g_object_unref(gspw->settings);
+	g_object_unref(gspw->plugin);
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 

Modified: trunk/lib/gnome-scan-settings.c
==============================================================================
--- trunk/lib/gnome-scan-settings.c	(original)
+++ trunk/lib/gnome-scan-settings.c	Sun Feb 24 15:30:19 2008
@@ -33,6 +33,8 @@
  * In the future, automatic saving to GConf or .ini would be such
  * feature easily added with this design.
  **/
+
+#include <gconf/gconf-client.h>
 #include "gnome-scan-settings.h"
 
 #define	GET_PRIVATE(o)	(G_TYPE_INSTANCE_GET_PRIVATE ((o), GNOME_TYPE_SCAN_SETTINGS, GnomeScanSettingsPrivate))
@@ -41,8 +43,9 @@
 
 struct _GnomeScanSettingsPrivate
 {
-  /* using GParamSpec name as key, and GValue as value */
-  GHashTable	*values;
+	/* using GParamSpec name as key, and GValue as value */
+	GHashTable	*values;
+	GConfClient *gconf;
 };
 
 enum
@@ -59,27 +62,45 @@
 static void
 gnome_scan_settings_init (GnomeScanSettings *object)
 {
-  GnomeScanSettingsPrivate *priv = GET_PRIVATE (object);
+	GnomeScanSettingsPrivate *priv = GET_PRIVATE (object);
+	
+	priv->values = g_hash_table_new (g_str_hash, g_str_equal);
+	priv->gconf = gconf_client_get_default();
+}
+
+static GObject*
+gnome_scan_settings_constructor (GType type,
+								 guint n_params,
+								 GObjectConstructParam *params)
+{
+	GObject *object;
 	
-  priv->values = g_hash_table_new (g_str_hash, g_str_equal);
+	object =
+		G_OBJECT_CLASS(parent_class)->constructor(type,
+																	  n_params,
+																	  params);
+	
+	g_debug("Loading from %s", g_get_prgname());
+	
+	return object;
 }
 
 static void
 gnome_scan_settings_finalize (GObject *object)
 {
-  /* TODO: Add deinitalization code here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+	g_debug("Saving to %s", g_get_prgname());
+	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
 gnome_scan_settings_class_init (GnomeScanSettingsClass *klass)
 {
-  GObjectClass* object_class = G_OBJECT_CLASS (klass);
-  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
-
-  g_type_class_add_private (klass, sizeof (GnomeScanSettingsPrivate));
-  object_class->finalize = gnome_scan_settings_finalize;
+	GObjectClass* object_class = G_OBJECT_CLASS (klass);
+	parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+	
+	g_type_class_add_private (klass, sizeof (GnomeScanSettingsPrivate));
+	object_class->constructor   = gnome_scan_settings_constructor;
+	object_class->finalize		= gnome_scan_settings_finalize;
 	
   /**
    * GnomeScanParamWidget::changed:

Modified: trunk/lib/gnome-scan-settings.h
==============================================================================
--- trunk/lib/gnome-scan-settings.h	(original)
+++ trunk/lib/gnome-scan-settings.h	Sun Feb 24 15:30:19 2008
@@ -57,6 +57,7 @@
 };
 
 GType		gnome_scan_settings_get_type		(void) G_GNUC_CONST;
+
 GnomeScanSettings*
 gnome_scan_settings_new				(void);
 void		gnome_scan_settings_init_value		(GnomeScanSettings *settings,

Modified: trunk/src/flegita-gimp.c
==============================================================================
--- trunk/src/flegita-gimp.c	(original)
+++ trunk/src/flegita-gimp.c	Sun Feb 24 15:30:19 2008
@@ -149,9 +149,9 @@
     gimp_drawable_detach (gimp_drawable_get (param[2].data.d_drawable));
   }
 
-  GnomeScanJob *job = gnome_scan_job_new();
-  GnomeScanSink *sink = flegita_gimp_sink_new(image_ID, is_new);
   GnomeScanSettings* settings = gnome_scan_settings_new();
+  GnomeScanSink *sink = flegita_gimp_sink_new(image_ID, is_new);
+  GnomeScanJob *job = gnome_scan_job_new(settings, sink);
 
   /* set default scan resolution from existing image */
   if (!is_new) {

Modified: trunk/src/flegita-sink.c
==============================================================================
--- trunk/src/flegita-sink.c	(original)
+++ trunk/src/flegita-sink.c	Sun Feb 24 15:30:19 2008
@@ -98,6 +98,7 @@
     NULL
   };
 	
+#if 0
   /* ACTION */
   pspec = priv->action_spec = 
     flegita_param_spec_action("flegita-action",
@@ -108,7 +109,8 @@
 			      G_PARAM_WRITABLE);
   gnome_scan_plugin_params_add (GNOME_SCAN_PLUGIN (object),
 				pspec);
-
+#endif
+	
   /* FORMAT */
   formats = g_slist_append (formats,
 			    gnome_scan_format_new ("png",
@@ -238,10 +240,14 @@
   FlegitaSink *sink = FLEGITA_SINK (plugin);
   FlegitaSinkPrivate *priv = GET_PRIVATE (sink);
 
-
-  priv->action = gnome_scan_settings_get_enum (settings,
+#if 0
+  priv->action = 	gnome_scan_settings_get_enum (settings,
 					       "flegita-action",
 					       FLEGITA_TYPE_ACTION);
+#else
+  priv->action = 	FLEGITA_SAVE;
+#endif
+	
   switch (priv->action) {
   case FLEGITA_SAVE:
     /* enable SAVE options */

Modified: trunk/src/flegita.c
==============================================================================
--- trunk/src/flegita.c	(original)
+++ trunk/src/flegita.c	Sun Feb 24 15:30:19 2008
@@ -36,41 +36,37 @@
 gint
 main (gint argc, gchar **argv)
 {
-  GnomeProgram *program;
-  GnomeScanSettings *settings;
-  GtkPrintSettings *psettings;
-  GnomeScanJob *job;
-  GtkWidget *dialog;
-  GnomeScanSink *sink;
-	
-  program = gnome_program_init ("flegita", VERSION,
-				LIBGNOMEUI_MODULE,
-				argc, argv,
-				GNOME_PARAM_NONE);
-
-  textdomain (GETTEXT_PACKAGE);
-
-  g_set_application_name (_("Scanner Utility"));
-  g_set_prgname ("flegita");
-
-  gtk_window_set_default_icon_name ("flegita");
-  gnome_scan_init (&argc, &argv);
-	
-  settings = gnome_scan_settings_new ();
-  job = gnome_scan_job_new ();
-  gnome_scan_job_set_settings (job, settings);
-
-  psettings = gtk_print_settings_new ();
-  gnome_scan_settings_set_object (settings,
-				  "print-settings",
-				  G_OBJECT (psettings));
-  sink = flegita_sink_new ();
-  gnome_scan_job_set_sink (job, sink);
-  dialog = gnome_scan_dialog_new (NULL, job);
-  gnome_scan_dialog_run (GNOME_SCAN_DIALOG (dialog));
+	GnomeProgram *program;
+	GnomeScanSettings *settings;
+	GnomeScanJob *job;
+	GtkWidget *dialog;
+	GnomeScanSink *sink;
 	
-  gtk_widget_destroy (dialog);
-  gnome_scan_exit ();
+	program = gnome_program_init ("flegita", VERSION,
+								  LIBGNOMEUI_MODULE,
+								  argc, argv,
+								  GNOME_PARAM_NONE);
 	
-  return (0);
+	textdomain (GETTEXT_PACKAGE);
+	
+	g_set_application_name (_("Scanner Utility"));
+	g_set_prgname ("flegita");
+	
+	gtk_window_set_default_icon_name ("flegita");
+	gnome_scan_init (&argc, &argv);
+	
+	settings = gnome_scan_settings_new();
+	sink = flegita_sink_new();
+	job = gnome_scan_job_new(settings, sink);
+	dialog = gnome_scan_dialog_new (NULL, job);
+	gnome_scan_dialog_run (GNOME_SCAN_DIALOG (dialog));
+	
+	gtk_widget_destroy (dialog);
+	g_object_unref(job);
+	g_object_unref(settings);
+	g_object_unref(sink);
+	
+	gnome_scan_exit ();
+	
+	return (0);
 }

Modified: trunk/tests/Makefile.am
==============================================================================
--- trunk/tests/Makefile.am	(original)
+++ trunk/tests/Makefile.am	Sun Feb 24 15:30:19 2008
@@ -4,17 +4,16 @@
 
 
 noinst_PROGRAMS = \
-	sane-probe
+	gegl-stress
 
-sane_probe_SOURCES = \
-	sane-probe.c 
+gegl_stress_SOURCES = \
+	gegl-stress.c 
 
-sane_probe_CFLAGS = \
+gegl_stress_CFLAGS = \
 	$(GNOME_SCAN_CFLAGS) $(FLEGITA_CFLAGS) $(TOOLS_CFLAGS)
 
-sane_probe_LDFLAGS = \
-	$(GNOME_SCAN_LIBS) $(FLEGITA_LIBS) $(TOOLS_LIBS) \
-	-lsane
+gegl_stress_LDFLAGS = \
+	$(GNOME_SCAN_LIBS) $(FLEGITA_LIBS) $(TOOLS_LIBS)
 
 ## File created by the gnome-build tools
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]