> I can't speak for Jeff, but it probably seemed easier to him at the time.  
> All told, we've been so busy congratulating ourselves for keeping platform 
> code out of the rest of the app that we haven't sweated the < 10K of 
> platform-specific code in the framework.  
> 
> Insofar as we rarely have to go back into his framework to change anything, 
> it hasn't bothered me that much, but for anyone who does go in there, it's 
> pretty noticeable.   
> 
> By all means, if you feel the itch to streamline that code, I can't imagine 
> anyone standing in your way.  :-)
> 

Here's my first attempt at moving some code up in the class heirarchy. I
moved the toolbar creation code to XAP_Frame - the code was being
duplicated in all platform-specific subclasses. If this is commited, it
should make toolbar-toggling a lot easier becuase it can all be done in
XP. I also moved the m_p*Mouse and m_p*Keyboard into two single variables 
in the XAP_Frame rather than having them be declared seperately for each
platform in their classes. I have made the changes to all platforms, but
it has only been tested on Unix w/o gnome, and it seems to work.

Thanks for this fun oportunity to work with a framework, and if you like
this patch I'd be interested in cleaning up other stuff in the af
framework.


Aaron Lehmann
Index: src/af/ev/beos/ev_BeOSToolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/beos/ev_BeOSToolbar.h,v
retrieving revision 1.3
diff -u -r1.3 ev_BeOSToolbar.h
--- src/af/ev/beos/ev_BeOSToolbar.h     1999/11/06 03:23:01     1.3
+++ src/af/ev/beos/ev_BeOSToolbar.h     2000/03/01 08:49:37
@@ -94,12 +94,12 @@
        EV_BeOSToolbar(XAP_BeOSApp * pBeOSApp, XAP_BeOSFrame * pBeOSFrame,
                                   const char * szToolbarLayoutName,
                                   const char * szToolbarLabelSetName);
-       ~EV_BeOSToolbar(void);
+       virtual ~EV_BeOSToolbar(void);
 
        //This is called in the frame code
        UT_Bool bindListenerToView(AV_View * pView);
        //This is called in the frame code
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
        //This is called locally and by the toolbar listener
        UT_Bool refreshToolbar(AV_View * pView, AV_ChangeMask mask);
 
Index: src/af/ev/mac/ev_MacToolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/mac/ev_MacToolbar.h,v
retrieving revision 1.3
diff -u -r1.3 ev_MacToolbar.h
--- src/af/ev/mac/ev_MacToolbar.h       1999/05/01 08:45:33     1.3
+++ src/af/ev/mac/ev_MacToolbar.h       2000/03/01 08:49:37
@@ -46,12 +46,12 @@
                                   const char * szToolbarLayoutName,
                                   const char * szToolbarLabelSetName);
        
-       ~EV_MacToolbar(void);
+       virtual ~EV_MacToolbar(void);
 
        UT_Bool toolbarEvent(XAP_Toolbar_Id id,
                                                 UT_UCSChar * pData = 0,
                                                 UT_uint32 dataLength = 0);
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
        UT_Bool bindListenerToView(AV_View * pView);
        UT_Bool refreshToolbar(AV_View * pView, AV_ChangeMask mask);
        
Index: src/af/ev/qnx/ev_QNXToolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/qnx/ev_QNXToolbar.h,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 ev_QNXToolbar.h
--- src/af/ev/qnx/ev_QNXToolbar.h       2000/01/11 12:05:17     1.1.1.1
+++ src/af/ev/qnx/ev_QNXToolbar.h       2000/03/01 08:49:37
@@ -39,10 +39,10 @@
                                   const char * szToolbarLayoutName,
                                   const char * szToolbarLabelSetName);
        
-       ~EV_QNXToolbar(void);
+       virtual ~EV_QNXToolbar(void);
 
        UT_Bool toolbarEvent(XAP_Toolbar_Id id, UT_UCSChar * pData, UT_uint32 
dataLength);
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
        UT_Bool bindListenerToView(AV_View * pView);
        UT_Bool refreshToolbar(AV_View * pView, AV_ChangeMask mask);
 
Index: src/af/ev/unix/ev_UnixToolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/unix/ev_UnixToolbar.h,v
retrieving revision 1.14
diff -u -r1.14 ev_UnixToolbar.h
--- src/af/ev/unix/ev_UnixToolbar.h     1999/05/05 19:38:44     1.14
+++ src/af/ev/unix/ev_UnixToolbar.h     2000/03/01 08:49:37
@@ -41,10 +41,10 @@
                                   const char * szToolbarLayoutName,
                                   const char * szToolbarLabelSetName);
        
-       ~EV_UnixToolbar(void);
+       virtual ~EV_UnixToolbar(void);
 
        UT_Bool toolbarEvent(_wd * wd, UT_UCSChar * pData, UT_uint32 dataLength);
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
        UT_Bool bindListenerToView(AV_View * pView);
        UT_Bool refreshToolbar(AV_View * pView, AV_ChangeMask mask);
 
Index: src/af/ev/unix/gnome/ev_UnixGnomeToolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/unix/gnome/ev_UnixGnomeToolbar.h,v
retrieving revision 1.1
diff -u -r1.1 ev_UnixGnomeToolbar.h
--- src/af/ev/unix/gnome/ev_UnixGnomeToolbar.h  1999/12/03 01:26:14     1.1
+++ src/af/ev/unix/gnome/ev_UnixGnomeToolbar.h  2000/03/01 08:49:37
@@ -41,9 +41,9 @@
                                                const char * szToolbarLayoutName,
                                                const char * szToolbarLabelSetName);
        
-       ~EV_UnixGnomeToolbar(void);
+       virtual ~EV_UnixGnomeToolbar(void);
 
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
 };
 
 #endif /* EV_UNIXGNOMETOOLBAR_H */
Index: src/af/ev/win/ev_Win32Toolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/win/ev_Win32Toolbar.h,v
retrieving revision 1.11
diff -u -r1.11 ev_Win32Toolbar.h
--- src/af/ev/win/ev_Win32Toolbar.h     1999/05/01 08:45:35     1.11
+++ src/af/ev/win/ev_Win32Toolbar.h     2000/03/01 08:49:37
@@ -48,12 +48,12 @@
                                   const char * szToolbarLayoutName,
                                   const char * szToolbarLabelSetName);
        
-       ~EV_Win32Toolbar(void);
+       virtual ~EV_Win32Toolbar(void);
 
        UT_Bool toolbarEvent(XAP_Toolbar_Id id,
                                                 UT_UCSChar * pData = 0,
                                                 UT_uint32 dataLength = 0);
-       UT_Bool synthesize(void);
+       virtual UT_Bool synthesize(void);
        UT_Bool bindListenerToView(AV_View * pView);
        UT_Bool refreshToolbar(AV_View * pView, AV_ChangeMask mask);
        UT_Bool getToolTip(LPARAM lParam);
