These patches are against 072500 sources and are all XP.  Tested on
Linux.

The first patch loosens up the preferences scheme a bit by allowing a
preference value which is not in the _builtin_ set if the preference
name begins with the prefix "debug" (case insensitive).  The idea is
that developers can use this to selectively trigger behavior that is
really only appropriate at "develop time".  Previously, you could set
any preference value you wanted, but you got an ASSERT at preferences
save time for items not in _builtin_.  Now, you still get the ASSERT
if the name doesn't start with "debug", but there is a UT_DEBUGMSG
mentioning the item right before the ASSERT (so you will be able to
correct the typo you just made :-).  The patch also supplies a trivial
new function UT_XML_strnicmp()

The second patch is a new patch that mostly duplicates the patch I
sent for background checks a few days ago.  I'm sending it to make my
kNCSL number look good. :-)  It also fixes a few legitimate pieces of
compiler lint.
-- 
[EMAIL PROTECTED] (WJCarpenter)    PGP 0x91865119
38 95 1B 69 C9 C6 3D 25    73 46 32 04 69 D6 ED F3

diff -ru abi-072500-ORIG/src/af/util/xp/ut_string.cpp 
abi-072500/src/af/util/xp/ut_string.cpp
--- abi-072500-ORIG/src/af/util/xp/ut_string.cpp        Sun Jul 16 19:04:34 2000
+++ abi-072500/src/af/util/xp/ut_string.cpp     Tue Jul 25 21:21:06 2000
@@ -169,6 +169,12 @@
        return UT_stricmp(sz1,sz2);
 }
 
+UT_sint32 UT_XML_strnicmp(const XML_Char * sz1, const XML_Char * sz2, const UT_uint32 
+n)
+{
+       UT_ASSERT(sizeof(char) == sizeof(XML_Char));
+       return UT_strnicmp(sz1,sz2, n);
+}
+
 UT_sint32 UT_XML_strcmp(const XML_Char * sz1, const XML_Char * sz2)
 {
        UT_ASSERT(sizeof(char) == sizeof(XML_Char));
diff -ru abi-072500-ORIG/src/af/util/xp/ut_string.h 
abi-072500/src/af/util/xp/ut_string.h
--- abi-072500-ORIG/src/af/util/xp/ut_string.h  Wed Jul  5 20:05:18 2000
+++ abi-072500/src/af/util/xp/ut_string.h       Tue Jul 25 21:29:05 2000
@@ -52,6 +52,7 @@
 UT_Bool UT_XML_cloneList(XML_Char **& rszDest, const XML_Char ** szSource);
 UT_Bool UT_XML_replaceList(XML_Char **& rszDest, const XML_Char ** szSource);
 UT_sint32 UT_XML_stricmp(const XML_Char * sz1, const XML_Char * sz2);
+UT_sint32 UT_XML_strnicmp(const XML_Char * sz1, const XML_Char * sz2, const UT_uint32 
+n);
 UT_sint32 UT_XML_strcmp(const XML_Char * sz1, const XML_Char * sz2);
 UT_uint32 UT_XML_strncpy(XML_Char * szDest, UT_uint32 nLen, const XML_Char * 
szSource);
 
diff -ru abi-072500-ORIG/src/af/xap/xp/xap_Prefs.cpp 
abi-072500/src/af/xap/xp/xap_Prefs.cpp
--- abi-072500-ORIG/src/af/xap/xp/xap_Prefs.cpp Fri Jul  7 16:46:50 2000
+++ abi-072500/src/af/xap/xp/xap_Prefs.cpp      Tue Jul 25 22:55:13 2000
@@ -25,6 +25,7 @@
 
 #include "ut_debugmsg.h"
 #include "ut_growbuf.h"
+#include "ut_string.h"
 #include "xap_Prefs.h"
 
 /*****************************************************************/
@@ -393,6 +394,8 @@
 }
 
 /*****************************************************************/
+static const XML_Char DEBUG_PREFIX[] = "DeBuG";  // case insensitive
+static const XML_Char NO_PREF_VALUE[] = "";
 
 UT_Bool XAP_Prefs::getPrefsValue(const XML_Char * szKey, const XML_Char ** pszValue) 
