Invoke button callbacks directly from the background thread. This
ensures that button notifications are delivered and delivered in the
correct order. Previously, if a callback blocked, it was possible a
new update could start before the previous update was completed, which
could lead to lost events or out of order events.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>