X11 Mouse Movement Event
13,567
Solution 1
XLib is pretty well documented. For example XLib Programming Manual: Event Masks
Solution 2
The first three are well-documented, I think.
To determine whether the mouse is over your window, listen to Enter and Leave events. The xev
utility is a great way to understand what events exist in the X window system, and when they are sent.
Comments
-
Matthew Hoggan almost 2 years
When creating a Window in XLib
- What are the masks I provide to the
SetWindowAttributes.event_mask
member? - What do I have to pass to the 11th paramater of
XCreateWindow()
- What are the Events I am looking for in the main message loop (Where I use
XNextEvent(lDisplay, &xEvent);
? - Since X behaves differently than Microsoft's Win32 API, how do I determine if the mouse is over my window or a window in my "Application" and not over the desktop?
I have looked for a similar post. If there is already one out there please point me in the right direction.
Update
For those who want the easy answer to parts 1-3:
1.
xAttributes.event_mask = ExposureMask | KeyPressMask | ButtonPress | StructureNotifyMask | ButtonReleaseMask | KeyReleaseMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | Button1MotionMask | VisibilityChangeMask | ColormapChangeMask;
2.
unsigned long valuemask = CWEventMask | CWBackPixel | CWBorderPixel | CWCursor;
switch (xEvent.type) { case MapNotify: break; case Expose: // If this is not the last expose event break if (xEvent.xexpose.count != 0) break; else break; case ConfigureNotify: break; case VisibilityNotify: break; case DestroyNotify: break; case ButtonPress: case ButtonRelease: case EnterNotify: case MotionNotify: case LeaveNotify: if(_mouseHandler) _mouseHandler->HandleInput(lDisplay, &xEvent); break; case KeyPress: case KeyRelease: if(_keyboardHandler) _keyboardHandler->HandleInput(lDisplay, &xEvent); break; default: if(_keyboardHandler) _keyboardHandler->HandleInput(lDisplay, &xEvent); break; }
- What are the masks I provide to the