const
 {
@@ -404,6 +407,14 @@
                return UT_TRUE;
        if (m_builtinScheme->getValue(szKey,pszValue))
                return UT_TRUE;
+       // It is legal for there to be arbitrary preference tags that start with 
+       // "Debug", and Abi apps won't choke.  The idea is that developers can use
+       // these to selectively trigger development-time behaviors.
+       if (UT_XML_strnicmp(szKey, DEBUG_PREFIX, sizeof(DEBUG_PREFIX) - 1) == 0)
+       {
+               *pszValue = NO_PREF_VALUE;
+               return UT_TRUE;
+       }
 
        UT_ASSERT(UT_SHOULD_NOT_HAPPEN);
        return UT_FALSE;
@@ -419,6 +430,14 @@
                return UT_TRUE;
        if (m_builtinScheme->getValueBool(szKey,pbValue))
                return UT_TRUE;
+       // It is legal for there to be arbitrary preference tags that start with 
+       // "Debug", and Abi apps won't choke.  The idea is that developers can use
+       // these to selectively trigger development-time behaviors.
+       if (UT_XML_strnicmp(szKey, DEBUG_PREFIX, sizeof(DEBUG_PREFIX) - 1) == 0)
+       {
+               *pbValue = UT_FALSE;
+               return UT_TRUE;
+       }
 
        UT_ASSERT(UT_SHOULD_NOT_HAPPEN);
        return UT_FALSE;
@@ -898,9 +917,17 @@
                                {
                                        // for non-builtin sets, we only print the 
values which are different
                                        // from the builtin set.
-                                       const XML_Char * szBuiltinValue;
+                                       const XML_Char * szBuiltinValue = 
+NO_PREF_VALUE;
                                        UT_Bool bHaveBuiltinValue = 
m_builtinScheme->getValue(szKey,&szBuiltinValue);
-                                       UT_ASSERT(bHaveBuiltinValue);
+                                       if (UT_XML_strnicmp(szKey, DEBUG_PREFIX, 
+sizeof(DEBUG_PREFIX) - 1))
+                                       {
+                                               UT_DEBUGMSG(("Strange preference 
+'%s=\"%s\"', ASSERT follows...\n", szKey, szValue));
+                                               UT_ASSERT(bHaveBuiltinValue);
+                                       }
+                                       else
+                                       {
+                                               need_print = UT_TRUE;  // always print 
+"Debug..." values
+                                       }
                                        if (UT_XML_strcmp(szValue,szBuiltinValue) != 0)
                                                need_print = UT_TRUE;
                                }
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_BlockLayout.cpp 
abi-072500/src/text/fmt/xp/fl_BlockLayout.cpp
--- abi-072500-ORIG/src/text/fmt/xp/fl_BlockLayout.cpp  Mon Jul 24 17:20:07 2000
+++ abi-072500/src/text/fmt/xp/fl_BlockLayout.cpp       Tue Jul 25 21:24:34 2000
@@ -21,6 +21,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
+#include <unistd.h>
 
 #include "fl_BlockLayout.h"
 #include "fl_Layout.h"
@@ -95,7 +96,8 @@
        m_bStartList = UT_FALSE;
        m_bStopList = UT_FALSE;
        m_bListLabelCreated = UT_FALSE;
-        m_bCursorErased = UT_FALSE;
+       m_bCursorErased = UT_FALSE;
+       m_uBackgroundCheckReasons = 0;
 
        m_pLayout = m_pSectionLayout->getDocLayout();
        m_pDoc = m_pLayout->getDocument();
@@ -2964,7 +2966,7 @@
        }
 
        // in case we've never checked this one
-       m_pLayout->dequeueBlock(this);
+       m_pLayout->dequeueBlockForBackgroundCheck(this);
 
        FV_View* pView = pSL->getDocLayout()->getView();
        if (pView)
@@ -3219,8 +3221,8 @@
        {
                // this block may never have been checked
                // just to be safe, let's make sure both will
-               m_pLayout->queueBlockForSpell(this);
-               m_pLayout->queueBlockForSpell(pNewBL);
+               m_pLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, 
+this);
+               m_pLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, 
+pNewBL);
        }
 
        return UT_TRUE;
