[Scummvm-git-logs] scummvm master -> f9d0da86e3b0d524453207c7dc0cd9243ba2e929
sev-
noreply at scummvm.org
Sun Nov 6 22:22:43 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f9d0da86e3 GUI: Fix browsing in presence of files with \1 in names
Commit: f9d0da86e3b0d524453207c7dc0cd9243ba2e929
https://github.com/scummvm/scummvm/commit/f9d0da86e3b0d524453207c7dc0cd9243ba2e929
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2022-11-06T23:22:40+01:00
Commit Message:
GUI: Fix browsing in presence of files with \1 in names
Currently file containing \1 in its name causes erroring out
with "Wrong string format".
Hades Challenge Mac partiton has such files in the root. So if they are
copied then it's impossible to select folder with Hades Challenge. Many tools
skip (as they are hidden) or rename them while saving original name in
AppleDouble or MacBinary. dumper-companion also renames them but scummvm
transparently decodes punycode back.
Changed paths:
gui/browser.cpp
gui/widgets/list.cpp
gui/widgets/list.h
diff --git a/gui/browser.cpp b/gui/browser.cpp
index 110f1757d95..4ec411f9a76 100644
--- a/gui/browser.cpp
+++ b/gui/browser.cpp
@@ -242,9 +242,9 @@ void BrowserDialog::updateListing() {
}
if (i->isDirectory())
- list.push_back(color + Common::U32String(i->getName() + "/"));
+ list.push_back(color + ListWidget::escapeString(Common::U32String(i->getName()) + "/"));
else
- list.push_back(color + Common::U32String(i->getName()));
+ list.push_back(color + ListWidget::escapeString(Common::U32String(i->getName())));
}
_fileList->setList(list);
diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp
index 9399b338e29..a0976a1f9e6 100644
--- a/gui/widgets/list.cpp
+++ b/gui/widgets/list.cpp
@@ -860,6 +860,19 @@ Common::U32String ListWidget::stripGUIformatting(const Common::U32String &str) {
return stripped;
}
+Common::U32String ListWidget::escapeString(const Common::U32String &str) {
+ Common::U32String escaped;
+ const uint32 *s = str.u32_str();
+
+ while (*s) {
+ if (*s == '\001')
+ escaped += '\001';
+ escaped += *s++;
+ }
+
+ return escaped;
+}
+
void ListWidget::drawFormattedText(const Common::Rect &r, const Common::U32String &str, ThemeEngine::WidgetStateInfo state,
Graphics::TextAlign align, ThemeEngine::TextInversionState inverted, int deltax, bool useEllipsis,
ThemeEngine::FontColor color) {
diff --git a/gui/widgets/list.h b/gui/widgets/list.h
index 6fa125b3aad..382ec395ee2 100644
--- a/gui/widgets/list.h
+++ b/gui/widgets/list.h
@@ -154,6 +154,7 @@ public:
static Common::U32String getThemeColor(ThemeEngine::FontColor color);
static ThemeEngine::FontColor getThemeColor(const Common::U32String &color);
static Common::U32String stripGUIformatting(const Common::U32String &str);
+ static Common::U32String escapeString(const Common::U32String &str);
protected:
void drawWidget() override;
More information about the Scummvm-git-logs
mailing list