Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-01-23 02:04:29 +0300
committerelfmz <fenix1905@tut.by>2022-01-23 02:04:29 +0300
commita0b3a3cd77406f2ee4a221c282af8e4647412372 (patch)
tree2328e3e2fa57e0e629a4b92f4cad406ca035e814 /far2l/src/panel.cpp
parent6043c54425f335ee6ce14bf198026aed018d7ebd (diff)
use original FARs Xlat() function; impl partial xlat
Diffstat (limited to 'far2l/src/panel.cpp')
-rw-r--r--far2l/src/panel.cpp34
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;
+}
+