[gnome-scan] Reload SANE options descriptor when reload needed.



commit b45747f047fb5069b621ddb9a01b7306e899f543
Author: Ã?tienne Bersac <bersace gnome org>
Date:   Fri Feb 19 22:09:40 2010 +0100

    Reload SANE options descriptor when reload needed.

 modules/gsane/gsane-option-area.c            |   12 ++++++++++++
 modules/gsane/gsane-option-handler-generic.c |    3 +++
 modules/gsane/gsane-option-handler.c         |   10 +++++++++-
 modules/gsane/gsane-option-handler.h         |    1 +
 modules/gsane/gsane-option-source.c          |   11 ++++++++++-
 5 files changed, 35 insertions(+), 2 deletions(-)
---
diff --git a/modules/gsane/gsane-option-area.c b/modules/gsane/gsane-option-area.c
index ea5e5d5..7b8eedc 100644
--- a/modules/gsane/gsane-option-area.c
+++ b/modules/gsane/gsane-option-area.c
@@ -372,12 +372,24 @@ gsane_option_area_handle_option(GSaneOptionHandler *handler, const SANE_Option_D
 }
 
 static void
+gsane_option_area_reload_options(GSaneOptionHandler *handler)
+{
+	GSaneOptionArea* self = GSANE_OPTION_AREA (handler);
+
+	self->priv->tl_x_desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->tl_x_index);
+	self->priv->tl_y_desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->tl_y_index);
+	self->priv->br_x_desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->br_x_index);
+	self->priv->br_y_desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->br_y_index);
+}
+
+static void
 gsane_option_area_class_init(GSaneOptionAreaClass *klass)
 {
 	g_type_class_add_private(klass, sizeof(GSaneOptionAreaPrivate));
 	GSaneOptionHandlerClass *oh_class = GSANE_OPTION_HANDLER_CLASS(klass);
 	oh_class->unique	= TRUE;
 	oh_class->handle_option = gsane_option_area_handle_option;
+	oh_class->reload_options= gsane_option_area_reload_options;
 
 #define	gsane_option_handler_handle_tl_x	gsane_option_handler_handle_matched
 #define	gsane_option_handler_handle_tl_y	gsane_option_handler_handle_matched
diff --git a/modules/gsane/gsane-option-handler-generic.c b/modules/gsane/gsane-option-handler-generic.c
index 8e8ad6f..ab641f2 100644
--- a/modules/gsane/gsane-option-handler-generic.c
+++ b/modules/gsane/gsane-option-handler-generic.c
@@ -353,9 +353,12 @@ gsane_option_handler_generic_reload_options(GSaneOptionHandler *handler)
 	if (!self->priv->option)
 		return;
 
+	self->priv->desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->index);
+
 	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_debug("Activate option %s(%d)", self->priv->desc->name, self->priv->index);
 		self->priv->get_value(self);
 	}
 
diff --git a/modules/gsane/gsane-option-handler.c b/modules/gsane/gsane-option-handler.c
index ba9f5e2..545c0ee 100644
--- a/modules/gsane/gsane-option-handler.c
+++ b/modules/gsane/gsane-option-handler.c
@@ -105,6 +105,11 @@ gsane_option_handler_reload_options(GSaneOptionHandler *self)
 	GSANE_OPTION_HANDLER_GET_CLASS(self)->reload_options(self);
 }
 
+const SANE_Option_Descriptor*
+gsane_option_handler_get_sane_option_descriptor(GSaneOptionHandler *self, SANE_Int n)
+{
+	return sane_get_option_descriptor(self->priv->handle, n);
+}
 
 GSList*
 gsane_option_handler_enum_list_int_values(GSaneOptionHandler *handler, const SANE_Option_Descriptor*desc, SANE_Int n)
@@ -213,8 +218,11 @@ gsane_option_handler_control_option(GSaneOptionHandler*self, const SANE_Option_D
 		g_debug("Setting %s : value inexact", desc->name);
 		inexact = TRUE;
 	}
-	if (flags & SANE_INFO_RELOAD_OPTIONS)
+	if (flags & SANE_INFO_RELOAD_OPTIONS) {
+		g_debug("Reload options");
 		g_signal_emit_by_name(self->scanner, "reload-options");
+		g_debug("Options reloaded");
+	}
 	if (flags & SANE_INFO_RELOAD_PARAMS)
 		gsane_scanner_reload_parameters(GSANE_SCANNER(self->scanner));
 
diff --git a/modules/gsane/gsane-option-handler.h b/modules/gsane/gsane-option-handler.h
index f823352..4b394a2 100644
--- a/modules/gsane/gsane-option-handler.h
+++ b/modules/gsane/gsane-option-handler.h
@@ -109,6 +109,7 @@ void gsane_option_handler_reload_options(GSaneOptionHandler *self);
 GSList* gsane_option_handler_enum_list_int_values(GSaneOptionHandler *handler, const SANE_Option_Descriptor*desc, SANE_Int n);
 GSList* gsane_option_handler_enum_list_double_values(GSaneOptionHandler *handler, const SANE_Option_Descriptor*desc, SANE_Int n);
 GSList* gsane_option_handler_enum_list_string_values(GSaneOptionHandler *handler, const SANE_Option_Descriptor*desc, SANE_Int n);
+const SANE_Option_Descriptor* gsane_option_handler_get_sane_option_descriptor(GSaneOptionHandler *self, SANE_Int n);
 
 gboolean gsane_option_handler_get_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError **error);
 gboolean gsane_option_handler_set_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gboolean value, GError **error);
diff --git a/modules/gsane/gsane-option-source.c b/modules/gsane/gsane-option-source.c
index ef3cab3..fbc3e08 100644
--- a/modules/gsane/gsane-option-source.c
+++ b/modules/gsane/gsane-option-source.c
@@ -155,7 +155,7 @@ gsane_option_handler_handle_source(GSaneOptionHandler* handler, const SANE_Optio
 	g_free(sources);
 }
 
-void
+static void
 gsane_option_source_handle_option(GSaneOptionHandler *handler, const SANE_Option_Descriptor* desc, SANE_Int n, const gchar*group)
 {
 	GSaneOptionSource *self = GSANE_OPTION_SOURCE(handler);
@@ -165,6 +165,14 @@ gsane_option_source_handle_option(GSaneOptionHandler *handler, const SANE_Option
 }
 
 static void
+gsane_option_source_reload_option(GSaneOptionHandler *handler)
+{
+	GSaneOptionSource *self = GSANE_OPTION_SOURCE(handler);
+
+	self->priv->source_desc = gsane_option_handler_get_sane_option_descriptor(handler, self->priv->source_index);
+}
+
+static void
 gsane_option_source_class_init(GSaneOptionSourceClass *klass)
 {
 	GSaneOptionHandlerClass *oh_class = GSANE_OPTION_HANDLER_CLASS(klass);
@@ -173,6 +181,7 @@ gsane_option_source_class_init(GSaneOptionSourceClass *klass)
 
 	oh_class->unique = TRUE;
 	oh_class->handle_option = gsane_option_source_handle_option;
+	oh_class->reload_options = gsane_option_source_reload_option;
 	GSANE_OPTION_HANDLER_CLASS_INSTALL_OPTION(klass, source, "doc-source");
 }
 



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