These use hardcoded strings, requiring users to remember/reference the key name string for each key in order to successfully process events. This should be changed to enums to provide easier referencing and documentation, as well as possible platform compatibility.
enums are worse. i've worked with x's #defined XK_... long enough to have chosen to use strings instead. it's more flexible (lets us add new keys for new hardware/platforms without adding new enums in header files) and it actually more convenient as no one really knows all the key names. i've read the #define key list in x headers often enough to not bother and just use xev to find the key name ... and that is a plain string without any fuss. for keys i don't have i can look them up - but strings are far better and that is based on having experienced/used the alternative you propose.