>>468
2つ目の WaitForMultipleObjectsEx() の中で停止してしまっていることが判明。
本来、先頭に Msg が付く方の API は、メッセージと HANDLE の両方を同時に
監視するようなコードでなくてはならないハズなのに、そうなってないらしい。
process_events() が、MotionNotify の XEvent が来ていたら WM_MOUSEMOVE
メッセージをキューにポストするらしいが、最初に一度だけ調べて XEvent が
来ていない場合は、以後、全く XEvent を調査せずに他の HANDLE 群の変化だけ
を待機してしまうらしい。

DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles,
                        DWORD timeout, DWORD mask, DWORD flags )
{
  DWORD ret;
  struct x11drv_thread_data *data = TlsGetValue( thread_data_tls_index );

  if (!data) {
    if (!count && !timeout) return WAIT_TIMEOUT;
    return WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL,
                     timeout, flags & MWMO_ALERTABLE );
  }
  if (data->current_event) mask = 0; /* don't process nested events */

  if (process_events( data->display, filter_event, mask )) ret = count - 1;
  else if (count || timeout) {
    ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL,
                    timeout, flags & MWMO_ALERTABLE );
    if (ret == count - 1) process_events( data->display, filter_event, mask );
  }
  else ret = WAIT_TIMEOUT;

  return ret;
}