From cc4701a0c2cfe0f7de888bc1d973833c96eb1ef7 Mon Sep 17 00:00:00 2001 From: re2zero Date: Thu, 23 Jan 2025 17:21:16 +0800 Subject: [PATCH] fix: Fix detect language It perhaps no variant for a keyboard's layout, set a default value in order to continue detect local language. Log: Fix detect language. --- src/lib/deskflow/unix/X11LayoutsParser.cpp | 45 +++++++++++----------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/lib/deskflow/unix/X11LayoutsParser.cpp b/src/lib/deskflow/unix/X11LayoutsParser.cpp index 105aeeaac..d475764f9 100644 --- a/src/lib/deskflow/unix/X11LayoutsParser.cpp +++ b/src/lib/deskflow/unix/X11LayoutsParser.cpp @@ -115,11 +115,6 @@ void X11LayoutsParser::convertLayoutToISO639_2( const std::vector &layoutVariantNames, std::vector &iso639_2Codes ) { - if (layoutNames.size() != layoutVariantNames.size()) { - LOG((CLOG_WARN "error in language layout or language layout variants list")); - return; - } - static std::vector allLang; if (allLang.empty() || needToReloadEvdev) { allLang = getAllLanguageData(pathToEvdevFile); @@ -134,27 +129,31 @@ void X11LayoutsParser::convertLayoutToISO639_2( } const std::vector *toCopy = nullptr; - if (layoutVariantNames[i].empty()) { - toCopy = &langIter->layoutBaseISO639_2; - } else { - const auto &variantName = layoutVariantNames[i]; - auto langVariantIter = - std::find_if(langIter->variants.begin(), langIter->variants.end(), [&variantName](const Lang &l) { - return l.name == variantName; - }); - if (langVariantIter == langIter->variants.end()) { - LOG( - (CLOG_WARN "variant \"%s\" of language \"%s\" is unknown", layoutVariantNames[i].c_str(), - layoutNames[i].c_str()) - ); - continue; - } - - if (langVariantIter->layoutBaseISO639_2.empty()) { + if (i < layoutVariantNames.size()) { + if (layoutVariantNames[i].empty()) { toCopy = &langIter->layoutBaseISO639_2; } else { - toCopy = &langVariantIter->layoutBaseISO639_2; + const auto &variantName = layoutVariantNames[i]; + auto langVariantIter = + std::find_if(langIter->variants.begin(), langIter->variants.end(), [&variantName](const Lang &l) { + return l.name == variantName; + }); + if (langVariantIter == langIter->variants.end()) { + LOG( + (CLOG_WARN "variant \"%s\" of language \"%s\" is unknown", layoutVariantNames[i].c_str(), + layoutNames[i].c_str()) + ); + continue; + } + + if (langVariantIter->layoutBaseISO639_2.empty()) { + toCopy = &langIter->layoutBaseISO639_2; + } else { + toCopy = &langVariantIter->layoutBaseISO639_2; + } } + } else { + toCopy = &langIter->layoutBaseISO639_2; } if (toCopy) {