Continuing the discussion from here, here, here, and here…
All the topics linked above have in common that there are issues with Discourse, generally related to UX, when a using Discourse on a system that has touch, but primarily is interacted with via keyboard and mouse. First, it is my understanding (according to @codinghorror) that it is not possible with JS and HTML to detect this type of system, separately from any other system that has a touch input.
With that out of the way, I would like to suggest that this issue as a whole needs to be looked at seeing how the PC market is moving in recent years. When Discourse was first started, you could generally see two types of devices: mobile - like iPads, iPhones, Android phones/tablets, etc. - and desktop, like laptops, workstations, full-size PCs, etc. Today, the device landscape is very different. Thanks in part to a much better adoption of Windows 10 vs Windows 8, more “desktop” devices are coming with touch as an option. Now, touch is an option on most devices purchased from major manufacturers, even in their “business” models, and devices like Microsoft’s Surface, Lenovo’s Yoga, and similar 2-1/convertible designs are becoming much more popular in the marketplace.
Given that there is no reliable way to detect these devices, whether the user has a mouse and keyboard attached, or reliably guess what type of UX the user prefers, I would like to suggest a user setting “toggle” for Discourse. The closest analogous feature I can think of is Windows 10’s Tablet mode, that is user toggleable and makes changes to the UI to make Windows more (or less) friendly to touch. I understand that might not be ideal, as currently Discourse has a fully responsive design, and has purposefully avoided distinguishing “mobile mode” from “desktop mode”, but for users who use a laptop with an attached touch-enabled monitor, or multiple laptops some with and some without touch, it is jarring to have Discourse react differently depending on if the external monitor is connected, or if the device has touch or not.