@@ -4222,7 +4224,33 @@
        m_bStopList = bValue;
 }
 
+void fl_BlockLayout::debugFlashing(void)
+{
+       // Trivial background checker which puts on and takes off squiggles from
+       // the entire block that's being checked.  This sort of messes up the
+       // spelling squiggles, but it's just a debug thing anyhow.  Enable it
+       // by setting a preference DebugFlash="1"
+       UT_DEBUGMSG(("fl_BlockLayout::debugFlashing() was called\n"));
+       UT_GrowBuf pgb(1024);
+       UT_Bool bRes = getBlockBuf(&pgb);
+       UT_ASSERT(bRes);
+
+       UT_uint32 eor = pgb.getLength(); /* end of region */
+
+       FV_View* pView = m_pLayout->getView();
+
+       _addSquiggle(0, eor, UT_FALSE);
 
+       pView->_eraseInsertionPoint();
+       pView->updateScreen();
+       pView->_drawInsertionPoint();
+       usleep(250000);
 
+       //_deleteSquiggles(0, eor);
 
+       pView->_eraseInsertionPoint();
+       pView->updateScreen();
+       pView->_drawInsertionPoint();
 
+       return;
+}
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_BlockLayout.h 
abi-072500/src/text/fmt/xp/fl_BlockLayout.h
--- abi-072500-ORIG/src/text/fmt/xp/fl_BlockLayout.h    Sun Jul 16 13:13:51 2000
+++ abi-072500/src/text/fmt/xp/fl_BlockLayout.h Tue Jul 25 21:00:40 2000
@@ -215,6 +215,7 @@
        void checkForEndOnForcedBreak(void);
 
        void checkSpelling(void);
+       void debugFlashing(void);
        UT_Bool findNextTabStop(UT_sint32 iStartX, UT_sint32 iMaxX, UT_sint32& 
iPosition, unsigned char& iType);
        UT_Bool findNextTabStopInLayoutUnits(UT_sint32 iStartX, UT_sint32 iMaxX, 
UT_sint32& iPosition, unsigned char& iType);
        inline UT_sint32 getDefaultTabInterval(void) const { return 
m_iDefaultTabInterval; }
@@ -270,6 +271,14 @@
 
        static UT_Bool                  s_EnumTabStops(void * myThis, UT_uint32 k, 
UT_sint32 & iPosition, unsigned char & iType, UT_uint32 & iOffset);
        
+       inline void                     addBackgroundCheckReason(UT_uint32 reason) 
+{m_uBackgroundCheckReasons |= reason;}
+       inline void                     removeBackgroundCheckReason(UT_uint32 reason) 
+{m_uBackgroundCheckReasons &= ~reason;}
+       inline UT_Bool          hasBackgroundCheckReason(UT_uint32 reason) const 
+{return (m_uBackgroundCheckReasons & reason);}
+
+       // The following is a set of bit flags giving the reason this block is
+       // queued for background checking.  See specific values in fl_DocLayout.h
+       UT_uint32                               m_uBackgroundCheckReasons;
+
 #ifdef FMT_TEST
        void                                    __dump(FILE * fp) const;
 #endif
@@ -386,6 +395,7 @@
 
        // spell check stuff
        UT_Vector                               m_vecSquiggles;