Index: src/af/ev/xp/ev_Toolbar.h
===================================================================
RCS file: /cvsroot/abi/src/af/ev/xp/ev_Toolbar.h,v
retrieving revision 1.4
diff -u -r1.4 ev_Toolbar.h
--- src/af/ev/xp/ev_Toolbar.h   1999/03/04 23:39:02     1.4
+++ src/af/ev/xp/ev_Toolbar.h   2000/03/01 08:49:38
@@ -39,7 +39,7 @@
        EV_Toolbar(EV_EditMethodContainer * pEMC,
                           const char * szMenuLayoutName,
                           const char * szMenuLanguageName);
-       ~EV_Toolbar(void);
+       virtual ~EV_Toolbar(void);
 
        const EV_Toolbar_Layout * getToolbarLayout(void) const;
        const EV_Toolbar_LabelSet * getToolbarLabelSet(void) const;
@@ -48,6 +48,8 @@
                                                                EV_EditMethod * pEM,
                                                                UT_UCSChar * pData,
                                                                UT_uint32 dataLength);
+
+       virtual UT_Bool synthesize(void) { return (UT_FALSE); } // Abstract
 
 protected:
        EV_EditMethodContainer *        m_pEMC;
Index: src/af/xap/beos/xap_BeOSFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/beos/xap_BeOSFrame.cpp,v
retrieving revision 1.17
diff -u -r1.17 xap_BeOSFrame.cpp
--- src/af/xap/beos/xap_BeOSFrame.cpp   2000/02/08 01:35:15     1.17
+++ src/af/xap/beos/xap_BeOSFrame.cpp   2000/03/01 08:49:38
@@ -78,8 +78,8 @@
          m_dialogFactory(this, static_cast<XAP_App *>(app))
 {
        m_pBeOSApp = app;
-       m_pBeOSKeyboard = NULL;
-       m_pBeOSMouse = NULL;
+       m_pKeyboard = NULL;
+       m_pMouse = NULL;
        m_pBeOSMenu = NULL;
        m_pView = NULL;
        m_pBeWin = NULL;
@@ -95,8 +95,8 @@
          m_dialogFactory(this, static_cast<XAP_App *>(f->m_pBeOSApp))
 {
        m_pBeOSApp = f->m_pBeOSApp;
-       m_pBeOSKeyboard = NULL;
-       m_pBeOSMouse = NULL;
+       m_pKeyboard = NULL;
+       m_pMouse = NULL;
        m_pBeOSMenu = NULL;
        m_pView = NULL;
        m_pBeWin = NULL;
@@ -107,10 +107,7 @@
 {
        // only delete the things we created...
        
-       DELETEP(m_pBeOSKeyboard);
-       DELETEP(m_pBeOSMouse);
        DELETEP(m_pBeOSMenu);
-       UT_VECTOR_PURGEALL(EV_BeOSToolbar *, m_vecBeOSToolbars);
 }
 
 UT_Bool XAP_BeOSFrame::initialize(const char * szKeyBindingsKey, 
@@ -147,11 +144,11 @@
        //These are actually "attached" in the ap_Frame code
        //since they require that all the beos classes be
        //instantiated.
-       m_pBeOSKeyboard = new ev_BeOSKeyboard(pEEM);
-       UT_ASSERT(m_pBeOSKeyboard);
+       m_pKeyboard = new ev_BeOSKeyboard(pEEM);
+       UT_ASSERT(m_pKeyboard);
 
-       m_pBeOSMouse = new ev_BeOSMouse(pEEM);
-       UT_ASSERT(m_pBeOSMouse);
+       m_pMouse = new ev_BeOSMouse(pEEM);
+       UT_ASSERT(m_pMouse);
 
        return UT_TRUE;
 }
@@ -179,20 +176,12 @@
                EV_EditEventMapper * pEEM = getEditEventMapper();
                UT_ASSERT(pEEM);
 
-               m_pBeOSKeyboard->setEditEventMap(pEEM);
-               m_pBeOSMouse->setEditEventMap(pEEM);
+               m_pKeyboard->setEditEventMap(pEEM);
+               m_pMouse->setEditEventMap(pEEM);
        }
        return result;
 }
-ev_BeOSMouse * XAP_BeOSFrame::getBeOSMouse(void)
-{
-       return m_pBeOSMouse;
-}
 
-ev_BeOSKeyboard * XAP_BeOSFrame::getBeOSKeyboard(void)
-{
-       return m_pBeOSKeyboard;
-}
 
 XAP_DialogFactory * XAP_BeOSFrame::getDialogFactory(void)
 {
@@ -313,10 +302,6 @@
        return(UT_FALSE);
 }
 
-UT_Vector * XAP_BeOSFrame::VecBeOSToolbars() { 
-       return(&m_vecBeOSToolbars); 
-};      
-
 UT_Vector * XAP_BeOSFrame::VecToolbarLayoutNames() {
        return(&m_vecToolbarLayoutNames); 
 }
@@ -398,19 +383,9 @@
        
        //Add the toolbars
        UT_ASSERT(m_pBeOSFrame);
-       UT_uint32 nrToolbars = m_pBeOSFrame->VecToolbarLayoutNames()->getItemCount();
-       for (UT_uint32 k=0; k < nrToolbars; k++)
-       {
-               EV_BeOSToolbar * pBeOSToolbar
-                       = new EV_BeOSToolbar(m_pBeOSApp, 
-                                        m_pBeOSFrame,
-                                       (const char 
*)m_pBeOSFrame->VecToolbarLayoutNames()->getNthItem(k),
-                                       m_pBeOSFrame->ToolbarLabelSetName());
-               UT_ASSERT(pBeOSToolbar);
-               bResult = pBeOSToolbar->synthesize();
-               UT_ASSERT(bResult);
-               m_pBeOSFrame->VecBeOSToolbars()->addItem(pBeOSToolbar);
-       }
+       
+       createToolbars ();
+
        //printf("After Adding Toolbars: "); m_winRectAvailable.PrintToStream();
 
 
@@ -534,3 +509,9 @@
 #endif
 }
 
+EV_Toolbar * XAP_BeOSFrame::newToolbar (XAP_App *app, XAP_Frame *frame,
+                                       char *arg_3,
+                                       char *arg_4)
+{
+       return (new EV_BeOSToolbar ((XAP_BeOSApp *) app, (XAP_BeOSFrame *) frame, 
+arg_3, arg_4));
+}
Index: src/af/xap/beos/xap_BeOSFrame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/beos/xap_BeOSFrame.h,v
retrieving revision 1.9
diff -u -r1.9 xap_BeOSFrame.h
--- src/af/xap/beos/xap_BeOSFrame.h     2000/01/27 06:15:43     1.9
+++ src/af/xap/beos/xap_BeOSFrame.h     2000/03/01 08:49:38
@@ -31,6 +31,7 @@
 class ev_BeOSKeyboard;
 class ev_BeOSMouse;
 class EV_BeOSMenu;
