X11 Mouse Movement Event

При создании окна в XLib

Какие маски я предоставляюSetWindowAttributes.event_mask член?Что я должен передать 11-й параматерXCreateWindow()Какие события я ищу в главном цикле сообщений (где я используюXNextEvent(lDisplay, &xEvent);?Поскольку X ведет себя иначе, чем Microsoft Win32 API, как мне определить, находится ли мышь над моим окном или окном в моем «Приложении», а не над рабочим столом?

Я искал похожий пост. Если там уже есть один, пожалуйста, укажите мне в правильном направлении.

Обновить

Для тех, кто хочет простой ответ на части 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;
                }

Ответы на вопрос(2)

Ваш ответ на вопрос