mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-15 08:42:46 +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
|
void
|
||||||
fu_device_incorporate (FuDevice *self, FuDevice *donor)
|
fu_device_incorporate (FuDevice *self, FuDevice *donor)
|
||||||
{
|
{
|
||||||
|
FuDeviceClass *klass = FU_DEVICE_GET_CLASS (self);
|
||||||
FuDevicePrivate *priv = GET_PRIVATE (self);
|
FuDevicePrivate *priv = GET_PRIVATE (self);
|
||||||
FuDevicePrivate *priv_donor = GET_PRIVATE (donor);
|
FuDevicePrivate *priv_donor = GET_PRIVATE (donor);
|
||||||
GPtrArray *parent_guids = fu_device_get_parent_guids (donor);
|
GPtrArray *parent_guids = fu_device_get_parent_guids (donor);
|
||||||
g_autoptr(GList) metadata_keys = NULL;
|
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 */
|
/* copy from donor FuDevice if has not already been set */
|
||||||
if (priv->alternate_id == NULL)
|
if (priv->alternate_id == NULL)
|
||||||
fu_device_set_alternate_id (self, fu_device_get_alternate_id (donor));
|
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 */
|
/* now the base class, where all the interesting bits are */
|
||||||
fwupd_device_incorporate (FWUPD_DEVICE (self), FWUPD_DEVICE (donor));
|
fwupd_device_incorporate (FWUPD_DEVICE (self), FWUPD_DEVICE (donor));
|
||||||
|
|
||||||
|
/* optional subclass */
|
||||||
|
if (klass->incorporate != NULL)
|
||||||
|
klass->incorporate (self, donor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -46,8 +46,10 @@ struct _FuDeviceClass
|
|||||||
GError **error);
|
GError **error);
|
||||||
gboolean (*setup) (FuDevice *device,
|
gboolean (*setup) (FuDevice *device,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
void (*incorporate) (FuDevice *device,
|
||||||
|
FuDevice *donor);
|
||||||
/*< private >*/
|
/*< 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:
|
* fu_udev_device_get_dev:
|
||||||
* @self: A #FuUdevDevice
|
* @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->get_property = fu_udev_device_get_property;
|
||||||
object_class->set_property = fu_udev_device_set_property;
|
object_class->set_property = fu_udev_device_set_property;
|
||||||
device_class->probe = fu_udev_device_probe;
|
device_class->probe = fu_udev_device_probe;
|
||||||
|
device_class->incorporate = fu_udev_device_incorporate;
|
||||||
|
|
||||||
signals[SIGNAL_CHANGED] =
|
signals[SIGNAL_CHANGED] =
|
||||||
g_signal_new ("changed",
|
g_signal_new ("changed",
|
||||||
|
@ -322,6 +322,15 @@ fu_usb_device_get_dev (FuUsbDevice *device)
|
|||||||
return priv->usb_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:
|
* fu_usb_device_new:
|
||||||
* @usb_device: A #GUsbDevice
|
* @usb_device: A #GUsbDevice
|
||||||
@ -353,6 +362,7 @@ fu_usb_device_class_init (FuUsbDeviceClass *klass)
|
|||||||
device_class->open = fu_usb_device_open;
|
device_class->open = fu_usb_device_open;
|
||||||
device_class->close = fu_usb_device_close;
|
device_class->close = fu_usb_device_close;
|
||||||
device_class->probe = fu_usb_device_probe;
|
device_class->probe = fu_usb_device_probe;
|
||||||
|
device_class->incorporate = fu_usb_device_incorporate;
|
||||||
|
|
||||||
pspec = g_param_spec_object ("usb-device", NULL, NULL,
|
pspec = g_param_spec_object ("usb-device", NULL, NULL,
|
||||||
G_USB_TYPE_DEVICE,
|
G_USB_TYPE_DEVICE,
|
||||||
|
Loading…
Reference in New Issue
Block a user