[Libreoffice] Annoying cursor behavior on sw tables

Octavio Alvarez alvarezp at alvarezp.ods.org
Thu Dec 23 21:07:53 PST 2010


Hi, all.

There is this really annoying behavior:
0. Open Writer.
1. Create a table, say 3 x 3.
2. Place the cursor in a cell.
3. Type some text, like asdfasdfasdfasdf.
4. Using the mouse, place the cursor in the middle of the asdf-word.
5. Using the keyboard go left and right and left and right...

Notice how the cursor disappears. You don't know where exactly are you
at a particular moment.

This also happens when jumping cells, which becomes annoying if you
are fast-moving between the cells... suddenly you don't know where
you are.

It does not happen if left/right-ing on a regular paragraph. In that
case, the cursor stays on during the move. However, looking at the
code, it may happen on other cases.

I have managed to eliminate the issue by eliminating the following line:

diff --git a/sw/source/core/crsr/crsrsh.cxx
b/sw/source/core/crsr/crsrsh.cxx
index 5b92560..cbf39f3 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -344,7 +344,6 @@ BOOL SwCrsrShell::LeftRight( BOOL bLeft, USHORT nCnt,
USHORT nMode,
          if( IsTableMode() )
              return bLeft ? GoPrevCell() : GoNextCell();

-    SwCallLink aLk( *this );        // Crsr-Moves ueberwachen, evt. Link
callen
          BOOL bRet = FALSE;

          // #i27615# Handle cursor in front of label.

Beware of word wrapping. The word üeberwachen translated to "monitor"
using Google Translate.

Of course, I don't have the slightest idea of what an "SwCallLink" is or
does and what its side effects are.

I have tried to follow the call deeper, but I seem to get nowhere. Removing
lines start to behave inconsistently. In that function, aLk is not used, so
I'm starting to get the idea that it registers something instead of
creating
an object for use on the function, and so, the bug gets triggered by a
delayed, asynchronous action.

I have no choice but to request for help. :-)

This is the relevant part of the backtrace:

#0  SwCrsrShell::LeftRight (this=0xacaab1e8, bLeft=1 '\001', nCnt=1,
nMode=1, bVisualAllowed=1 '\001') at
~/$CLONE/writer/sw/source/core/crsr/crsrsh.cxx:344

#1  0xae3978fd in SwCrsrShell::Left (this=0xacaab1e8, nCnt=1, nMode=1,
bAllowVisual=1 '\001') at ../../../inc/crsrsh.hxx:356

#2  0xaecd90d8 in SwWrtShell::Left (this=0xacaab1e8, nMode=1, bSelect=0
'\000', nCount=1, bBasicCall=0 '\000', bVisual=1 '\001') at
~/$CLONE/writer/sw/source/ui/wrtsh/move.cxx:122

#3  0xaebf67e3 in SwTextShell::ExecBasicMove (this=0xaff04134, rReq=...)
at ~/$CLONE/writer/sw/source/ui/shells/txtcrsr.cxx:96

#4  0xaebe2f2c in SfxStubSwTextShellExecBasicMove (pShell=0xaff04134,
rReq=...) at ../../../unxlngi6.pro/inc/swslots.hxx:2408

#5  0xb73c3f38 in SfxShell::CallExec (this=0xaff04134, pFunc=0xaebe2f08
<SfxStubSwTextShellExecBasicMove(SfxShell*, SfxRequest&)>, rReq=...) at
../../inc/sfx2/shell.hxx:201

#6  0xb73bcd1c in SfxDispatcher::Call_Impl (this=0xacadeb94, rShell=...,
rSlot=..., rReq=..., bRecord=1 '\001') at
~/$CLONE/libs-core/sfx2/source/control/dispatch.cxx:281


More information about the LibreOffice mailing list