+
 };
 
 /*
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_DocLayout.cpp 
abi-072500/src/text/fmt/xp/fl_DocLayout.cpp
--- abi-072500-ORIG/src/text/fmt/xp/fl_DocLayout.cpp    Wed Jul 19 18:12:52 2000
+++ abi-072500/src/text/fmt/xp/fl_DocLayout.cpp Tue Jul 25 21:00:40 2000
@@ -49,17 +49,18 @@
        m_pDoc = doc;
        m_pG = pG;
        m_pView = NULL;
-       m_pSpellCheckTimer = NULL;
+       m_pBackgroundCheckTimer = NULL;
        m_pPendingBlock = NULL;
        m_pPendingWord = NULL;
        m_pFirstSection = NULL;
        m_pLastSection = NULL;
-       m_bAutoSpellCheck = UT_FALSE;
        m_bSpellCheckCaps = UT_TRUE;
        m_bSpellCheckNumbers = UT_TRUE;
        m_bSpellCheckInternet = UT_TRUE;
        m_pPrefs = NULL;
 
+       m_uBackgroundCheckReasons = 0;
+
        m_pRedrawUpdateTimer = UT_Timer::static_constructor(_redrawUpdate, this, m_pG);
        if (m_pRedrawUpdateTimer)
        {
@@ -93,12 +94,12 @@
 
        DELETEP(m_pDocListener);
 
-       if (m_pSpellCheckTimer)
+       if (m_pBackgroundCheckTimer)
        {
-               m_pSpellCheckTimer->stop();
+               m_pBackgroundCheckTimer->stop();
        }
        
-       DELETEP(m_pSpellCheckTimer);
+       DELETEP(m_pBackgroundCheckTimer);
        DELETEP(m_pPendingWord);
 
        if (m_pRedrawUpdateTimer)
@@ -150,6 +151,11 @@
 
                        // keep updating itself 
                        pPrefs->addListener ( _prefsListener, this ); 
+                       UT_Bool b;
+                       if (m_pPrefs->getPrefsValueBool("DebugFlash",&b))
+                       {
+                               addBackgroundCheckReason(bgcrDebugFlash);
+                       }
                }
        }
 }
@@ -526,29 +532,24 @@
 }
 #endif
 
-#define SPELL_CHECK_MSECS 100
+#define BACKGROUND_CHECK_MSECS 100
 
 void FL_DocLayout::_toggleAutoSpell(UT_Bool bSpell)
 {
-       UT_Bool bOldAutoSpell = m_bAutoSpellCheck;
-       m_bAutoSpellCheck = bSpell;
+       UT_Bool bOldAutoSpell = getAutoSpellCheck();
+       if (bSpell)
+       {
+               addBackgroundCheckReason(bgcrSpelling);
+       }
+       else
+       {
+               removeBackgroundCheckReason(bgcrSpelling);
+       }
 
        UT_DEBUGMSG(("FL_DocLayout::_toggleAutoSpell (%s)\n", bSpell ? "UT_TRUE" : 
"UT_FALSE" ));
 
        if (bSpell)
        {
-               // make sure the timer is started
-               if (!m_pSpellCheckTimer)
-               {
-                       m_pSpellCheckTimer = UT_Timer::static_constructor(_spellCheck, 
this, m_pG);
-                       if (m_pSpellCheckTimer)
-                               m_pSpellCheckTimer->set(SPELL_CHECK_MSECS);
-               }
-               else
-               {
-                       m_pSpellCheckTimer->start();
-               }
-
                // recheck the whole doc
                fl_DocSectionLayout * pSL = getFirstSection();
                while (pSL)
@@ -558,7 +559,7 @@
                        {
                                // TODO: just check and remove matching squiggles
                                // for now, destructively recheck the whole thing
-                               queueBlockForSpell(b, UT_FALSE);
+                               queueBlockForBackgroundCheck(bgcrSpelling, b);
                                b = b->getNext();
                        }
                        pSL = (fl_DocSectionLayout *) pSL->getNext();
@@ -566,10 +567,6 @@
        }
        else
        {
-               // make sure the timer is stopped
-               if (m_pSpellCheckTimer)
-                       m_pSpellCheckTimer->stop();     
-       
                // remove the squiggles, too
                fl_DocSectionLayout * pSL = getFirstSection();
                while (pSL)
@@ -593,7 +590,7 @@
        }
 }
 
-void FL_DocLayout::_spellCheck(UT_Timer * pTimer)
+void FL_DocLayout::_backgroundCheck(UT_Timer * pTimer)
 {
        UT_ASSERT(pTimer);
 
@@ -609,6 +606,10 @@
                return;
        }
 
+       // prevent getting a new timer hit before we've finished this one by
+       // temporarily disabling the timer
+       pDocLayout->m_pBackgroundCheckTimer->stop();
+
        UT_Vector* vecToCheck = &pDocLayout->m_vecUncheckedBlocks;
        UT_ASSERT(vecToCheck);
 
@@ -620,43 +621,71 @@
 
                if (pB != NULL)
                {
-                       vecToCheck->deleteNthItem(0);
-                       i--;
-
-                       //      note that we remove this block from queue before 
checking it
-                       //      (otherwise asserts could trigger redundant recursive 
calls)
-                       pB->checkSpelling();
+                       for (unsigned int bitdex=0; 
+bitdex<8*sizeof(pB->m_uBackgroundCheckReasons); ++bitdex)
+                       {
+                               // This looping seems like a lot of wasted effort when 
+we
+                               // don't define meaning for most of the bits, but it's 
+small
+                               // effort compared to all that squiggle stuff that 
+goes on
+                               // for the spelling stuff.
+                               UT_uint32 mask;
+                               mask = (1 << bitdex);
+                               if (pB->hasBackgroundCheckReason(mask))
+                               {
+                                       //      note that we remove this reason from 
+queue before checking it
+                                       //      (otherwise asserts could trigger 
+redundant recursive calls)
+                                       pB->removeBackgroundCheckReason(mask);
+                                       switch (mask)
+                                       {
+                                       case bgcrDebugFlash:
+                                               pB->debugFlashing();
+                                               break;
+                                       case bgcrSpelling:
+                                               pB->checkSpelling();
+                                               break;
+                                       case bgcrSmartQuotes:
+                                       default:
+                                               break;
+                                       }
+                               }
+                       }
+                       if (!pB->m_uBackgroundCheckReasons)
+                       {
+                               vecToCheck->deleteNthItem(0);
+                               i--;
+                       }
                }
        }
 
-       if (i == 0)
+       if (i != 0)
        {
-               // timer not needed any more, so suspend it
-               pDocLayout->m_pSpellCheckTimer->stop();
+               // restart timer unless it's not needed any more
+               pDocLayout->m_pBackgroundCheckTimer->start();
        }
 }
 
-void FL_DocLayout::queueBlockForSpell(fl_BlockLayout *pBlock, UT_Bool bHead)
+void FL_DocLayout::queueBlockForBackgroundCheck(UT_uint32 reason, fl_BlockLayout 
+*pBlock, UT_Bool bHead)
 {
        /*
-               This routine queues up blocks for timer-driven spell checking.  
+               This routine queues up blocks for timer-driven spell checking, etc.  
                By default, this is a FIFO queue, but it can be explicitly 
                reprioritized by setting bHead == UT_TRUE.  
        */
