|
|
0488e61 |
From f6416acdd722ebd6e20af4e1f5d8593c72ded812 Mon Sep 17 00:00:00 2001
|
|
|
0488e61 |
From: Jeffrey Ratcliffe <4869402+carygravel@users.noreply.github.com>
|
|
|
0488e61 |
Date: Sat, 8 Apr 2023 00:00:00 +0000
|
|
|
0488e61 |
Subject: [PATCH] Skip options where min>max
|
|
|
0488e61 |
MIME-Version: 1.0
|
|
|
0488e61 |
Content-Type: text/plain; charset=UTF-8
|
|
|
0488e61 |
Content-Transfer-Encoding: 8bit
|
|
|
0488e61 |
|
|
|
e0c280c |
Petr Písař: Ported to 2.13.2.
|
|
|
0488e61 |
---
|
|
|
0488e61 |
MANIFEST | 1 +
|
|
|
0488e61 |
lib/Gscan2pdf/Dialog/Scan/Image_Sane.pm | 11 ++
|
|
|
0488e61 |
t/06182_Dialog_Scan_Image_Sane.t | 159 ++++++++++++++++++++++++
|
|
|
0488e61 |
create mode 100644 t/06182_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
|
|
|
0488e61 |
diff --git a/MANIFEST b/MANIFEST
|
|
|
0488e61 |
index 79f05af1..f6142433 100644
|
|
|
0488e61 |
--- a/MANIFEST
|
|
|
0488e61 |
+++ b/MANIFEST
|
|
|
0488e61 |
@@ -191,6 +191,7 @@ t/0615_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/0616_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/0617_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/06181_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
+t/06182_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/0618_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/06190_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
t/06191_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
diff --git a/lib/Gscan2pdf/Dialog/Scan/Image_Sane.pm b/lib/Gscan2pdf/Dialog/Scan/Image_Sane.pm
|
|
|
0488e61 |
index 0730373f..c2c23331 100644
|
|
|
0488e61 |
--- a/lib/Gscan2pdf/Dialog/Scan/Image_Sane.pm
|
|
|
0488e61 |
+++ b/lib/Gscan2pdf/Dialog/Scan/Image_Sane.pm
|
|
|
0488e61 |
@@ -295,6 +295,17 @@ sub _initialise_options { ## no critic (ProhibitExcessComplexity)
|
|
|
0488e61 |
if ( $opt->{constraint}{quant} ) {
|
|
|
0488e61 |
$step = $opt->{constraint}{quant};
|
|
|
0488e61 |
}
|
|
|
0488e61 |
+ if ( $opt->{constraint}{min} > $opt->{constraint}{max} ) {
|
|
|
0488e61 |
+ $logger->error(
|
|
|
0488e61 |
+ sprintf __(
|
|
|
0488e61 |
+"Ignoring scan option '%s', minimum range (%s) > maximum (%s)"
|
|
|
0488e61 |
+ ),
|
|
|
0488e61 |
+ $opt->{name},
|
|
|
0488e61 |
+ $opt->{constraint}{min},
|
|
|
0488e61 |
+ $opt->{constraint}{max}
|
|
|
0488e61 |
+ );
|
|
|
0488e61 |
+ next;
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
$widget =
|
|
|
0488e61 |
Gtk3::SpinButton->new_with_range( $opt->{constraint}{min},
|
|
|
0488e61 |
$opt->{constraint}{max}, $step );
|
|
|
0488e61 |
diff --git a/t/06182_Dialog_Scan_Image_Sane.t b/t/06182_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
new file mode 100644
|
|
|
0488e61 |
index 00000000..19747eea
|
|
|
0488e61 |
--- /dev/null
|
|
|
0488e61 |
+++ b/t/06182_Dialog_Scan_Image_Sane.t
|
|
|
0488e61 |
@@ -0,0 +1,159 @@
|
|
|
0488e61 |
+use warnings;
|
|
|
0488e61 |
+use strict;
|
|
|
0488e61 |
+use Test::More tests => 2;
|
|
|
0488e61 |
+use Glib qw(TRUE FALSE); # To get TRUE and FALSE
|
|
|
0488e61 |
+use Gtk3 -init; # Could just call init separately
|
|
|
0488e61 |
+use Image::Sane ':all'; # To get SANE_* enums
|
|
|
0488e61 |
+use Sub::Override; # Override Frontend::Image_Sane to test functionality that
|
|
|
0488e61 |
+ # we can't with the test backend
|
|
|
0488e61 |
+use Storable qw(freeze); # For cloning the options cache
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+BEGIN {
|
|
|
0488e61 |
+ use Gscan2pdf::Dialog::Scan::Image_Sane;
|
|
|
0488e61 |
+}
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+#########################
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+my $window = Gtk3::Window->new;
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+Gscan2pdf::Translation::set_domain('gscan2pdf');
|
|
|
0488e61 |
+use Log::Log4perl qw(:easy);
|
|
|
0488e61 |
+Log::Log4perl->easy_init($WARN);
|
|
|
0488e61 |
+my $logger = Log::Log4perl::get_logger;
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+# The overrides must occur before the thread is spawned in setup.
|
|
|
0488e61 |
+my $override = Sub::Override->new;
|
|
|
0488e61 |
+$override->replace(
|
|
|
0488e61 |
+ 'Gscan2pdf::Frontend::Image_Sane::_thread_get_devices' => sub {
|
|
|
0488e61 |
+ my ( $self, $uuid ) = @_;
|
|
|
0488e61 |
+ $self->{return}->enqueue(
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ type => 'finished',
|
|
|
0488e61 |
+ process => 'get-devices',
|
|
|
0488e61 |
+ uuid => $uuid,
|
|
|
0488e61 |
+ info => freeze(
|
|
|
0488e61 |
+ [
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ 'name' => 'mock_device',
|
|
|
0488e61 |
+ 'label' => 'mock_device'
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+ ]
|
|
|
0488e61 |
+ ),
|
|
|
0488e61 |
+ status => SANE_STATUS_GOOD,
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+ );
|
|
|
0488e61 |
+ return;
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+$override->replace(
|
|
|
0488e61 |
+ 'Gscan2pdf::Frontend::Image_Sane::_thread_open_device' => sub {
|
|
|
0488e61 |
+ my ( $self, $uuid, $device_name ) = @_;
|
|
|
0488e61 |
+ $self->{return}->enqueue(
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ type => 'finished',
|
|
|
0488e61 |
+ process => 'open-device',
|
|
|
0488e61 |
+ uuid => $uuid,
|
|
|
0488e61 |
+ info => freeze( \$device_name ),
|
|
|
0488e61 |
+ status => SANE_STATUS_GOOD,
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+ );
|
|
|
0488e61 |
+ return;
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+my $options = [
|
|
|
0488e61 |
+ undef,
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ 'cap' => 37,
|
|
|
0488e61 |
+ 'constraint' => {
|
|
|
0488e61 |
+ 'max' => -444909896,
|
|
|
0488e61 |
+ 'min' => 0,
|
|
|
0488e61 |
+ 'quant' => 32648
|
|
|
0488e61 |
+ },
|
|
|
0488e61 |
+ 'constraint_type' => 1,
|
|
|
0488e61 |
+ 'desc' => 'Controls the brightness of the acquired image.',
|
|
|
0488e61 |
+ 'index' => 1,
|
|
|
0488e61 |
+ 'max_values' => 1,
|
|
|
0488e61 |
+ 'name' => 'brightness',
|
|
|
0488e61 |
+ 'title' => 'Brightness',
|
|
|
0488e61 |
+ 'type' => 1,
|
|
|
0488e61 |
+ 'unit' => 0
|
|
|
0488e61 |
+ },
|
|
|
0488e61 |
+];
|
|
|
0488e61 |
+$override->replace(
|
|
|
0488e61 |
+ 'Gscan2pdf::Frontend::Image_Sane::_thread_get_options' => sub {
|
|
|
0488e61 |
+ my ( $self, $uuid ) = @_;
|
|
|
0488e61 |
+ $self->{return}->enqueue(
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ type => 'finished',
|
|
|
0488e61 |
+ process => 'get-options',
|
|
|
0488e61 |
+ uuid => $uuid,
|
|
|
0488e61 |
+ info => freeze($options),
|
|
|
0488e61 |
+ status => SANE_STATUS_GOOD,
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+ );
|
|
|
0488e61 |
+ return;
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+# $override->replace(
|
|
|
0488e61 |
+# 'Gscan2pdf::Frontend::Image_Sane::_thread_set_option' => sub {
|
|
|
0488e61 |
+# my ( $self, $uuid, $index, $value ) = @_;
|
|
|
0488e61 |
+# my $info = 0;
|
|
|
0488e61 |
+# if ( $index == 1 and $value = 'Flatbed' ) {
|
|
|
0488e61 |
+# $options->[2]{constraint} = [ 75, 100, 200, 300, 600, 1200 ];
|
|
|
0488e61 |
+# $info = SANE_INFO_RELOAD_OPTIONS;
|
|
|
0488e61 |
+# }
|
|
|
0488e61 |
+# $options->[$index]{val} = $value;
|
|
|
0488e61 |
+# $self->{return}->enqueue(
|
|
|
0488e61 |
+# {
|
|
|
0488e61 |
+# type => 'finished',
|
|
|
0488e61 |
+# process => 'set-option',
|
|
|
0488e61 |
+# uuid => $uuid,
|
|
|
0488e61 |
+# status => SANE_STATUS_GOOD,
|
|
|
0488e61 |
+# info => $info,
|
|
|
0488e61 |
+# }
|
|
|
0488e61 |
+# );
|
|
|
0488e61 |
+# return;
|
|
|
0488e61 |
+# }
|
|
|
0488e61 |
+# );
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+Gscan2pdf::Frontend::Image_Sane->setup($logger);
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+my $dialog = Gscan2pdf::Dialog::Scan::Image_Sane->new(
|
|
|
0488e61 |
+ title => 'title',
|
|
|
0488e61 |
+ 'transient-for' => $window,
|
|
|
0488e61 |
+ 'logger' => $logger
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+$dialog->{signal} = $dialog->signal_connect(
|
|
|
0488e61 |
+ 'changed-device-list' => sub {
|
|
|
0488e61 |
+ $dialog->signal_handler_disconnect( $dialog->{signal} );
|
|
|
0488e61 |
+ is_deeply(
|
|
|
0488e61 |
+ $dialog->get('device-list'),
|
|
|
0488e61 |
+ [
|
|
|
0488e61 |
+ {
|
|
|
0488e61 |
+ 'name' => 'mock_device',
|
|
|
0488e61 |
+ 'model' => 'mock_device',
|
|
|
0488e61 |
+ 'label' => 'mock_device'
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+ ],
|
|
|
0488e61 |
+ 'successfully mocked getting device list'
|
|
|
0488e61 |
+ );
|
|
|
0488e61 |
+ $dialog->set( 'device', 'mock_device' );
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+$dialog->{reloaded_signal} = $dialog->signal_connect(
|
|
|
0488e61 |
+ 'reloaded-scan-options' => sub {
|
|
|
0488e61 |
+ $dialog->signal_handler_disconnect( $dialog->{reloaded_signal} );
|
|
|
0488e61 |
+ pass "successfully created dialog, ignoring option with min>max";
|
|
|
0488e61 |
+ Gtk3->main_quit;
|
|
|
0488e61 |
+ }
|
|
|
0488e61 |
+);
|
|
|
0488e61 |
+$dialog->get_devices;
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+Gtk3->main;
|
|
|
0488e61 |
+
|
|
|
0488e61 |
+Gscan2pdf::Frontend::Image_Sane->quit;
|
|
|
0488e61 |
+__END__
|
|
|
0488e61 |
--
|
|
|
0488e61 |
2.40.1
|
|
|
0488e61 |
|