diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c index 66985719e..3c0383020 100644 --- a/src/bin/e_fm.c +++ b/src/bin/e_fm.c @@ -7694,6 +7694,13 @@ _e_fm2_cb_icon_sort(const void *data1, const void *data2) return -1; } } + if (ic1->sd->config->list.sort.mtime) + { + if (ic1->info.statinfo.st_mtime > ic2->info.statinfo.st_mtime) + return -1; + if (ic1->info.statinfo.st_mtime < ic2->info.statinfo.st_mtime) + return 1; + } if (ic1->sd->config->list.sort.extension) { int cmp; @@ -8685,6 +8692,15 @@ _e_fm2_view_menu_sorting_change_size(void *data, E_Menu *m __UNUSED__, E_Menu_It _e_fm2_refresh(sd, NULL, NULL); } +static void +_e_fm2_view_menu_sorting_change_mtime(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) +{ + E_Fm2_Smart_Data *sd = data; + + sd->config->list.sort.mtime = mi->toggle; + _e_fm2_refresh(sd, NULL, NULL); +} + static void _e_fm2_view_menu_sorting_change_extension(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) { @@ -8735,6 +8751,12 @@ _e_fm2_view_menu_sorting_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) e_menu_item_toggle_set(mi, sd->config->list.sort.extension); e_menu_item_callback_set(mi, _e_fm2_view_menu_sorting_change_extension, sd); + mi = e_menu_item_new(subm); + e_menu_item_label_set(mi, _("Sort By Modification Time")); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, sd->config->list.sort.mtime); + e_menu_item_callback_set(mi, _e_fm2_view_menu_sorting_change_mtime, sd); + mi = e_menu_item_new(subm); e_menu_item_label_set(mi, _("Sort By Size")); e_menu_item_check_set(mi, 1); diff --git a/src/bin/e_fm.h b/src/bin/e_fm.h index f334c4060..b25028142 100644 --- a/src/bin/e_fm.h +++ b/src/bin/e_fm.h @@ -98,6 +98,7 @@ struct _E_Fm2_Config Eina_Bool no_case : 1; Eina_Bool size : 1; Eina_Bool extension : 1; + Eina_Bool mtime : 1; struct { Eina_Bool first : 1; diff --git a/src/modules/fileman/e_fwin.c b/src/modules/fileman/e_fwin.c index 0e6218e9e..ff695f0ca 100644 --- a/src/modules/fileman/e_fwin.c +++ b/src/modules/fileman/e_fwin.c @@ -1305,6 +1305,7 @@ _e_fwin_config_set(E_Fwin_Page *page) fmc.icon.extension.show = fileman_config->icon.extension.show; fmc.list.sort.no_case = fileman_config->list.sort.no_case; fmc.list.sort.extension = fileman_config->list.sort.extension; + fmc.list.sort.mtime = fileman_config->list.sort.mtime; fmc.list.sort.size = fileman_config->list.sort.size; fmc.list.sort.dirs.first = fileman_config->list.sort.dirs.first; fmc.list.sort.dirs.last = fileman_config->list.sort.dirs.last; diff --git a/src/modules/fileman/e_mod_config.c b/src/modules/fileman/e_mod_config.c index 87f8ddff7..8563d5d72 100644 --- a/src/modules/fileman/e_mod_config.c +++ b/src/modules/fileman/e_mod_config.c @@ -52,6 +52,7 @@ struct _E_Config_Dialog_Data { int case_sen; int extension; + int mtime; int size; struct { @@ -151,6 +152,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->list.sort.dirs.first = fileman_config->list.sort.dirs.first; cfdata->list.sort.case_sen = !(fileman_config->list.sort.no_case); cfdata->list.sort.extension = fileman_config->list.sort.extension; + cfdata->list.sort.mtime = fileman_config->list.sort.mtime; cfdata->list.sort.size = fileman_config->list.sort.size; cfdata->dbus.desktop = e_config->device_desktop; cfdata->dbus.auto_mount = e_config->device_auto_mount; @@ -193,6 +195,7 @@ _basic_apply(E_Config_Dialog *cfd __UNUSED__, fileman_config->list.sort.dirs.first = cfdata->list.sort.dirs.first; fileman_config->list.sort.dirs.last = !(cfdata->list.sort.dirs.first); fileman_config->list.sort.extension = cfdata->list.sort.extension; + fileman_config->list.sort.mtime = cfdata->list.sort.mtime; fileman_config->list.sort.size = cfdata->list.sort.size; fileman_config->list.sort.no_case = !(cfdata->list.sort.case_sen); @@ -233,6 +236,7 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, (fileman_config->list.sort.dirs.last != !(cfdata->list.sort.dirs.first)) || (fileman_config->list.sort.size != cfdata->list.sort.size) || (fileman_config->list.sort.extension != cfdata->list.sort.extension) || + (fileman_config->list.sort.mtime != cfdata->list.sort.mtime) || (fileman_config->list.sort.no_case != !(cfdata->list.sort.case_sen)) || (fileman_config->tooltip.delay != !(cfdata->tooltip.delay)) || (fileman_config->tooltip.size != !(cfdata->tooltip.size)) || @@ -325,6 +329,9 @@ _basic_create(E_Config_Dialog *cfd __UNUSED__, ob = e_widget_check_add(evas, _("Sort By Extension"), &(cfdata->list.sort.extension)); e_widget_list_object_append(o, ob, 1, 1, 0.5); + ob = e_widget_check_add(evas, _("Sort By Modification Time"), + &(cfdata->list.sort.mtime)); + e_widget_list_object_append(o, ob, 1, 1, 0.5); ob = e_widget_check_add(evas, _("Sort By Size"), &(cfdata->list.sort.size)); e_widget_list_object_append(o, ob, 1, 1, 0.5); diff --git a/src/modules/fileman/e_mod_main.c b/src/modules/fileman/e_mod_main.c index b609d6643..bf26b9f92 100644 --- a/src/modules/fileman/e_mod_main.c +++ b/src/modules/fileman/e_mod_main.c @@ -689,6 +689,7 @@ _e_mod_fileman_config_load(void) E_CONFIG_VAL(D, T, icon.extension.show, UCHAR); E_CONFIG_VAL(D, T, list.sort.no_case, UCHAR); E_CONFIG_VAL(D, T, list.sort.extension, UCHAR); + E_CONFIG_VAL(D, T, list.sort.mtime, UCHAR); E_CONFIG_VAL(D, T, list.sort.size, UCHAR); E_CONFIG_VAL(D, T, list.sort.dirs.first, UCHAR); E_CONFIG_VAL(D, T, list.sort.dirs.last, UCHAR); diff --git a/src/modules/fileman/e_mod_main.h b/src/modules/fileman/e_mod_main.h index 21da9174e..49d20867e 100644 --- a/src/modules/fileman/e_mod_main.h +++ b/src/modules/fileman/e_mod_main.h @@ -78,6 +78,7 @@ struct _Config unsigned char no_case; unsigned char extension; unsigned char size; + unsigned char mtime; struct { unsigned char first;