+       if (!m_pBackgroundCheckTimer)
+       {
+               m_pBackgroundCheckTimer = 
+UT_Timer::static_constructor(_backgroundCheck, this, m_pG);
+               if (m_pBackgroundCheckTimer)
+                       m_pBackgroundCheckTimer->set(BACKGROUND_CHECK_MSECS);
+       }
+       else
+       {
+               m_pBackgroundCheckTimer->start();
+       }
 
-       if (m_bAutoSpellCheck)
+       if (hasBackgroundCheckReason(bgcrDebugFlash))
        {
-               if (!m_pSpellCheckTimer)
-               {
-                       m_pSpellCheckTimer = UT_Timer::static_constructor(_spellCheck, 
this, m_pG);
-                       if (m_pSpellCheckTimer)
-                               m_pSpellCheckTimer->set(SPELL_CHECK_MSECS);
-               }
-               else
-               {
-                       m_pSpellCheckTimer->start();
-               }
+               pBlock->addBackgroundCheckReason(bgcrDebugFlash);
        }
+       pBlock->addBackgroundCheckReason(reason);
 
        UT_sint32 i = m_vecUncheckedBlocks.findItem(pBlock);
 
@@ -676,7 +705,7 @@
        }
 }
 
-void FL_DocLayout::dequeueBlock(fl_BlockLayout *pBlock)
+void FL_DocLayout::dequeueBlockForBackgroundCheck(fl_BlockLayout *pBlock)
 {
        UT_sint32 i = m_vecUncheckedBlocks.findItem(pBlock);
 
@@ -688,7 +717,7 @@
        // when queue is empty, kill timer
        if (m_vecUncheckedBlocks.getItemCount() == 0)
        {
-               m_pSpellCheckTimer->stop();
+               m_pBackgroundCheckTimer->stop();
        }
 }
 
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_DocLayout.h 
abi-072500/src/text/fmt/xp/fl_DocLayout.h
--- abi-072500-ORIG/src/text/fmt/xp/fl_DocLayout.h      Sun Jul  9 11:11:52 2000
+++ abi-072500/src/text/fmt/xp/fl_DocLayout.h   Tue Jul 25 21:00:40 2000
@@ -126,8 +126,8 @@
        void            setPendingWord(fl_BlockLayout *pBlock, fl_PartOfBlock* pWord);
        UT_Bool         checkPendingWord(void);
        
