From 1fca248c55a30f6a6aa7fb80d954bdf7052d192a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 4 Sep 2012 10:47:39 +0000 Subject: [PATCH] another user request: sorting by size in efm SVN revision: 76124 --- src/bin/e_fm.c | 30 ++++++++++++++++++++++++++++++ src/bin/e_fm.h | 1 + src/modules/fileman/e_fwin.c | 1 + src/modules/fileman/e_mod_config.c | 7 +++++++ src/modules/fileman/e_mod_main.c | 1 + src/modules/fileman/e_mod_main.h | 3 ++- 6 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c index a54d95cda..66985719e 100644 --- a/src/bin/e_fm.c +++ b/src/bin/e_fm.c @@ -7710,6 +7710,21 @@ _e_fm2_cb_icon_sort(const void *data1, const void *data2) else if (f1) return 1; else if (f2) return -1; } + if (ic1->sd->config->list.sort.size) + { + if (ic1->info.link) + { + if (!ic2->info.link) return 1; + } + else + { + if (ic2->info.link) return -1; + if (ic1->info.statinfo.st_size > ic2->info.statinfo.st_size) + return -1; + else if (ic1->info.statinfo.st_size < ic2->info.statinfo.st_size) + return 1; + } + } if (ic1->sd->config->list.sort.no_case) return strcasecmp(l1, l2); return strcmp(l1, l2); @@ -8661,6 +8676,15 @@ _e_fm2_view_menu_sorting_change_case(void *data, E_Menu *m __UNUSED__, E_Menu_It _e_fm2_refresh(sd, NULL, NULL); } +static void +_e_fm2_view_menu_sorting_change_size(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) +{ + E_Fm2_Smart_Data *sd = data; + + sd->config->list.sort.size = 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) { @@ -8711,6 +8735,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 Size")); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, sd->config->list.sort.size); + e_menu_item_callback_set(mi, _e_fm2_view_menu_sorting_change_size, sd); + mi = e_menu_item_new(subm); e_menu_item_separator_set(mi, 1); diff --git a/src/bin/e_fm.h b/src/bin/e_fm.h index 9b228c4f1..f334c4060 100644 --- a/src/bin/e_fm.h +++ b/src/bin/e_fm.h @@ -96,6 +96,7 @@ struct _E_Fm2_Config struct { Eina_Bool no_case : 1; + Eina_Bool size : 1; Eina_Bool extension : 1; struct { diff --git a/src/modules/fileman/e_fwin.c b/src/modules/fileman/e_fwin.c index f9aecce59..0e6218e9e 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.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; fmc.selection.single = fileman_config->selection.single; diff --git a/src/modules/fileman/e_mod_config.c b/src/modules/fileman/e_mod_config.c index c842c09ef..87f8ddff7 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 size; struct { int first, last; @@ -150,6 +151,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.size = fileman_config->list.sort.size; cfdata->dbus.desktop = e_config->device_desktop; cfdata->dbus.auto_mount = e_config->device_auto_mount; cfdata->dbus.auto_open = e_config->device_auto_open; @@ -191,6 +193,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.size = cfdata->list.sort.size; fileman_config->list.sort.no_case = !(cfdata->list.sort.case_sen); e_config->device_desktop = cfdata->dbus.desktop; @@ -228,6 +231,7 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, (fileman_config->icon.icon.h != cfdata->icon.icon.w) || (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.size != cfdata->list.sort.size) || (fileman_config->list.sort.extension != cfdata->list.sort.extension) || (fileman_config->list.sort.no_case != !(cfdata->list.sort.case_sen)) || (fileman_config->tooltip.delay != !(cfdata->tooltip.delay)) || @@ -321,6 +325,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 Size"), + &(cfdata->list.sort.size)); + e_widget_list_object_append(o, ob, 1, 1, 0.5); ob = e_widget_check_add(evas, _("Use Single Click"), &(cfdata->view.single_click)); 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 77fb0518a..b609d6643 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.size, UCHAR); E_CONFIG_VAL(D, T, list.sort.dirs.first, UCHAR); E_CONFIG_VAL(D, T, list.sort.dirs.last, UCHAR); E_CONFIG_VAL(D, T, selection.single, UCHAR); diff --git a/src/modules/fileman/e_mod_main.h b/src/modules/fileman/e_mod_main.h index 053cd617f..21da9174e 100644 --- a/src/modules/fileman/e_mod_main.h +++ b/src/modules/fileman/e_mod_main.h @@ -4,7 +4,7 @@ /* Increment for Major Changes */ #define MOD_CONFIG_FILE_EPOCH 0x0001 /* Increment for Minor Changes (ie: user doesn't need a new config) */ -#define MOD_CONFIG_FILE_GENERATION 0x0110 +#define MOD_CONFIG_FILE_GENERATION 0x0111 #define MOD_CONFIG_FILE_VERSION ((MOD_CONFIG_FILE_EPOCH << 16) | MOD_CONFIG_FILE_GENERATION) typedef struct _Config Config; @@ -77,6 +77,7 @@ struct _Config { unsigned char no_case; unsigned char extension; + unsigned char size; struct { unsigned char first;