Update UI when settings changed externally, avoiding infinite loop