Changing the global state would obviously cause issues for async
execution. This is the simplest solution for a simple problem.
We could also make the global theme access thread safe, e.g. using
thread-local storage for `g_theme_state` or by making state changes
(i.e. `UI_SetTheme`) scoped, so we can maintain a mutex. Figured it's
better to keep it simple though.