Makefile
 template.mak
 TODO.txt
-configure
 configure.in
 config.guess
 config.sub
 
 docs/msw/*.txt
 docs/licence.txt
 
+distrib/msw/*.rsp
+distrib/msw/*.bat
+
 src/makeb32.env
 src/makebcc.env
 src/makemsw.env
 
 typedef void*           WXWindow;
 typedef void*           WXWidget;
 typedef void*           WXAppContext;
-typedef void*           WXMainColormap;
+typedef void*           WXColormap;
 typedef void            WXDisplay;
 typedef void            WXEvent;
+typedef void*           WXCursor;
 #endif
 
 #endif
 
 #include "wx/msw/ole/droptgt.h"
 #include "wx/msw/ole/dataobj.h"
 #elif defined(__WXMOTIF__)
+#include "wx/motif/dnd.h"
 #elif defined(__WXGTK__)
 #include "wx/gtk/dnd.h"
 #elif defined(__WXQT__)
 
 // wxDropSource
 //-------------------------------------------------------------------------
 
+  enum wxDragResult
+  {
+    wxDragError,    // error prevented the d&d operation from completing
+    wxDragNone,     // drag target didn't accept the data
+    wxDragCopy,     // the data was successfully copied
+    wxDragMove,     // the data was successfully moved
+    wxDragCancel    // the operation was cancelled by user (not an error)
+  };
+
 class wxDropSource: public wxObject
 {
   public:
 
-  enum DragResult
-  {
-    Error,    // error prevented the d&d operation from completing
-    None,     // drag target didn't accept the data
-    Copy,     // the data was successfully copied
-    Move,     // the data was successfully moved
-    Cancel    // the operation was cancelled by user (not an error)
-  };
-
     wxDropSource( wxWindow *win );
     wxDropSource( wxDataObject &data, wxWindow *win );
     
     ~wxDropSource(void);
     
     void SetData( wxDataObject &data  );
-    DragResult DoDragDrop( bool bAllowMove = FALSE );
+    wxDragResult DoDragDrop( bool bAllowMove = FALSE );
     
-    virtual bool GiveFeedback( DragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
+    virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
 
   protected:
   
   
     GtkWidget     *m_widget;
     wxWindow      *m_window;
-    DragResult     m_retValue;
+    wxDragResult   m_retValue;
     wxDataObject  *m_data;
     
     wxCursor      m_defaultCursor;
 
 // wxDropSource
 //-------------------------------------------------------------------------
 
+  enum wxDragResult
+  {
+    wxDragError,    // error prevented the d&d operation from completing
+    wxDragNone,     // drag target didn't accept the data
+    wxDragCopy,     // the data was successfully copied
+    wxDragMove,     // the data was successfully moved
+    wxDragCancel    // the operation was cancelled by user (not an error)
+  };
+
 class wxDropSource: public wxObject
 {
   public:
 
-  enum DragResult
-  {
-    Error,    // error prevented the d&d operation from completing
-    None,     // drag target didn't accept the data
-    Copy,     // the data was successfully copied
-    Move,     // the data was successfully moved
-    Cancel    // the operation was cancelled by user (not an error)
-  };
-
     wxDropSource( wxWindow *win );
     wxDropSource( wxDataObject &data, wxWindow *win );
     
     ~wxDropSource(void);
     
     void SetData( wxDataObject &data  );
-    DragResult DoDragDrop( bool bAllowMove = FALSE );
+    wxDragResult DoDragDrop( bool bAllowMove = FALSE );
     
-    virtual bool GiveFeedback( DragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
+    virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
 
   protected:
   
   
     GtkWidget     *m_widget;
     wxWindow      *m_window;
-    DragResult     m_retValue;
+    wxDragResult   m_retValue;
     wxDataObject  *m_data;
     
     wxCursor      m_defaultCursor;
 
 class wxIDropSource;
 class wxDataObject;
 
+enum wxDragResult
+  {
+    wxDragError,    // error prevented the d&d operation from completing
+    wxDragNone,     // drag target didn't accept the data
+    wxDragCopy,     // the data was successfully copied
+    wxDragMove,     // the data was successfully moved
+    wxDragCancel    // the operation was cancelled by user (not an error)
+  };
+
 // ----------------------------------------------------------------------------
 // wxDropSource is used to start the drag-&-drop operation on associated
 // wxDataObject object. It's responsible for giving UI feedback while dragging.
 class wxDropSource
 {
 public:
-  enum DragResult
-  {
-    Error,    // error prevented the d&d operation from completing
-    None,     // drag target didn't accept the data
-    Copy,     // the data was successfully copied
-    Move,     // the data was successfully moved
-    Cancel    // the operation was cancelled by user (not an error)
-  };
-
   // ctors: if you use default ctor you must call SetData() later!
   // NB: the "wxWindow *win" parameter is unused and is here only for wxGTK
   //     compatibility
 
   // do it (call this in response to a mouse button press, for example)
   // params: if bAllowMove is false, data can be only copied
-  DragResult DoDragDrop(bool bAllowMove = FALSE);
+  wxDragResult DoDragDrop(bool bAllowMove = FALSE);
 
   // overridable: you may give some custom UI feedback during d&d operation
   // in this function (it's called on each mouse move, so it shouldn't be too
   // slow). Just return false if you want default feedback.
-  virtual bool GiveFeedback(DragResult effect, bool bScrolling);
+  virtual bool GiveFeedback(wxDragResult effect, bool bScrolling);
 
 protected:
   void Init();
   wxIDropSource *m_pIDropSource;  // the pointer to COM interface
 };
 
-#endif  //_WX_OLEDROPSRC_H
\ No newline at end of file
+#endif  //_WX_OLEDROPSRC_H
 
   inline virtual void SetDefaultItem(wxButton *but);
 
   virtual void SetAcceleratorTable(const wxAcceleratorTable& accel);
+  inline virtual wxAcceleratorTable& GetAcceleratorTable() const { return (wxAcceleratorTable&) m_acceleratorTable; }
 
   // Override to define new behaviour for default action (e.g. double clicking
   // on a listbox)
 
 // wxDropSource
 //-------------------------------------------------------------------------
 
+enum wxDragResult
+  {
+    wxDragError,    // error prevented the d&d operation from completing
+    wxDragNone,     // drag target didn't accept the data
+    wxDragCopy,     // the data was successfully copied
+    wxDragMove,     // the data was successfully moved
+    wxDragCancel    // the operation was cancelled by user (not an error)
+  };
+
 class WXDLLEXPORT wxDropSource: public wxObject
 {
   public:
 
-  enum DragResult
-  {
-    Error,    // error prevented the d&d operation from completing
-    None,     // drag target didn't accept the data
-    Copy,     // the data was successfully copied
-    Move,     // the data was successfully moved
-    Cancel    // the operation was cancelled by user (not an error)
-  };
-
     wxDropSource( wxWindow *win );
     wxDropSource( wxDataObject &data, wxWindow *win );
     
     ~wxDropSource(void);
     
     void SetData( wxDataObject &data  );
-    DragResult DoDragDrop( bool bAllowMove = FALSE );
+    wxDragResult DoDragDrop( bool bAllowMove = FALSE );
     
-    virtual bool GiveFeedback( DragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
+    virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
 
   protected:
   
 
 
   virtual void Maximize(bool maximize);
 
-  virtual void SetAcceleratorTable(const wxAcceleratorTable& accel);
-
   // Responds to colour changes
   void OnSysColourChanged(wxSysColourChangedEvent& event);
 
   bool                  m_iconized;
   static bool           m_useNativeStatusBar;
   wxToolBar *           m_frameToolBar ;
-  wxAcceleratorTable    m_acceleratorTable;
 
   DECLARE_EVENT_TABLE()
 };
 
 #include "wx/string.h"
 #include "wx/list.h"
 #include "wx/region.h"
+#include "wx/accel.h"
 
 #define wxKEY_SHIFT     1
 #define wxKEY_CTRL      2
   inline int GetId() const;
   inline void SetId(int id);
 
+  virtual void SetAcceleratorTable(const wxAcceleratorTable& accel);
+  inline virtual wxAcceleratorTable& GetAcceleratorTable() const { return (wxAcceleratorTable&) m_acceleratorTable; }
+
   // Make the window modal (all other windows unresponsive)
   virtual void MakeModal(bool modal);
 
   wxColour              m_foregroundColour ;
   wxColour              m_defaultBackgroundColour;
   wxColour              m_defaultForegroundColour;
+  wxAcceleratorTable    m_acceleratorTable;
 
 #if USE_DRAG_AND_DROP
   wxDropTarget         *m_pDropTarget;    // the current drop target or NULL
 
 #if defined(__WXMSW__)
 #include "wx/msw/taskbar.h"
 #elif defined(__WXMOTIF__)
+#include "wx/motif/taskbar.h"
 #elif defined(__WXGTK__)
 #elif defined(__WXQT__)
 #elif defined(__WXMAC__)
 
 #include "wx/list.h"
 #include "wx/tbarbase.h"
 
+class WXDLLEXPORT wxMemoryDC;
+
 WXDLLEXPORT_DATA(extern const char*) wxToolBarNameStr;
 WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize;
 WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition;
 
 #   include "wx/msw/tbarmsw.h"
 #   define wxToolBar wxToolBarMSW
 #   define sm_classwxToolBar sm_classwxToolBarMSW
+#elif defined(__WXMOTIF__)
+#   include "wx/tbarsmpl.h"
+#   define wxToolBar wxToolBarSimple
+#   define sm_classwxToolBar sm_classwxToolBarSimple
 #elif defined(__WXGTK__)
 #   include "wx/gtk/tbargtk.h"
 #elif defined(__WXQT__)
 
 
 // X only
 #ifdef __X__
-// Get X display: often needed in the wxWindows implementation.
-Display *wxGetDisplay(void);
-/* Matthew Flatt: Added wxSetDisplay and wxGetDisplayName */
+WXDisplay *wxGetDisplay();
 bool wxSetDisplay(const wxString& display_name);
