I’m using GLUT (freeglut3) (via the Haskell GLUT bindings).
import Graphics.UI.GLUT
handleKBMouse :: KeyboardMouseCallback
handleKBMouse key keyState mods mousePos = do
print (key, keyState, mods, mousePos)
main :: IO ()
main = do
getArgsAndInitialize
createWindow "testTitle"
keyboardMouseCallback $= Just handleKBMouse
mainLoop
It seems that various important keys (e.g: Shift+Tab) do not call my callback. Also, “mods” doesn’t describe the win-key, only Ctrl, Shift and Alt.
Having such limited access to keyboard input is a serious impediment for real application development. Am I doing anything wrong here or is just freeglut just crippled? Is GLUT crippled in general?
First, Windows traps the shift-tab sequence, so even if you work directly with Win32 you won’t normally see it. Second, GLUT is intended to be portable, so unless you can expect to see the same key under Linux, MacOS, etc., chances are that GLUT won’t even attempt to deal with it. Third, the GLUT spec was last updated a long time ago, so even if the win-key (or at least something similar) is pretty common now, if it wasn’t 12 or 15 years ago, GLUT probably won’t know about it.