utils: better search for the first week day
We were relying on _NL_TIME_FIRST_WEEKDAY, which is a glibc extension. It doesn't work with non-glibc systems, such as FreeBSD. This commit makes it carefully search for the first weekday. Fixes bug #743327.
This commit is contained in:
+48
-4
@@ -398,15 +398,59 @@ get_uuid_from_component (ESource *source,
|
|||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get_first_weekday:
|
||||||
|
*
|
||||||
|
* Copied from Clocks, which by itself is
|
||||||
|
* copied from GtkCalendar.
|
||||||
|
*
|
||||||
|
* Returns: the first weekday, from 0 to 6
|
||||||
|
*/
|
||||||
gint
|
gint
|
||||||
get_first_weekday (void)
|
get_first_weekday (void)
|
||||||
{
|
{
|
||||||
const char *const s = nl_langinfo(_NL_TIME_FIRST_WEEKDAY);
|
int week_start;
|
||||||
|
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY
|
||||||
|
union { unsigned int word; char *string; } langinfo;
|
||||||
|
int week_1stday = 0;
|
||||||
|
int first_weekday = 1;
|
||||||
|
guint week_origin;
|
||||||
|
#else
|
||||||
|
char *gtk_week_start;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (s && *s >= 1 && *s <= 7)
|
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY
|
||||||
return ((int)*s) - 1;
|
langinfo.string = nl_langinfo (_NL_TIME_FIRST_WEEKDAY);
|
||||||
|
first_weekday = langinfo.string[0];
|
||||||
|
langinfo.string = nl_langinfo (_NL_TIME_WEEK_1STDAY);
|
||||||
|
week_origin = langinfo.word;
|
||||||
|
if (week_origin == 19971130) /* Sunday */
|
||||||
|
week_1stday = 0;
|
||||||
|
else if (week_origin == 19971201) /* Monday */
|
||||||
|
week_1stday = 1;
|
||||||
|
else
|
||||||
|
g_warning ("Unknown value of _NL_TIME_WEEK_1STDAY.\n");
|
||||||
|
|
||||||
return 0;
|
week_start = (week_1stday + first_weekday - 1) % 7;
|
||||||
|
#else
|
||||||
|
/* Use a define to hide the string from xgettext */
|
||||||
|
# define GTK_WEEK_START "calendar:week_start:0"
|
||||||
|
gtk_week_start = dgettext ("gtk30", GTK_WEEK_START);
|
||||||
|
|
||||||
|
if (strncmp (gtk_week_start, "calendar:week_start:", 20) == 0)
|
||||||
|
week_start = *(gtk_week_start + 20) - '0';
|
||||||
|
else
|
||||||
|
week_start = -1;
|
||||||
|
|
||||||
|
if (week_start < 0 || week_start > 6)
|
||||||
|
{
|
||||||
|
g_warning ("Whoever translated calendar:week_start:0 for GTK+ "
|
||||||
|
"did so wrongly.\n");
|
||||||
|
week_start = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return week_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user