LINUX.ORG.RU

История изменений

Исправление sambist, (текущая версия) :

while ((warehouse.halt != SML_FALSE) &&
       (XNextEvent(warehouse.screen.display, &event) >= 0))
    {
        switch (event.type)
        {
        case Expose          :          mainExpose(event); break;
        case FocusIn         :         mainFocusIn(event); break;
        case FocusOut        :        mainFocusOut(event); break;
        case KeyPress        :        mainKeyPress(event); break;
        case KeyRelease      :      mainKeyRelease(event); break;
        case ButtonPress     :     mainButtonPress(event); break;
        case ButtonRelease   :   mainButtonRelease(event); break;
        case EnterNotify     :     mainEnterNotify(event); break;
        case LeaveNotify     :     mainLeaveNotify(event); break;
        case ConfigureNotify : mainConfigureNotify(event); break;
        case ClientMessage   :   mainClientMessage(event); break;
        case MapNotify       :       mainMapNotify(event); break;
        case UnmapNotify     :     mainUnmapNotify(event); break;
        case MotionNotify    :    mainMotionNotify(event); break;
        default:                                           break;
        }
    }

Очередь на текущий момент: (внизу самые старые, FIFO)
5-MapNotify
4-KeyPress
3-KeyPress
2-KeyPress
1-KeyPress
0-EnterNotify

Вот ставит эта штука в конец FocusIn (или что во что там GetInputFocus развернется).

Вопрос - сообщения 0 - 5 будут: а) похерены, б) обработаны моими обработчиками?
Если б) то в каком обработчике у меня выскочит «лишний» вызов? Как разруливаются два бесконечных цикла: мой и тот, что в XSync?

Или его XGetInputFocus вообще не касается этой очереди?

Исходная версия sambist, :

while ((warehouse.halt != SML_FALSE) &&
           (XNextEvent(warehouse.screen.display, &event) >= 0))
    {
        switch (event.type)
        {
        case Expose          :          mainExpose(event); break;
        case FocusIn         :         mainFocusIn(event); break;
        case FocusOut        :        mainFocusOut(event); break;
        case KeyPress        :        mainKeyPress(event); break;
        case KeyRelease      :      mainKeyRelease(event); break;
        case ButtonPress     :     mainButtonPress(event); break;
        case ButtonRelease   :   mainButtonRelease(event); break;
        case EnterNotify     :     mainEnterNotify(event); break;
        case LeaveNotify     :     mainLeaveNotify(event); break;
        case ConfigureNotify : mainConfigureNotify(event); break;
        case ClientMessage   :   mainClientMessage(event); break;
        case MapNotify       :       mainMapNotify(event); break;
        case UnmapNotify     :     mainUnmapNotify(event); break;
        case MotionNotify    :    mainMotionNotify(event); break;
        default:                                           break;
        }
    }

Очередь на текущий момент: (внизу самые старые, FIFO)
5-MapNotify
4-KeyPress
3-KeyPress
2-KeyPress
1-KeyPress
0-EnterNotify

Вот ставит эта штука в конец FocusIn (или что во что там GetInputFocus развернется).

Вопрос - сообщения 0 - 5 будут: а) похерены, б) обработаны моими обработчиками?
Если б) то в каком обработчике у меня выскочит «лишний» вызов? Как разруливаются два бесконечных цикла: мой и тот, что в XSync?

Или его XGetInputFocus вообще не касается этой очереди?