+class EV_Toolbar;
 class GR_Graphics;
 
 /*****************************************************************
@@ -121,8 +122,6 @@
        be_DocView *                            getBeDocView(void) const;
        void                                    setBeDocView(be_DocView *);
        UT_sint32                               setInputMode(const char * szName);
-       ev_BeOSMouse *                          getBeOSMouse(void);
-       ev_BeOSKeyboard *                       getBeOSKeyboard(void);
 
        virtual XAP_DialogFactory       *getDialogFactory(void);
        virtual void                            setXScrollRange(void)=0;
@@ -131,7 +130,6 @@
        virtual void                            setStatusMessage(const char * szMsg) = 
0;
 
        //TF Added 
-       UT_Vector *                             VecBeOSToolbars();
        UT_Vector *                             VecToolbarLayoutNames();
        const char *                            ToolbarLabelSetName();
        GR_Graphics *                           Graphics();
@@ -145,10 +143,7 @@
 
        // TODO see why ev_BeOSKeyboard has lowercase prefix...
        XAP_BeOSApp *                           m_pBeOSApp;
-       ev_BeOSKeyboard *                       m_pBeOSKeyboard;
-       ev_BeOSMouse *                          m_pBeOSMouse;
        EV_BeOSMenu *                           m_pBeOSMenu;
-       UT_Vector                               m_vecBeOSToolbars;
        
        //Main window and  document view 
        be_Window *                             m_pBeWin;                       
@@ -163,8 +158,7 @@
 
        AP_BeOSDialogFactory            m_dialogFactory;
 
-protected:
-
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*);
 };
 
 #endif /* XAP_BEOSFRAME_H */
