diff --git a/data/schemas/io.elementary.files.gschema.xml b/data/schemas/io.elementary.files.gschema.xml
index 2ee79022a3..e400caabdc 100644
--- a/data/schemas/io.elementary.files.gschema.xml
+++ b/data/schemas/io.elementary.files.gschema.xml
@@ -20,6 +20,7 @@
+
diff --git a/libcore/Enums.vala b/libcore/Enums.vala
index 9fb2405063..abe3dc845e 100644
--- a/libcore/Enums.vala
+++ b/libcore/Enums.vala
@@ -253,4 +253,45 @@ namespace Files {
}
}
}
+
+ // Matches settings enum for format of datetimes in view
+ public enum DateFormatMode {
+ ISO,
+ LOCALE,
+ INFORMAL,
+ COMPACT,
+ INVALID;
+
+ public string to_string () {
+ switch (this) {
+ case ISO:
+ ///TRANSLATORS "ISO" is the acronym for "International Standards Organisation"
+ return _("ISO");
+ case LOCALE:
+ return _("Locale");
+ case INFORMAL:
+ return _("Informal");
+ case COMPACT:
+ return _("Compact");
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ public static DateFormatMode from_string (string format) {
+ var fmt = format.down ();
+ switch (fmt) {
+ case "iso":
+ ///TRANSLATORS "ISO" is the acronym for "International Standards Organisation"
+ return ISO;
+ case "locale":
+ return LOCALE;
+ case "informal":
+ return INFORMAL;
+ default:
+ assert_not_reached ();
+ }
+ }
+ }
+
}
diff --git a/libcore/FileUtils.vala b/libcore/FileUtils.vala
index a42562bf60..7e4d44d0d6 100644
--- a/libcore/FileUtils.vala
+++ b/libcore/FileUtils.vala
@@ -631,11 +631,14 @@ namespace Files.FileUtils {
return "";
}
- switch (Files.Preferences.get_default ().date_format.down ()) {
- case "locale":
+ switch (Files.Preferences.get_default ().date_format) {
+ case DateFormatMode.LOCALE:
return dt.format ("%c");
- case "iso" :
+ case DateFormatMode.ISO :
return dt.format ("%Y-%m-%d %H:%M:%S");
+ case DateFormatMode.COMPACT :
+ var locale_format_string = Posix.nl_langinfo (D_FMT);
+ return dt.format (string.join (" ", locale_format_string.down (), "%H:%M"));
default:
return get_informal_date_time (dt);
}
diff --git a/libcore/Preferences.vala b/libcore/Preferences.vala
index 0bff19b3b9..0f8f8352b4 100644
--- a/libcore/Preferences.vala
+++ b/libcore/Preferences.vala
@@ -34,7 +34,7 @@ namespace Files {
public bool sort_directories_first { get; set; default = true; }
public bool remember_history { get; set; default = true; }
- public string date_format {set; get; default = "iso";}
+ public DateFormatMode date_format {set; get; default = DateFormatMode.ISO;}
public string clock_format {set; get; default = "24h";}
public static Preferences get_default () {
diff --git a/src/View/AbstractDirectoryView.vala b/src/View/AbstractDirectoryView.vala
index b6e6529bb8..e2f231ff3c 100644
--- a/src/View/AbstractDirectoryView.vala
+++ b/src/View/AbstractDirectoryView.vala
@@ -409,6 +409,7 @@ namespace Files {
prefs.notify["show-remote-thumbnails"].connect (on_show_thumbnails_changed);
prefs.notify["show-local-thumbnails"].connect (on_show_thumbnails_changed);
prefs.notify["sort-directories-first"].connect (on_sort_directories_first_changed);
+ prefs.notify["date-format"].connect (on_dateformat_changed);
prefs.bind_property (
"singleclick-select", this, "singleclick_select", BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE
);
@@ -1455,6 +1456,10 @@ namespace Files {
dir.load_hiddens ();
}
+ private void on_dateformat_changed () {
+ slot.reload ();
+ }
+
/** Handle popup menu events */
private bool on_popup_menu () {
Gdk.Event event = Gtk.get_current_event ();
diff --git a/src/View/Widgets/AppMenu.vala b/src/View/Widgets/AppMenu.vala
index 86d0244374..009773af6c 100644
--- a/src/View/Widgets/AppMenu.vala
+++ b/src/View/Widgets/AppMenu.vala
@@ -9,6 +9,7 @@ public class Files.AppMenu : Gtk.Popover {
private Gtk.Button zoom_default_button;
private Gtk.Button zoom_in_button;
private Gtk.Button zoom_out_button;
+ private Gtk.ComboBoxText datetimeformat_combo;
private string[] redo_accels;
private string[] undo_accels;
private unowned UndoManager undo_manager;
@@ -112,6 +113,22 @@ public class Files.AppMenu : Gtk.Popover {
};
show_remote_thumbnails.get_style_context ().add_class (Gtk.STYLE_CLASS_MENUITEM);
+ ///TRANSLATORS The format of the date (possibly with time) shown in the Modified column of the file view
+ var datetimeformat_label = new Gtk.Label (_("Date & Time Format"));
+ datetimeformat_combo = new Gtk.ComboBoxText ();
+ for (uint dfm = 0; dfm < DateFormatMode.INVALID; dfm++) {
+ datetimeformat_combo.append_text (((DateFormatMode) dfm).to_string ());
+ }
+
+ //TODO Add a custom format wizard? Or a detailed informat format? Or "days ago" format?
+ datetimeformat_combo.active = (int) Files.Preferences.get_default ().date_format;
+
+ var datetimeformat_box = new Gtk.Box (HORIZONTAL, 6);
+ datetimeformat_box.add (datetimeformat_label);
+ datetimeformat_box.add (datetimeformat_combo);
+
+ datetimeformat_box.get_style_context ().add_class ("menuitem");
+
var menu_box = new Gtk.Box (VERTICAL, 0) {
margin_bottom = 6
};
@@ -126,6 +143,8 @@ public class Files.AppMenu : Gtk.Popover {
menu_box.add (show_hidden_button);
menu_box.add (show_local_thumbnails);
menu_box.add (show_remote_thumbnails);
+ menu_box.add (new Gtk.Separator (HORIZONTAL) { margin_top = 3, margin_bottom = 3 });
+ menu_box.add (datetimeformat_box);
menu_box.show_all ();
child = menu_box;
@@ -139,6 +158,11 @@ public class Files.AppMenu : Gtk.Popover {
Files.icon_view_settings.changed["zoom-level"].connect (on_zoom_setting_changed);
Files.list_view_settings.changed["zoom-level"].connect (on_zoom_setting_changed);
Files.column_view_settings.changed["zoom-level"].connect (on_zoom_setting_changed);
+ app_settings.changed["date-format"].connect (on_dateformat_setting_changed);
+
+ datetimeformat_combo.changed.connect (() => {
+ app_settings.set_enum ("date-format", datetimeformat_combo.active);
+ });
}
private void set_undo_redo_tooltips () {
@@ -177,4 +201,8 @@ public class Files.AppMenu : Gtk.Popover {
zoom_in_button.sensitive = zoom_level < max_zoom;
zoom_out_button.sensitive = zoom_level > min_zoom;
}
+
+ private void on_dateformat_setting_changed (Settings settings, string key) {
+ datetimeformat_combo.active = settings.get_enum (key);
+ }
}