-wxString wxGetDisplayName(void);
+wxString wxGetDisplayName();
 #endif
 
 #ifdef __X__
 
     const char *pc;
 
     switch ( dragSource.DoDragDrop(TRUE) ) {
-      case wxDropSource::Error:   pc = "Error!";    break;
-      case wxDropSource::None:    pc = "Nothing";   break;
-      case wxDropSource::Copy:    pc = "Copied";    break;
-      case wxDropSource::Move:    pc = "Moved";     break;
-      case wxDropSource::Cancel:  pc = "Cancelled"; break;
+      case wxDragError:   pc = "Error!";    break;
+      case wxDragNone:    pc = "Nothing";   break;
+      case wxDragCopy:    pc = "Copied";    break;
+      case wxDragMove:    pc = "Moved";     break;
+      case wxDragCancel:  pc = "Cancelled"; break;
       default:                    pc = "Huh?";      break;
     }
 
 
 #
 # Makefile for minimal example (UNIX).
 
-include ../../src/makeprog.env
-
 PROGRAM=minimal
 
 OBJECTS=$(PROGRAM).o
+
+include ../../src/makeprog.env
+
 
 #include "wx/cursor.h"
 #include "wx/font.h"
 #include "wx/palette.h"
+#include "wx/app.h"
 
 #include "wx/log.h"
 #include <string.h>
 #include <windows.h>
 #endif
 
