mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
- fixing issue #92: Undo/Redo of virtual space selection rectangle not correct
This commit is contained in:
parent
8cceac6cda
commit
c3949edf22
@ -7182,7 +7182,7 @@ void InvalidateSelections()
|
||||
int BeginSelUndoAction()
|
||||
{
|
||||
int token = -1;
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0 };
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
|
||||
sel.selMode = (int)SendMessage(hwndEdit,SCI_GETSELECTIONMODE,0,0);
|
||||
sel.rectSelVS = (int)SendMessage(hwndEdit,SCI_GETVIRTUALSPACEOPTIONS,0,0);
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
@ -7190,8 +7190,12 @@ int BeginSelUndoAction()
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_undo = (int)SendMessage(hwndEdit,SCI_GETRECTANGULARSELECTIONANCHOR,0,0);
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit,SCI_GETRECTANGULARSELECTIONCARET,0,0);
|
||||
sel.anchorPos_undo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_undo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_undo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -7216,7 +7220,7 @@ int BeginSelUndoAction()
|
||||
void EndSelUndoAction(int token)
|
||||
{
|
||||
if (token >= 0) {
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0 };
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
|
||||
if (UndoRedoSelectionMap(token,&sel) >= 0) {
|
||||
// mode and type should not have changed
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
@ -7224,8 +7228,12 @@ void EndSelUndoAction(int token)
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit,SCI_GETRECTANGULARSELECTIONANCHOR,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit,SCI_GETRECTANGULARSELECTIONCARET,0,0);
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_redo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_redo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_redo = (int)SendMessage(hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
sel.anchorPos_redo = (int)SendMessage(hwndEdit,SCI_GETANCHOR,0,0);
|
||||
@ -7245,7 +7253,7 @@ void EndSelUndoAction(int token)
|
||||
//
|
||||
void RestoreSelectionAction(int token, DoAction doAct)
|
||||
{
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0 };
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
|
||||
if (UndoRedoSelectionMap(token,&sel) >= 0) {
|
||||
// we are inside undo/redo transaction, so do delayed PostMessage() instead of SendMessage()
|
||||
int anchorPos = (doAct == UNDO ? sel.anchorPos_undo : sel.anchorPos_redo);
|
||||
@ -7258,8 +7266,14 @@ void RestoreSelectionAction(int token, DoAction doAct)
|
||||
PostMessage(hwndEdit,SCI_SETSELECTIONEND,(WPARAM)currPos,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONANCHOR,(WPARAM)anchorPos,0);
|
||||
PostMessage(hwndEdit,SCI_SETRECTANGULARSELECTIONCARET,(WPARAM)currPos,0);
|
||||
PostMessage(hwndEdit, SCI_SETRECTANGULARSELECTIONANCHOR, (WPARAM)anchorPos, 0);
|
||||
PostMessage(hwndEdit, SCI_SETRECTANGULARSELECTIONCARET, (WPARAM)currPos, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
int anchorVS = (doAct == UNDO ? sel.anchorVS_undo : sel.anchorVS_redo);
|
||||
int currVS = (doAct == UNDO ? sel.currVS_undo : sel.currVS_redo);
|
||||
PostMessage(hwndEdit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)anchorVS, 0);
|
||||
PostMessage(hwndEdit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)currVS, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
PostMessage(hwndEdit,SCI_SETSELECTION,(WPARAM)currPos,(LPARAM)anchorPos);
|
||||
|
||||
@ -49,6 +49,10 @@ typedef struct _undoSel
|
||||
int anchorPos_redo;
|
||||
int currPos_redo;
|
||||
int rectSelVS;
|
||||
int anchorVS_undo;
|
||||
int currVS_undo;
|
||||
int anchorVS_redo;
|
||||
int currVS_redo;
|
||||
}
|
||||
UndoRedoSelection_t;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user