This is intended to be a place where you should look first if
you want to contribute to Wine development. Add your e-mail
address to the corresponding entry if you are working on/have 
done something for one of the problems. You are encouraged to 
add new entries and, more importantly, remove those for the 
bugs you fixed ;-)
------------------------------------------------------------
As of Dec 22 1996 -

General:

 * Combobox code is very inadequate (no notification messages,
   dropdown listboxes often stay visible, etc... ).

 * Font mapping is too generic. No soft font loading, no rotated 
   text support. [alex@amadeus.pharm.sunysb.edu]

 * No thread/process/kernel-object support in Win32 code. 

 * Very alpha printing code. [john@division.co.uk]

 * No OLE and OLE32 support (including OLE interfaces etc.).

 * No MS Video support (perhaps interface with xanim).

 * No COMDLG32 support. (Needed badly, the Windows95 comdlg32.dll
   doesn't work with WINE.)

 * No COMMCTRL/COMCTL32 support.

 * No icon titles.
	- Windows uses a special window class to display icon titles.
	  Handles to these title windows are stored in the icon window
	  properties.

Miscellaneous:

 * Simple OLE actions were working in October release, got
   broken in November (in Winword "Insert Object" now results in 
   segfault right after the call to LoadModule()).
 * AllocCSToDSAlias() shouldn't alloc alias for the same segment multiple
   times.
 * ScrollWindowEx() is outdated.

Where to look in source files:

 * grep for FIXME in the source files.