+#ifdef __WXMOTIF__
+#include <Xm/Xm.h>
+#endif
+
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_CLASS(wxColourDatabase, wxList)
 IMPLEMENT_DYNAMIC_CLASS(wxFontList, wxList)
     XColor xcolour;
 
 #ifdef __WXMOTIF__
-    Display *display = XtDisplay(wxTheApp->topLevel) ;
-#endif
-#ifdef __XVIEW__
-    Xv_Screen screen = xv_get(xview_server, SERVER_NTH_SCREEN, 0);
-    Xv_opaque root_window = xv_get(screen, XV_ROOT);
-    Display *display = (Display *)xv_get(root_window, XV_DISPLAY);
+    Display *display = XtDisplay((Widget) wxTheApp->GetTopLevelWidget()) ;
 #endif
 
     /* MATTHEW: [4] Use wxGetMainColormap */
-    if (!XParseColor(display, wxGetMainColormap(display), colour,&xcolour))
+    if (!XParseColor(display, (Colormap) wxTheApp->GetMainColormap((WXDisplay*) display), colour,&xcolour))
       return NULL;
 
     unsigned char r = (unsigned char)(xcolour.red >> 8);
 #ifdef __WXMOTIF__
 #endif
 #ifdef __X__
-  wxFontPool = new XFontPool;
+  // TODO
+  //  wxFontPool = new XFontPool;
 #endif
 
   wxNORMAL_FONT = new wxFont (12, wxMODERN, wxNORMAL, wxNORMAL);
          each_font->GetStyle () == Style &&
          each_font->GetWeight () == Weight &&
          each_font->GetUnderlined () == underline &&
-#if defined(__X__) || (defined(__WXMSW__) && USE_PORTABLE_FONTS_IN_MSW)
-         each_font->GetFontId () == FamilyOrFontId) /* New font system */
-#else
+         //#if defined(__X__)
+         //      each_font->GetFontId () == FamilyOrFontId) /* New font system */
+         //#else
          each_font->GetFamily () == FamilyOrFontId &&
           (!each_font->GetFaceName() || each_font->GetFaceName() == Face))
