static void uevent_cb (GUdevClient *client, const char *action, GUdevDevice *device, RBRemovableMediaManager *mgr) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); GUdevDeviceNumber devnum; devnum = g_udev_device_get_device_number (device); rb_debug ("%s event for %s (%x)", action, g_udev_device_get_sysfs_path (device), devnum); if (g_str_equal (action, "add")) { RBSource *source = NULL; /* probably need to filter out devices related to things we've already seen.. */ if (g_hash_table_lookup (priv->device_mapping, GINT_TO_POINTER (devnum)) != NULL) { rb_debug ("already have a source for this device"); return; } g_signal_emit (mgr, rb_removable_media_manager_signals[CREATE_SOURCE_DEVICE], 0, device, &source); if (source != NULL) { rb_debug ("created a source for this device"); g_hash_table_insert (priv->device_mapping, GINT_TO_POINTER (devnum), source); rb_removable_media_manager_append_media_source (mgr, source); } } else if (g_str_equal (action, "remove")) { RBSource *source; source = g_hash_table_lookup (priv->device_mapping, GINT_TO_POINTER (devnum)); if (source) { rb_debug ("removing the source created for this device"); rb_source_delete_thyself (source); } } }
static void rb_generic_player_plugin_delete_playlist (GtkAction *action, RBSource *source) { g_return_if_fail (RB_IS_GENERIC_PLAYER_PLAYLIST_SOURCE (source)); rb_generic_player_playlist_delete_from_player (RB_GENERIC_PLAYER_PLAYLIST_SOURCE (source)); rb_source_delete_thyself (source); }
static gboolean device_open_ignore_idle (DeviceOpenedData *data) { rb_source_delete_thyself (RB_SOURCE (data->source)); g_object_unref (data->source); free (data->types); g_free (data->name); g_free (data); return FALSE; }
static void _delete_cb (GVolume *volume, RBSource *source, RBAudioCdPlugin *plugin) { /* block the source deleted handler so we don't modify the hash table * while iterating it. */ g_signal_handlers_block_by_func (source, rb_audiocd_plugin_source_deleted, plugin); rb_source_delete_thyself (source); }
static void rb_removable_media_manager_remove_mount (RBRemovableMediaManager *mgr, GMount *mount) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBRemovableMediaSource *source; g_assert (mount != NULL); rb_debug ("mount removed"); source = g_hash_table_lookup (priv->mount_mapping, mount); if (source) { rb_source_delete_thyself (RB_SOURCE (source)); } }
static void rb_removable_media_manager_remove_volume (RBRemovableMediaManager *mgr, GVolume *volume) { RBRemovableMediaManagerPrivate *priv = GET_PRIVATE (mgr); RBRemovableMediaSource *source; g_assert (volume != NULL); rb_debug ("volume removed"); source = g_hash_table_lookup (priv->volume_mapping, volume); if (source) { rb_source_delete_thyself (RB_SOURCE (source)); } }
static void impl_delete_thyself (RBSource *source) { GList *pl; GList *p; RBGenericPlayerSourcePrivate *priv = GENERIC_PLAYER_SOURCE_GET_PRIVATE (source); /* take a copy of the list first, as playlist_deleted_cb modifies priv->playlists */ pl = g_list_copy (priv->playlists); for (p = pl; p != NULL; p = p->next) { RBSource *playlist = RB_SOURCE (p->data); rb_source_delete_thyself (playlist); } g_list_free (priv->playlists); g_list_free (pl); priv->playlists = NULL; if (priv->import_errors != NULL) { rb_source_delete_thyself (priv->import_errors); priv->import_errors = NULL; } RB_SOURCE_CLASS (rb_generic_player_source_parent_class)->impl_delete_thyself (source); }
static gboolean device_open_failed_idle (RBMtpSource *source) { /* libmtp doesn't give us a useful error message in this case, so * all we can offer is this generic message. */ RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); rb_error_dialog (NULL, _("Media player device error"), /* Translators: first %s is the device manufacturer, * second is the product name. */ _("Unable to open the %s %s device"), priv->raw_device.device_entry.vendor, priv->raw_device.device_entry.product); rb_source_delete_thyself (RB_SOURCE (source)); g_object_unref (source); return FALSE; }
static void impl_eject (RBRemovableMediaSource *source) { rb_source_delete_thyself (RB_SOURCE (source)); }