Is a highly skilled developer on Linux willing to spend a few hours looking into ibus/kmfl bug 95096? I've spent a week on it and am stuck. To help, I think you need to understand SolarMutexGuards, yield(), and accessible Portions well. I have some SAL_WARN debugging set up on gerrit (https://gerrit.libreoffice.org/19415) Visibly, the problem is that a kmfl character composing sequence (like ;;~a for ä̃) doesn't delete all of the composing sequence in a table cell when the row contains a table-in-table. Code-wise, the problem is something like the accessible PortionData loses the focus after the first character is deleted, and thus the two remaining signalIMDeleteSurrounding calls do nothing because they can't find the focus/cursor context. The problem apparently comes from external layout calls - it doesn't seem to be a logic failure in the direct code path. Potential fix concepts are a.) locking outside changes until ibus's 3xdelete + add character is done, b.) preventing loss of focus / requiring FocusWin to actually have a focused portion, or c.) falling back to cursor position if no portion has the focus. I'm
going to look into the band-aid option (c) now, but I'm afraid
of
regressions with that approach. Fix idea A involves external
libraries? Fix idea B seems best, but I completely failed to
identify how the focus is lost. Thanks, |