-       void            queueBlockForSpell(fl_BlockLayout *pBlock, UT_Bool 
bHead=UT_FALSE);
-       void            dequeueBlock(fl_BlockLayout *pBlock);
+       void            queueBlockForBackgroundCheck(UT_uint32 reason, fl_BlockLayout 
+*pBlock, UT_Bool bHead=UT_FALSE);
+       void            dequeueBlockForBackgroundCheck(fl_BlockLayout *pBlock);
 
        void            addSection(fl_DocSectionLayout*);
        void            removeSection(fl_DocSectionLayout*);
@@ -141,13 +141,27 @@
        void                            deleteEmptyPages(void);
 
 
-       UT_Bool         getAutoSpellCheck(void) const { return m_bAutoSpellCheck; }
+       UT_Bool         getAutoSpellCheck(void) const { return 
+(hasBackgroundCheckReason(bgcrSpelling)); }
        UT_Bool         getSpellCheckCaps(void) const { return m_bSpellCheckCaps; }
        UT_Bool         getSpellCheckNumbers(void) const { return 
m_bSpellCheckNumbers; }
        UT_Bool         getSpellCheckInternet(void) const { return 
m_bSpellCheckInternet; }
 
        void            recheckIgnoredWords();
 
+       inline void                     addBackgroundCheckReason(UT_uint32 reason) 
+{m_uBackgroundCheckReasons |= reason;}
+       inline void                     removeBackgroundCheckReason(UT_uint32 reason) 
+{m_uBackgroundCheckReasons &= ~reason;}
+       inline UT_Bool          hasBackgroundCheckReason(UT_uint32 reason) const 
+{return (m_uBackgroundCheckReasons & reason);}
+       inline UT_uint32        getBackgroundCheckReasons() const {return 
+(m_uBackgroundCheckReasons);}
+
+       // These are used as bit flags in a UT_uint32.  The enum is here just
+       // to get the namespace protection.
+       enum backgroundCheckReason
+       {
+               bgcrDebugFlash   = (1 <<  0),
+               bgcrSpelling     = (1 <<  1),
+               bgcrSmartQuotes  = (1 <<  2)
+       };
+
 #ifdef FMT_TEST
        static          FL_DocLayout* m_pDocLayout;
 
@@ -155,7 +169,7 @@
 #endif
        
 protected:
