[gnome-scan] Fix build with Vala 0.7.6



commit ae27a712bfea6d0f309a7fb8692c96c1bbf1e02d
Author: Ã?tienne Bersac <bersace gnome org>
Date:   Fri Feb 19 21:14:03 2010 +0100

    Fix build with Vala 0.7.6
    
    By the way, completed debug output for set/get values and generic enum option declaration.

 configure.ac                                 |    1 +
 gnome-scan.anjuta                            |   14 +----
 lib/Makefile.am                              |    2 +
 lib/gnome-scan-combo-box-widget.vala         |   25 ++++-----
 lib/gnome-scan-option.vala                   |   46 +++++++---------
 lib/gnome-scan-paper-size-widget.vala        |   34 ++++++------
 modules/gsane/gsane-option-area.c            |   27 ++++------
 modules/gsane/gsane-option-handler-generic.c |   35 +++++++++----
 modules/gsane/gsane-option-handler.c         |   73 +++++++++++++++----------
 modules/gsane/gsane-option-source.c          |    6 +-
 modules/gsane/gsane-scanner.c                |    2 +
 src/flegita-sink.vala                        |    2 +-
 12 files changed, 140 insertions(+), 127 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 8bc4fd1..5bb853f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -142,6 +142,7 @@ AC_OUTPUT([
 	gnome-scan.pc
 	Makefile
 	lib/Makefile
+	lib/tests/Makefile
 	modules/Makefile
 	modules/gsfile/Makefile
 	modules/gsane/Makefile
diff --git a/gnome-scan.anjuta b/gnome-scan.anjuta
index 02f4ca3..2389e4c 100644
--- a/gnome-scan.anjuta
+++ b/gnome-scan.anjuta
@@ -14,8 +14,8 @@
             url="http://anjuta.org/plugins/";
             mandatory="yes">
 		<require group="Anjuta Plugin"
-                 attribute="Location"
-                 value="anjuta-symbol-browser:SymbolBrowserPlugin"/>
+                 attribute="Interfaces"
+                 value="IAnjutaSymbolManager"/>
 	</plugin>
 	<plugin name="Make Build System"
             url="http://anjuta.org/plugins/";
@@ -27,14 +27,6 @@
                  attribute="Supported-Build-Types"
                  value="make"/>
 	</plugin>
-	<plugin name="Subversion" mandatory="no">
-        <require group="Anjuta Plugin"
-                 attribute="Location"
-                 value="anjuta-subversion:Subversion"/>
-		<require group="Anjuta Plugin"
-                  attribute="Interfaces"
-                  value="IAnjutaVcs"/>
-	</plugin>
 	<plugin name="Task Manager"
             url="http://anjuta.org/plugins/";
             mandatory="no">
@@ -47,6 +39,6 @@
             mandatory="no">
 		<require group="Anjuta Plugin"
                  attribute="Interfaces"
-                 value="IAnjutaDebuggerManager"/>
+                 value="IAnjutaDebugManager"/>
 	</plugin>
 </anjuta>
diff --git a/lib/Makefile.am b/lib/Makefile.am
index fedb552..c20cd19 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,5 +1,7 @@
 include $(top_srcdir)/Makefile.decl
 
+SUBDIRS = . tests
+
 INCLUDES = \
 	-DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\"	\
 	-DGETTEXT_PACKAGE=\""@GETTEXT_PACKAGE@"\"	\
diff --git a/lib/gnome-scan-combo-box-widget.vala b/lib/gnome-scan-combo-box-widget.vala
index c930aea..171bc29 100644
--- a/lib/gnome-scan-combo-box-widget.vala
+++ b/lib/gnome-scan-combo-box-widget.vala
@@ -29,7 +29,6 @@ namespace Gnome.Scan {
 
 		enum Column {
 			LABEL,
-			VALUE,
 			LENGTH
 		}
 
@@ -39,7 +38,7 @@ namespace Gnome.Scan {
 
 			strings = new HashTable<string,string>(GLib.str_hash, GLib.str_equal);
 
-			this.store = new ListStore(Column.LENGTH, typeof(string), typeof(Gnome.Scan.EnumValue));
+			this.store = new ListStore(Column.LENGTH, typeof(string));
 			combo = new ComboBox.with_model(store);
 			this.pack_start(combo, false, true, 0);
 			renderer = new CellRendererText();
@@ -47,16 +46,14 @@ namespace Gnome.Scan {
 			combo.set_attributes(renderer, "text", Column.LABEL);
 
 			var option = this.option as OptionEnum;
-			Gnome.Scan.EnumValue? curval = option.value;
-			foreach(weak Gnome.Scan.EnumValue? value in option.values) {
+			weak Gnome.Scan.EnumValue curval = option.value;
+			foreach(Gnome.Scan.EnumValue value in option.values) {
 				store.append(out iter);
-				store.set(iter,
-						  Column.LABEL, value.label,
-						  Column.VALUE, value);
+				store.set(iter, Column.LABEL, value.label);
 				
 				strings.insert(value.label, store.get_string_from_iter(iter));
 
-				if (curval != null && value.label == curval.label)
+				if (value.label == curval.label)
 						combo.set_active_iter(iter);
 			}
 
@@ -72,26 +69,28 @@ namespace Gnome.Scan {
 		private void on_combo_changed()
 		{
 			TreeIter iter;
-			weak Gnome.Scan.EnumValue? value;
 			weak string label;
 
 			combo.get_active_iter(out iter);
 			store.get(iter,
-					  Column.VALUE, out value,
 					  Column.LABEL, out label);
 
 			option.freeze_notify();
 			var option = this.option as OptionEnum;
-			option.value = value;
+			foreach(Gnome.Scan.EnumValue value in option.values) {
+				if (value.label == label)
+					option.value = value;
+			}
 			option.thaw_notify();
 		}
 
 		private void on_option_changed()
 		{
 			TreeIter iter;
-			string str = strings.lookup(((OptionEnum)option).value.label);
+			var option = this.option as OptionEnum;
+			string str = strings.lookup(option.value.label);
 			if (str == null) {
-				debug("No path for %s value", ((OptionEnum)option).value.label);
+				debug("No path for '%s' value", option.value.label);
 				return;
 			}
 
diff --git a/lib/gnome-scan-option.vala b/lib/gnome-scan-option.vala
index 8e826f8..ebef476 100644
--- a/lib/gnome-scan-option.vala
+++ b/lib/gnome-scan-option.vala
@@ -88,8 +88,8 @@ namespace Gnome.Scan {
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
 			this.hint = hint;
+			this.value = value;
 		}
 
 		public override void set_g_value(Value value)
@@ -112,10 +112,10 @@ namespace Gnome.Scan {
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
 			this.range = range;
 			this.unit = unit;
 			this.hint = hint;
+			this.value = value;
 		}
 
 		public override void set_g_value(Value value)
@@ -136,60 +136,54 @@ namespace Gnome.Scan {
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
 			this.hint = hint;
+			this.value = value;
 		}
 	}
 
 	public class OptionEnum : Option {
-		public weak Gnome.Scan.EnumValue? value {set; get;}
-
-		protected weak SList<Gnome.Scan.EnumValue?> _values;
-		public weak SList<Gnome.Scan.EnumValue?> values {
-			get {
-				return this._values;
-			}
-		}
+		public Gnome.Scan.EnumValue value {set; get;}
+		public weak SList<Gnome.Scan.EnumValue?> values {set construct; get;}
 
-		public OptionEnum(string name, string title, string desc, string group, string domain, Gnome.Scan.EnumValue? value, SList<Gnome.Scan.EnumValue?> values, OptionHint hint)
+		public OptionEnum(string name, string title, string desc, string group, string domain, Gnome.Scan.EnumValue value, SList<Gnome.Scan.EnumValue?> values, OptionHint hint)
 		{
 			this.name = name;
 			this.title = title;
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
-			this._values = values;
 			this.hint = hint;
+			this.values = values;
+			this.value = value;
 		}
 
-		public virtual void append(Gnome.Scan.EnumValue? value)
+		public virtual void append(Gnome.Scan.EnumValue value)
 		{
-			foreach(weak Gnome.Scan.EnumValue? val in _values)
+			foreach(weak Gnome.Scan.EnumValue val in values)
 				if (val.label == value.label)
 					return;
 
-			_values.append(value);
+			values.append(value);
 		}
 	}
 
 	public class OptionPaperSize : OptionEnum {
 		public Extent extent {set construct; get; }
 
-		public OptionPaperSize(string name, string title, string desc, string group, string domain, Extent extent, Gnome.Scan.EnumValue? value, SList<Gnome.Scan.EnumValue?> values, OptionHint hint)
+		public OptionPaperSize(string name, string title, string desc, string group, string domain, Extent extent, Gnome.Scan.EnumValue value, SList<Gnome.Scan.EnumValue?> values, OptionHint hint)
 		{
 			this.name = name;
 			this.title = title;
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.extent	= extent;
-			this.value = value;
-			this._values = values;
+			this.extent = extent;
 			this.hint = hint;
+			this.values = values;
+			this.value = value;
 		}
 
-		public override void append(Gnome.Scan.EnumValue? value)
+		public override void append(Gnome.Scan.EnumValue value)
 		{
 			// Ensure the wanted papersize fit the device extent.
 			weak Gtk.PaperSize ps = (Gtk.PaperSize) value.value.get_boxed();
@@ -204,17 +198,17 @@ namespace Gnome.Scan {
 	}
 
 	public class OptionBoxed : Option {
-		public weak Boxed value {set; get;}
+		weak Value value {set; get;}
 
-		public OptionBoxed(string name, string title, string desc, string group, string domain, Boxed value, OptionHint hint)
+		public OptionBoxed(string name, string title, string desc, string group, string domain, Value value, OptionHint hint)
 		{
 			this.name = name;
 			this.title = title;
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
 			this.hint = hint;
+			this.value = value;
 		}
 	}
 
@@ -228,8 +222,8 @@ namespace Gnome.Scan {
 			this.desc = desc;
 			this.group = group;
 			this.domain = domain;
-			this.value = value;
 			this.hint = hint;
+			this.value = value;
 		}
 	}
 }
diff --git a/lib/gnome-scan-paper-size-widget.vala b/lib/gnome-scan-paper-size-widget.vala
index f9dc9fe..88a9da5 100644
--- a/lib/gnome-scan-paper-size-widget.vala
+++ b/lib/gnome-scan-paper-size-widget.vala
@@ -30,7 +30,6 @@ namespace Gnome.Scan {
 
 		enum Column {
 			LABEL,
-			VALUE,
 			LENGTH
 		}
 
@@ -44,7 +43,7 @@ namespace Gnome.Scan {
 			this.pack_start(box, false, true, 0);
 			strings = new HashTable<string,string>(GLib.str_hash, GLib.str_equal);
 
-			this.store = new ListStore(Column.LENGTH, typeof(string), typeof(Gnome.Scan.EnumValue));
+			this.store = new ListStore(Column.LENGTH, typeof(string));
 			combo = new ComboBox.with_model(store);
 			box.pack_start(combo, false, true, 0);
 			renderer = new CellRendererText();
@@ -52,16 +51,15 @@ namespace Gnome.Scan {
 			combo.set_attributes(renderer, "text", Column.LABEL);
 
 			var option = this.option as OptionEnum;
-			Gnome.Scan.EnumValue? curval = option.value;
-			foreach(weak Gnome.Scan.EnumValue? value in option.values) {
+			weak Gnome.Scan.EnumValue curval = option.value;
+			foreach(weak Gnome.Scan.EnumValue value in option.values) {
 				store.append(out iter);
 				store.set(iter,
-						  Column.LABEL, value.label,
-						  Column.VALUE, value);
+						  Column.LABEL, value.label);
 				
 				strings.insert(value.label, store.get_string_from_iter(iter));
 
-				if (curval != null && value.label == curval.label)
+				if (value.label == curval.label)
 						combo.set_active_iter(iter);
 			}
 
@@ -69,11 +67,9 @@ namespace Gnome.Scan {
 			label.set_alignment(0, (float)0.5);
 			label.set_padding(12, 0);
 			box.pack_start(label, false, true, 0);
-			if (curval != null) {
-				weak PaperSize ps = (PaperSize) curval.value.get_boxed();
-				label.set_text("%.0fx%.0f mm".printf(ps.get_width(Gtk.Unit.MM),
-													 ps.get_height(Gtk.Unit.MM)));
-			}
+			weak PaperSize ps = (PaperSize) curval.value.get_boxed();
+			label.set_text("%.0fx%.0f mm".printf(ps.get_width(Gtk.Unit.MM),
+												 ps.get_height(Gtk.Unit.MM)));
 
 			combo.notify["active"] += this.on_combo_changed;
 			option.notify["value"] += this.on_option_changed;
@@ -87,17 +83,18 @@ namespace Gnome.Scan {
 		private void on_combo_changed()
 		{
 			TreeIter iter;
-			weak Gnome.Scan.EnumValue? value;
 			weak string label;
 
 			combo.get_active_iter(out iter);
 			store.get(iter,
-					  Column.VALUE, out value,
 					  Column.LABEL, out label);
 
 			option.freeze_notify();
 			var option = this.option as OptionEnum;
-			option.value = value;
+			foreach(Gnome.Scan.EnumValue value in option.values) {
+				if (value.label == label)
+					option.value = value;
+			}
 			option.thaw_notify();
 		}
 
@@ -105,15 +102,16 @@ namespace Gnome.Scan {
 		{
 			TreeIter iter;
 			OptionEnum option = this.option as OptionEnum;
-			string str = strings.lookup(option.value.label);
+			weak Gnome.Scan.EnumValue evalue = option.value;
+			string str = strings.lookup(evalue.label);
 			if (str == null) {
-				debug("No path for %s value", option.value.label);
+				debug("No path for %s value", evalue.label);
 				return;
 			}
 
 			store.get_iter_from_string(out iter, str);
 
-			weak PaperSize ps = (PaperSize) option.value.value.get_boxed();
+			weak PaperSize ps = (PaperSize) evalue.value.get_boxed();
 			label.set_text("%.0fx%.0f mm".printf(ps.get_width(Gtk.Unit.MM),
 												 ps.get_height(Gtk.Unit.MM)));
 		   
diff --git a/modules/gsane/gsane-option-area.c b/modules/gsane/gsane-option-area.c
index d9fe142..ea5e5d5 100644
--- a/modules/gsane/gsane-option-area.c
+++ b/modules/gsane/gsane-option-area.c
@@ -72,22 +72,16 @@ gsane_option_area_update(GSaneOptionArea* self)
 {
 	GSaneOptionHandler* handler = GSANE_OPTION_HANDLER(self);
 	GtkPaperSize* ps;
-	GnomeScanEnumValue* value;
+	GnomeScanEnumValue evalue = {0};
 	gdouble tl_x, tl_y, br_x, br_y;
 	GnomeScanPoint *origin;
 	GtkPageOrientation orientation;
 
-	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->paper_size), &value);
+	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->paper_size), &evalue);
 
-	/* Value was unset, don't actually update hardware
-	   values. Should you use default hardware value ? No use case
-	   yet. */
-	if (value == NULL)
-		return;
-
-	ps = g_value_get_boxed(&value->value);
-	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->page_orientation), &value);
-	orientation = g_value_get_enum(&value->value);
+	ps = g_value_get_boxed(&evalue.value);
+	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->page_orientation), &evalue);
+	orientation = g_value_get_enum(&evalue.value);
 	origin = gnome_scan_option_pointer_get_value(GNOME_SCAN_OPTION_POINTER(self->priv->origin));
 	
 	tl_x = origin->x;
@@ -270,20 +264,21 @@ gsane_option_area_install_page_orientation(GSaneOptionArea *self)
 {
 	GSaneOptionHandler* handler = (GSaneOptionHandler*)self;
 	GSList* values = NULL;
-	GnomeScanEnumValue*value;
+	GnomeScanEnumValue value0;
+	GnomeScanEnumValue* value1;
 	GtkPaperSize *ps;
 	gdouble width, height;
 
-	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->paper_size), &value);
-	ps = g_value_get_boxed(&value->value);
+	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(self->priv->paper_size), &value0);
+	ps = g_value_get_boxed(&(value0.value));
 	width = gtk_paper_size_get_width(ps, GTK_UNIT_MM);
 	height= gtk_paper_size_get_height(ps, GTK_UNIT_MM);
 
 	values = gsane_option_area_add_orientation(self, values, GTK_PAGE_ORIENTATION_PORTRAIT, GTK_STOCK_ORIENTATION_PORTRAIT);
 	values = gsane_option_area_add_orientation(self, values, GTK_PAGE_ORIENTATION_LANDSCAPE, GTK_STOCK_ORIENTATION_LANDSCAPE);
-	value = width <= height ? values->data : values->next->data;
+	value1 = width <= height ? values->data : values->next->data;
 	self->priv->page_orientation = GNOME_SCAN_OPTION(gnome_scan_option_enum_new("page-orientation", _("Page Orientation"), _("Page orientation"), GNOME_SCAN_OPTION_GROUP_FORMAT, GETTEXT_PACKAGE,
-										    value, values, GNOME_SCAN_OPTION_HINT_PRIMARY));
+										    value1, values, GNOME_SCAN_OPTION_HINT_PRIMARY));
 	gnome_scan_node_install_option(GNOME_SCAN_NODE(handler->scanner), self->priv->page_orientation);
 	g_signal_connect_swapped(self->priv->page_orientation, "notify::value", G_CALLBACK(gsane_option_area_option_changed), self);
 }
diff --git a/modules/gsane/gsane-option-handler-generic.c b/modules/gsane/gsane-option-handler-generic.c
index 77af046..8e8ad6f 100644
--- a/modules/gsane/gsane-option-handler-generic.c
+++ b/modules/gsane/gsane-option-handler-generic.c
@@ -71,7 +71,7 @@ gsane_option_handler_generic_enum_get_value(GSaneOptionHandlerGeneric *self)
 	GnomeScanEnumValue* value = gsane_option_handler_get_enum(GSANE_OPTION_HANDLER(self), self->priv->desc, self->priv->index,
 								  gnome_scan_option_enum_get_values(GNOME_SCAN_OPTION_ENUM(self->priv->option)),
 								  NULL);
-	gnome_scan_option_enum_set_value(GNOME_SCAN_OPTION_ENUM(self->priv->option), &value);
+	gnome_scan_option_enum_set_value(GNOME_SCAN_OPTION_ENUM(self->priv->option), value);
 }
 
 
@@ -106,9 +106,9 @@ gsane_option_handler_generic_string_option_value_changed(GSaneOptionHandlerGener
 static void
 gsane_option_handler_generic_enum_option_changed(GSaneOptionHandlerGeneric* self, GParamSpec* pspec, GObject* option)
 {
-	GnomeScanEnumValue *evalue = NULL;
+	GnomeScanEnumValue evalue;
 	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(option), &evalue);
-	gsane_option_handler_set_enum(GSANE_OPTION_HANDLER(self), self->priv->desc, self->priv->index, evalue, NULL);
+	gsane_option_handler_set_enum(GSANE_OPTION_HANDLER(self), self->priv->desc, self->priv->index, &evalue, NULL);
 }
 
 
@@ -225,7 +225,7 @@ gsane_option_handler_generic_handle_string_option(GSaneOptionHandler *handler, c
 									    GSANE_OPTION_HANDLER_GENERIC_GET_CLASS(handler)->option_hint));
 	self->priv->get_value = gsane_option_handler_generic_string_get_value;
 	g_signal_connect_swapped(self->priv->option, "notify::value", G_CALLBACK(gsane_option_handler_generic_string_option_value_changed), self);
