diff options
| author | Alessio Treglia <quadrispro@ubuntu.com> | 2010-04-14 12:24:35 +0200 | 
|---|---|---|
| committer | Alessio Treglia <quadrispro@ubuntu.com> | 2010-04-14 12:24:35 +0200 | 
| commit | a9a833c10711f1ec7060322030f11e64f44fca2c (patch) | |
| tree | 2c0d84e44be6ed79c04b79540d55618ba73479aa /src | |
| parent | c2e54e51031fa4b2512b851d13f5781118269d6b (diff) | |
| parent | 6d9871f7c7de6caca9eb78683bcba499119e1469 (diff) | |
Merge commit 'upstream/1.0.0'
Diffstat (limited to 'src')
| -rw-r--r-- | src/book.c | 1 | ||||
| -rw-r--r-- | src/scanner.c | 48 | ||||
| -rw-r--r-- | src/simple-scan.c | 45 | ||||
| -rw-r--r-- | src/ui.c | 15 | 
4 files changed, 78 insertions, 31 deletions
| @@ -321,6 +321,7 @@ book_save_pdf_with_imagemagick (Book *book, GFile *file, GError **error)              g_warning ("stdout: %s", stdout_text);              g_warning ("stderr: %s", stderr_text);              result = FALSE; +            g_set_error (error, BOOK_TYPE, 0, "ImageMagick returned error code %d, command line was: %s", exit_status, command_line->str);          }          g_free (stdout_text);          g_free (stderr_text); diff --git a/src/scanner.c b/src/scanner.c index daf1b15..9181868 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -99,6 +99,9 @@ struct ScannerPrivate      /* Last option read */      SANE_Int option_index; +   +    /* Option index for scan area */ +    SANE_Int br_x_option_index, br_y_option_index;      /* Buffer for received line */      SANE_Byte *buffer; @@ -869,6 +872,8 @@ do_open (Scanner *scanner)      scanner->priv->page_number = 0;      scanner->priv->notified_page = -1;      scanner->priv->option_index = 0; +    scanner->priv->br_x_option_index = 0; +    scanner->priv->br_y_option_index = 0;      if (!job->device && scanner->priv->default_device)          job->device = g_strdup (scanner->priv->default_device); @@ -919,7 +924,7 @@ do_get_option (Scanner *scanner)      const SANE_Option_Descriptor *option;      SANE_Int option_index;      ScanJob *job; -   +      job = (ScanJob *) scanner->priv->job_queue->data;        option = sane_get_option_descriptor (scanner->priv->handle, scanner->priv->option_index); @@ -928,6 +933,28 @@ do_get_option (Scanner *scanner)      scanner->priv->option_index++;      if (!option) { +        /* Always use maximum scan area - some scanners default to using partial areas.  This should be patched in sane-backends */ +        if (scanner->priv->br_x_option_index) { +            option = sane_get_option_descriptor (scanner->priv->handle, scanner->priv->br_x_option_index); +            g_debug ("sane_get_option_descriptor (%d)", scanner->priv->br_x_option_index); +            if (option->constraint_type == SANE_CONSTRAINT_RANGE) { +                if (option->type == SANE_TYPE_FIXED) +                    set_fixed_option (scanner->priv->handle, option, scanner->priv->br_x_option_index, SANE_UNFIX (option->constraint.range->max), NULL); +                else +                    set_int_option (scanner->priv->handle, option, scanner->priv->br_x_option_index, option->constraint.range->max, NULL); +            } +        } +        if (scanner->priv->br_y_option_index) { +            option = sane_get_option_descriptor (scanner->priv->handle, scanner->priv->br_y_option_index); +            g_debug ("sane_get_option_descriptor (%d)", scanner->priv->br_y_option_index); +            if (option->constraint_type == SANE_CONSTRAINT_RANGE) { +                if (option->type == SANE_TYPE_FIXED) +                    set_fixed_option (scanner->priv->handle, option, scanner->priv->br_y_option_index, SANE_UNFIX (option->constraint.range->max), NULL); +                else +                    set_int_option (scanner->priv->handle, option, scanner->priv->br_y_option_index, option->constraint.range->max, NULL); +            } +        } +          scanner->priv->state = STATE_START;          return;      } @@ -1091,21 +1118,10 @@ do_get_option (Scanner *scanner)          if (!set_constrained_string_option (scanner->priv->handle, option, option_index, disable_compression_names, NULL))              g_warning ("Unable to disable compression, please file a bug");      } -    /* Always use maximum scan area - some scanners default to using partial areas.  This should be patched in sane-backends */ -    else if (strcmp (option->name, SANE_NAME_SCAN_BR_X) == 0 || -             strcmp (option->name, SANE_NAME_SCAN_BR_Y) == 0) { -        switch (option->constraint_type) -        { -        case SANE_CONSTRAINT_RANGE: -            if (option->type == SANE_TYPE_FIXED) -                set_fixed_option (scanner->priv->handle, option, option_index, SANE_UNFIX (option->constraint.range->max), NULL); -            else -                set_int_option (scanner->priv->handle, option, option_index, option->constraint.range->max, NULL); -            break; -        default: -            break; -        } -    } +    else if (strcmp (option->name, SANE_NAME_SCAN_BR_X) == 0) +        scanner->priv->br_x_option_index = option_index; +    else if (strcmp (option->name, SANE_NAME_SCAN_BR_Y) == 0) +        scanner->priv->br_y_option_index = option_index;      else if (strcmp (option->name, SANE_NAME_PAGE_WIDTH) == 0) {          if (job->page_width > 0.0) {              if (option->type == SANE_TYPE_FIXED) diff --git a/src/simple-scan.c b/src/simple-scan.c index ab59299..b8c3962 100644 --- a/src/simple-scan.c +++ b/src/simple-scan.c @@ -24,7 +24,7 @@  #include "book.h" -static const char *default_device = NULL; +static ScanDevice *default_device = NULL;  static GUdevClient *udev_client; @@ -44,7 +44,27 @@ static gboolean debug = FALSE;  static void  update_scan_devices_cb (Scanner *scanner, GList *devices)  { -    ui_set_scan_devices (ui, devices); +    GList *devices_copy; +   +    devices_copy = g_list_copy (devices); +   +    /* If the default device is not detected add it to the list */ +    if (default_device) { +        GList *i; + +        for (i = devices_copy; i; i = i->next) { +            ScanDevice *device = i->data; +            if (strcmp (device->name, default_device->name) == 0) +                break; +        } + +        if (!i) +            devices_copy = g_list_prepend (devices_copy, default_device); +    } + +    ui_set_scan_devices (ui, devices_copy); +   +    g_list_free (devices_copy);  } @@ -343,7 +363,7 @@ get_temporary_filename (const gchar *prefix, const gchar *extension)      /* NOTE: I'm not sure if this is a 100% safe strategy to use g_file_open_tmp(), close and       * use the filename but it appears to work in practise */ -    filename = g_strdup_printf ("%s-XXXXXX.%s", prefix, extension); +    filename = g_strdup_printf ("%sXXXXXX.%s", prefix, extension);      fd = g_file_open_tmp (filename, &path, &error);      g_free (filename);      if (fd < 0) { @@ -371,7 +391,7 @@ email_cb (SimpleScan *ui, const gchar *profile)          gchar *path;          /* Open a temporary file */ -        path = get_temporary_filename ("scanned-document", "pdf"); +        path = get_temporary_filename ("scan", "pdf");          if (path) {              GFile *file; @@ -389,7 +409,7 @@ email_cb (SimpleScan *ui, const gchar *profile)              gchar *path;              GFile *file; -            path = get_temporary_filename ("scanned-document", "jpg"); +            path = get_temporary_filename ("scan", "jpg");              if (!path) {                  saved = FALSE;                  break; @@ -558,7 +578,9 @@ get_options (int argc, char **argv)                  fprintf (stderr, "Unknown argument: '%s'\n", arg);                  exit (1);              } -            default_device = arg; +            default_device = g_malloc0 (sizeof (ScanDevice)); +            default_device->name = g_strdup (arg); +            default_device->label = g_strdup (arg);          }      }     } @@ -621,8 +643,15 @@ main (int argc, char **argv)      udev_client = g_udev_client_new (udev_subsystems);      g_signal_connect (udev_client, "uevent", G_CALLBACK (on_uevent), NULL); -    if (default_device) -        ui_set_selected_device (ui, default_device); +    if (default_device) { +        GList device_list; + +        device_list.data = default_device; +        device_list.next = NULL; +        device_list.prev = NULL; +        ui_set_scan_devices (ui, &device_list); +        ui_set_selected_device (ui, default_device->name); +    }      ui_start (ui);      scanner_start (scanner); @@ -198,6 +198,9 @@ ui_set_scan_devices (SimpleScan *ui, GList *devices)          if (n_delete >= 0) {              gint i; +            /* Update label */ +            gtk_list_store_set (GTK_LIST_STORE (ui->priv->device_model), &iter, 1, device->label, -1); +              for (i = 0; i < n_delete; i++) {                  gtk_tree_model_iter_nth_child (ui->priv->device_model, &iter, NULL, index);                  gtk_list_store_remove (GTK_LIST_STORE (ui->priv->device_model), &iter); @@ -255,13 +258,11 @@ ui_set_selected_device (SimpleScan *ui, const gchar *device)  {      GtkTreeIter iter; -    /* If doesn't exist add with label set to device name */ -    if (!find_scan_device (ui, device, &iter)) { -        gtk_list_store_append (GTK_LIST_STORE (ui->priv->device_model), &iter); -        gtk_list_store_set (GTK_LIST_STORE (ui->priv->device_model), &iter, 0, device, 1, device, -1); -    } +    if (!find_scan_device (ui, device, &iter)) +        return;      gtk_combo_box_set_active_iter (GTK_COMBO_BOX (ui->priv->device_combo), &iter); +    ui->priv->user_selected_device = TRUE;  } @@ -1343,11 +1344,11 @@ ui_load (SimpleScan *ui)      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter);      gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 0, 1, 0, 2, "Automatic", -1);      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter); -    gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 2050, 1, 1480, 2, "A6", -1); +    gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 1050, 1, 1480, 2, "A6", -1);      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter);      gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 1480, 1, 2100, 2, "A5", -1);      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter); -    gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 2100, 1, 1970, 2, "A4", -1); +    gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 2100, 1, 2970, 2, "A4", -1);      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter);      gtk_list_store_set (GTK_LIST_STORE (ui->priv->paper_size_model), &iter, 0, 2159, 1, 2794, 2, "Letter", -1);      gtk_list_store_append (GTK_LIST_STORE (ui->priv->paper_size_model), &iter); | 