Index: src/af/xap/qnx/xap_QNXFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/qnx/xap_QNXFrame.cpp,v
retrieving revision 1.4
diff -u -r1.4 xap_QNXFrame.cpp
--- src/af/xap/qnx/xap_QNXFrame.cpp     2000/02/09 11:49:04     1.4
+++ src/af/xap/qnx/xap_QNXFrame.cpp     2000/03/01 08:49:38
@@ -45,7 +45,7 @@
 {
        XAP_QNXFrame * pQNXFrame = (XAP_QNXFrame *)data;
        AV_View * pView = pQNXFrame->getCurrentView();
-       EV_QNXMouse * pQNXMouse = pQNXFrame->getQNXMouse();
+       EV_QNXMouse * pQNXMouse = (EV_QNXMouse *) pQNXFrame->getMouse();
 
 
        if (pView)
@@ -57,7 +57,7 @@
 {
        XAP_QNXFrame * pQNXFrame = (XAP_QNXFrame *)data;
        AV_View * pView = pQNXFrame->getCurrentView();
-       EV_QNXMouse * pQNXMouse = pQNXFrame->getQNXMouse();
+       EV_QNXMouse * pQNXMouse = (EV_QNXMouse *) pQNXFrame->getMouse();
 
        if (pView)
                pQNXMouse->mouseUp(pView,info);
@@ -68,7 +68,7 @@
 {
        XAP_QNXFrame * pQNXFrame = (XAP_QNXFrame *)data;
        AV_View * pView = pQNXFrame->getCurrentView();
-       EV_QNXMouse * pQNXMouse = pQNXFrame->getQNXMouse();
+       EV_QNXMouse * pQNXMouse = (EV_QNXMouse *) pQNXFrame->getMouse();
 
        if (pView)
                pQNXMouse->mouseMotion(pView, info);
@@ -80,7 +80,7 @@
 {
        XAP_QNXFrame * pQNXFrame = (XAP_QNXFrame *)data;
        AV_View * pView = pQNXFrame->getCurrentView();
-       ev_QNXKeyboard * pQNXKeyboard = pQNXFrame->getQNXKeyboard();
+       ev_QNXKeyboard * pQNXKeyboard = (ev_QNXKeyboard *) pQNXFrame->getKeyboard();
                
        if (pView)
                pQNXKeyboard->keyPressEvent(pView, info);
@@ -256,8 +256,6 @@
          m_dialogFactory(this, (XAP_App *)(app))
 {
        m_pQNXApp = app;
-       m_pQNXKeyboard = NULL;
-       m_pQNXMouse = NULL;
        m_pQNXMenu = NULL;
        m_pQNXPopup = NULL;
        m_pView = NULL;
@@ -277,8 +275,6 @@
          m_dialogFactory(this, (XAP_App *)(f->m_pQNXApp))
 {
        m_pQNXApp = f->m_pQNXApp;
-       m_pQNXKeyboard = NULL;
-       m_pQNXMouse = NULL;
        m_pQNXMenu = NULL;
        m_pQNXPopup = NULL;
        m_pView = NULL;
@@ -288,11 +284,8 @@
 {
        // only delete the things we created...
        
-       DELETEP(m_pQNXKeyboard);
-       DELETEP(m_pQNXMouse);
        DELETEP(m_pQNXMenu);
        DELETEP(m_pQNXPopup);
-       UT_VECTOR_PURGEALL(EV_QNXToolbar *, m_vecQNXToolbars);
 }
 
 UT_Bool XAP_QNXFrame::initialize(const char * szKeyBindingsKey, const char * 
szKeyBindingsDefaultValue,
@@ -319,10 +312,10 @@
        UT_ASSERT(pEEM);
 
        m_pQNXKeyboard = new ev_QNXKeyboard(pEEM);
-       UT_ASSERT(m_pQNXKeyboard);
+       UT_ASSERT(m_pKeyboard);
        
        m_pQNXMouse = new EV_QNXMouse(pEEM);
-       UT_ASSERT(m_pQNXMouse);
+       UT_ASSERT(m_pMouse);
 
        return UT_TRUE;
 }
@@ -337,8 +330,8 @@
                EV_EditEventMapper * pEEM = getEditEventMapper();
                UT_ASSERT(pEEM);
 
-               m_pQNXKeyboard->setEditEventMap(pEEM);
-               m_pQNXMouse->setEditEventMap(pEEM);
+               m_pKeyboard->setEditEventMap(pEEM);
+               m_pMouse->setEditEventMap(pEEM);
        }
 
        return result;
@@ -354,16 +347,6 @@
        return m_wVBox;
 }
 
-EV_QNXMouse * XAP_QNXFrame::getQNXMouse(void)
-{
-       return m_pQNXMouse;
-}
-
-ev_QNXKeyboard * XAP_QNXFrame::getQNXKeyboard(void)
-{
-       return m_pQNXKeyboard;
-}
-
 XAP_DialogFactory * XAP_QNXFrame::getDialogFactory(void)
 {
        return &m_dialogFactory;
@@ -422,18 +405,7 @@
 #endif
        
        /*** Create the tool bars ***/
-       UT_uint32 nrToolbars = m_vecToolbarLayoutNames.getItemCount();
-       for (UT_uint32 k=0; k < nrToolbars; k++) {
-               EV_QNXToolbar * pQNXToolbar
-                       = new EV_QNXToolbar(m_pQNXApp,this,
-                                        (const char 
*)m_vecToolbarLayoutNames.getNthItem(k),
-                                        m_szToolbarLabelSetName);
-               UT_ASSERT(pQNXToolbar);
-               bResult = pQNXToolbar->synthesize();
-               UT_ASSERT(bResult);
-
-               m_vecQNXToolbars.addItem(pQNXToolbar);
-       }
+       createToolbars ();
 
        // Let the app-specific frame code create the contents of
        // the child area of the window (between the toolbars and
@@ -556,3 +528,9 @@
 //     m_pQNXApp->setTimeOfLastEvent(eventTime);
 }
 
+EV_Toolbar * XAP_QNXFrame::newToolbar (XAP_App *app, XAP_Frame *frame,
+                                       char *arg_3,
+                                       char *arg_4)
+{
+       return (new EV_UnixToolbar ((XAP_QNXApp *) app, (XAP_QNXFrame *) frame, arg_3, 
+arg_4));
+}
Index: src/af/xap/qnx/xap_QNXFrame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/qnx/xap_QNXFrame.h,v
retrieving revision 1.3
diff -u -r1.3 xap_QNXFrame.h
--- src/af/xap/qnx/xap_QNXFrame.h       2000/02/09 11:49:04     1.3
+++ src/af/xap/qnx/xap_QNXFrame.h       2000/03/01 08:49:38
@@ -65,9 +65,7 @@
 
        PtWidget_t *                            getTopLevelWindow(void) const;
        PtWidget_t *                            getVBoxWidget(void) const;
-       EV_QNXMouse *                           getQNXMouse(void);
-       ev_QNXKeyboard *                        getQNXKeyboard(void);
-               
+       
        virtual XAP_DialogFactory *     getDialogFactory(void);
        virtual void                            setXScrollRange(void)=0;
        virtual void                            setYScrollRange(void)=0;
@@ -93,11 +91,8 @@
        
        // TODO see why ev_QNXKeyboard has lowercase prefix...
        XAP_QNXApp *                            m_pQNXApp;
-       ev_QNXKeyboard *                        m_pQNXKeyboard;
-       EV_QNXMouse *                           m_pQNXMouse;
        EV_QNXMenuBar *                 m_pQNXMenu;
        EV_QNXMenuPopup *                       m_pQNXPopup; /* only valid while a 
context popup is up */
-       UT_Vector                                       m_vecQNXToolbars;
        
        PtWidget_t *                            m_wTopLevelWindow;
 
@@ -106,6 +101,8 @@
 
        AP_QNXDialogFactory             m_dialogFactory;
        int                                                     m_PopupDone;
+
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*);
 
 protected:
        class _fe
Index: src/af/xap/unix/xap_UnixDlg_FontChooser.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixDlg_FontChooser.cpp,v
retrieving revision 1.52
diff -u -r1.52 xap_UnixDlg_FontChooser.cpp
--- src/af/xap/unix/xap_UnixDlg_FontChooser.cpp 1999/10/10 05:31:49     1.52
+++ src/af/xap/unix/xap_UnixDlg_FontChooser.cpp 2000/03/01 08:49:39
@@ -636,8 +636,7 @@
        m_pUnixFrame = (XAP_UnixFrame *)pFrame;
        UT_ASSERT(m_pUnixFrame);
 
-       XAP_UnixApp * pApp = (XAP_UnixApp *)m_pApp;
-       UT_ASSERT(pApp);
+       UT_ASSERT(m_pApp);
 
        UT_DEBUGMSG(("FontChooserStart: Family[%s] Size[%s] Weight[%s] Style[%s] 
Color[%s] Underline[%d] StrikeOut[%d]\n",
                                 ((m_pFontFamily) ? m_pFontFamily : ""),
Index: src/af/xap/unix/xap_UnixFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixFrame.cpp,v
retrieving revision 1.74
diff -u -r1.74 xap_UnixFrame.cpp
--- src/af/xap/unix/xap_UnixFrame.cpp   2000/02/09 03:26:03     1.74
+++ src/af/xap/unix/xap_UnixFrame.cpp   2000/03/01 08:49:39
@@ -46,7 +46,7 @@
        XAP_UnixFrame * pUnixFrame = (XAP_UnixFrame 
*)gtk_object_get_user_data(GTK_OBJECT(w));
        pUnixFrame->setTimeOfLastEvent(e->time);
        AV_View * pView = pUnixFrame->getCurrentView();
-       EV_UnixMouse * pUnixMouse = pUnixFrame->getUnixMouse();
+       EV_UnixMouse * pUnixMouse = (EV_UnixMouse *) pUnixFrame->getMouse();
 
        //UT_DEBUGMSG(("Grabbing mouse.\n"));
        gtk_grab_add(w);
@@ -61,7 +61,7 @@
        XAP_UnixFrame * pUnixFrame = (XAP_UnixFrame 
*)gtk_object_get_user_data(GTK_OBJECT(w));
        pUnixFrame->setTimeOfLastEvent(e->time);
        AV_View * pView = pUnixFrame->getCurrentView();
-       EV_UnixMouse * pUnixMouse = pUnixFrame->getUnixMouse();
+       EV_UnixMouse * pUnixMouse = (EV_UnixMouse *) pUnixFrame->getMouse();
 
        //UT_DEBUGMSG(("Ungrabbing mouse.\n"));
        gtk_grab_remove(w);
@@ -90,7 +90,7 @@
        XAP_UnixFrame * pUnixFrame = (XAP_UnixFrame 
*)gtk_object_get_user_data(GTK_OBJECT(w));
        pUnixFrame->setTimeOfLastEvent(e->time);
        AV_View * pView = pUnixFrame->getCurrentView();
-       EV_UnixMouse * pUnixMouse = pUnixFrame->getUnixMouse();
+       EV_UnixMouse * pUnixMouse = (EV_UnixMouse *) pUnixFrame->getMouse();
        
        if (pView)
                pUnixMouse->mouseMotion(pView, e);
@@ -103,8 +103,8 @@
        XAP_UnixFrame * pUnixFrame = (XAP_UnixFrame 
*)gtk_object_get_user_data(GTK_OBJECT(w));
        pUnixFrame->setTimeOfLastEvent(e->time);
        AV_View * pView = pUnixFrame->getCurrentView();
-       ev_UnixKeyboard * pUnixKeyboard = pUnixFrame->getUnixKeyboard();
-               
+       ev_UnixKeyboard * pUnixKeyboard = (ev_UnixKeyboard *) 
+pUnixFrame->getKeyboard();
+       
        if (pView)
                pUnixKeyboard->keyPressEvent(pView, e);
 
@@ -231,8 +230,6 @@
          m_dialogFactory(this, static_cast<XAP_App *>(app))
 {
        m_pUnixApp = app;
-       m_pUnixKeyboard = NULL;
-       m_pUnixMouse = NULL;
        m_pUnixMenu = NULL;
        m_pUnixPopup = NULL;
        m_pView = NULL;
@@ -247,8 +244,6 @@
          m_dialogFactory(this, static_cast<XAP_App *>(f->m_pUnixApp))
 {
        m_pUnixApp = f->m_pUnixApp;
-       m_pUnixKeyboard = NULL;
-       m_pUnixMouse = NULL;
        m_pUnixMenu = NULL;
        m_pUnixPopup = NULL;
        m_pView = NULL;
@@ -258,11 +253,8 @@
 {
        // only delete the things we created...
        
-       DELETEP(m_pUnixKeyboard);
-       DELETEP(m_pUnixMouse);
        DELETEP(m_pUnixMenu);
        DELETEP(m_pUnixPopup);
-       UT_VECTOR_PURGEALL(EV_UnixToolbar *, m_vecUnixToolbars);
 }
 
 UT_Bool XAP_UnixFrame::initialize(const char * szKeyBindingsKey, const char * 
szKeyBindingsDefaultValue,
@@ -282,18 +273,19 @@
                                                                        
szToolbarLabelSetKey, szToolbarLabelSetDefaultValue);
        UT_ASSERT(bResult);
 
-       // get a handle to our keyboard binding mechanism
+       // get a handle to our keyboard binding mechanism
        // and to our mouse binding mechanism.
 
        EV_EditEventMapper * pEEM = getEditEventMapper();
        UT_ASSERT(pEEM);
 
-       m_pUnixKeyboard = new ev_UnixKeyboard(pEEM);
+       m_pKeyboard = new ev_UnixKeyboard(pEEM);
        UT_ASSERT(m_pUnixKeyboard);
        
-       m_pUnixMouse = new EV_UnixMouse(pEEM);
+       m_pMouse = new EV_UnixMouse(pEEM);
        UT_ASSERT(m_pUnixMouse);
 
+
        return UT_TRUE;
 }
 
@@ -307,8 +299,8 @@
                EV_EditEventMapper * pEEM = getEditEventMapper();
                UT_ASSERT(pEEM);
 
-               m_pUnixKeyboard->setEditEventMap(pEEM);
-               m_pUnixMouse->setEditEventMap(pEEM);
+               m_pKeyboard->setEditEventMap(pEEM);
+               m_pMouse->setEditEventMap(pEEM);
        }
 
        return result;
@@ -324,16 +316,6 @@
        return m_wVBox;
 }
 
-EV_UnixMouse * XAP_UnixFrame::getUnixMouse(void)
-{
-       return m_pUnixMouse;
-}
-
-ev_UnixKeyboard * XAP_UnixFrame::getUnixKeyboard(void)
-{
-       return m_pUnixKeyboard;
-}
-
 XAP_DialogFactory * XAP_UnixFrame::getDialogFactory(void)
 {
        return &m_dialogFactory;
@@ -390,20 +372,8 @@
 
        gtk_signal_connect(GTK_OBJECT(m_wTopLevelWindow), "key_press_event",
                                           GTK_SIGNAL_FUNC(_fe::key_press_event), 
NULL);
-
-       UT_uint32 nrToolbars = m_vecToolbarLayoutNames.getItemCount();
-       for (UT_uint32 k=0; k < nrToolbars; k++)
-       {
-               EV_UnixToolbar * pUnixToolbar
-                       = new EV_UnixToolbar(m_pUnixApp,this,
-                                                                (const char 
*)m_vecToolbarLayoutNames.getNthItem(k),
-                                                                
m_szToolbarLabelSetName);
-               UT_ASSERT(pUnixToolbar);
-               bResult = pUnixToolbar->synthesize();
-               UT_ASSERT(bResult);
 
-               m_vecUnixToolbars.addItem(pUnixToolbar);
-       }
+       createToolbars ();
 
        // Let the app-specific frame code create the contents of
        // the child area of the window (between the toolbars and
@@ -579,3 +549,9 @@
        m_pUnixApp->setTimeOfLastEvent(eventTime);
 }
 
+EV_Toolbar * XAP_UnixFrame::newToolbar (XAP_App *app, XAP_Frame *frame,
+                                       char *arg_3,
+                                       char *arg_4)
+{
+       return (new EV_UnixToolbar ((XAP_UnixApp *) app, (XAP_UnixFrame *) frame, 
+arg_3, arg_4));
+}
Index: src/af/xap/unix/xap_UnixFrame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixFrame.h,v
retrieving revision 1.31
diff -u -r1.31 xap_UnixFrame.h
--- src/af/xap/unix/xap_UnixFrame.h     2000/01/27 00:22:37     1.31
+++ src/af/xap/unix/xap_UnixFrame.h     2000/03/01 08:49:39
@@ -65,8 +65,6 @@
 
        GtkWidget *                                     getTopLevelWindow(void) const;
        GtkWidget *                                     getVBoxWidget(void) const;
-       EV_UnixMouse *                          getUnixMouse(void);
-       ev_UnixKeyboard *                       getUnixKeyboard(void);
                
        virtual XAP_DialogFactory *     getDialogFactory(void);
        virtual void                            setXScrollRange(void)=0;
@@ -88,11 +86,8 @@
        
        // TODO see why ev_UnixKeyboard has lowercase prefix...
        XAP_UnixApp *                           m_pUnixApp;
-       ev_UnixKeyboard *                       m_pUnixKeyboard;
-       EV_UnixMouse *                          m_pUnixMouse;
        EV_UnixMenuBar *                        m_pUnixMenu;
        EV_UnixMenuPopup *                      m_pUnixPopup; /* only valid while a 
context popup is up */
-       UT_Vector                                       m_vecUnixToolbars;
        
        GtkWidget *                                     m_wTopLevelWindow;
        GtkWidget *                                     m_wVBox;
@@ -100,6 +95,8 @@
        GtkWidget *                                     m_wStatusBar;
 
        AP_UnixDialogFactory            m_dialogFactory;
+
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*);
 
 protected:
 
Index: src/af/xap/unix/gnome/xap_UnixGnomeFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/gnome/xap_UnixGnomeFrame.cpp,v
retrieving revision 1.2
diff -u -r1.2 xap_UnixGnomeFrame.cpp
--- src/af/xap/unix/gnome/xap_UnixGnomeFrame.cpp        2000/02/08 01:40:05     1.2
+++ src/af/xap/unix/gnome/xap_UnixGnomeFrame.cpp        2000/03/01 08:49:39
@@ -183,19 +183,7 @@
        gtk_signal_connect(GTK_OBJECT(m_wTopLevelWindow), "key_press_event",
                                           GTK_SIGNAL_FUNC(_fe::key_press_event), 
NULL);
 
-       UT_uint32 nrToolbars = m_vecToolbarLayoutNames.getItemCount();
-       for (UT_uint32 k=0; k < nrToolbars; k++)
-       {
-               EV_UnixGnomeToolbar * pUnixToolbar
-                       = new EV_UnixGnomeToolbar(m_pUnixApp,this,
-                                                                         (const char 
*)m_vecToolbarLayoutNames.getNthItem(k),
-                                                                         
m_szToolbarLabelSetName);
-               UT_ASSERT(pUnixToolbar);
-               bResult = pUnixToolbar->synthesize();
-               UT_ASSERT(bResult);
-
-               m_vecUnixToolbars.addItem(pUnixToolbar);
-       }
+       createToolbars ();
 
        // Let the app-specific frame code create the contents of
        // the child area of the window (between the toolbars and
@@ -302,3 +290,9 @@
 //  }
 
 
+EV_Toolbar * XAP_UnixGnomeFrame::newToolbar (XAP_App *app, XAP_Frame *frame,
+                                       char *arg_3,
+                                       char *arg_4)
+{
+       return (new EV_UnixGnomeToolbar ((XAP_UnixGnomeApp *) app, (XAP_UnixGnomeFrame 
+*) frame, arg_3, arg_4));
+}
Index: src/af/xap/unix/gnome/xap_UnixGnomeFrame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/gnome/xap_UnixGnomeFrame.h,v
retrieving revision 1.2
diff -u -r1.2 xap_UnixGnomeFrame.h
--- src/af/xap/unix/gnome/xap_UnixGnomeFrame.h  2000/02/08 01:40:05     1.2
+++ src/af/xap/unix/gnome/xap_UnixGnomeFrame.h  2000/03/01 08:49:39
@@ -63,6 +63,8 @@
 
        static void _dnd_drop_event (GtkWidget *widget, GdkDragContext */*context*/, 
gint /*x*/, gint /*y*/,
                                                                 GtkSelectionData 
*selection_data, guint info, guint /*time*/);
+
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*);
 };
 
 #endif /* XAP_UNIXGNOMEFRAME_H */
Index: src/af/xap/win/xap_Win32Frame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/win/xap_Win32Frame.cpp,v
retrieving revision 1.56
diff -u -r1.56 xap_Win32Frame.cpp
--- src/af/xap/win/xap_Win32Frame.cpp   2000/02/08 11:58:05     1.56
+++ src/af/xap/win/xap_Win32Frame.cpp   2000/03/01 08:49:39
@@ -78,8 +78,6 @@
          m_dialogFactory(this, static_cast<XAP_App *>(app))
 {
        m_pWin32App = app;
-       m_pWin32Keyboard = NULL;
-       m_pWin32Mouse = NULL;
        m_pWin32Menu = NULL;
        m_pWin32Popup = NULL;
        m_pView = NULL;
@@ -100,8 +98,6 @@
        m_dialogFactory(this, static_cast<XAP_App *>(f->m_pWin32App))
 {
        m_pWin32App = f->m_pWin32App;
-       m_pWin32Keyboard = NULL;
-       m_pWin32Mouse = NULL;
        m_pWin32Menu = NULL;
        m_pWin32Popup = NULL;
        m_pView = NULL;
@@ -117,11 +113,8 @@
 {
        // only delete the things we created...
        
-       DELETEP(m_pWin32Keyboard);
-       DELETEP(m_pWin32Mouse);
        DELETEP(m_pWin32Menu);
        DELETEP(m_pWin32Popup);
-       UT_VECTOR_PURGEALL(EV_Win32Toolbar *, m_vecWin32Toolbars);
 }
 
 UT_Bool XAP_Win32Frame::initialize(const char * szKeyBindingsKey, const char * 
szKeyBindingsDefaultValue,
@@ -147,11 +140,11 @@
        EV_EditEventMapper * pEEM = getEditEventMapper();
        UT_ASSERT(pEEM);
 
-       m_pWin32Keyboard = new ev_Win32Keyboard(pEEM);
-       UT_ASSERT(m_pWin32Keyboard);
+       m_pKeyboard = new ev_Win32Keyboard(pEEM);
+       UT_ASSERT(m_pKeyboard);
        
-       m_pWin32Mouse = new EV_Win32Mouse(pEEM);
-       UT_ASSERT(m_pWin32Mouse);
+       m_pMouse = new EV_Win32Mouse(pEEM);
+       UT_ASSERT(m_pMouse);
 
        // TODO: Jeff, I'm currently showing in WinMain, to honor iCmdShow.
        // should we pass that via argv, to do it here for all frames?
@@ -169,8 +162,8 @@
                EV_EditEventMapper * pEEM = getEditEventMapper();
                UT_ASSERT(pEEM);
 
-               m_pWin32Keyboard->setEditEventMap(pEEM);
-               m_pWin32Mouse->setEditEventMap(pEEM);
+               m_pKeyboard->setEditEventMap(pEEM);
+               m_pMouse->setEditEventMap(pEEM);
        }
 
        return result;
@@ -186,16 +179,6 @@
        return m_hwndRebar;
 }
 
-EV_Win32Mouse * XAP_Win32Frame::getWin32Mouse(void)
-{
-       return m_pWin32Mouse;
-}
-
-ev_Win32Keyboard * XAP_Win32Frame::getWin32Keyboard(void)
-{
-       return m_pWin32Keyboard;
-}
-
 XAP_DialogFactory * XAP_Win32Frame::getDialogFactory(void)
 {
        return &m_dialogFactory;
@@ -249,28 +232,7 @@
        // create a toolbar instance for each toolbar listed in our base class.
        m_iBarHeight = 0;
 
-       UT_uint32 nrToolbars = m_vecToolbarLayoutNames.getItemCount();
-       for (UT_uint32 k=0; k < nrToolbars; k++)
-       {
-               EV_Win32Toolbar * pWin32Toolbar
-                       = new EV_Win32Toolbar(m_pWin32App,this,
-                                                                (const char 
*)m_vecToolbarLayoutNames.getNthItem(k),
-                                                                
m_szToolbarLabelSetName);
-               UT_ASSERT(pWin32Toolbar);
-               bResult = pWin32Toolbar->synthesize();
-               UT_ASSERT(bResult);
-               
-               m_vecWin32Toolbars.addItem(pWin32Toolbar);
-
-               // for now, position each one manually
-               // TODO: put 'em all in a rebar instead
-               HWND hwndBar = pWin32Toolbar->getWindow();
-
-               GetClientRect(hwndBar, &r);
-               iHeight = r.bottom - r.top;
-
-               m_iBarHeight += iHeight;
-       }
+       create_toolbars ();
 
        // figure out how much room is left for the child
        GetClientRect(m_hwndFrame, &r);
@@ -442,15 +404,20 @@
 
        case WM_SYSKEYDOWN:
        case WM_KEYDOWN:
-               if (f->m_pWin32Keyboard->onKeyDown(pView,hwnd,iMsg,wParam,lParam))
+       {
+           ev_Win32Keyboard *pKeyboard = (ev_Win32Keyboard *) f->m_pKeyboard;
+               if (pKeyboard->onKeyDown(pView,hwnd,iMsg,wParam,lParam))
                        return 0;
                return DefWindowProc(hwnd,iMsg,wParam,lParam);
+       }
        case WM_SYSCHAR:
        case WM_CHAR:
-               if (f->m_pWin32Keyboard->onChar(pView,hwnd,iMsg,wParam,lParam))
+       {
+           ev_Win32Keyboard *pKeyboard = (ev_Win32Keyboard *) f->m_pKeyboard;
+               if (pKeyboard->onChar(pView,hwnd,iMsg,wParam,lParam))
                        return 0;
                return DefWindowProc(hwnd,iMsg,wParam,lParam);
-
+       }
        case WM_NOTIFY:
                switch (((LPNMHDR) lParam)->code) 
                {
@@ -599,8 +566,8 @@
 
                // This will remap the static tables used by all frames.
                // (see the comment in ev_Win32Keyboard.cpp.)
-
-               f->m_pWin32Keyboard->remapKeyboard((HKL)lParam);
+               ev_Win32Keyboard *pKeyboard = (ev_Win32Keyboard *) f->m_pKeyboard;
+               pKeyboard->remapKeyboard((HKL)lParam);
 
                // We must propagate this message.
                
@@ -668,9 +635,27 @@
                                           x,y,0,m_hwndFrame,NULL);
 
                // the popup steals our capture, so we need to reset our counter.
-               m_pWin32Mouse->reset();
+               EV_Win32Mouse *pMouse = (ev_Win32Mouse *) f->m_pMouse;
+               pMouse->reset();
        }
 
        DELETEP(m_pWin32Popup);
        return bResult;
+}
+
+EV_Toolbar * XAP_Win32Frame::newToolbar (XAP_App *app, XAP_Frame *frame,
+                                       char *arg_3,
+                                       char *arg_4)
+{
+    RECT r;
+       UT_uint32 iHeight;
+       EV_Win32Toolbar *result = new EV_Win32Toolbar ((XAP_Win32App *) app, 
+(XAP_UnixFrame *) frame, arg_3, arg_4);
+       // for now, position each one manually
+       // TODO: put 'em all in a rebar instead
+       HWND hwndBar = result->getWindow();
+       
+       GetClientRect(hwndBar, &r);
+       iHeight = r.bottom - r.top;
+       
+       m_iBarHeight += iHeight;
 }
Index: src/af/xap/win/xap_Win32Frame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/win/xap_Win32Frame.h,v
retrieving revision 1.31
diff -u -r1.31 xap_Win32Frame.h
--- src/af/xap/win/xap_Win32Frame.h     2000/01/27 06:15:44     1.31
+++ src/af/xap/win/xap_Win32Frame.h     2000/03/01 08:49:40
@@ -66,7 +64,6 @@
        HWND                                            getTopLevelWindow(void) const;
        HWND                                            getToolbarWindow(void) const;
        EV_Win32Mouse *                         getWin32Mouse(void);
-       ev_Win32Keyboard *                      getWin32Keyboard(void);
 
        virtual XAP_DialogFactory *     getDialogFactory(void);
        virtual void                            setXScrollRange(void)=0;
@@ -90,13 +87,12 @@
        void                                            _createTopLevelWindow(void);
        static LRESULT CALLBACK         _FrameWndProc(HWND hwnd, UINT iMsg, WPARAM 
wParam, LPARAM lParam);
 
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*);
+
        // TODO see why ev_Win32Keyboard has lowercase prefix...
        XAP_Win32App *                          m_pWin32App;
