Alright, here is an updated patch, fixing the UT_uint32 thing (at least
with fl_BlockLayout.cpp), adding a simple comment in the header file,
and tweaking the style.
I played around with the largest AW files that I have, and I couldn't
reproduce the problem Martin says he's having. Albeit, the largest AW
doc I have is the 5 page doc in .../abi/doc, but still, I place the
cursor at the end of those in an alternate window and they stay there
for me.
Take care,
John
Index: abi/src/af/xap/xp/xav_View.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xav_View.cpp,v
retrieving revision 1.15
diff -u -r1.15 xav_View.cpp
--- abi/src/af/xap/xp/xav_View.cpp 2000/11/12 14:45:19 1.15
+++ abi/src/af/xap/xp/xav_View.cpp 2001/01/25 13:56:45
@@ -21,6 +21,7 @@
#include "ut_types.h"
#include "xav_View.h"
#include "xav_Listener.h"
+#include "xap_Frame.h"
#include"ut_debugmsg.h"
AV_View::AV_View(XAP_App * pApp, void* pParentData)
@@ -131,6 +132,22 @@
}
return UT_TRUE;
+}
+
+UT_Bool AV_View::isActive(void) const
+{
+ AV_View* pActiveView = NULL;
+ XAP_Frame* lff = getApp()->getLastFocussedFrame();
+ if(lff)
+ {
+ pActiveView = lff->getCurrentView();
+ }
+ else
+ {
+ pActiveView = this;
+ }
+
+ return pActiveView == this;
}
UT_uint32 AV_View::getTick(void)
Index: abi/src/af/xap/xp/xav_View.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xav_View.h,v
retrieving revision 1.29
diff -u -r1.29 xav_View.h
--- abi/src/af/xap/xp/xav_View.h 2001/01/18 14:43:23 1.29
+++ abi/src/af/xap/xp/xav_View.h 2001/01/25 13:56:45
@@ -100,6 +100,9 @@
UT_Bool addListener(AV_Listener * pListener, AV_ListenerId *
pListenerId);
UT_Bool removeListener(AV_ListenerId listenerId);
+
+ //! returns true iff the current view is the active/focused window
+ UT_Bool isActive(void) const;
virtual UT_Bool notifyListeners(const AV_ChangeMask hint) = 0;
virtual UT_Bool canDo(UT_Bool bUndo) const = 0;
Index: abi/src/text/fmt/xp/fl_BlockLayout.cpp
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fl_BlockLayout.cpp,v
retrieving revision 1.237
diff -u -r1.237 fl_BlockLayout.cpp
--- abi/src/text/fmt/xp/fl_BlockLayout.cpp 2001/01/24 17:28:29 1.237
+++ abi/src/text/fmt/xp/fl_BlockLayout.cpp 2001/01/25 13:56:46
@@ -371,7 +371,7 @@
{ "margin-right", &m_iRightMargin,
&m_iRightMarginLayoutUnits },
{ "text-indent", &m_iTextIndent,
&m_iTextIndentLayoutUnits }
};
- for (int iRg = 0; iRg < NrElements(rgProps); ++iRg)
+ for (UT_uint32 iRg = 0; iRg < NrElements(rgProps); ++iRg)
{
const MarginAndIndent_t& mai = rgProps[iRg];
const char* pszProp = getProperty((XML_Char*)mai.szProp);
@@ -2159,7 +2159,7 @@
UT_UCSChar theWord[101];
// convert smart quote apostrophe to ASCII single
quote to be compatible with ispell
- for (unsigned int ldex=0; ldex<wordLength; ++ldex)
+ for (UT_uint32 ldex=0; ldex<wordLength; ++ldex)
{
UT_UCSChar currentChar;
currentChar = pBlockText[wordBeginning + ldex];
@@ -2251,7 +2251,7 @@
UT_UCSChar theWord[101];
// convert smart quote apostrophe to ASCII single quote to be
compatible with ispell
- for (unsigned int ldex=0; ldex<wordLength; ++ldex)
+ for (UT_uint32 ldex=0; ldex<wordLength; ++ldex)
{
UT_UCSChar currentChar;
currentChar = pBlockText[wordBeginning + ldex];
@@ -2847,11 +2847,13 @@
UT_ASSERT(_validateBlockForPoint());
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
- pView->_setPoint(pcrs->getPosition()+len);
+ pView->_setPoint(pcrs->getPosition() + len);
pView->notifyListeners(AV_CHG_FMTCHAR); // TODO verify that this is
necessary.
}
+ else if(pView && pView->getPoint() > pcrs->getPosition())
+ pView->_setPoint(pView->getPoint() + len);
if (m_pLayout->hasBackgroundCheckReason(FL_DocLayout::bgcrSmartQuotes))
{
@@ -2865,7 +2867,7 @@
if (sqcount)
{
m_pDoc->beginUserAtomicGlob();
- for (unsigned int sdex=0; sdex<sqcount; ++sdex)
+ for (UT_uint32 sdex=0; sdex<sqcount; ++sdex)
{
m_pLayout->considerSmartQuoteCandidateAt(this,
sqlist[sdex]);
}
@@ -3020,10 +3022,16 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_resetSelection();
- pView->_setPoint(pcrs->getPosition());
+ pView->_setPoint(pcrs->getPosition());
+ }
+ else if(pView && pView->getPoint() > pcrs->getPosition())
+ {
+ if(pView->getPoint() <= pcrs->getPosition() + len)
+ pView->_setPoint(pcrs->getPosition());
+ else pView->_setPoint(pView->getPoint() - len);
}
if (m_pLayout->getAutoSpellCheck())
@@ -3323,10 +3331,10 @@
m_pLayout->dequeueBlockForBackgroundCheck(this);
FV_View* pView = pSL->getDocLayout()->getView();
- if (pView)
- {
+ if (pView && pView->isActive())
pView->_setPoint(pcrx->getPosition());
- }
+ else if(pView && pView->getPoint() > pcrx->getPosition())
+ pView->_setPoint(pView->getPoint() - 1);
delete this; // TODO whoa! this construct is VERY
dangerous.
@@ -3400,10 +3408,9 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
- {
+ if (pView && pView->isActive())
pView->_setPoint(pcrx->getPosition());
- }
+ else if (pView) pView->_setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET);
return UT_TRUE;
}
@@ -3567,10 +3574,10 @@
pNewBL->setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
- {
+ if (pView && pView->isActive())
pView->_setPoint(pcrx->getPosition() + fl_BLOCK_STRUX_OFFSET);
- }
+ else if(pView && pView->getPoint() > pcrx->getPosition())
+ pView->_setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET);
#ifdef FASTSQUIGGLE
if (m_pLayout->getAutoSpellCheck() && m_vecSquiggles.getItemCount() > 0)
@@ -3649,10 +3656,14 @@
pOldSL->deleteEmptyColumns();
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_setPoint(pcrx->getPosition() + fl_BLOCK_STRUX_OFFSET +
fl_BLOCK_STRUX_OFFSET);
}
+ else if(pView && pView->getPoint() > pcrx->getPosition())
+ {
+ pView->_setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET +
+fl_BLOCK_STRUX_OFFSET);
+ }
return UT_TRUE;
}
@@ -3772,11 +3783,10 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
- {
- pView->_resetSelection();
+ if (pView && pView->isActive())
pView->_setPoint(pcro->getPosition() + 1);
- }
+ else if(pView && pView->getPoint() > pcro->getPosition())
+ pView->_setPoint(pView->getPoint() + 1);
if (m_pLayout->getAutoSpellCheck())
_insertSquiggles(blockOffset, 1); // TODO: are objects always
one wide?
@@ -3826,11 +3836,13 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_resetSelection();
pView->_setPoint(pcro->getPosition());
}
+ else if(pView && pView->getPoint() > pcro->getPosition())
+ pView->_setPoint(pView->getPoint() - 1);
if (m_pLayout->getAutoSpellCheck())
_deleteSquiggles(blockOffset, 1); // TODO: are objects always
one wide?
@@ -3883,7 +3895,7 @@
done:
setNeedsReformat();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_resetSelection();
pView->_setPoint(pcroc->getPosition());
@@ -4125,10 +4137,12 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
+ if (pView && pView->isActive())
+ pView->_setPoint(pcrfm->getPosition());
+
if (pView)
{
pView->_resetSelection();
- pView->_setPoint(pcrfm->getPosition());
pView->notifyListeners(AV_CHG_FMTCHAR);
}
@@ -4153,7 +4167,7 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_resetSelection();
pView->_setPoint(pcrfm->getPosition());
@@ -4249,7 +4263,7 @@
setNeedsReformat();
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
{
pView->_resetSelection();
pView->_setPoint(pcrfmc->getPosition());
@@ -4313,7 +4327,7 @@
if (wordLength < 100)
{
// convert smart quote apostrophe to ASCII single quote to be
compatible with ispell
- for (unsigned int ldex=0; ldex<wordLength; ++ldex)
+ for (UT_uint32 ldex=0; ldex<wordLength; ++ldex)
{
UT_UCSChar currentChar;
currentChar = pBlockText[wordBeginning + ldex];
Index: abi/src/text/fmt/xp/fl_DocListener.cpp
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fl_DocListener.cpp,v
retrieving revision 1.93
diff -u -r1.93 fl_DocListener.cpp
--- abi/src/text/fmt/xp/fl_DocListener.cpp 2001/01/20 15:49:47 1.93
+++ abi/src/text/fmt/xp/fl_DocListener.cpp 2001/01/25 13:56:46
@@ -610,7 +610,7 @@
case PX_ChangeRecord::PXT_ChangePoint:
{
FV_View* pView = m_pLayout->getView();
- if (pView)
+ if (pView && pView->isActive())
pView->_setPoint(pcr->getPosition());
goto finish_up;
}