Merge pull request #2487 from RaiKoHoff/grepWin_Integration

Fix multiple line-/stream-selection undo/redo
This commit is contained in:
Rainer Kottenhoff 2020-07-02 18:41:38 +02:00 committed by GitHub
commit a38c44571f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6919,19 +6919,28 @@ static bool _IsIMEOpenInNoNativeMode()
//
inline static LRESULT _MsgNotifyLean(const LPNMHDR pnmh, const SCNotification* const scn)
{
static int _mod_insdel_token = -1;
// --- check only mandatory events (must be fast !!!) ---
if (pnmh->idFrom == IDC_EDIT) {
if (pnmh->code == SCN_MODIFIED) {
bool bModified = true;
int const iModType = scn->modificationType;
if ((iModType & SC_MOD_BEFOREINSERT) || ((iModType & SC_MOD_BEFOREDELETE))) {
if (!((iModType & SC_PERFORMED_UNDO) || (iModType & SC_PERFORMED_REDO))) {
if ((!_InUndoRedoTransaction() && !SciCall_IsSelectionEmpty()) || Sci_IsMultiOrRectangleSelection()) {
_SaveRedoSelection(_SaveUndoSelection());
if (iModType & (SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE)) {
if (!(iModType & (SC_PERFORMED_UNDO | SC_PERFORMED_REDO))) {
if (!_InUndoRedoTransaction()) {
_mod_insdel_token = _SaveUndoSelection();
}
}
bModified = false; // not yet
}
if (iModType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) {
if (!(iModType & (SC_PERFORMED_UNDO | SC_PERFORMED_REDO))) {
if (!_InUndoRedoTransaction() && (_mod_insdel_token >= 0)) {
_SaveRedoSelection(_mod_insdel_token);
_mod_insdel_token = -1;
}
}
}
// check for ADDUNDOACTION step
if (iModType & SC_MOD_CONTAINER)
{
@ -6978,6 +6987,7 @@ inline static LRESULT _MsgNotifyLean(const LPNMHDR pnmh, const SCNotification* c
static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotification* const scn)
{
static int _s_indic_click_modifiers = SCMOD_NORM;
static int _mod_insdel_token = -1;
switch (pnmh->code)
{
@ -7019,14 +7029,22 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotific
{
int const iModType = scn->modificationType;
bool bModified = true;
if ((iModType & SC_MOD_BEFOREINSERT) || ((iModType & SC_MOD_BEFOREDELETE))) {
if (!((iModType & SC_PERFORMED_UNDO) || (iModType & SC_PERFORMED_REDO))) {
if ((!_InUndoRedoTransaction() && !SciCall_IsSelectionEmpty()) || Sci_IsMultiOrRectangleSelection()) {
_SaveRedoSelection(_SaveUndoSelection());
if (iModType & (SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE)) {
if (!(iModType & (SC_PERFORMED_UNDO | SC_PERFORMED_REDO))) {
if (!_InUndoRedoTransaction()) {
_mod_insdel_token = _SaveUndoSelection();
}
}
bModified = false; // not yet
}
else if (iModType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT)) {
if (!(iModType & (SC_PERFORMED_UNDO | SC_PERFORMED_REDO))) {
if (!_InUndoRedoTransaction() && (_mod_insdel_token >= 0)) {
_SaveRedoSelection(_mod_insdel_token);
_mod_insdel_token = -1;
}
}
}
if (iModType & SC_MOD_CONTAINER) {
if (iModType & SC_PERFORMED_UNDO) {
bModified = RestoreAction(scn->token, UNDO);
@ -9073,6 +9091,9 @@ static void _SaveRedoSelection(int token)
utarray_push_back(pSel->anchorPos_redo, &anchorPos);
DocPos const curPos = SciCall_GetCurrentPos();
utarray_push_back(pSel->curPos_redo, &curPos);
//~DocPos const dummy = (DocPos)-1;
//~utarray_push_back(pSel->anchorVS_redo, &dummy);
//~utarray_push_back(pSel->curVS_redo, &dummy);
}
break;
}