region: Refactor input modification code to be async safe.
The previous code had a number of issues:
- It used a shared 'op' enum value for the operation - a second operation would overwrite this.
- It acted on the row selected at the time the operation was requested - this could have changed by the time the operation occurred.
Solved by passing all the required data though the async methods.