/** * ide_device_provider_get_devices: * * Retrieves a list of devices currently managed by @provider. * * Returns: (transfer container) (element-type IdeDevice*): A #GPtrArray of * #IdeDevice instances. */ GPtrArray * ide_device_provider_get_devices (IdeDeviceProvider *provider) { g_return_val_if_fail (IDE_IS_DEVICE_PROVIDER (provider), NULL); return IDE_DEVICE_PROVIDER_GET_IFACE (provider)->get_devices (provider); }
void ide_device_provider_emit_device_removed (IdeDeviceProvider *provider, IdeDevice *device) { g_return_if_fail (IDE_IS_DEVICE_PROVIDER (provider)); g_return_if_fail (IDE_IS_DEVICE (device)); g_signal_emit (provider, signals [DEVICE_REMOVED], 0, device); }
/** * ide_device_provider_load_finish: * @self: an #IdeDeviceProvider * @result: a #GAsyncResult provided to callback * @error: a location for a #GError, or %NULL * * Completes an asynchronous request to load known devices via * ide_device_provider_load_async(). * * Returns: %TRUE if successful; otherwise %FALSE and @error is set. * * Since: 3.32 */ gboolean ide_device_provider_load_finish (IdeDeviceProvider *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (IDE_IS_DEVICE_PROVIDER (self), FALSE); g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE); return IDE_DEVICE_PROVIDER_GET_CLASS (self)->load_finish (self, result, error); }
gboolean ide_device_provider_get_settled (IdeDeviceProvider *provider) { gboolean settled = FALSE; g_return_val_if_fail (IDE_IS_DEVICE_PROVIDER (provider), FALSE); g_object_get (provider, "settled", &settled, NULL); return settled; }
/** * ide_device_provider_load_async: * @self: an #IdeDeviceProvider * @cancellable: (nullable): a #GCancellable or %NULL * @callback: (nullable): a #GAsyncReadyCallback to execute upon completion * @user_data: closure data for @callback * * Requests that the #IdeDeviceProvider asynchronously load any known devices. * * This should only be called once on an #IdeDeviceProvider. It is an error * to call this function more than once for a single #IdeDeviceProvider. * * #IdeDeviceProvider implementations are expected to emit the * #IdeDeviceProvider::device-added signal for each device they've discovered. * That should be done for known devices before returning from the asynchronous * operation so that the device manager does not need to wait for additional * devices to enter the "settled" state. * * Since: 3.32 */ void ide_device_provider_load_async (IdeDeviceProvider *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_return_if_fail (IDE_IS_DEVICE_PROVIDER (self)); g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable)); IDE_DEVICE_PROVIDER_GET_CLASS (self)->load_async (self, cancellable, callback, user_data); }
static void ide_device_provider_real_device_added (IdeDeviceProvider *self, IdeDevice *device) { IdeDeviceProviderPrivate *priv = ide_device_provider_get_instance_private (self); g_assert (IDE_IS_DEVICE_PROVIDER (self)); g_assert (IDE_IS_DEVICE (device)); if (priv->devices == NULL) priv->devices = g_ptr_array_new_with_free_func (g_object_unref); g_ptr_array_add (priv->devices, g_object_ref (device)); }
static void ide_device_provider_real_device_removed (IdeDeviceProvider *self, IdeDevice *device) { IdeDeviceProviderPrivate *priv = ide_device_provider_get_instance_private (self); g_assert (IDE_IS_DEVICE_PROVIDER (self)); g_assert (IDE_IS_DEVICE (device)); /* Maybe we just disposed */ if (priv->devices == NULL) return; if (!g_ptr_array_remove (priv->devices, device)) g_warning ("No such device \"%s\" found in \"%s\"", G_OBJECT_TYPE_NAME (device), G_OBJECT_TYPE_NAME (self)); }
/** * ide_device_provider_get_devices: * @self: an #IdeDeviceProvider * * Gets a new #GPtrArray containing a list of #IdeDevice instances that were * registered by the #IdeDeviceProvider * * Returns: (transfer full) (element-type Ide.Device) (not nullable): * a #GPtrArray of #IdeDevice. * * Since: 3.32 */ GPtrArray * ide_device_provider_get_devices (IdeDeviceProvider *self) { IdeDeviceProviderPrivate *priv = ide_device_provider_get_instance_private (self); g_autoptr(GPtrArray) devices = NULL; g_return_val_if_fail (IDE_IS_DEVICE_PROVIDER (self), NULL); devices = g_ptr_array_new (); if (priv->devices != NULL) { for (guint i = 0; i < priv->devices->len; i++) g_ptr_array_add (devices, g_object_ref (g_ptr_array_index (priv->devices, i))); } return g_steal_pointer (&devices); }