-       static void                     _spellCheck(UT_Timer * pTimer);
+       static void                     _backgroundCheck(UT_Timer * pTimer);
        void                            _toggleAutoSpell(UT_Bool bSpell);
        
        static void                     _prefsListener(class XAP_App *, class 
XAP_Prefs *, 
@@ -178,14 +192,15 @@
        UT_HashTable            m_hashFontCache;
 
        // spell check stuff
-       UT_Timer*                       m_pSpellCheckTimer; 
        UT_Vector                       m_vecUncheckedBlocks;
        fl_BlockLayout*         m_pPendingBlock;        // if NULL, then ignore 
m_pPendingWord
        fl_PartOfBlock*         m_pPendingWord;
-       UT_Bool                         m_bAutoSpellCheck;
        UT_Bool                         m_bSpellCheckCaps;
        UT_Bool                         m_bSpellCheckNumbers;
        UT_Bool                         m_bSpellCheckInternet;
+
+       UT_Timer*                       m_pBackgroundCheckTimer; 
+       UT_uint32                       m_uBackgroundCheckReasons;  // bit flags
 
        XAP_Prefs *                     m_pPrefs;
 
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_DocListener.cpp 
abi-072500/src/text/fmt/xp/fl_DocListener.cpp
--- abi-072500-ORIG/src/text/fmt/xp/fl_DocListener.cpp  Thu Jul  6 16:42:02 2000
+++ abi-072500/src/text/fmt/xp/fl_DocListener.cpp       Tue Jul 25 21:00:40 2000
@@ -241,7 +241,7 @@
 
                // BUGBUG: this is *not* thread-safe, but should work for now
                if (m_bScreen)
-                       m_pLayout->queueBlockForSpell(pBL);
+                       
+m_pLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, pBL);
 
                *psfh = (PL_StruxFmtHandle)pBL;
        }
diff -ru abi-072500-ORIG/src/text/fmt/xp/fl_SectionLayout.cpp 
abi-072500/src/text/fmt/xp/fl_SectionLayout.cpp
--- abi-072500-ORIG/src/text/fmt/xp/fl_SectionLayout.cpp        Thu Jul  6 16:42:02 
2000
+++ abi-072500/src/text/fmt/xp/fl_SectionLayout.cpp     Tue Jul 25 21:00:40 2000
@@ -2006,7 +2006,7 @@
                
                // BUGBUG: this is *not* thread-safe, but should work for now
                if (m_bScreen)
-                       m_pLayout->queueBlockForSpell(pBL);
+                       m_pLayout->queueBlockForBackgroundCheck(bgcrSpelling, pBL);
 #endif
 
        }
diff -ru abi-072500-ORIG/src/text/fmt/xp/fv_View.cpp 
abi-072500/src/text/fmt/xp/fv_View.cpp
--- abi-072500-ORIG/src/text/fmt/xp/fv_View.cpp Mon Jul 24 17:20:07 2000
+++ abi-072500/src/text/fmt/xp/fv_View.cpp      Tue Jul 25 21:00:41 2000
@@ -5469,7 +5469,7 @@
                        {
                                // TODO: just check and remove matching squiggles
                                // for now, destructively recheck the whole thing
-                               m_pLayout->queueBlockForSpell(b, UT_FALSE);
+                               
+m_pLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, b);
                                b = b->getNext();
                        }
                        pSL = (fl_DocSectionLayout *) pSL->getNext();
@@ -5505,7 +5505,7 @@
                        {
                                // TODO: just check and remove matching squiggles
                                // for now, destructively recheck the whole thing
-                               m_pLayout->queueBlockForSpell(b, UT_FALSE);
+                               
+m_pLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, b);
                                b = b->getNext();
                        }
                        pSL = (fl_DocSectionLayout *) pSL->getNext();
diff -ru abi-072500-ORIG/src/wp/ap/xp/ap_Dialog_Spell.cpp 
abi-072500/src/wp/ap/xp/ap_Dialog_Spell.cpp
--- abi-072500-ORIG/src/wp/ap/xp/ap_Dialog_Spell.cpp    Mon Jun 26 14:46:02 2000
+++ abi-072500/src/wp/ap/xp/ap_Dialog_Spell.cpp Tue Jul 25 21:00:41 2000
@@ -128,7 +128,7 @@
         // since we're done with this current block, put it
         // in the block spell queue so squiggles will be updated
         FL_DocLayout * docLayout = m_pSection->getDocLayout();
-        docLayout->queueBlockForSpell(m_pBlock, UT_FALSE);
+        docLayout->queueBlockForBackgroundCheck(FL_DocLayout::bgcrSpelling, m_pBlock);
         
         m_pBlock = m_pBlock->getNext();
 

Reply via email to