Work around Spidermonkey problem with Unicode date formats
Monkey-patch Date.prototype.toLocaleFormat() with a version that uses g_date_time_format() since the Spidermonkey built-in can't handle format strings with Unicode characters. https://bugzilla.gnome.org/show_bug.cgi?id=643350
This commit is contained in:
parent
4b2d6f8a99
commit
7ad89dc46b
@ -64,6 +64,11 @@ function init() {
|
|||||||
Tweener.init();
|
Tweener.init();
|
||||||
String.prototype.format = Format.format;
|
String.prototype.format = Format.format;
|
||||||
|
|
||||||
|
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||||
|
Date.prototype.toLocaleFormat = function(format) {
|
||||||
|
return Shell.util_format_date(format, this.getTime());
|
||||||
|
};
|
||||||
|
|
||||||
// Set the default direction for St widgets (this needs to be done before any use of St)
|
// Set the default direction for St widgets (this needs to be done before any use of St)
|
||||||
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
|
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
|
||||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||||
|
@ -439,3 +439,42 @@ shell_util_set_hidden_from_pick (ClutterActor *actor,
|
|||||||
g_object_set_data (G_OBJECT (actor), "shell-stop-pick", NULL);
|
g_object_set_data (G_OBJECT (actor), "shell-stop-pick", NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_util_format_date:
|
||||||
|
* @format: a strftime-style string format, as parsed by
|
||||||
|
* g_date_time_format()
|
||||||
|
* @time_ms: milliseconds since 1970-01-01 00:00:00 UTC; the
|
||||||
|
* value returned by Date.getTime()
|
||||||
|
*
|
||||||
|
* Formats a date for the current locale. This should be
|
||||||
|
* used instead of the Spidermonkey Date.toLocaleFormat()
|
||||||
|
* extension because Date.toLocaleFormat() is buggy for
|
||||||
|
* Unicode format strings:
|
||||||
|
* https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||||
|
*
|
||||||
|
* Return value: the formatted date. If the date is
|
||||||
|
* outside of the range of a GDateTime (which contains
|
||||||
|
* any plausible dates we actually care about), will
|
||||||
|
* return an empty string.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
shell_util_format_date (const char *format,
|
||||||
|
gint64 time_ms)
|
||||||
|
{
|
||||||
|
GDateTime *datetime;
|
||||||
|
GTimeVal tv;
|
||||||
|
char *result;
|
||||||
|
|
||||||
|
tv.tv_sec = time_ms / 1000;
|
||||||
|
tv.tv_usec = (time_ms % 1000) * 1000;
|
||||||
|
|
||||||
|
datetime = g_date_time_new_from_timeval_local (&tv);
|
||||||
|
if (!datetime) /* time_ms is out of range of GDateTime */
|
||||||
|
return g_strdup ("");
|
||||||
|
|
||||||
|
result = g_date_time_format (datetime, format);
|
||||||
|
|
||||||
|
g_date_time_unref (datetime);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@ -13,6 +13,9 @@ GIcon *shell_util_get_icon_for_uri (const char *text_uri);
|
|||||||
GIcon *shell_util_icon_from_string (const char *string, GError **error);
|
GIcon *shell_util_icon_from_string (const char *string, GError **error);
|
||||||
void shell_util_set_hidden_from_pick (ClutterActor *actor, gboolean hidden);
|
void shell_util_set_hidden_from_pick (ClutterActor *actor, gboolean hidden);
|
||||||
|
|
||||||
|
char *shell_util_format_date (const char *format,
|
||||||
|
gint64 time_ms);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_UTIL_H__ */
|
#endif /* __SHELL_UTIL_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user