-       ev_Win32Keyboard *                      m_pWin32Keyboard;
-       EV_Win32Mouse *                         m_pWin32Mouse;
        EV_Win32MenuBar *                       m_pWin32Menu;
        EV_Win32MenuPopup *                     m_pWin32Popup; /* only valid while a 
context popup is up */
-       UT_Vector                                       m_vecWin32Toolbars;
        UT_uint32                                       m_iBarHeight;
        UT_uint32                                       m_iStatusBarHeight;
        
Index: src/af/xap/xp/xap_Frame.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Frame.cpp,v
retrieving revision 1.43
diff -u -r1.43 xap_Frame.cpp
--- src/af/xap/xp/xap_Frame.cpp 2000/02/08 01:35:18     1.43
+++ src/af/xap/xp/xap_Frame.cpp 2000/03/01 08:49:40
@@ -41,6 +41,9 @@
 #include "xav_View.h"
 #include "xad_Document.h"
 #include "xap_Scrollbar_ViewListener.h"
+#include "ev_Keyboard.h"
+#include "ev_Mouse.h"
+#include "ev_Toolbar.h"
 #include "xap_Strings.h"
 
 /*****************************************************************/
@@ -62,6 +65,8 @@
        m_nView = 0;
        m_pScrollbarViewListener = NULL;
        m_pInputModes = NULL;
