The headline may be a bit confusing, so here's a web example (although this question is equally applicable to desktop applications):
- I open up the same eBay listing in 2 separate tabs of my web browser.
- In the 1st tab, I click "Add to watch list", and it adds it successfully.
- I now navigate to the 2nd tab, and without refreshing, I click "Add to watch list".
In this situation, eBay will never error and say "Item is already in watch list". Instead, it will act exactly like it did the 1st time I added the item to my watch list.
What it's really doing is abstracting this detail away from the user and pretending like it has just added to my watch list, when in reality it performed a no-op and just updated the state to indicate that it's in my watch list.
I'm of the school of thought that you should never disrupt the user's train of thought or workflow, so this is definitely the correct behaviour.
What are the UI guidelines for this? What are some of the situations where a user should be notified of a no-op?