fpi-device: Allow driver to handle identify for certain variants

Rather than requiring a driver to implement a variant with
identify support, and another one without, ask the driver whether a
particular device supports identification.
This commit is contained in:
Bastien Nocera 2020-04-10 16:35:11 +02:00
parent f2ae3fb8c5
commit b0c546164e
2 changed files with 13 additions and 0 deletions

View file

@ -507,6 +507,9 @@ fp_device_supports_identify (FpDevice *device)
g_return_val_if_fail (FP_IS_DEVICE (device), FALSE); g_return_val_if_fail (FP_IS_DEVICE (device), FALSE);
if (cls->supports_identify != NULL)
return cls->supports_identify (device);
return cls->identify != NULL; return cls->identify != NULL;
} }
@ -946,6 +949,13 @@ fp_device_identify (FpDevice *device,
if (g_task_return_error_if_cancelled (task)) if (g_task_return_error_if_cancelled (task))
return; return;
if (!fp_device_supports_identify (device))
{
g_task_return_error (task,
fpi_device_error_new (FP_DEVICE_ERROR_NOT_SUPPORTED));
return;
}
if (!priv->is_open) if (!priv->is_open)
{ {
g_task_return_error (task, g_task_return_error (task,

View file

@ -79,6 +79,7 @@ struct _FpIdEntry
* @delete: Delete a print from the device * @delete: Delete a print from the device
* @cancel: Called on cancellation, this is a convenience to not need to handle * @cancel: Called on cancellation, this is a convenience to not need to handle
* the #GCancellable directly by using fpi_device_get_cancellable(). * the #GCancellable directly by using fpi_device_get_cancellable().
* @supports_identify: Whether identify operations are supported.
* *
* NOTE: If your driver is image based, then you should subclass #FpImageDevice * NOTE: If your driver is image based, then you should subclass #FpImageDevice
* instead. #FpImageDevice based drivers use a different way of interacting * instead. #FpImageDevice based drivers use a different way of interacting
@ -129,6 +130,8 @@ struct _FpDeviceClass
void (*delete) (FpDevice * device); void (*delete) (FpDevice * device);
void (*cancel) (FpDevice *device); void (*cancel) (FpDevice *device);
gboolean (*supports_identify) (FpDevice *device);
}; };
/** /**