From a09dd1fb3892e7d4a5a075c87cf56554a00debdc Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 14 Sep 2018 14:38:36 +0200 Subject: [PATCH 1/5] + chg: "Ctrl+D" now duplicates Line or Selection + fix: broken Korean IME default setting --- language/common_res.h | 102 +++++++++++++++---------------- language/np3_af_za/menu_af_za.rc | Bin 44094 -> 44128 bytes language/np3_de_de/menu_de_de.rc | Bin 46236 -> 46272 bytes language/np3_en_gb/menu_en_gb.rc | Bin 44224 -> 44258 bytes language/np3_en_us/menu_en_us.rc | Bin 44198 -> 44232 bytes language/np3_es_es/menu_es_es.rc | Bin 44606 -> 44640 bytes language/np3_fr_fr/menu_fr_fr.rc | Bin 46676 -> 46712 bytes language/np3_ja_jp/menu_ja_jp.rc | Bin 42680 -> 42714 bytes language/np3_nl_nl/menu_nl_nl.rc | Bin 45734 -> 45758 bytes language/np3_zh_cn/menu_zh_cn.rc | Bin 42132 -> 42166 bytes src/Notepad3.c | 43 ++++--------- src/Notepad3.rc | 5 +- src/SciCall.h | 8 ++- 13 files changed, 73 insertions(+), 85 deletions(-) diff --git a/language/common_res.h b/language/common_res.h index 4951f03b6..d2394e869 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -386,7 +386,8 @@ #define IDM_EDIT_SELECTLINE 40312 #define IDM_EDIT_MOVELINEUP 40313 #define IDM_EDIT_MOVELINEDOWN 40314 -#define IDM_EDIT_DUPLICATELINE 40315 +#define IDM_EDIT_DUPLINEORSELECTION 40315 +//#define IDM_EDIT_SELECTIONDUPLICATE 40329 #define IDM_EDIT_LINETRANSPOSE 40316 #define IDM_EDIT_CUTLINE 40317 #define IDM_EDIT_COPYLINE 40318 @@ -400,56 +401,55 @@ #define IDM_EDIT_INDENT 40326 #define IDM_EDIT_UNINDENT 40327 #define IDM_EDIT_ENCLOSESELECTION 40328 -#define IDM_EDIT_SELECTIONDUPLICATE 40329 -#define IDM_EDIT_PADWITHSPACES 40330 -#define IDM_EDIT_STRIP1STCHAR 40331 -#define IDM_EDIT_STRIPLASTCHAR 40332 -#define IDM_EDIT_TRIMLINES 40333 -#define IDM_EDIT_COMPRESS_BLANKS 40334 -#define IDM_EDIT_MERGEBLANKLINES 40335 -#define IDM_EDIT_REMOVEBLANKLINES 40336 -#define IDM_EDIT_MODIFYLINES 40337 -#define IDM_EDIT_SORTLINES 40338 -#define IDM_EDIT_ALIGN 40339 -#define IDM_EDIT_CONVERTUPPERCASE 40340 -#define IDM_EDIT_CONVERTLOWERCASE 40341 -#define IDM_EDIT_INVERTCASE 40342 -#define IDM_EDIT_TITLECASE 40343 -#define IDM_EDIT_SENTENCECASE 40344 -#define IDM_EDIT_CONVERTTABS 40345 -#define IDM_EDIT_CONVERTSPACES 40346 -#define IDM_EDIT_CONVERTTABS2 40347 -#define IDM_EDIT_CONVERTSPACES2 40348 -#define IDM_EDIT_INSERT_TAG 40349 -#define IDM_EDIT_INSERT_ENCODING 40350 -#define IDM_EDIT_INSERT_SHORTDATE 40351 -#define IDM_EDIT_INSERT_LONGDATE 40352 -#define IDM_EDIT_INSERT_FILENAME 40353 -#define IDM_EDIT_INSERT_PATHNAME 40354 -#define IDM_EDIT_LINECOMMENT 40355 -#define IDM_EDIT_STREAMCOMMENT 40356 -#define IDM_EDIT_URLENCODE 40357 -#define IDM_EDIT_URLDECODE 40358 -#define IDM_EDIT_ESCAPECCHARS 40359 -#define IDM_EDIT_UNESCAPECCHARS 40360 -#define IDM_EDIT_CHAR2HEX 40361 -#define IDM_EDIT_HEX2CHAR 40362 -#define IDM_EDIT_FINDMATCHINGBRACE 40363 -#define IDM_EDIT_SELTOMATCHINGBRACE 40364 -#define IDM_EDIT_FIND 40365 -#define IDM_EDIT_SAVEFIND 40366 -#define IDM_EDIT_FINDNEXT 40367 -#define IDM_EDIT_FINDPREV 40368 -#define IDM_EDIT_REPLACE 40369 -#define IDM_EDIT_REPLACENEXT 40370 -#define IDM_EDIT_GOTOLINE 40371 -#define IDM_EDIT_SELTONEXT 40372 -#define IDM_EDIT_SELTOPREV 40373 -#define IDM_EDIT_COMPLETEWORD 40374 -#define IDM_EDIT_JOINLN_NOSP 40375 -#define IDM_EDIT_REMOVEDUPLICATELINES 40376 -#define IDM_EDIT_REMOVEEMPTYLINES 40377 -#define IDM_EDIT_MERGEEMPTYLINES 40378 +#define IDM_EDIT_PADWITHSPACES 40329 +#define IDM_EDIT_STRIP1STCHAR 40330 +#define IDM_EDIT_STRIPLASTCHAR 40331 +#define IDM_EDIT_TRIMLINES 40332 +#define IDM_EDIT_COMPRESS_BLANKS 40333 +#define IDM_EDIT_MERGEBLANKLINES 40334 +#define IDM_EDIT_REMOVEBLANKLINES 40335 +#define IDM_EDIT_MODIFYLINES 40336 +#define IDM_EDIT_SORTLINES 40337 +#define IDM_EDIT_ALIGN 40338 +#define IDM_EDIT_CONVERTUPPERCASE 40339 +#define IDM_EDIT_CONVERTLOWERCASE 40340 +#define IDM_EDIT_INVERTCASE 40341 +#define IDM_EDIT_TITLECASE 40342 +#define IDM_EDIT_SENTENCECASE 40343 +#define IDM_EDIT_CONVERTTABS 40344 +#define IDM_EDIT_CONVERTSPACES 40345 +#define IDM_EDIT_CONVERTTABS2 40346 +#define IDM_EDIT_CONVERTSPACES2 40347 +#define IDM_EDIT_INSERT_TAG 40348 +#define IDM_EDIT_INSERT_ENCODING 40349 +#define IDM_EDIT_INSERT_SHORTDATE 40350 +#define IDM_EDIT_INSERT_LONGDATE 40351 +#define IDM_EDIT_INSERT_FILENAME 40352 +#define IDM_EDIT_INSERT_PATHNAME 40353 +#define IDM_EDIT_LINECOMMENT 40354 +#define IDM_EDIT_STREAMCOMMENT 40355 +#define IDM_EDIT_URLENCODE 40356 +#define IDM_EDIT_URLDECODE 40357 +#define IDM_EDIT_ESCAPECCHARS 40358 +#define IDM_EDIT_UNESCAPECCHARS 40359 +#define IDM_EDIT_CHAR2HEX 40360 +#define IDM_EDIT_HEX2CHAR 40361 +#define IDM_EDIT_FINDMATCHINGBRACE 40362 +#define IDM_EDIT_SELTOMATCHINGBRACE 40363 +#define IDM_EDIT_FIND 40364 +#define IDM_EDIT_SAVEFIND 40365 +#define IDM_EDIT_FINDNEXT 40366 +#define IDM_EDIT_FINDPREV 40367 +#define IDM_EDIT_REPLACE 40368 +#define IDM_EDIT_REPLACENEXT 40369 +#define IDM_EDIT_GOTOLINE 40370 +#define IDM_EDIT_SELTONEXT 40371 +#define IDM_EDIT_SELTOPREV 40372 +#define IDM_EDIT_COMPLETEWORD 40373 +#define IDM_EDIT_JOINLN_NOSP 40374 +#define IDM_EDIT_REMOVEDUPLICATELINES 40375 +#define IDM_EDIT_REMOVEEMPTYLINES 40376 +#define IDM_EDIT_MERGEEMPTYLINES 40377 #define IDM_VIEW_SCHEME 40400 #define IDM_VIEW_USE2NDDEFAULT 40401 diff --git a/language/np3_af_za/menu_af_za.rc b/language/np3_af_za/menu_af_za.rc index 40154c1f67911226725a955e65f877365815b4da..09a147f490febef94c8d6f9a311c59781c1d312d 100644 GIT binary patch delta 113 zcmdmYgXzHyrVRl`jQW!koy8{~@a38uXT&i%!a`_rgAo_IAA>7{KSR*u=T7>QH^_@k vK4YZC=rTF6T6}VXE!X4;;T)S4j6(!~nhTA^acX>E95Pv85!+@H7p@Edg2*J> delta 100 zcmaEGgK6IlrVRl`lP4JSF}h5?@2xnw$B2vBnZa@LS!3(TA7of2KQhvqToxuU`JK1W zWvhJ_G@rVU16ni-dCFsHs$`HWd!{Eu_%;3ln!r(fY(Zq7H+(x#^ zpG>qE^(NaV$ZxhWH4~gHU@9{CM5cteD^OtwP`N*Y9|Mx+$&TTslP4s(ZMJi7$^`(Q CARYJs diff --git a/language/np3_en_gb/menu_en_gb.rc b/language/np3_en_gb/menu_en_gb.rc index 01dd5d85dcdb7886e4849814dc0a6ed56316b4cc..aeb59ffd2dc5749f56d64b3a3a55107859d0cdd8 100644 GIT binary patch delta 107 zcmX?blj+e-rVS-VjQW$W`zlUe;w&ZT!Vt<3z~IB+$>7J}%HYosG@093f3kqD#Nw^i`kjMaq>rF>&XJLER)%cwI(kK6WHuv zoF~8>!%#B$rM2>8g+#W=CyaP_T^K?c0vLQ4JQ+Y*7HUdPeqazY*-w*gbCpX*1^^~> B9@+o^ diff --git a/language/np3_en_us/menu_en_us.rc b/language/np3_en_us/menu_en_us.rc index f23919fddf6df5a02ab2ec347707e71159b01b68..d36c0e93fd1f51fa7e25dc78210ccad0d1ed6a2e 100644 GIT binary patch delta 119 zcmZ2>lj+1wrVV*UjQW#5Rtitn^W~ddW5h8z!cA!MJR>e%KL%F@e}*82U?A-?*-_kj w@&kF6$*+vGCeL%`m~1gcVDbbPuFYn~F#MN+$Oj$xg0|XXAEdaApW$@MQ33@S7}XBRtt;g5Kl= LcbCltE)f|3M7SgM diff --git a/language/np3_es_es/menu_es_es.rc b/language/np3_es_es/menu_es_es.rc index cd36aec4e6901a5e247d84a6a9ba857ec50b60cb..17f4b932820def2ddc11fd4c7bc1ffa205e46d24 100644 GIT binary patch delta 111 zcmdmYhv~r`rVT~8+gPf v?=sP1beYVUr9b&YG{*V{!){`%oXidHr zB{6w|mc(W)(;~si5`kizjtn^rB@EgOE|VEkua10$>f0ZMbTB1E`i DhMXQ> diff --git a/language/np3_nl_nl/menu_nl_nl.rc b/language/np3_nl_nl/menu_nl_nl.rc index 49e17771e77f73ce6c750611ba5607941d7d736e..b3456b1518d41258e2d93aa1ed2506955300e66f 100644 GIT binary patch delta 89 zcmZ4Xlxg2nrVSA$jQW!qv*jm;*hx*EV8X@j$KcA~&k!_ux2yi-16*R0@0e&Yx=eNy emE5dgsv!te>~A7JImS*1L-B_2h|O&73$g(UlpG-d delta 119 zcmdn@lxf*hrVSA$llK_&OwMxSnk;21FgZX=NYI5Llp%n@hryGVHT4;S8B!T?fH;|VC-*tYO+GeRXmWxv&*TG69FwiA1t!-S>rL)4(qq({ys<=d^97?V z{M;H0Y78z6nhY@vC6gJgl_wX(u}QizI5UJWcry4i_yOfY83Gu5fIMdg$H{`TB_~D3 KYz}fxNdy3#&>#5# diff --git a/src/Notepad3.c b/src/Notepad3.c index b9af9f09c..d7a5b32b9 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -2794,7 +2794,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu,IDM_EDIT_MOVELINEUP,!ro); EnableCmd(hmenu,IDM_EDIT_MOVELINEDOWN,!ro); - EnableCmd(hmenu,IDM_EDIT_DUPLICATELINE,!ro); + EnableCmd(hmenu,IDM_EDIT_DUPLINEORSELECTION,!ro); EnableCmd(hmenu,IDM_EDIT_LINETRANSPOSE,!ro); EnableCmd(hmenu,IDM_EDIT_CUTLINE,!ro); EnableCmd(hmenu,IDM_EDIT_COPYLINE,true); @@ -2813,7 +2813,6 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu,IDM_EDIT_STRIP1STCHAR,!ro); EnableCmd(hmenu,IDM_EDIT_STRIPLASTCHAR,!ro); EnableCmd(hmenu,IDM_EDIT_TRIMLINES,!ro); - EnableCmd(hmenu, IDM_EDIT_SELECTIONDUPLICATE, !ro); EnableCmd(hmenu, IDM_EDIT_COMPRESS_BLANKS, !ro); EnableCmd(hmenu, IDM_EDIT_MODIFYLINES, !ro); @@ -3591,16 +3590,16 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; - case IDM_EDIT_DUPLICATELINE: + case IDM_EDIT_DUPLINEORSELECTION: _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit,SCI_LINEDUPLICATE,0,0); + if (SciCall_IsSelectionEmpty()) { SciCall_LineDuplicate(); } else { SciCall_SelectionDuplicate(); } _END_UNDO_ACTION_; break; case IDM_EDIT_LINETRANSPOSE: _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit, SCI_LINETRANSPOSE,0,0); + SciCall_LineTranspose(); _END_UNDO_ACTION_; break; @@ -3619,7 +3618,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_DELETELINE: { _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit, SCI_LINEDELETE, 0, 0); + SciCall_LineDelete(); _END_UNDO_ACTION_; } break; @@ -3628,7 +3627,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_DELETELINELEFT: { _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit, SCI_DELLINELEFT, 0, 0); + SciCall_DelLineLeft(); _END_UNDO_ACTION_; } break; @@ -3637,7 +3636,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_DELETELINERIGHT: { _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit, SCI_DELLINERIGHT, 0, 0); + SciCall_DelLineRight(); _END_UNDO_ACTION_; } break; @@ -3711,17 +3710,6 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; - case IDM_EDIT_SELECTIONDUPLICATE: - { - BeginWaitCursor(NULL); - _BEGIN_UNDO_ACTION_; - SendMessage(g_hwndEdit,SCI_SELECTIONDUPLICATE,0,0); - _END_UNDO_ACTION_; - EndWaitCursor(); - } - break; - - case IDM_EDIT_PADWITHSPACES: { BeginWaitCursor(NULL); @@ -6721,18 +6709,13 @@ void LoadSettings() } g_iBidirectional = (clampi(g_iBidirectional, SC_BIDIRECTIONAL_DISABLED, SC_BIDIRECTIONAL_R2L) > 0) ? SC_BIDIRECTIONAL_R2L : 0; -#if 0 - // Settings2 deprecated - g_IMEInteraction = IniSectionGetInt(pIniSection, L"IMEInteraction", 111); - if ((g_IMEInteraction != 111) && g_bSaveSettings) { - // cleanup - IniSetString(L"Settings2", L"IMEInteraction", NULL); - IniSetInt(L"Settings", L"IMEInteraction", g_iBidirectional); + g_IMEInteraction = clampi(IniSectionGetInt(pIniSection, L"IMEInteraction", -1), -1, SC_IME_INLINE); + // Korean IME use inline mode by default + if (g_IMEInteraction == -1) { // auto detection once + // ScintillaWin::KoreanIME() + int const codePage = Scintilla_InputCodePage(); + g_IMEInteraction = ((codePage == 949 || codePage == 1361) ? SC_IME_INLINE : SC_IME_WINDOWED); } - g_IMEInteraction = clampi(g_IMEInteraction, 0, 1); -#else - g_IMEInteraction = clampi(IniSectionGetInt(pIniSection, L"IMEInteraction", SC_IME_WINDOWED), SC_IME_WINDOWED, SC_IME_INLINE); -#endif g_iSciFontQuality = clampi(IniSectionGetInt(pIniSection, L"SciFontQuality", FontQuality[3]), 0, 3); diff --git a/src/Notepad3.rc b/src/Notepad3.rc index 05b4aede1..0dceae7e0 100644 --- a/src/Notepad3.rc +++ b/src/Notepad3.rc @@ -85,7 +85,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDR_MAINWND ACCELERATORS BEGIN - 46, /*'.'*/ IDM_EDIT_LINETRANSPOSE, ASCII, ALT, NOINVERT "0", IDM_VIEW_RESETZOOM, VIRTKEY, CONTROL, NOINVERT "0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT "1", CMD_STRINGIFY, VIRTKEY, CONTROL, NOINVERT @@ -111,8 +110,8 @@ BEGIN "C", IDM_EDIT_COPYALL, VIRTKEY, ALT, NOINVERT "C", IDM_EDIT_HEX2CHAR, VIRTKEY, CONTROL, ALT, NOINVERT "C", IDM_EDIT_COPY, VIRTKEY, SHIFT, CONTROL, NOINVERT - "D", IDM_EDIT_DUPLICATELINE, VIRTKEY, CONTROL, NOINVERT - "D", IDM_EDIT_SELECTIONDUPLICATE, VIRTKEY, ALT, NOINVERT + "D", IDM_EDIT_DUPLINEORSELECTION, VIRTKEY, CONTROL, NOINVERT + "D", IDM_EDIT_LINETRANSPOSE, VIRTKEY, ALT, NOINVERT "D", IDM_EDIT_DELETELINE, VIRTKEY, SHIFT, CONTROL, NOINVERT "D", IDM_EDIT_REMOVEDUPLICATELINES, VIRTKEY, CONTROL, ALT, NOINVERT "E", IDM_EDIT_COPYADD, VIRTKEY, CONTROL, NOINVERT diff --git a/src/SciCall.h b/src/SciCall.h index 41e65a5a5..3bd2a6f7c 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -199,7 +199,6 @@ DeclareSciCallV0(Clear, CLEAR) DeclareSciCallV2(CopyRange, COPYRANGE, DocPos, start, DocPos, end) DeclareSciCallV0(Cancel, CANCEL) DeclareSciCallV0(CopyAllowLine, COPYALLOWLINE) -DeclareSciCallV0(LineDelete, LINEDELETE) DeclareSciCallV2(CopyText, COPYTEXT, DocPos, length, const char*, text) DeclareSciCallV2(GetText, GETTEXT, DocPos, length, const char*, text) @@ -278,8 +277,15 @@ DeclareSciCallV2(AutoCShow, AUTOCSHOW, int, len, const char*, list) // Commands // DeclareSciCallV0(NewLine, NEWLINE) +DeclareSciCallV0(LineDuplicate, LINEDUPLICATE) +DeclareSciCallV0(SelectionDuplicate, SELECTIONDUPLICATE) +DeclareSciCallV0(LineTranspose, LINETRANSPOSE) DeclareSciCallV0(MoveSelectedLinesUp, MOVESELECTEDLINESUP) DeclareSciCallV0(MoveSelectedLinesDown, MOVESELECTEDLINESDOWN) +DeclareSciCallV0(LineDelete, LINEDELETE) +DeclareSciCallV0(DelLineLeft, DELLINELEFT) +DeclareSciCallV0(DelLineRight, DELLINERIGHT) + DeclareSciCallR2(FindText, FINDTEXT, DocPos, int, flags, struct Sci_TextToFind*, text) From 13691e46314eedb8090bc3f90f98e14b69d8a882 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 14 Sep 2018 14:44:26 +0200 Subject: [PATCH 2/5] + chg: allow coexisting Auto-Completion and IME for non "AutoC ASCII-Only" mode. --- src/Notepad3.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index d7a5b32b9..6f261183a 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6149,7 +6149,7 @@ static void __fastcall _HandleTinyExpr() } } - +#if 0 //============================================================================= // // _IsIMEOpenInNativeMode() @@ -6169,6 +6169,7 @@ static bool __fastcall _IsIMEOpenInNativeMode() } return result; } +#endif //============================================================================= // @@ -6366,7 +6367,7 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) } if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) { - if ((g_bAutoCinASCIIModeOnly && (ich > 0x7F)) || (scn->modifiers != SC_CHARADDED_NORMAL)) { + if (g_bAutoCinASCIIModeOnly && ((ich > 0x7F) || (scn->modifiers != SC_CHARADDED_NORMAL))) { SciCall_AutoCCancel(); return 0LL; } From 8c11c8d421da6f049767e8bfd3455150e5a3fca3 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 14 Sep 2018 15:51:06 +0200 Subject: [PATCH 3/5] + fix: (some) issues in Code-Folding scrolling --- src/Edit.c | 16 +++++++++------- src/Notepad3.c | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 54102e1c4..c4e3fcb7b 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -8152,6 +8152,7 @@ inline bool _FoldToggleNode(DocLn ln, FOLD_ACTION action) void __stdcall EditFoldPerformAction(DocLn ln, int mode, FOLD_ACTION action) { + bool fToggled = false; if (action == SNIFF) { action = SciCall_GetFoldExpanded(ln) ? FOLD : EXPAND; } @@ -8180,12 +8181,13 @@ void __stdcall EditFoldPerformAction(DocLn ln, int mode, FOLD_ACTION action) if (lv < lvStop || (lv == lvStop && fHeader && ln != lnNode)) return; else if (fHeader && (lv == lvNode || (lv > lvNode && mode & FOLD_CHILDREN))) - _FoldToggleNode(ln, action); + fToggled |= _FoldToggleNode(ln, action); } } else { - _FoldToggleNode(ln, action); + fToggled = _FoldToggleNode(ln, action); } + if (fToggled) { SciCall_ScrollCaret(); } } @@ -8193,7 +8195,6 @@ void EditToggleFolds(FOLD_ACTION action, bool bForceAll) { static FOLD_ACTION sbLastSniffAllAction = EXPAND; - bool fToggled = bForceAll; DocLn const iBegLn = SciCall_LineFromPosition(SciCall_GetSelectionStart()); DocLn const iEndLn = SciCall_LineFromPosition(SciCall_GetSelectionEnd()); @@ -8205,18 +8206,19 @@ void EditToggleFolds(FOLD_ACTION action, bool bForceAll) if (iBegLn == iEndLn) { // single line DocLn const ln = (SciCall_GetFoldLevel(iBegLn) & SC_FOLDLEVELHEADERFLAG) ? iBegLn : SciCall_GetFoldParent(iBegLn); - _FoldToggleNode(ln, action); + if (_FoldToggleNode(ln, action)) { SciCall_ScrollCaret(); } } else { // selection range spans at least two lines + bool fToggled = bForceAll; for (DocLn ln = iBegLn; ln <= iEndLn; ++ln) { if (SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) { - if (_FoldToggleNode(ln, action)) { fToggled = !fToggled ? true : false; } + fToggled |= _FoldToggleNode(ln, action); } } + if (fToggled) { EditEnsureSelectionVisible(g_hwndEdit); } } } - if (fToggled) { EditEnsureSelectionVisible(g_hwndEdit); } } @@ -8305,7 +8307,7 @@ void EditFoldAltArrow(FOLD_MOVE move, FOLD_ACTION action) else { ln = (SciCall_GetFoldLevel(iBegLn) & SC_FOLDLEVELHEADERFLAG) ? iBegLn : SciCall_GetFoldParent(iBegLn); if (action != SNIFF) { - _FoldToggleNode(ln, action); + if (_FoldToggleNode(ln, action)) { SciCall_ScrollCaret(); } } } } diff --git a/src/Notepad3.c b/src/Notepad3.c index 6f261183a..f8ece8e5b 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -4796,7 +4796,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_TOGGLEFOLDS: - EditToggleFolds(SNIFF, true); + EditToggleFolds(SNIFF, SciCall_IsSelectionEmpty()); break; case IDM_VIEW_TOGGLE_CURRENT_FOLD: From 447aa82eb1d6ff9850c4af5a741f0ce3e7b27e47 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Sun, 16 Sep 2018 17:11:01 +0200 Subject: [PATCH 4/5] merge --- Versions/build.txt | 2 +- res/Notepad3.exe.manifest.conf | 2 +- src/Dialogs.c | 2 ++ src/Notepad3.c | 8 ++++---- src/VersionEx.h | 6 +++--- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Versions/build.txt b/Versions/build.txt index 5ab2c45b3..e2bb11dae 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -1067 +1098 diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index da65570a0..a68337bed 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 TinyExpr diff --git a/src/Dialogs.c b/src/Dialogs.c index 9c0c32663..a8d1d10b7 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -2696,6 +2696,8 @@ void GetMonitorWorkArea(RECT* pRect) if (SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0) != 0) { SetRect(pRect, rc.left, rc.top, rc.right, rc.bottom); } + else + SetRectEmpty(pRect); } } diff --git a/src/Notepad3.c b/src/Notepad3.c index b9af9f09c..ae21270f5 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6164,9 +6164,9 @@ static void __fastcall _HandleTinyExpr() //============================================================================= // -// _IsIMEOpenInNativeMode() +// _IsIMECompositionMode() // -static bool __fastcall _IsIMEOpenInNativeMode() +static bool __fastcall _IsIMECompositionMode() { bool result = false; HIMC const himc = ImmGetContext(g_hwndEdit); @@ -6174,7 +6174,7 @@ static bool __fastcall _IsIMEOpenInNativeMode() if (ImmGetOpenStatus(himc)) { DWORD dwConversion = IME_CMODE_ALPHANUMERIC, dwSentence = 0; if (ImmGetConversionStatus(himc, &dwConversion, &dwSentence)) { - result = (dwConversion != IME_CMODE_ALPHANUMERIC); + result = ((dwConversion & IME_CMODE_LANGUAGE) != IME_CMODE_ALPHANUMERIC); } } ImmReleaseContext(g_hwndEdit, himc); @@ -6378,7 +6378,7 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) } if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) { - if ((g_bAutoCinASCIIModeOnly && (ich > 0x7F)) || (scn->modifiers != SC_CHARADDED_NORMAL)) { + if (g_bAutoCinASCIIModeOnly && ((ich > 0x7F) || _IsIMECompositionMode())) { SciCall_AutoCCancel(); return 0LL; } diff --git a/src/VersionEx.h b/src/VersionEx.h index 9579fa3bb..a0a747cf6 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -6,8 +6,8 @@ #define APPNAME "Notepad3" #define VERSION_MAJOR 4 #define VERSION_MINOR 18 -#define VERSION_REV 822 -#define VERSION_BUILD 1067 -#define SCINTILLA_VER 410 +#define VERSION_REV 912 +#define VERSION_BUILD 1098 +#define SCINTILLA_VER 411 #define ONIGMO_REGEX_VER 6.1.3 #define VERSION_PATCH " TinyExpr" From 12b74b6201652ae3db9452a1fb665b7f6f4a5790 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Sun, 16 Sep 2018 18:15:30 +0200 Subject: [PATCH 5/5] + fix&chg: default (initial) window position: fit in workarea with zero border offset --- src/Dialogs.c | 2 ++ src/Notepad3.c | 33 ++++++++++++--------------------- src/TypeDefs.h | 2 +- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/Dialogs.c b/src/Dialogs.c index 9c0c32663..a8d1d10b7 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -2696,6 +2696,8 @@ void GetMonitorWorkArea(RECT* pRect) if (SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0) != 0) { SetRect(pRect, rc.left, rc.top, rc.right, rc.bottom); } + else + SetRectEmpty(pRect); } } diff --git a/src/Notepad3.c b/src/Notepad3.c index f8ece8e5b..47350cd27 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -166,7 +166,7 @@ static WCHAR g_tchToolbarBitmap[MAX_PATH] = { L'\0' }; static WCHAR g_tchToolbarBitmapHot[MAX_PATH] = { L'\0' }; static WCHAR g_tchToolbarBitmapDisabled[MAX_PATH] = { L'\0' }; -static WININFO g_WinInfo = INIT_WININFO; +static WININFO g_WinInfo = INIT_WININFO; // <= (g_flagDefaultPos == 1) static int g_WinCurrentWidth = 0; int iPathNameFormat; @@ -990,30 +990,23 @@ void EndWaitCursor() // _InitWindowPosition() // // -#define _BORDEROFFSET (IsWin10() ? 8 : 16) - - static void __fastcall _InitDefaultWndPos(WININFO* pWinInfo) { - RECT rc = RectFromWinInfo(pWinInfo); - GetMonitorWorkArea(&rc); - pWinInfo->y = rc.top + _BORDEROFFSET; - pWinInfo->cy = rc.bottom - rc.top - (_BORDEROFFSET * 2); - pWinInfo->cx = (rc.right - rc.left) / 2; //min(rc.right - rc.left - 32, g_WinInfo.cy); - pWinInfo->x = (g_flagDefaultPos == 3) ? rc.left + _BORDEROFFSET : rc.right - g_WinInfo.cx - _BORDEROFFSET; + RECT rcMon = RectFromWinInfo(pWinInfo); + GetMonitorWorkArea(&rcMon); + pWinInfo->y = rcMon.top; + pWinInfo->cy = rcMon.bottom - rcMon.top; + pWinInfo->cx = (rcMon.right - rcMon.left) / 2; //min(rcMon.right - rcMon.left - 32, g_WinInfo.cy); + pWinInfo->x = (g_flagDefaultPos == 3) ? rcMon.left : rcMon.right - g_WinInfo.cx; + + FitIntoMonitorWorkArea(&rcMon, pWinInfo, false); } // ---------------------------------------------------------------------------- static void __fastcall _InitWindowPosition() { - if (g_flagDefaultPos == 1) - { - g_WinInfo.x = g_WinInfo.y = g_WinInfo.cx = g_WinInfo.cy = CW_USEDEFAULT; - g_WinInfo.max = 0; - g_WinInfo.zoom = 100; - } - else if (g_flagDefaultPos >= 4) + if (g_flagDefaultPos >= 4) { RECT rcMon = RectFromWinInfo(&g_WinInfo); GetMonitorWorkArea(&rcMon); @@ -1060,7 +1053,7 @@ static void __fastcall _InitWindowPosition() RECT rcMon = RectFromWinInfo(&g_WinInfo); GetMonitorWorkArea(&rcMon); - WININFO wiWin = g_WinInfo; wiWin.cx = wiWin.cy = _BORDEROFFSET * 2; // really small + WININFO wiWin = g_WinInfo; wiWin.cx = wiWin.cy = 32; // really small FitIntoMonitorWorkArea(&rcMon, &wiWin, false); g_WinInfo.x = wiWin.x; @@ -2311,8 +2304,7 @@ LRESULT MsgSize(HWND hwnd, WPARAM wParam, LPARAM lParam) HDWP hdwp = BeginDeferWindowPos(2); - DeferWindowPos(hdwp,hwndEditFrame,NULL,x,y,cx,cy, - SWP_NOZORDER | SWP_NOACTIVATE); + DeferWindowPos(hdwp,hwndEditFrame,NULL,x,y,cx,cy, SWP_NOZORDER | SWP_NOACTIVATE); DeferWindowPos(hdwp,g_hwndEdit,NULL,x+cxEditFrame,y+cyEditFrame, cx-2*cxEditFrame,cy-2*cyEditFrame, @@ -6736,7 +6728,6 @@ void LoadSettings() IniSectionGetString(pIniSection, L"AdministrationTool.exe", L"", g_tchAdministrationExe, COUNTOF(g_tchAdministrationExe)); - // -------------------------------------------------------------------------- LoadIniSection(L"Settings", pIniSection, cchIniSection); // -------------------------------------------------------------------------- diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 2594e163b..9700e6638 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -61,7 +61,7 @@ typedef struct _wi int zoom; } WININFO; -#define INIT_WININFO { CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0 } +#define INIT_WININFO { CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, 0, 100 } inline RECT RectFromWinInfo(const WININFO* const pWinInfo) {