-#endif
+       //#endif
        return each_font;
     }
   wxFont *font = new wxFont (PointSize, FamilyOrFontId, Style, Weight, underline, Face);
 
 
 #endif
 
+#ifdef __WXMOTIF__
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#endif
+
 #ifdef __WXMSW__
 
 #ifdef DrawText
 #else  
 
 #ifdef __WXMOTIF__
-  d = source->display;
+  // TODO. for now, use global display
+  //  d = source->display;
+  d = (Display*) wxGetDisplay();
 #else
-  d = wxGetDisplay();
+  d = (Display*) wxGetDisplay();
 #endif
 
-  cm = wxGetMainColormap(d);
-  image = XGetImage(d, source->pixmap, x, y, width, height, AllPlanes, ZPixmap);
+  cm = (Colormap) wxTheApp->GetMainColormap((WXDisplay*) d);
+  // TODO - implement GetPixmap() and uncomment this line
+  //  image = XGetImage(d, source->GetPixmap(), x, y, width, height, AllPlanes, ZPixmap);
   
 #endif
 
       StringToLong (WXSTRINGCAST text4->GetValue (), &wxThePrintSetupData->printerTranslateY);
 
 #ifdef __X__
-      wxThePrintSetupData->SetPrinterOptions(WXSTRINGCAST text0->GetValue ());
-      wxThePrintSetupData->SetPrinterCommand(WXSTRINGCAST text_prt->GetValue ());
+      //      wxThePrintSetupData->SetPrinterOptions(WXSTRINGCAST text0->GetValue ());
+      //      wxThePrintSetupData->SetPrinterCommand(WXSTRINGCAST text_prt->GetValue ());
 #endif
 
       wxThePrintSetupData->SetPrinterOrientation((radio0->GetSelection() == 1 ? PS_LANDSCAPE : PS_PORTRAIT));
 
 #endif
 
 #ifdef __WXMOTIF__
-#define wxAPP_CONTEXT wxTheApp->appContext
+#define wxAPP_CONTEXT ((XtAppContext)wxTheApp->GetAppContext())
 #endif
 
 #ifdef __WINDOWS__
 
   
   delete ptr;
   
-  source->m_retValue = wxDropSource::Copy;
+  source->m_retValue = wxDragCopy;
 }
 
 wxDropSource::wxDropSource( wxWindow *win )
   if (win->m_wxwindow) m_widget = win->m_wxwindow;
   
   m_data = (wxDataObject *) NULL;
-  m_retValue = Cancel;
+  m_retValue = wxDragCancel;
 
   m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
   m_goaheadCursor = wxCursor( wxCURSOR_HAND );
   m_window = win;
   m_widget = win->m_widget;
   if (win->m_wxwindow) m_widget = win->m_wxwindow;
-  m_retValue = Cancel;
+  m_retValue = wxDragCancel;
   
   m_data = &data;
 
   g_blockEventsOnDrag = FALSE;
 }
    
-wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
+wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
 {
-  if (gdk_dnd.dnd_grabbed) return (wxDropSource::DragResult) None;
-  if (gdk_dnd.drag_really) return (wxDropSource::DragResult) None;
+  if (gdk_dnd.dnd_grabbed) return (wxDragResult) wxDragNone;
+  if (gdk_dnd.drag_really) return (wxDragResult) wxDragNone;
   
   wxASSERT_MSG( m_data, "wxDragSource: no data" );
   
-  if (!m_data) return (wxDropSource::DragResult) None;
-  if (m_data->GetDataSize() == 0) return (wxDropSource::DragResult) None;
+  if (!m_data) return (wxDragResult) wxDragNone;
+  if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
   
   GdkWindowPrivate *wp = (GdkWindowPrivate*) m_widget->window;
   
 
   
   delete ptr;
   
-  source->m_retValue = wxDropSource::Copy;
+  source->m_retValue = wxDragCopy;
 }
 
 wxDropSource::wxDropSource( wxWindow *win )
   if (win->m_wxwindow) m_widget = win->m_wxwindow;
   
   m_data = (wxDataObject *) NULL;
-  m_retValue = Cancel;
+  m_retValue = wxDragCancel;
 
   m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY );
   m_goaheadCursor = wxCursor( wxCURSOR_HAND );
   m_window = win;
   m_widget = win->m_widget;
   if (win->m_wxwindow) m_widget = win->m_wxwindow;
-  m_retValue = Cancel;
+  m_retValue = wxDragCancel;
   
   m_data = &data;
 
   g_blockEventsOnDrag = FALSE;
 }
    
-wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
+wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
 {
-  if (gdk_dnd.dnd_grabbed) return (wxDropSource::DragResult) None;
-  if (gdk_dnd.drag_really) return (wxDropSource::DragResult) None;
+  if (gdk_dnd.dnd_grabbed) return (wxDragResult) wxDragNone;
+  if (gdk_dnd.drag_really) return (wxDragResult) wxDragNone;
   
   wxASSERT_MSG( m_data, "wxDragSource: no data" );
   
-  if (!m_data) return (wxDropSource::DragResult) None;
-  if (m_data->GetDataSize() == 0) return (wxDropSource::DragResult) None;
+  if (!m_data) return (wxDragResult) wxDragNone;
+  if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
   
   GdkWindowPrivate *wp = (GdkWindowPrivate*) m_widget->window;
   
 
 // Notes   : default implementation is ok in more than 99% of cases
 STDMETHODIMP wxIDropSource::GiveFeedback(DWORD dwEffect)
 {
-  wxDropSource::DragResult effect;
+  wxDragResult effect;
   if ( dwEffect & DROPEFFECT_COPY )
-    effect = wxDropSource::Copy;
+    effect = wxDragCopy;
   else if ( dwEffect & DROPEFFECT_MOVE )
-    effect = wxDropSource::Move;
+    effect = wxDragMove;
   else
-    effect = wxDropSource::None;
+    effect = wxDragNone;
 
   if ( m_pDropSource->GiveFeedback(effect,
                                    (dwEffect & DROPEFFECT_SCROLL) != 0 ) )
 
 // Name    : DoDragDrop
 // Purpose : start drag and drop operation
-// Returns : DragResult - the code of performed operation
+// Returns : wxDragResult - the code of performed operation
 // Params  : [in] bool bAllowMove: if false, only copy is allowed
 // Notes   : you must call SetData() before if you had used def ctor
-wxDropSource::DragResult wxDropSource::DoDragDrop(bool bAllowMove)
+wxDragResult wxDropSource::DoDragDrop(bool bAllowMove)
 {
-  wxCHECK_MSG( m_pData != NULL, None, "No data in wxDropSource!" );
+  wxCHECK_MSG( m_pData != NULL, wxDragNone, "No data in wxDropSource!" );
 
   DWORD dwEffect;
   HRESULT hr = ::DoDragDrop(m_pData->GetInterface(), 
                             &dwEffect);
 
   if ( hr == DRAGDROP_S_CANCEL ) {
-    return Cancel;
+    return wxDragCancel;
   }
   else if ( hr == DRAGDROP_S_DROP ) {
     if ( dwEffect & DROPEFFECT_COPY ) {
-      return Copy;
+      return wxDragCopy;
     }
     else if ( dwEffect & DROPEFFECT_MOVE ) {
       // consistency check: normally, we shouldn't get "move" at all
       // here if !bAllowMove, but in practice it does happen quite often
       if ( bAllowMove )
-        return Move;
+        return wxDragMove;
       else
-        return Copy;
+        return wxDragCopy;
     }
     else {
       // not copy or move
-      return None;
+      return wxDragNone;
     }
   }
   else {
       wxLogDebug("Unexpected success return code %08lx from DoDragDrop.", hr);
     }
 
-    return Error;
+    return wxDragError;
   }
 }
 
 // Params  : [in] DragResult effect - what would happen if we dropped now
 //           [in] bool bScrolling   - true if target is scrolling    
 // Notes   : here we just leave this stuff for default implementation
-bool wxDropSource::GiveFeedback(DragResult effect, bool bScrolling)
+bool wxDropSource::GiveFeedback(wxDragResult effect, bool bScrolling)
 {
   return FALSE;
 }
 
-#endif  //USE_DRAG_AND_DROP
\ No newline at end of file
+#endif  //USE_DRAG_AND_DROP
 
 {
 };
    
-wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
+wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
 {
     // TODO
-    return Error;
+    return wxDragError;
 };
 
 
   // TODO
 }
 
-void wxFrame::SetAcceleratorTable(const wxAcceleratorTable& accel)
-{
-    m_acceleratorTable = accel;
-}
-
 wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id,
     const wxString& name)
 {
 
                m_windowValidator->SetWindow(this) ;
 }
 
+void wxWindow::SetAcceleratorTable(const wxAcceleratorTable& accel)
+{
+    m_acceleratorTable = accel;
+}
+
 // Find a window by id or name
 wxWindow *wxWindow::FindWindow(long id)
 {