gnome-scan r675 - in trunk: . modules/gsane
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r675 - in trunk: . modules/gsane
- Date: Sun, 14 Dec 2008 13:56:33 +0000 (UTC)
Author: bersace
Date: Sun Dec 14 13:56:32 2008
New Revision: 675
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=675&view=rev
Log:
Added option reloading upon option value setting.
Modified:
trunk/ChangeLog
trunk/modules/gsane/gsane-option-handler-generic.c
trunk/modules/gsane/gsane-option-handler.c
trunk/modules/gsane/gsane-option-handler.h
Modified: trunk/modules/gsane/gsane-option-handler-generic.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler-generic.c (original)
+++ trunk/modules/gsane/gsane-option-handler-generic.c Sun Dec 14 13:56:32 2008
@@ -50,9 +50,14 @@
self->priv->index = n;
self->priv->desc = desc;
- /* don't trust SANE test backend */
+ /* don't trust SANE test backend for primary/secondary
+ options. Most primary options are swallowed in
+ special/high-level OptionHandler. Might make sense to have
+ a generic primary option handler subclassing Generic
+ handler, with rules by name. */
GnomeScanOptionHint hint = GNOME_SCAN_OPTION_HINT_SECONDARY;
+ /* instanciate option with default value depending on SANE_Value_Type */
switch(desc->type) {
case SANE_TYPE_BOOL:
boolval = gsane_option_handler_get_bool(GSANE_OPTION_HANDLER(self), desc, n, NULL);
@@ -61,6 +66,7 @@
g_debug("\toption %d : boolean %s = %s", n, desc->name, GSANE_BOOLEAN_TO_STRING(boolval));
break;
default:
+ g_debug("\toption %d : <unhandled> %s", n, desc->name);
break;
}
@@ -74,13 +80,24 @@
gnome_scan_node_install_option(GNOME_SCAN_NODE(handler->scanner), self->priv->option);
}
-void
+static void
+gsane_option_handler_generic_reload_options(GSaneOptionHandler *handler)
+{
+ GSaneOptionHandlerGeneric*self = GSANE_OPTION_HANDLER_GENERIC(handler);
+ if (!self->priv->option) {
+ return;
+ }
+ g_object_set(self->priv->option, "active", SANE_OPTION_IS_ACTIVE(self->priv->desc->cap), NULL);
+}
+
+static void
gsane_option_handler_generic_class_init(gpointer g_class, gpointer class_data)
{
gsane_option_handler_generic_parent_class = g_type_class_peek_parent(g_class);
g_type_class_add_private(g_class, sizeof(GSaneOptionHandlerGenericPrivate));
GSaneOptionHandlerClass* oh_class = GSANE_OPTION_HANDLER_CLASS(g_class);
- oh_class->handle_option = gsane_option_handler_generic_handle_option;
+ oh_class->handle_option = gsane_option_handler_generic_handle_option;
+ oh_class->reload_options = gsane_option_handler_generic_reload_options;
}
void
Modified: trunk/modules/gsane/gsane-option-handler.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.c (original)
+++ trunk/modules/gsane/gsane-option-handler.c Sun Dec 14 13:56:32 2008
@@ -40,13 +40,13 @@
}
}
-
GSaneOptionHandler*
gsane_option_handler_new(GType type, GnomeScanScanner* scanner, SANE_Handle handle)
{
GSaneOptionHandler *self = GSANE_OPTION_HANDLER(g_type_create_instance(type));
self->priv->handle = handle;
self->scanner = scanner;
+ g_signal_connect_swapped(scanner, "reload-options", G_CALLBACK(gsane_option_handler_reload_options), self);
return self;
}
@@ -57,7 +57,7 @@
}
static void
-gsane_option_handler_do_handle_option(GSaneOptionHandler *self, SANE_Int n, const SANE_Option_Descriptor* desc, const gchar* group)
+gsane_option_handler_default_handle_option(GSaneOptionHandler *self, SANE_Int n, const SANE_Option_Descriptor* desc, const gchar* group)
{
g_warning("gsane_option_handler_handle_option not implemented by %s", g_type_name(G_TYPE_FROM_INSTANCE(self)));
}
@@ -69,6 +69,18 @@
}
static void
+gsane_option_handler_default_reload_options(GSaneOptionHandler *self)
+{
+ g_warning("gsane_option_handler_reload_option not implemented by %s", g_type_name(G_TYPE_FROM_INSTANCE(self)));
+}
+
+void
+gsane_option_handler_reload_options(GSaneOptionHandler *self)
+{
+ GSANE_OPTION_HANDLER_GET_CLASS(self)->reload_options(self);
+}
+
+static void
gsane_option_handler_control_option(GSaneOptionHandler*self, const SANE_Option_Descriptor* desc, SANE_Int index, SANE_Action action, gpointer data, GError**error)
{
SANE_Status status;
@@ -97,7 +109,7 @@
if (flags & SANE_INFO_INEXACT)
g_debug("Value inexact");
if (flags & SANE_INFO_RELOAD_OPTIONS)
- g_debug("Reload options");
+ g_signal_emit_by_name(self->scanner, "reload-options");
if (flags & SANE_INFO_RELOAD_PARAMS)
g_debug("Reload params");
}
@@ -131,7 +143,8 @@
GSaneOptionHandlerClass *oh_class = GSANE_OPTION_HANDLER_CLASS(g_class);
g_type_class_add_private(g_class, sizeof(GSaneOptionHandlerPrivate));
oh_class->unique = FALSE;
- oh_class->handle_option = gsane_option_handler_do_handle_option;
+ oh_class->handle_option = gsane_option_handler_default_handle_option;
+ oh_class->reload_options = gsane_option_handler_default_reload_options;
}
GType
Modified: trunk/modules/gsane/gsane-option-handler.h
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.h (original)
+++ trunk/modules/gsane/gsane-option-handler.h Sun Dec 14 13:56:32 2008
@@ -42,7 +42,7 @@
{
GTypeClass parent_class;
void (*handle_option) (GSaneOptionHandler*self, SANE_Int n, const SANE_Option_Descriptor*desc, const gchar* group);
-
+ void (*reload_options) (GSaneOptionHandler*self);
/* Whether the scanner must have a unique instance of the
option handler */
gboolean unique;
@@ -63,6 +63,7 @@
GSaneOptionHandler* gsane_option_handler_new(GType type, GnomeScanScanner *scanner, SANE_Handle handle);
void gsane_option_handler_destroy(GSaneOptionHandler *self);
void gsane_option_handler_handle_option(GSaneOptionHandler *self, SANE_Int n, const SANE_Option_Descriptor* desc, const gchar*group);
+void gsane_option_handler_reload_options(GSaneOptionHandler *self);
gboolean gsane_option_handler_get_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, GError **error);
void gsane_option_handler_set_bool(GSaneOptionHandler *self, const SANE_Option_Descriptor* desc, SANE_Int index, gboolean value, GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]