+       m_pKeyboard = NULL;
+       m_pMouse = NULL;
        m_app->rememberFrame(this);
        memset(m_szTitle,0,sizeof(m_szTitle));
        memset(m_szNonDecoratedTitle,0,sizeof(m_szNonDecoratedTitle));
@@ -88,6 +93,8 @@
        m_nView = 0;
        m_pScrollbarViewListener = NULL;
        m_pInputModes = NULL;
+       m_pKeyboard = NULL;
+       m_pMouse = NULL;
        
        m_app->rememberFrame(this, f);
        memset(m_szTitle,0,sizeof(m_szTitle));
@@ -100,6 +107,9 @@
 {
        // only delete the things that we created...
 
+       DELETEP(m_pKeyboard);
+       DELETEP(m_pMouse);
+
        if (m_pView)
                m_pView->removeListener(m_lid);
 
@@ -119,6 +129,8 @@
        FREEP(m_szMenuLabelSetName);
        FREEP(m_szToolbarLabelSetName);
        FREEP(m_szToolbarAppearance);
+
+       UT_VECTOR_PURGEALL(EV_Toolbar *, m_vecToolbars);
 }
 
 /*****************************************************************/
@@ -449,6 +466,34 @@
        return 100;     // default implementation
 }
 
+void XAP_Frame::createToolbars (void)
+{
+       UT_Bool bResult;
+       UT_uint32 nrToolbars = m_vecToolbarLayoutNames.getItemCount();
+       for (UT_uint32 k=0; k < nrToolbars; k++)
+       {
+               EV_Toolbar * pToolbar
+                               = newToolbar(m_app, this,
+                                       (char *)m_vecToolbarLayoutNames.getNthItem(k),
+                                       (char *)m_szToolbarLabelSetName);
+               UT_ASSERT(pToolbar);
+               bResult = pToolbar->synthesize();
+               UT_ASSERT(bResult);
+               
+               m_vecToolbars.addItem(pToolbar);
+       }
+}
+
+EV_Mouse * XAP_Frame::getMouse(void)
+{
+       return m_pMouse;
+}
+
+EV_Keyboard * XAP_Frame::getKeyboard(void)
+{
+       return m_pKeyboard;
+}
+
 //////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////
 
