mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-28 21:02:59 +08:00
+ fix: redo/undo and jump-to behavior having an active selection
This commit is contained in:
parent
a06c14b299
commit
556c50bb1b
Binary file not shown.
Binary file not shown.
Binary file not shown.
85
src/Edit.c
85
src/Edit.c
@ -85,8 +85,6 @@ extern BOOL bLoadASCIIasUTF8;
|
||||
extern BOOL bLoadNFOasOEM;
|
||||
|
||||
extern BOOL bAccelWordNavigation;
|
||||
extern BOOL bDenyVirtualSpaceAccess;
|
||||
extern BOOL bHyperlinkHotspot;
|
||||
|
||||
extern int iMarkOccurrences;
|
||||
extern int iMarkOccurrencesCount;
|
||||
@ -196,13 +194,13 @@ HWND EditCreate(HWND hwndParent)
|
||||
SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_OFF,0);
|
||||
//SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_WHITESPACE,0);
|
||||
SendMessage(hwnd,SCI_SETXCARETPOLICY,CARET_SLOP|CARET_EVEN,50);
|
||||
SendMessage(hwnd,SCI_SETYCARETPOLICY,CARET_EVEN,0);
|
||||
SendMessage(hwnd,SCI_SETYCARETPOLICY,CARET_SLOP|CARET_EVEN,0);
|
||||
SendMessage(hwnd,SCI_SETMOUSESELECTIONRECTANGULARSWITCH,TRUE,0);
|
||||
SendMessage(hwnd,SCI_SETMULTIPLESELECTION,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALSELECTIONTYPING,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALCARETSBLINK,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETADDITIONALCARETSVISIBLE,FALSE,0);
|
||||
SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
|
||||
SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS, SCVS_NONE, 0);
|
||||
SendMessage(hwnd,SCI_SETLAYOUTCACHE,SC_CACHE_PAGE,0);
|
||||
|
||||
|
||||
@ -3969,7 +3967,7 @@ void EditSortLines(HWND hwnd, int iSortFlags)
|
||||
SendMessage(hwnd, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)iCurPosVS, 0);
|
||||
}
|
||||
else {
|
||||
SendMessage(hwnd, SCI_SETSEL, (WPARAM)iAnchorPos, (LPARAM)iCurPos);
|
||||
EditSelectEx(hwnd, iAnchorPos, iCurPos);
|
||||
}
|
||||
|
||||
}
|
||||
@ -3981,6 +3979,13 @@ void EditSortLines(HWND hwnd, int iSortFlags)
|
||||
//
|
||||
void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
|
||||
{
|
||||
if (iAnchorPos < 0) {
|
||||
iAnchorPos = ((iCurrentPos >= 0) ? iCurrentPos : 0);
|
||||
}
|
||||
if (iCurrentPos < 0) {
|
||||
iCurrentPos = ((iAnchorPos >= 0) ? iAnchorPos : 0);
|
||||
}
|
||||
|
||||
int iNewLine = SciCall_LineFromPosition(iCurrentPos);
|
||||
int iAnchorLine = SciCall_LineFromPosition(iAnchorPos);
|
||||
|
||||
@ -3990,11 +3995,14 @@ void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
|
||||
if (iAnchorLine != iNewLine) {
|
||||
SciCall_EnsureVisible(iNewLine);
|
||||
}
|
||||
SendMessage(hwnd, SCI_SETXCARETPOLICY, CARET_SLOP | CARET_STRICT | CARET_EVEN, 50);
|
||||
SendMessage(hwnd, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_STRICT | CARET_EVEN, 5);
|
||||
SendMessage(hwnd, SCI_SETSEL, iAnchorPos, iCurrentPos);
|
||||
SendMessage(hwnd, SCI_SETXCARETPOLICY, CARET_SLOP | CARET_EVEN, 50);
|
||||
SendMessage(hwnd, SCI_SETYCARETPOLICY, CARET_EVEN, 0);
|
||||
|
||||
SciCall_SetSel(iAnchorPos, iCurrentPos);
|
||||
SciCall_ScrollRange(iAnchorPos, iCurrentPos);
|
||||
|
||||
// remember x-pos for moving caret vertically
|
||||
SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
|
||||
|
||||
UpdateStatusbar();
|
||||
}
|
||||
|
||||
|
||||
@ -4004,7 +4012,7 @@ void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
|
||||
//
|
||||
void EditJumpTo(HWND hwnd,int iNewLine,int iNewCol)
|
||||
{
|
||||
// Jumpt to end with line set to -1
|
||||
// jump to end with line set to -1
|
||||
if (iNewLine < 0) {
|
||||
SendMessage(hwnd, SCI_DOCUMENTEND, 0, 0);
|
||||
return;
|
||||
@ -4021,10 +4029,8 @@ void EditJumpTo(HWND hwnd,int iNewLine,int iNewCol)
|
||||
|
||||
const int iNewPos = (int)SendMessage(hwnd, SCI_FINDCOLUMN, (WPARAM)iNewLine, (LPARAM)iNewCol);
|
||||
|
||||
EditSelectEx(hwnd, -1, iNewPos); // SCI_GOTOPOS(pos) is equivalent to SCI_SETSEL(-1, pos)
|
||||
EditSelectEx(hwnd, iNewPos, iNewPos); // <= SCI_GOTOPOS(pos)
|
||||
|
||||
// remember x-pos for moving caret vertivally
|
||||
SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -4043,7 +4049,7 @@ void EditFixPositions(HWND hwnd)
|
||||
int iNewPos = SciCall_PositionAfter( SciCall_PositionBefore(iCurrentPos) );
|
||||
|
||||
if (iNewPos != iCurrentPos) {
|
||||
SendMessage(hwnd,SCI_SETCURRENTPOS,(WPARAM)iNewPos,0);
|
||||
SciCall_SetCurrentPos(iNewPos);
|
||||
iCurrentPos = iNewPos;
|
||||
}
|
||||
}
|
||||
@ -4051,10 +4057,11 @@ void EditFixPositions(HWND hwnd)
|
||||
if ((iAnchorPos != iCurrentPos) && (iAnchorPos > 0) && (iAnchorPos < iMaxPos))
|
||||
{
|
||||
int iNewPos = SciCall_PositionAfter(SciCall_PositionBefore(iAnchorPos));
|
||||
|
||||
if (iNewPos != iAnchorPos)
|
||||
SendMessage(hwnd,SCI_SETANCHOR,(WPARAM)iNewPos,0);
|
||||
if (iNewPos != iAnchorPos) {
|
||||
SciCall_SetAnchor(iNewPos);
|
||||
}
|
||||
}
|
||||
UNUSED(hwnd);
|
||||
}
|
||||
|
||||
|
||||
@ -4064,15 +4071,10 @@ void EditFixPositions(HWND hwnd)
|
||||
//
|
||||
void EditEnsureSelectionVisible(HWND hwnd)
|
||||
{
|
||||
int iAnchorPos = (int)SendMessage(hwnd,SCI_GETANCHOR,0,0);
|
||||
int iCurrentPos = (int)SendMessage(hwnd,SCI_GETCURRENTPOS,0,0);
|
||||
SendMessage(hwnd,SCI_ENSUREVISIBLE,
|
||||
(WPARAM)SendMessage(hwnd,SCI_LINEFROMPOSITION,(WPARAM)iAnchorPos,0),0);
|
||||
if (iAnchorPos != iCurrentPos) {
|
||||
SendMessage(hwnd,SCI_ENSUREVISIBLE,
|
||||
(WPARAM)SendMessage(hwnd,SCI_LINEFROMPOSITION,(WPARAM)iCurrentPos,0),0);
|
||||
}
|
||||
EditSelectEx(hwnd,iAnchorPos,iCurrentPos);
|
||||
int iAnchorPos = SciCall_GetAnchor();
|
||||
int iCurrentPos = SciCall_GetCurrentPos();
|
||||
EditSelectEx(hwnd, iAnchorPos, iCurrentPos);
|
||||
UNUSED(hwnd);
|
||||
}
|
||||
|
||||
|
||||
@ -5205,8 +5207,8 @@ BOOL EditFindNext(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bExtendSelection) {
|
||||
}
|
||||
|
||||
if (bExtendSelection) {
|
||||
int iSelPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0);
|
||||
int iSelAnchor = (int)SendMessage(hwnd, SCI_GETANCHOR, 0, 0);
|
||||
int iSelPos = SciCall_GetCurrentPos();
|
||||
int iSelAnchor = SciCall_GetAnchor();
|
||||
EditSelectEx(hwnd, min(iSelAnchor, iSelPos), end);
|
||||
}
|
||||
else {
|
||||
@ -5273,8 +5275,8 @@ BOOL EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bExtendSelection) {
|
||||
}
|
||||
|
||||
if (bExtendSelection) {
|
||||
int iSelPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0);
|
||||
int iSelAnchor = (int)SendMessage(hwnd, SCI_GETANCHOR, 0, 0);
|
||||
int iSelPos = SciCall_GetCurrentPos();
|
||||
int iSelAnchor = SciCall_GetAnchor();
|
||||
EditSelectEx(hwnd, max(iSelPos, iSelAnchor), start);
|
||||
}
|
||||
else {
|
||||
@ -5322,11 +5324,11 @@ void EditMarkAllOccurrences()
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// EditUpdateVisibleUrlHotspotr()
|
||||
// EditUpdateVisibleUrlHotspot()
|
||||
//
|
||||
void EditUpdateVisibleUrlHotspot()
|
||||
void EditUpdateVisibleUrlHotspot(BOOL bEnabled)
|
||||
{
|
||||
if (bHyperlinkHotspot)
|
||||
if (bEnabled)
|
||||
{
|
||||
if (EditIsInTargetTransaction()) { return; } // do not block, next event occurs for sure
|
||||
|
||||
@ -5339,7 +5341,7 @@ void EditUpdateVisibleUrlHotspot()
|
||||
int iPosStart = SciCall_PositionFromLine(iStartLine);
|
||||
int iPosEnd = SciCall_GetLineEndPosition(iEndLine);
|
||||
|
||||
EditUpdateUrlHotspots(g_hwndEdit, iPosStart, iPosEnd, bHyperlinkHotspot);
|
||||
EditUpdateUrlHotspots(g_hwndEdit, iPosStart, iPosEnd, bEnabled);
|
||||
|
||||
EditLeaveTargetTransaction();
|
||||
}
|
||||
@ -5996,16 +5998,14 @@ INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPa
|
||||
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
int iCurLine = (int)SendMessage(g_hwndEdit,SCI_LINEFROMPOSITION,
|
||||
SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0),0)+1;
|
||||
int iCurLine = SciCall_LineFromPosition(SciCall_GetCurrentPos())+1;
|
||||
int iCurColumn = SciCall_GetColumn(SciCall_GetCurrentPos()) + 1;
|
||||
|
||||
SetDlgItemInt(hwnd,IDC_LINENUM,iCurLine,FALSE);
|
||||
SetDlgItemInt(hwnd, IDC_COLNUM, iCurColumn, FALSE);
|
||||
SendDlgItemMessage(hwnd,IDC_LINENUM,EM_LIMITTEXT,15,0);
|
||||
|
||||
SendDlgItemMessage(hwnd,IDC_COLNUM,EM_LIMITTEXT,15,0);
|
||||
|
||||
CenterDlgInParent(hwnd);
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
@ -6038,14 +6038,13 @@ INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPa
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (iNewLine > 0 && iNewLine <= iMaxLine && iNewCol > 0)
|
||||
if ((iNewLine > 0) && (iNewLine <= iMaxLine) && (iNewCol > 0))
|
||||
{
|
||||
EditJumpTo(g_hwndEdit,iNewLine,iNewCol);
|
||||
EndDialog(hwnd,IDOK);
|
||||
}
|
||||
|
||||
else
|
||||
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,(!(iNewLine > 0 && iNewLine <= iMaxLine)) ? IDC_LINENUM : IDC_COLNUM)),1);
|
||||
PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,(!((iNewLine > 0) && (iNewLine <= iMaxLine))) ? IDC_LINENUM : IDC_COLNUM)),1);
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
@ -133,7 +133,7 @@ void EditApplyLexerStyle(HWND, int, int);
|
||||
void EditFinalizeStyling(HWND,int);
|
||||
|
||||
void EditMarkAllOccurrences();
|
||||
void EditUpdateVisibleUrlHotspot();
|
||||
void EditUpdateVisibleUrlHotspot(BOOL);
|
||||
|
||||
void EditEnterTargetTransaction();
|
||||
void EditLeaveTargetTransaction();
|
||||
|
||||
117
src/Notepad3.c
117
src/Notepad3.c
@ -190,6 +190,7 @@ int iSciFontQuality;
|
||||
int iHighDpiToolBar;
|
||||
int iUpdateDelayHyperlinkStyling;
|
||||
int iUpdateDelayMarkAllCoccurrences;
|
||||
int iCurrentLineVerticalSlop = 5;
|
||||
|
||||
const int DirectWriteTechnology[4] = {
|
||||
SC_TECHNOLOGY_DEFAULT
|
||||
@ -948,7 +949,6 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
}
|
||||
if (flagJumpTo) { // Jump to position
|
||||
EditJumpTo(g_hwndEdit,iInitialLine,iInitialColumn);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1003,10 +1003,10 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
|
||||
SendMessage(g_hwndEdit, SCI_ENDUNDOACTION, 0, 0);
|
||||
bAutoIndent = bAutoIndent2;
|
||||
if (flagJumpTo) {
|
||||
if (flagJumpTo)
|
||||
EditJumpTo(g_hwndEdit, iInitialLine, iInitialColumn);
|
||||
}
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
else
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1040,19 +1040,17 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
|
||||
cpLastFind = cp;
|
||||
|
||||
if (flagMatchText & 4)
|
||||
g_efrData.fuFlags |= SCFIND_REGEXP | SCFIND_POSIX;
|
||||
g_efrData.fuFlags |= (SCFIND_REGEXP | SCFIND_POSIX);
|
||||
else if (flagMatchText & 8)
|
||||
g_efrData.bTransformBS = TRUE;
|
||||
|
||||
if (flagMatchText & 2) {
|
||||
if (!flagJumpTo)
|
||||
EditJumpTo(g_hwndEdit,-1,0);
|
||||
if (!flagJumpTo) { SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0); }
|
||||
EditFindPrev(g_hwndEdit,&g_efrData,FALSE);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
else {
|
||||
if (!flagJumpTo)
|
||||
SendMessage(g_hwndEdit,SCI_DOCUMENTSTART,0,0);
|
||||
if (!flagJumpTo) { SendMessage(g_hwndEdit, SCI_DOCUMENTSTART, 0, 0); }
|
||||
EditFindNext(g_hwndEdit,&g_efrData,FALSE);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
@ -1334,6 +1332,10 @@ LRESULT MsgCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
|
||||
g_hwndEdit = EditCreate(hwnd);
|
||||
InitScintillaHandle(g_hwndEdit);
|
||||
|
||||
// Properties
|
||||
SendMessage(g_hwndEdit, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_EVEN | CARET_STRICT, iCurrentLineVerticalSlop);
|
||||
SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
|
||||
|
||||
// Tabs
|
||||
SendMessage(g_hwndEdit,SCI_SETUSETABS,!bTabsAsSpaces,0);
|
||||
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
|
||||
@ -2092,7 +2094,6 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
if (params->iInitialLine == 0)
|
||||
params->iInitialLine = 1;
|
||||
EditJumpTo(g_hwndEdit, params->iInitialLine, params->iInitialColumn);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
|
||||
flagLexerSpecified = 0;
|
||||
@ -2141,7 +2142,7 @@ LRESULT MsgContextMenu(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
|
||||
ptc.x = pt.x; ptc.y = pt.y;
|
||||
ScreenToClient(g_hwndEdit, &ptc);
|
||||
iNewPos = (int)SendMessage(g_hwndEdit, SCI_POSITIONFROMPOINT, (WPARAM)ptc.x, (LPARAM)ptc.y);
|
||||
SendMessage(g_hwndEdit, SCI_GOTOPOS, (WPARAM)iNewPos, 0);
|
||||
EditSelectEx(g_hwndEdit, iNewPos, iNewPos);
|
||||
}
|
||||
|
||||
if (pt.x == -1 && pt.y == -1) {
|
||||
@ -2600,7 +2601,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
|
||||
case IDC_CALL_UPDATE_HOTSPOT:
|
||||
EditUpdateVisibleUrlHotspot();
|
||||
EditUpdateVisibleUrlHotspot(bHyperlinkHotspot);
|
||||
break;
|
||||
|
||||
case IDM_FILE_NEW:
|
||||
@ -4780,7 +4781,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
SendMessage(g_hwndEdit, SCI_CLEAR, 0, 0);
|
||||
// possible unexpected behavior on Virtual Space Access, so:
|
||||
const int iPos = SciCall_GetCurrentPos();
|
||||
SendMessage(g_hwndEdit, SCI_SETSELECTION, iPos, iPos);
|
||||
SendMessage(g_hwndEdit, SCI_SETSEL, iPos, iPos);
|
||||
EndUndoAction(token);
|
||||
}
|
||||
}
|
||||
@ -6304,6 +6305,8 @@ void LoadSettings()
|
||||
bDenyVirtualSpaceAccess = IniSectionGetBool(pIniSection, L"DenyVirtualSpaceAccess", FALSE);
|
||||
bUseOldStyleBraceMatching = IniSectionGetBool(pIniSection, L"UseOldStyleBraceMatching", FALSE);
|
||||
|
||||
iCurrentLineVerticalSlop = IniSectionGetInt(pIniSection, L"CurrentLineVerticalSlop", 5);
|
||||
iCurrentLineVerticalSlop = max(min(iCurrentLineVerticalSlop, 80), 0);
|
||||
|
||||
LoadIniSection(L"Toolbar Images",pIniSection,cchIniSection);
|
||||
|
||||
@ -7234,7 +7237,7 @@ void MarkAllOccurrences(int delay)
|
||||
void UpdateVisibleUrlHotspot(int delay)
|
||||
{
|
||||
if (delay < USER_TIMER_MINIMUM) {
|
||||
EditUpdateVisibleUrlHotspot();
|
||||
EditUpdateVisibleUrlHotspot(bHyperlinkHotspot);
|
||||
return;
|
||||
}
|
||||
TEST_AND_SET(TIMER_BIT_UPDATE_HYPER);
|
||||
@ -7513,7 +7516,7 @@ void InvalidateSelections()
|
||||
int iCurPos = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
|
||||
SendMessage(g_hwndEdit, WM_CANCELMODE, 0, 0);
|
||||
SendMessage(g_hwndEdit, SCI_CLEARSELECTIONS, 0, 0);
|
||||
SendMessage(g_hwndEdit, SCI_SETSELECTION, (WPARAM)iCurPos, (LPARAM)iCurPos);
|
||||
SendMessage(g_hwndEdit, SCI_SETSEL, iCurPos, iCurPos);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7529,22 +7532,23 @@ int BeginUndoAction()
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
|
||||
sel.selMode = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONMODE,0,0);
|
||||
sel.rectSelVS = (int)SendMessage(g_hwndEdit,SCI_GETVIRTUALSPACEOPTIONS,0,0);
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONSTART,0,0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETANCHOR, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
|
||||
|
||||
if (!(BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) {
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONSTART, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONEND, 0, 0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sel.anchorPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
|
||||
sel.currPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
}
|
||||
token = UndoRedoActionMap(-1, &sel);
|
||||
if (token >= 0) {
|
||||
@ -7567,21 +7571,23 @@ void EndUndoAction(int token)
|
||||
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
|
||||
if (UndoRedoActionMap(token,&sel) >= 0) {
|
||||
// mode and type should not have changed
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONSTART,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONEND,0,0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETANCHOR, 0, 0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
|
||||
|
||||
if (!(BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) {
|
||||
if (sel.selMode == SC_SEL_LINES) {
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONSTART, 0, 0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONEND, 0, 0);
|
||||
}
|
||||
else if (sel.selMode == SC_SEL_RECTANGLE) {
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
|
||||
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
|
||||
sel.anchorVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
|
||||
sel.currVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
sel.anchorPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
|
||||
sel.currPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
|
||||
}
|
||||
}
|
||||
UndoRedoActionMap(token,&sel); // set with redo action filled
|
||||
@ -7602,6 +7608,14 @@ void RestoreAction(int token, DoAction doAct)
|
||||
// we are inside undo/redo transaction, so do delayed PostMessage() instead of SendMessage()
|
||||
int anchorPos = (doAct == UNDO ? sel.anchorPos_undo : sel.anchorPos_redo);
|
||||
int currPos = (doAct == UNDO ? sel.currPos_undo : sel.currPos_redo);
|
||||
int anchorPosLine = (int)SendMessage(g_hwndEdit, SCI_LINEFROMPOSITION, anchorPos, 0);
|
||||
int currPosLine = (int)SendMessage(g_hwndEdit, SCI_LINEFROMPOSITION, currPos, 0);
|
||||
// Ensure that the first and last lines of a selection are always unfolded
|
||||
// This needs to be done _before_ the SCI_SETSEL message
|
||||
SendMessage(g_hwndEdit, SCI_ENSUREVISIBLE, anchorPosLine, 0);
|
||||
if (anchorPosLine != currPosLine) {
|
||||
SendMessage(g_hwndEdit, SCI_ENSUREVISIBLE, currPosLine, 0);
|
||||
}
|
||||
int currRectType = (int)SendMessage(g_hwndEdit,SCI_GETVIRTUALSPACEOPTIONS,0,0);
|
||||
PostMessage(g_hwndEdit,SCI_SETSELECTIONMODE,(WPARAM)sel.selMode,0);
|
||||
PostMessage(g_hwndEdit,SCI_SETVIRTUALSPACEOPTIONS,(WPARAM)sel.rectSelVS,0);
|
||||
@ -7613,14 +7627,15 @@ void RestoreAction(int token, DoAction doAct)
|
||||
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHOR, (WPARAM)anchorPos, 0);
|
||||
PostMessage(g_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(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)anchorVS, 0);
|
||||
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)currVS, 0);
|
||||
int anchorVS = (doAct == UNDO ? sel.anchorVS_undo : sel.anchorVS_redo);
|
||||
int currVS = (doAct == UNDO ? sel.currVS_undo : sel.currVS_redo);
|
||||
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)anchorVS, 0);
|
||||
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)currVS, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
PostMessage(g_hwndEdit,SCI_SETSELECTION,(WPARAM)currPos,(LPARAM)anchorPos);
|
||||
PostMessage(g_hwndEdit, SCI_SETSEL, (LPARAM)anchorPos, (WPARAM)currPos);
|
||||
PostMessage(g_hwndEdit, SCI_SCROLLRANGE, (LPARAM)anchorPos, (WPARAM)currPos);
|
||||
}
|
||||
PostMessage(g_hwndEdit,SCI_SETVIRTUALSPACEOPTIONS,(WPARAM)currRectType,0);
|
||||
PostMessage(g_hwndEdit, SCI_CANCEL, 0, 0);
|
||||
@ -7904,7 +7919,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
|
||||
EditJumpTo(g_hwndEdit,-1,0);
|
||||
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
|
||||
SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
|
||||
EditJumpTo(g_hwndEdit,-1,0);
|
||||
SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
// set historic caret pos
|
||||
@ -7968,7 +7983,7 @@ BOOL FileRevert(LPCWSTR szFileName)
|
||||
if (FileLoad(TRUE,FALSE,TRUE,FALSE,tchFileName2))
|
||||
{
|
||||
if (bIsTail && iFileWatchingMode == 2) {
|
||||
EditJumpTo(g_hwndEdit, -1, 0);
|
||||
SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0);
|
||||
EditEnsureSelectionVisible(g_hwndEdit);
|
||||
}
|
||||
else if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) >= 4) {
|
||||
|
||||
@ -327,6 +327,7 @@
|
||||
<ClInclude Include="VersionEx.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\Build\Notepad3.ini" />
|
||||
<None Include="..\res\Copy.cur" />
|
||||
<None Include="..\res\Encoding.bmp" />
|
||||
<None Include="..\res\Next.bmp" />
|
||||
|
||||
@ -136,6 +136,9 @@
|
||||
<None Include="..\Versions\VersionEx.h.tpl">
|
||||
<Filter>templates</Filter>
|
||||
</None>
|
||||
<None Include="..\Build\Notepad3.ini">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\res\Notepad3.ico">
|
||||
|
||||
@ -93,13 +93,16 @@ DeclareSciCallR0(GetSelectionEnd, GETSELECTIONEND, int);
|
||||
DeclareSciCallR1(GetLineSelStartPosition, GETLINESELSTARTPOSITION, int, Sci_Position, line);
|
||||
DeclareSciCallR1(GetLineSelEndPosition, GETLINESELENDPOSITION, int, Sci_Position, line);
|
||||
|
||||
DeclareSciCallV2(SetSel, SETSEL, int, anchorPos, int, currentPos);
|
||||
DeclareSciCallV2(SetSel, SETSEL, Sci_Position, anchorPos, Sci_Position, currentPos);
|
||||
DeclareSciCallV2(ScrollRange, SCROLLRANGE, Sci_Position, secondaryPos, Sci_Position, primaryPos);
|
||||
DeclareSciCallV0(Clear, CLEAR);
|
||||
DeclareSciCallV2(SetTargetRange, SETTARGETRANGE, int, start, int, end);
|
||||
DeclareSciCallV0(TargetFromSelection, TARGETFROMSELECTION);
|
||||
|
||||
DeclareSciCallV1(GotoPos, GOTOPOS, int, position);
|
||||
DeclareSciCallV1(GotoLine, GOTOLINE, int, line);
|
||||
DeclareSciCallV1(SetAnchor, SETANCHOR, Sci_Position, position);
|
||||
DeclareSciCallV1(SetCurrentPos, SETCURRENTPOS, Sci_Position, position);
|
||||
DeclareSciCallV1(GotoPos, GOTOPOS, Sci_Position, position);
|
||||
DeclareSciCallV1(GotoLine, GOTOLINE, Sci_Position, line);
|
||||
DeclareSciCallR1(PositionBefore, POSITIONBEFORE, int, Sci_Position, position);
|
||||
DeclareSciCallR1(PositionAfter, POSITIONAFTER, int, Sci_Position, position);
|
||||
DeclareSciCallR1(GetCharAt, GETCHARAT, char, Sci_Position, position);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user