Your assumption is correct. "Free Shipping" products do not contribute to the total weight used for shipping calculations, but if you have at least one non-free shipping item in your cart, then there will still be a shipping cost.
It's not possible to trigger that rule (one free shipping item makes whole cart free shipping) using the built in methods. You would therefore need to write an extension (or custom shipping method) which checks for any item in the cart, before adjusting the shipping cost to zero.
The extension hook you would need to use is store_order_shipping_methods
.
https://exp-resso.com/docs/extension_hooks.html#shipping_hooks