From 3dd2aaba8cf0ace3925a11aea4026313ecabdd17 Mon Sep 17 00:00:00 2001 From: Gabriele Barbero Date: Mon, 23 Jun 2025 18:49:25 +0200 Subject: [PATCH] dialogs: respect time/date system format on macOS When the time or date format is changed from macOS system settings, these changes do not affect the locale but the user preferences. This commit ensures that the date and time are retrieved directly from those settings, respecting the selected format. --- app/dialogs/about-dialog.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/app/dialogs/about-dialog.c b/app/dialogs/about-dialog.c index 612e689b28..da6215e1b1 100644 --- a/app/dialogs/about-dialog.c +++ b/app/dialogs/about-dialog.c @@ -22,6 +22,10 @@ #include #include +#ifdef PLATFORM_OSX +#include +#endif /* PLATFORM_OSX */ + #include "libgimpbase/gimpbase.h" #include "libgimpmath/gimpmath.h" #include "libgimpwidgets/gimpwidgets.h" @@ -508,9 +512,39 @@ about_dialog_add_update (GimpAboutDialog *dialog, gchar *time; datetime = g_date_time_new_from_unix_local (config->check_update_timestamp); +#if defined(PLATFORM_OSX) + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + NSDate *current_date = [NSDate date]; + NSString *formatted_date; + NSString *formatted_time; + + formatter.locale = [NSLocale currentLocale]; + + formatter.dateStyle = NSDateFormatterShortStyle; + formatter.timeStyle = NSDateFormatterNoStyle; + formatted_date = [formatter stringFromDate:current_date]; + + formatter.dateStyle = NSDateFormatterNoStyle; + formatter.timeStyle = NSDateFormatterMediumStyle; + formatted_time = [formatter stringFromDate:current_date]; + + if (formatted_date) + date = g_strdup ([formatted_date UTF8String]); + else + date = g_date_time_format (datetime, "%x"); + + if (formatted_time) + time = g_strdup ([formatted_time UTF8String]); + else + time = g_date_time_format (datetime, "%X"); + + [formatter release]; + [pool drain]; +#else date = g_date_time_format (datetime, "%x"); time = g_date_time_format (datetime, "%X"); - +#endif if (config->last_known_release != NULL) /* Translators: first string is the date in the locale's date * representation (e.g., 12/31/99), second is the time in the