-	g_debug("\toption  %02d : string %s = \"%s\"", n, desc->name, value);
+	g_debug("\toption %02d : string %s = \"%s\"", n, desc->name, value);
 	g_free(value);
 }
 
@@ -261,9 +261,10 @@ static void
 gsane_option_handler_generic_handle_list_option(GSaneOptionHandler *handler, const SANE_Option_Descriptor*desc, SANE_Int n, const gchar* group)
 {
 	GSaneOptionHandlerGeneric* self = GSANE_OPTION_HANDLER_GENERIC(handler);
-	GSList *values = NULL;
-	GnomeScanEnumValue* default_value;
+	GSList *values = NULL, *iter;
+	GnomeScanEnumValue *default_value, *evalue;
 	gint array_length;
+	gchar *enums = NULL, *old, *enum_content;
 
 	switch(desc->type) {
 	case SANE_TYPE_INT:
@@ -291,6 +292,20 @@ gsane_option_handler_generic_handle_list_option(GSaneOptionHandler *handler, con
 	if (!values)
 		return;
 
+	for (iter = values ; iter; iter = iter->next) {
+		evalue = iter->data;
+		enum_content = g_strdup_value_contents(&evalue->value);
+		if (enums) {
+			old = enums;
+			enums = g_strdup_printf("%s, %s", enums, enum_content);
+			g_free(enum_content);
+			g_free(old);
+		}
+		else
+			enums = enum_content;
+	}
+
+
 	default_value = gsane_option_handler_get_enum(handler, desc, n, values, NULL);
 	self->priv->option = GNOME_SCAN_OPTION(gnome_scan_option_enum_new(desc->name, S_(desc->title), S_(desc->desc),
 									  gsane_option_handler_generic_get_group(self, desc, n, group),
@@ -299,6 +314,8 @@ gsane_option_handler_generic_handle_list_option(GSaneOptionHandler *handler, con
 									  GSANE_OPTION_HANDLER_GENERIC_GET_CLASS(self)->option_hint));
 	self->priv->get_value = gsane_option_handler_generic_enum_get_value;
 	g_signal_connect_swapped(self->priv->option, "notify::value", G_CALLBACK(gsane_option_handler_generic_enum_option_changed), self);
+	g_debug("\toption %02d : %s = %s ; enum = {%s}", n, desc->name, g_strdup_value_contents(&default_value->value), enums);
+	g_free(enums);
 }
 
 static void
@@ -333,15 +350,13 @@ static void
 gsane_option_handler_generic_reload_options(GSaneOptionHandler *handler)
 {
 	GSaneOptionHandlerGeneric*self = GSANE_OPTION_HANDLER_GENERIC(handler);
-	if (!self->priv->option) {
+	if (!self->priv->option)
 		return;
-	}
+
 	gboolean was_active = gnome_scan_option_get_active(self->priv->option);
 	gboolean is_active = SANE_OPTION_IS_ACTIVE(self->priv->desc->cap);
 	if (!was_active && is_active) {
-		g_object_freeze_notify(G_OBJECT(self->priv->option));
 		self->priv->get_value(self);
-		g_object_thaw_notify(G_OBJECT(self->priv->option));
 	}
 
 	if (was_active != is_active)
diff --git a/modules/gsane/gsane-option-handler.c b/modules/gsane/gsane-option-handler.c
index ae0cfc3..ba9f5e2 100644
--- a/modules/gsane/gsane-option-handler.c
+++ b/modules/gsane/gsane-option-handler.c
@@ -204,7 +204,7 @@ gsane_option_handler_control_option(GSaneOptionHandler*self, const SANE_Option_D
 
 	if (status != SANE_STATUS_GOOD) {
 		gsane_propagate_prefixed_status(error, status,
-						"%s(%s)", GSANE_ACTION_TO_STRING(action), desc->name);
+						"%s %s(%d)", GSANE_ACTION_TO_STRING(action), desc->name, index);
 		return FALSE;
 	}
 
@@ -227,12 +227,14 @@ gsane_option_handler_get_bool(GSaneOptionHandler *self, const SANE_Option_Descri
 {
 	gboolean value = FALSE;
 	gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, &value, error);
+	g_debug("get %s(%d) = %x", desc->name, index, value);
 	return value;
 }
 
 gboolean
 gsane_option_handler_set_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gboolean value, GError**error)
 {
+	g_debug("set %s(%d) = %x", desc->name, index, value);
 	return gsane_option_handler_control_option(self, desc, index, SANE_ACTION_SET_VALUE, &value, error);
 }
 
@@ -242,12 +244,14 @@ gsane_option_handler_get_int(GSaneOptionHandler *self, const SANE_Option_Descrip
 {
 	gint value = 0;
 	gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, &value, error);
+	g_debug("get %s(%d) = %d", desc->name, index, value);
 	return value;
 }
 
 gboolean
 gsane_option_handler_set_int(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gint value, GError **error)
 {
+	g_debug("set %s(%d) = %d", desc->name, index, value);
 	return gsane_option_handler_control_option(self, desc, index, SANE_ACTION_SET_VALUE, &value, error);
 }
 
@@ -255,20 +259,23 @@ gsane_option_handler_set_int(GSaneOptionHandler *self, const SANE_Option_Descrip
 gdouble
 gsane_option_handler_get_double(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError **error)
 {
-	SANE_Word value;
+	SANE_Word data;
+	gdouble value = 0.0;
+
 	switch(desc->type) {
 	case SANE_TYPE_INT:
-		return (gdouble) gsane_option_handler_get_int(self, desc, index, error);
+		value = (gdouble) gsane_option_handler_get_int(self, desc, index, error);
 		break;
 	case SANE_TYPE_FIXED:
-		gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, &value, error);
-		return SANE_UNFIX(value);
+		gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, &data, error);
+		value = SANE_UNFIX(data);
+		g_debug("get %s(%d) = %f", desc->name, index, value);
 		break;
 	default:
 		g_warning("Trying to get double value on a non number option.");
-		return 0.0;
 		break;
 	}
+	return value;
 }
 
 gboolean
@@ -280,6 +287,7 @@ gsane_option_handler_set_double(GSaneOptionHandler *self, const SANE_Option_Desc
 		return gsane_option_handler_set_int(self, desc, index, (gint) value, error);
 		break;
 	case SANE_TYPE_FIXED:
+		g_debug("set %s(%d) = %f", desc->name, index, value);
 		fixed = SANE_FIX(value);
 		return gsane_option_handler_control_option(self, desc, index, SANE_ACTION_SET_VALUE, &fixed, error);
 		break;
@@ -293,17 +301,19 @@ gsane_option_handler_set_double(GSaneOptionHandler *self, const SANE_Option_Desc
 gchar*
 gsane_option_handler_get_string(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError **error)
 {
-	gchar* value = g_new0(gchar, desc->size);
-	gchar* ret;
-	gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, value, error);
-	ret = g_strdup(value);
-	g_free(value);
-	return ret;
+	gchar* data = g_new0(gchar, desc->size);
+	gchar* value;
+	gsane_option_handler_control_option(self, desc, index, SANE_ACTION_GET_VALUE, data, error);
+	value = g_strdup(data);
+	g_free(data);
+	g_debug("get %s(%d) = '%s'", desc->name, index, value);
+	return value;
 }
 
 gboolean
 gsane_option_handler_set_string(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gchar* value, GError **error)
 {
+	g_debug("set %s(%d) = '%s'", desc->name, index, value);
 	return gsane_option_handler_control_option(self, desc, index, SANE_ACTION_SET_VALUE, value, error);
 }
 
@@ -320,57 +330,62 @@ gsane_option_handler_get_enum(GSaneOptionHandler *self, const SANE_Option_Descri
 	gchar* strval;
 	GSList* iter;
 	GnomeScanEnumValue* evalue;
+	/* default to first */
+	const GnomeScanEnumValue* retvalue = values->data;
 
 	switch(desc->type) {
 	case SANE_TYPE_INT:
 		intval = gsane_option_handler_get_int(self, desc, index, error);
 		for (iter = values; iter; iter = iter->next) {
 			evalue = iter->data;
-			if (g_value_get_int(&evalue->value) == intval)
-				return evalue;
+			if (g_value_get_int(&evalue->value) == intval) {
+				retvalue = evalue;
+				break;
+			}
 		}
-		/* default to first */
-		return values->data;
 		break;
 	case SANE_TYPE_FIXED:
 		doubleval = gsane_option_handler_get_double(self, desc, index, error);
 		for (iter = values; iter; iter = iter->next) {
 			evalue = iter->data;
-			if (g_value_get_double(&evalue->value) == doubleval)
-				return evalue;
+			if (g_value_get_double(&evalue->value) == doubleval) {
+				retvalue = evalue;
+				break;
+			}
 		}
-		/* default to first */
-		return values->data;
 		break;
 	case SANE_TYPE_STRING:
 		strval = gsane_option_handler_get_string(self, desc, index, error);
 		for (iter = values; iter; iter = iter->next) {
 			evalue = iter->data;
-			if (g_str_equal(g_value_get_string(&evalue->value), strval))
-				return evalue;
+			if (g_str_equal(g_value_get_string(&evalue->value), strval)) {
+				retvalue = evalue;
+				break;
+			}
 		}
-		/* default to first */
-		return values->data;
 		break;
 	default:
 		break;
 	}
 
-	return NULL;
+	if (retvalue)
+		return gnome_scan_enum_value_dup(retvalue);
+	else
+		return NULL;
 }
 
 gboolean
-gsane_option_handler_set_enum(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GnomeScanEnumValue* value, GError **error)
+gsane_option_handler_set_enum(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GnomeScanEnumValue* evalue, GError **error)
 {
 	switch(desc->type) {
 	case SANE_TYPE_INT:
-		return gsane_option_handler_set_int(self, desc, index, g_value_get_int(&value->value), error);
+		return gsane_option_handler_set_int(self, desc, index, g_value_get_int(&evalue->value), error);
 		break;
 	case SANE_TYPE_FIXED:
-		return gsane_option_handler_set_double(self, desc, index, g_value_get_double(&value->value), error);
+		return gsane_option_handler_set_double(self, desc, index, g_value_get_double(&evalue->value), error);
 		break;
 	case SANE_TYPE_STRING:
-		return gsane_option_handler_set_string(self, desc, index, g_value_dup_string(&value->value), error);
+		return gsane_option_handler_set_string(self, desc, index, g_value_dup_string(&evalue->value), error);
 	default:
 		return FALSE;
 		break;
diff --git a/modules/gsane/gsane-option-source.c b/modules/gsane/gsane-option-source.c
index dcd2da7..ef3cab3 100644
--- a/modules/gsane/gsane-option-source.c
+++ b/modules/gsane/gsane-option-source.c
@@ -104,11 +104,11 @@ static const gchar* negative_src[] = {
 static void
 gsane_option_source_option_changed(GSaneOptionSource* self, GParamSpec *pspec, GObject* option)
 {
-	GnomeScanEnumValue *evalue = NULL;
+	GnomeScanEnumValue evalue;
 	gnome_scan_option_enum_get_value(GNOME_SCAN_OPTION_ENUM(option), &evalue);
 	gsane_scanner_set_mass_acquisition(GSANE_SCANNER(GSANE_OPTION_HANDLER(self)->scanner),
-					   g_str_equal(evalue->label, GSANE_SOURCE_ADF));
-	gsane_option_handler_set_enum(GSANE_OPTION_HANDLER(self), self->priv->source_desc, self->priv->source_index, evalue, NULL);
+					   g_str_equal(evalue.label, GSANE_SOURCE_ADF));
+	gsane_option_handler_set_enum(GSANE_OPTION_HANDLER(self), self->priv->source_desc, self->priv->source_index, &evalue, NULL);
 }
 
 static void
diff --git a/modules/gsane/gsane-scanner.c b/modules/gsane/gsane-scanner.c
index d6da867..6cfde4d 100644
--- a/modules/gsane/gsane-scanner.c
+++ b/modules/gsane/gsane-scanner.c
@@ -244,6 +244,8 @@ gsane_scanner_handle_sane_option(GSaneScanner*self, SANE_Int n, const SANE_Optio
 static void
 gsane_scanner_probe_options(GSaneScanner *self)
 {
+	g_return_if_fail(self != NULL);
+
 	SANE_Status status;
 	const SANE_Option_Descriptor* desc;
 	SANE_Int count;
diff --git a/src/flegita-sink.vala b/src/flegita-sink.vala
index 49b633b..8d77828 100644
--- a/src/flegita-sink.vala
+++ b/src/flegita-sink.vala
@@ -63,7 +63,7 @@ namespace Flegita {
 
 		public override bool start_image()
 		{
-			string filename;
+			string filename = "";
 			string number;
 			do {
 				if (count == 0)



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