diff options
author | elfmz <fenix1905@tut.by> | 2022-01-23 02:04:29 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-01-23 02:04:29 +0300 |
commit | a0b3a3cd77406f2ee4a221c282af8e4647412372 (patch) | |
tree | 2328e3e2fa57e0e629a4b92f4cad406ca035e814 /far2l/src/panel.cpp | |
parent | 6043c54425f335ee6ce14bf198026aed018d7ebd (diff) |
use original FARs Xlat() function; impl partial xlat
Diffstat (limited to 'far2l/src/panel.cpp')
-rw-r--r-- | far2l/src/panel.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/far2l/src/panel.cpp b/far2l/src/panel.cpp index 3a19c9c0..51eecfd9 100644 --- a/far2l/src/panel.cpp +++ b/far2l/src/panel.cpp @@ -75,6 +75,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "palette.hpp" #include "panel.hpp" #include "drivemix.hpp" +#include "xlat.hpp" +#include <StackHeapArray.hpp> static int DragX,DragY,DragMove; static Panel *SrcDragPanel; @@ -922,7 +924,7 @@ void Panel::FastFindProcessName(Edit *FindEdit,const wchar_t *Src,FARString &str break; } - if (FindPartName2(Ptr,FALSE,1,1)) + if (FindPartNameXLat(Ptr,FALSE,1,1)) { // Key=*(EndPtr-1); *EndPtr=0; @@ -1085,13 +1087,13 @@ void Panel::FastFind(int FirstKey) } case KEY_CTRLNUMENTER: case KEY_CTRLENTER: - FindPartName2(strName,TRUE,1,1); + FindPartNameXLat(strName,TRUE,1,1); FindEdit.Show(); FastFindShow(FindX,FindY); break; case KEY_CTRLSHIFTNUMENTER: case KEY_CTRLSHIFTENTER: - FindPartName2(strName,TRUE,-1,1); + FindPartNameXLat(strName,TRUE,-1,1); FindEdit.Show(); FastFindShow(FindX,FindY); break; @@ -1132,7 +1134,7 @@ void Panel::FastFind(int FirstKey) FindEdit.SetString(strName); } - if (FindPartName2(strName,FALSE,1,1)) + if (FindPartNameXLat(strName,FALSE,1,1)) { strLastName = strName; } @@ -2277,3 +2279,27 @@ bool Panel::ExecShortcutFolder(int Pos) return false; } + +// Just as FindPartName(), but with retry support through keyboard layout translation, specially for FastFind +bool Panel::FindPartNameXLat(const wchar_t *Name,int Next,int Direct,int ExcludeSets) +{ + if (FindPartName(Name, Next, Direct, ExcludeSets)) { + return true; + } + const size_t NameLen = wcslen(Name); + StackHeapArray<wchar_t, 0x200> NameXlat(NameLen + 1); + + Xlater xlt(0); + for (size_t i = 0; i < NameLen; ++i) { + NameXlat[i] = xlt.Transcode(Name[i]); + NameXlat[i + 1] = 0; + if (!FindPartName(NameXlat.Get(), Next, Direct, ExcludeSets)) { + NameXlat[i] = Name[i]; + if (!FindPartName(NameXlat.Get(), Next, Direct, ExcludeSets)) { + return false; + } + } + } + return true; +} + |