@@ -459,9 +504,7 @@
 
 XAP_InputModes::~XAP_InputModes(void)
 {
-       UT_sint32 kLimit = m_vecEventMaps.getItemCount();
-       UT_sint32 jLimit = m_vecNames.getItemCount();
-       UT_ASSERT(kLimit == jLimit);
+       UT_ASSERT(m_vecEventMaps.getItemCount() == m_vecNames.getItemCount());
 
        UT_VECTOR_PURGEALL(EV_EditEventMapper *, m_vecEventMaps);
        UT_VECTOR_FREEALL(char *, m_vecNames);
@@ -484,7 +527,7 @@
 
        UT_Bool b1 = (m_vecEventMaps.addItem(pEEM) == 0);
        UT_Bool b2 = (m_vecNames.addItem(szDup) == 0);
-       UT_ASSERT(b1 && b2);
+    UT_ASSERT(b1 && b2);
 
        return UT_TRUE;
 }
@@ -525,3 +568,4 @@
 
        return NULL;
 }
+
Index: src/af/xap/xp/xap_Frame.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Frame.h,v
retrieving revision 1.37
diff -u -r1.37 xap_Frame.h
--- src/af/xap/xp/xap_Frame.h   2000/01/27 00:22:37     1.37
+++ src/af/xap/xp/xap_Frame.h   2000/03/01 08:49:40
@@ -34,6 +34,9 @@
 class EV_Menu_Layout;
 class EV_Menu_LabelSet;
 class EV_EditBindingMap;
