Port virtual desktops user action menu to VirtualDesktop
VirtualDesktop objects are more reliable than int-based desktop ids.
In order to make the desktop action menus more extensible and easier to work with, this change splits the single ShowOnDesktopActionData struct into multiple specialized structs.