When two GObjects hold strong references to each other (e.g., two buttons that modify each other's properties), a reference cycle is created. This prevents the objects from ever being deallocated.
To break these cycles, use weak references. In gtk-rs, you can use the glib::clone! macro with the @weak specifier. When the closure runs, the macro attempts to 'upgrade' the weak reference to a strong one. If the object has already been destroyed, the closure will return early (defaulting to () return value).