+class EV_Mouse;
+class EV_Toolbar;
+class EV_Keyboard;
 class AV_ScrollObj;
 class ap_Scrollbar_ViewListener;
 
@@ -122,6 +125,9 @@
 
        virtual void                            toggleRuler(UT_Bool /*bRulerOn*/) { } 
//
        
+       EV_Mouse *                                      getMouse(void);
+       EV_Keyboard *                           getKeyboard(void);
+
 protected:
        XAP_App *                                       m_app;                  /* 
handle to application-specific data */
        AD_Document *                           m_pDoc;                 /* to our 
in-memory representation of a document */
@@ -136,11 +142,17 @@
        const char *                            m_szToolbarAppearance;
        UT_uint32                                       m_nView;
        int                                                     m_iUntitled;
-
+       UT_Vector                   m_vecToolbars;
+       EV_Mouse *                                      m_pMouse;
+       EV_Keyboard *                           m_pKeyboard;
        ap_Scrollbar_ViewListener * m_pScrollbarViewListener;
        AV_ListenerId                           m_lidScrollbarViewListener;
        
        void *                                          m_pData;                /* 
app-specific frame data */
+
+       virtual void createToolbars (void);
+       virtual EV_Toolbar * newToolbar (XAP_App *app, XAP_Frame *frame, char *, char 
+*)
+         { return NULL; } // Abstract
 
        XAP_InputModes *                        m_pInputModes;
        
Index: src/wp/ap/beos/ap_BeOSFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/beos/ap_BeOSFrame.cpp,v
retrieving revision 1.20
diff -u -r1.20 ap_BeOSFrame.cpp
--- src/wp/ap/beos/ap_BeOSFrame.cpp     2000/02/01 09:13:42     1.20
+++ src/wp/ap/beos/ap_BeOSFrame.cpp     2000/03/01 08:49:40
@@ -157,7 +157,7 @@
                // TODO a loop like this to help change the focus when the current
                // TODO view changes.
                
-               EV_BeOSToolbar * pBeOSToolbar = (EV_BeOSToolbar 
*)m_vecBeOSToolbars.getNthItem(k);
+               EV_BeOSToolbar * pBeOSToolbar = (EV_BeOSToolbar 
+*)m_vecToolbars.getNthItem(k);
                pBeOSToolbar->bindListenerToView(pView);
        }
 
Index: src/wp/ap/qnx/ap_QNXFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/qnx/ap_QNXFrame.cpp,v
retrieving revision 1.6
diff -u -r1.6 ap_QNXFrame.cpp
--- src/wp/ap/qnx/ap_QNXFrame.cpp       2000/02/18 20:55:44     1.6
+++ src/wp/ap/qnx/ap_QNXFrame.cpp       2000/03/01 08:49:41
@@ -162,7 +162,7 @@
                // TODO a loop like this to help change the focus when the current
                // TODO view changes.
                
-               EV_QNXToolbar * pQNXToolbar = (EV_QNXToolbar 
*)m_vecQNXToolbars.getNthItem(k);
+               EV_QNXToolbar * pQNXToolbar = (EV_QNXToolbar 
+*)m_vecToolbars.getNthItem(k);
                pQNXToolbar->bindListenerToView(pView);
        }
 
Index: src/wp/ap/unix/ap_UnixFrame.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixFrame.cpp,v
retrieving revision 1.56
diff -u -r1.56 ap_UnixFrame.cpp
--- src/wp/ap/unix/ap_UnixFrame.cpp     2000/01/27 06:15:47     1.56
+++ src/wp/ap/unix/ap_UnixFrame.cpp     2000/03/01 08:49:41
@@ -164,7 +164,7 @@
                // TODO a loop like this to help change the focus when the current
                // TODO view changes.
                
-               EV_UnixToolbar * pUnixToolbar = (EV_UnixToolbar 
*)m_vecUnixToolbars.getNthItem(k);
+               EV_UnixToolbar * pUnixToolbar = (EV_UnixToolbar 
+*)m_vecToolbars.getNthItem(k);
                pUnixToolbar->bindListenerToView(pView);
        }
 
Index: src/wp/ap/win/ap_Win32Frame.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/win/ap_Win32Frame.cpp,v
retrieving revision 1.50
diff -u -r1.50 ap_Win32Frame.cpp
--- src/wp/ap/win/ap_Win32Frame.cpp     2000/01/27 06:15:48     1.50
+++ src/wp/ap/win/ap_Win32Frame.cpp     2000/03/01 08:49:41
@@ -206,7 +206,7 @@
                // TODO a loop like this to help change the focus when the current
                // TODO view changes.
                
-               EV_Win32Toolbar * pWin32Toolbar = (EV_Win32Toolbar 
*)m_vecWin32Toolbars.getNthItem(k);
+               EV_Win32Toolbar * pWin32Toolbar = (EV_Win32Toolbar 
+*)m_vecToolbars.getNthItem(k);
                pWin32Toolbar->bindListenerToView(pView);
        }
 

Reply via email to