gnome-scan r703 - in trunk: . modules/gsane
- From: bersace svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-scan r703 - in trunk: . modules/gsane
- Date: Mon, 15 Dec 2008 22:38:40 +0000 (UTC)
Author: bersace
Date: Mon Dec 15 22:38:40 2008
New Revision: 703
URL: http://svn.gnome.org/viewvc/gnome-scan?rev=703&view=rev
Log:
Reload device parameters and determine actual device status.
Modified:
trunk/ChangeLog
trunk/modules/gsane/gsane-option-handler.c
trunk/modules/gsane/gsane-scanner.c
trunk/modules/gsane/gsane-scanner.h
Modified: trunk/modules/gsane/gsane-option-handler.c
==============================================================================
--- trunk/modules/gsane/gsane-option-handler.c (original)
+++ trunk/modules/gsane/gsane-option-handler.c Mon Dec 15 22:38:40 2008
@@ -20,6 +20,7 @@
*/
#include "gsane-option-handler.h"
+#include "gsane-scanner.h"
#include "gsane-common.h"
#define GSANE_OPTION_HANDLER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), GSANE_TYPE_OPTION_HANDLER, GSaneOptionHandlerPrivate))
@@ -142,7 +143,7 @@
if (flags & SANE_INFO_RELOAD_OPTIONS)
g_signal_emit_by_name(self->scanner, "reload-options");
if (flags & SANE_INFO_RELOAD_PARAMS)
- g_debug("Reload params");
+ gsane_scanner_reload_parameters(GSANE_SCANNER(self->scanner));
return inexact;
}
Modified: trunk/modules/gsane/gsane-scanner.c
==============================================================================
--- trunk/modules/gsane/gsane-scanner.c (original)
+++ trunk/modules/gsane/gsane-scanner.c Mon Dec 15 22:38:40 2008
@@ -46,6 +46,7 @@
/* status */
gboolean probe_done;
+ gboolean guessing_parameters;
};
enum {
@@ -71,7 +72,9 @@
return GNOME_SCAN_SCANNER(object);
}
-gboolean
+
+/* Returns whether the status is good */
+static gboolean
gsane_scanner_check_sane_status(GSaneScanner *self, const gchar* operation, SANE_Status status)
{
/* TODO: update node status, handle error/warning */
@@ -84,6 +87,37 @@
}
static void
+gsane_scanner_reload_parameters_thread(GSaneScanner* self)
+{
+ SANE_Status status;
+ SANE_Parameters params;
+ g_debug("%s: reload params", self->priv->sane_id);
+
+ status = sane_start(self->priv->handle);
+ if (!gsane_scanner_check_sane_status(self, "sane_start", status))
+ goto end;
+
+ status = sane_get_parameters(self->priv->handle, ¶ms);
+ if (gsane_scanner_check_sane_status(self, "sane_get_parameters", status))
+ gnome_scan_node_update_status(GNOME_SCAN_NODE(self), GNOME_SCAN_STATUS_READY, NULL);
+
+ g_debug("%s parameters reloaded", self->priv->sane_id);
+ end:
+ sane_cancel(self->priv->handle);
+ self->priv->guessing_parameters = FALSE;
+}
+
+void
+gsane_scanner_reload_parameters(GSaneScanner* self)
+{
+ if (self->priv->guessing_parameters)
+ return;
+
+ self->priv->guessing_parameters = TRUE;
+ g_thread_create((GThreadFunc)gsane_scanner_reload_parameters_thread, self, FALSE, NULL);
+}
+
+static void
gsane_scanner_handle_sane_option(GSaneScanner*self, SANE_Int n, const SANE_Option_Descriptor* desc, const gchar* group)
{
/* retrieve handler type */
@@ -161,7 +195,7 @@
}
gnome_scan_node_update_status(GNOME_SCAN_NODE(self), GNOME_SCAN_STATUS_UNCONFIGURED, NULL);
-
+ gsane_scanner_reload_parameters(self);
end:
self->priv->probe_done = TRUE;
return NULL;
@@ -192,6 +226,7 @@
self->priv->option_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)gsane_option_handler_destroy);
self->priv->handle = NULL;
self->priv->probe_done = FALSE;
+ self->priv->guessing_parameters = FALSE;
}
static void
Modified: trunk/modules/gsane/gsane-scanner.h
==============================================================================
--- trunk/modules/gsane/gsane-scanner.h (original)
+++ trunk/modules/gsane/gsane-scanner.h Mon Dec 15 22:38:40 2008
@@ -58,6 +58,7 @@
GType gsane_scanner_get_type (void) G_GNUC_CONST;
void gsane_scanner_register_type (GTypeModule *module);
GnomeScanScanner* gsane_scanner_new (const SANE_Device *device);
+void gsane_scanner_reload_parameters(GSaneScanner* self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]