Tracker: search for the localized decimal separator

Now that string_for_size return localized numbers, we can't assume the
decimal separator is a dot.

Fixes: #18900
Change-Id: I872d75b0e9e4eb5d085e04bfd4e8c26101a5b1b3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7671
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
Máximo Castañeda
2024-05-17 07:24:37 +00:00
committed by Adrien Destugues
parent c110a061f1
commit 446ff222af
+7 -9
View File
@@ -50,6 +50,7 @@ All rights reserved.
#include <Debug.h>
#include <Locale.h>
#include <NodeInfo.h>
#include <NumberFormat.h>
#include <Path.h>
#include <StringFormat.h>
#include <StringForSize.h>
@@ -102,15 +103,12 @@ TruncFileSizeBase(BString* outString, int64 value, const View* view,
} else {
// strip off an insignificant zero so we don't get readings
// such as 1.00
char* period = 0;
for (char* tmp = const_cast<char*>(buffer.String()); *tmp != '\0'; tmp++) {
if (*tmp == '.')
period = tmp;
}
if (period && period[1] && period[2] == '0') {
// move the rest of the string over the insignificant zero
for (char* tmp = &period[2]; *tmp; tmp++)
*tmp = tmp[1];
BNumberFormat numberFormat;
BString separator(numberFormat.GetSeparator(B_DECIMAL_SEPARATOR));
if (!separator.IsEmpty()) {
int32 position = buffer.FindFirst(separator);
if (position != B_ERROR && buffer.ByteAt(position + 2) == '0')
buffer.Remove(position + 2, 1);
}
float resultWidth = view->StringWidth(buffer);
if (resultWidth <= width) {