gnome-scan r499 - in trunk: . lib src tests
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r499 - in trunk: . lib src tests
- Date: Sun, 24 Feb 2008 15:30:20 +0000 (GMT)
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]