mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-13 21:35:02 +00:00
trivial: Add a FuDevice:incorporate() vfunc
This allows classes that inherit from FuDevice to copy across private data.
This commit is contained in:
parent
6cfd3f21f5
commit
90479d54c8
@ -1766,11 +1766,15 @@ fu_device_probe_invalidate (FuDevice *device)
|
||||
void
|
||||
fu_device_incorporate (FuDevice *self, FuDevice *donor)
|
||||
{
|
||||
FuDeviceClass *klass = FU_DEVICE_GET_CLASS (self);
|
||||
FuDevicePrivate *priv = GET_PRIVATE (self);
|
||||
FuDevicePrivate *priv_donor = GET_PRIVATE (donor);
|
||||
GPtrArray *parent_guids = fu_device_get_parent_guids (donor);
|
||||
g_autoptr(GList) metadata_keys = NULL;
|
||||
|
||||
g_return_if_fail (FU_IS_DEVICE (self));
|
||||
g_return_if_fail (FU_IS_DEVICE (donor));
|
||||
|
||||
/* copy from donor FuDevice if has not already been set */
|
||||
if (priv->alternate_id == NULL)
|
||||
fu_device_set_alternate_id (self, fu_device_get_alternate_id (donor));
|
||||
@ -1791,6 +1795,10 @@ fu_device_incorporate (FuDevice *self, FuDevice *donor)
|
||||
|
||||
/* now the base class, where all the interesting bits are */
|
||||
fwupd_device_incorporate (FWUPD_DEVICE (self), FWUPD_DEVICE (donor));
|
||||
|
||||
/* optional subclass */
|
||||
if (klass->incorporate != NULL)
|
||||
klass->incorporate (self, donor);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -46,8 +46,10 @@ struct _FuDeviceClass
|
||||
GError **error);
|
||||
gboolean (*setup) (FuDevice *device,
|
||||
GError **error);
|
||||
void (*incorporate) (FuDevice *device,
|
||||
FuDevice *donor);
|
||||
/*< private >*/
|
||||
gpointer padding[22];
|
||||
gpointer padding[21];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -192,6 +192,15 @@ fu_udev_device_set_dev (FuUdevDevice *self, GUdevDevice *udev_device)
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
fu_udev_device_incorporate (FuDevice *self, FuDevice *donor)
|
||||
{
|
||||
g_return_if_fail (FU_IS_UDEV_DEVICE (self));
|
||||
g_return_if_fail (FU_IS_UDEV_DEVICE (donor));
|
||||
fu_udev_device_set_dev (FU_UDEV_DEVICE (self),
|
||||
fu_udev_device_get_dev (FU_UDEV_DEVICE (donor)));
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_udev_device_get_dev:
|
||||
* @self: A #FuUdevDevice
|
||||
@ -341,6 +350,7 @@ fu_udev_device_class_init (FuUdevDeviceClass *klass)
|
||||
object_class->get_property = fu_udev_device_get_property;
|
||||
object_class->set_property = fu_udev_device_set_property;
|
||||
device_class->probe = fu_udev_device_probe;
|
||||
device_class->incorporate = fu_udev_device_incorporate;
|
||||
|
||||
signals[SIGNAL_CHANGED] =
|
||||
g_signal_new ("changed",
|
||||
|
@ -322,6 +322,15 @@ fu_usb_device_get_dev (FuUsbDevice *device)
|
||||
return priv->usb_device;
|
||||
}
|
||||
|
||||
static void
|
||||
fu_usb_device_incorporate (FuDevice *self, FuDevice *donor)
|
||||
{
|
||||
g_return_if_fail (FU_IS_USB_DEVICE (self));
|
||||
g_return_if_fail (FU_IS_USB_DEVICE (donor));
|
||||
fu_usb_device_set_dev (FU_USB_DEVICE (self),
|
||||
fu_usb_device_get_dev (FU_USB_DEVICE (donor)));
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_usb_device_new:
|
||||
* @usb_device: A #GUsbDevice
|
||||
@ -353,6 +362,7 @@ fu_usb_device_class_init (FuUsbDeviceClass *klass)
|
||||
device_class->open = fu_usb_device_open;
|
||||
device_class->close = fu_usb_device_close;
|
||||
device_class->probe = fu_usb_device_probe;
|
||||
device_class->incorporate = fu_usb_device_incorporate;
|
||||
|
||||
pspec = g_param_spec_object ("usb-device", NULL, NULL,
|
||||
G_USB_TYPE_DEVICE,
|
||||
|
Loading…
Reference in New Issue
Block a user