Allow re ordering the .order files.

SVN revision: 25329
This commit is contained in:
David Walter Seikel 2006-09-02 06:16:28 +00:00
parent c54cd3de17
commit 3e91158fc6
2 changed files with 215 additions and 20 deletions

View File

@ -23,14 +23,14 @@ static void *_create_data(E_Config_Dialog *cfd);
static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
static void _move_file_up_in_order(const char *order, const char *file);
static void _move_file_down_in_order(const char *order, const char *file);
struct _E_Config_Dialog_Data
{
E_Config_Dialog *cfd;
E_Fm2_Icon_Info *info;
int state;
E_App *parent;
E_App *parent_all;
struct {
Evas_Object *o_fm_all;
Evas_Object *o_fm;
@ -41,6 +41,8 @@ struct _E_Config_Dialog_Data
Evas_Object *o_delete_left_button;
Evas_Object *o_delete_right_button;
Evas_Object *o_regen_button;
Evas_Object *o_move_up_button;
Evas_Object *o_move_down_button;
} gui;
};
@ -99,7 +101,6 @@ _fill_data(E_Config_Dialog_Data *cfdata)
if (!homedir) return;
snprintf(path_all, sizeof(path_all), "%s/.e/e/applications/all", homedir);
cfdata->parent_all = e_app_new(path_all, 1);
return;
}
@ -142,21 +143,34 @@ _cb_files_changed(void *data, Evas_Object *obj, void *event_info)
if (!cfdata->gui.o_fm) return;
if (!e_fm2_has_parent_get(cfdata->gui.o_fm))
{
cfdata->parent = NULL;
if (cfdata->gui.o_up_button)
e_widget_disabled_set(cfdata->gui.o_up_button, 1);
if (cfdata->gui.o_move_up_button)
e_widget_disabled_set(cfdata->gui.o_move_up_button, 1);
if (cfdata->gui.o_move_down_button)
e_widget_disabled_set(cfdata->gui.o_move_down_button, 1);
}
else
{
const char *realpath;
char buf[4096];
realpath = e_fm2_real_path_get(cfdata->gui.o_fm_all);
realpath = e_fm2_real_path_get(cfdata->gui.o_fm);
snprintf(buf, sizeof(buf), "%s/.order", realpath);
if (ecore_file_exists(buf))
cfdata->parent = e_app_new(realpath, 1);
{
if (cfdata->gui.o_move_up_button)
e_widget_disabled_set(cfdata->gui.o_move_up_button, 0);
if (cfdata->gui.o_move_down_button)
e_widget_disabled_set(cfdata->gui.o_move_down_button, 0);
}
else
cfdata->parent = NULL;
{
if (cfdata->gui.o_move_up_button)
e_widget_disabled_set(cfdata->gui.o_move_up_button, 1);
if (cfdata->gui.o_move_down_button)
e_widget_disabled_set(cfdata->gui.o_move_down_button, 1);
}
if (cfdata->gui.o_up_button)
e_widget_disabled_set(cfdata->gui.o_up_button, 0);
}
@ -285,15 +299,53 @@ _cb_button_add(void *data1, void *data2)
e_app_append(a, parent);
}
snprintf(buf, sizeof(buf), "%s/.order", realpath);
if (ecore_file_exists(buf))
cfdata->parent = e_app_new(realpath, 1);
else
cfdata->parent = NULL;
e_fm2_refresh(cfdata->gui.o_fm);
}
static void
_cb_button_move_up(void *data1, void *data2)
{
E_Config_Dialog_Data *cfdata;
Evas_List *selected;
E_Fm2_Icon_Info *ici;
const char *realpath;
cfdata = data1;
if (!cfdata->gui.o_fm) return;
selected = e_fm2_selected_list_get(cfdata->gui.o_fm);
if (!selected) return;
ici = selected->data;
realpath = e_fm2_real_path_get(cfdata->gui.o_fm);
evas_list_free(selected);
_move_file_up_in_order(realpath, ici->file);
e_fm2_refresh(cfdata->gui.o_fm);
/* FIXME: This doesn't seem to work, maybe I need to call it in a callback after the refresh is done? */
e_fm2_select_set(cfdata->gui.o_fm, ici->file, 1);
}
static void
_cb_button_move_down(void *data1, void *data2)
{
E_Config_Dialog_Data *cfdata;
Evas_List *selected;
E_Fm2_Icon_Info *ici;
const char *realpath;
cfdata = data1;
if (!cfdata->gui.o_fm) return;
selected = e_fm2_selected_list_get(cfdata->gui.o_fm);
if (!selected) return;
ici = selected->data;
realpath = e_fm2_real_path_get(cfdata->gui.o_fm);
evas_list_free(selected);
_move_file_down_in_order(realpath, ici->file);
e_fm2_refresh(cfdata->gui.o_fm);
/* FIXME: This doesn't seem to work, maybe I need to call it in a callback after the refresh is done? */
e_fm2_select_set(cfdata->gui.o_fm, ici->file, 1);
}
static void
_cb_button_regen(void *data1, void *data2)
{
@ -377,6 +429,14 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
cfdata->gui.o_add_button = mt;
e_widget_framelist_object_append(of, mt);
if (!once)
{
mt = e_widget_button_add(evas, _("Regenerate \"All Applications\" Menu"), "enlightenment/e",
_cb_button_regen, cfdata, NULL);
cfdata->gui.o_regen_button = mt;
e_widget_framelist_object_append(of, mt);
}
e_widget_table_object_append(ot, of, 0, 0, 2, 4, 1, 1, 1, 1);
if (!once)
@ -423,10 +483,17 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_min_size_set(ob, 150, 220);
e_widget_framelist_object_append(of, ob);
mt = e_widget_button_add(evas, _("Regenerate \"All Applications\" Menu"), "enlightenment/e",
_cb_button_regen, cfdata, NULL);
cfdata->gui.o_regen_button = mt;
mt = e_widget_button_add(evas, _("Move application up"), "enlightenment/e",
_cb_button_move_up, cfdata, NULL);
cfdata->gui.o_move_up_button = mt;
e_widget_framelist_object_append(of, mt);
e_widget_disabled_set(cfdata->gui.o_move_up_button, 1);
mt = e_widget_button_add(evas, _("Move application down"), "enlightenment/e",
_cb_button_move_down, cfdata, NULL);
cfdata->gui.o_move_down_button = mt;
e_widget_framelist_object_append(of, mt);
e_widget_disabled_set(cfdata->gui.o_move_down_button, 1);
e_widget_table_object_append(ot, of, 2, 0, 2, 4, 1, 1, 1, 1);
}
@ -436,3 +503,132 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
return o;
}
static void
_move_file_up_in_order(const char *order, const char *file)
{
char buf[4096];
Evas_List *list = NULL, *l;
int ret = 0;
FILE *f;
snprintf(buf, sizeof(buf), "%s/.order", order);
if (!ecore_file_exists(buf)) return;
f = fopen(buf, "rb");
if (!f) return;
while (fgets(buf, sizeof(buf), f))
{
int len;
len = strlen(buf);
if (len > 0)
{
if (buf[len - 1] == '\n')
{
buf[len - 1] = 0;
len--;
}
if (strcmp(buf, file) != 0)
list = evas_list_append(list, strdup(buf));
else
{
l = evas_list_last(list);
if (l)
list = evas_list_prepend_relative_list(list, strdup(buf), l);
else
list = evas_list_append(list, strdup(buf));
}
}
}
fclose(f);
snprintf(buf, sizeof(buf), "%s/.order", order);
ecore_file_unlink(buf);
f = fopen(buf, "wb");
if (!f) return;
for (l = list; l; l = l->next)
{
char *text;
text = l->data;
fprintf(f, "%s\n", text);
free(text);
}
fclose(f);
evas_list_free(list);
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", order);
ecore_file_unlink(buf);
return;
}
static void
_move_file_down_in_order(const char *order, const char *file)
{
char buf[4096], *last;
Evas_List *list = NULL, *l;
int ret = 0;
FILE *f;
snprintf(buf, sizeof(buf), "%s/.order", order);
if (!ecore_file_exists(buf)) return;
f = fopen(buf, "rb");
if (!f) return;
last = NULL;
while (fgets(buf, sizeof(buf), f))
{
int len;
len = strlen(buf);
if (len > 0)
{
if (buf[len - 1] == '\n')
{
buf[len - 1] = 0;
len--;
}
if (strcmp(buf, file) != 0)
{
list = evas_list_append(list, strdup(buf));
if (last)
{
list = evas_list_append(list, last);
last = NULL;
}
}
else
{
last = strdup(buf);
}
}
}
if (last)
{
list = evas_list_append(list, last);
last = NULL;
}
fclose(f);
snprintf(buf, sizeof(buf), "%s/.order", order);
ecore_file_unlink(buf);
f = fopen(buf, "wb");
if (!f) return;
for (l = list; l; l = l->next)
{
char *text;
text = l->data;
fprintf(f, "%s\n", text);
free(text);
}
fclose(f);
evas_list_free(list);
snprintf(buf, sizeof(buf), "%s/.eap.cache.cfg", order);
ecore_file_unlink(buf);
return;
}

View File

@ -888,10 +888,9 @@ _e_main_dirs_init(void)
e_fdo_menu_to_order();
}
/* FIXME: Add another temporary hack to keep the users happy.
* Move ~/.e/e/applications/all/*.eap to ~/.e/e/icons/*.edje
* Read the non .edje info from them and construct a matching ~/.e/e/applications/all/*.desktop
* Add an icon path to these .desktop files that points to the ~/.e/e/icons/*.edje files.
* Add ~/.e/e/icons/ to the top of the icon search path.
* Move ~/.e/e/applications/all/*.eap to ~/.e/e/icons/*.edj
* Read the non .edj info from them and construct a matching ~/.e/e/applications/all/*.desktop
* Add an icon path to these .desktop files that points to the ~/.e/e/icons/*.edj files.
*/
/* FIXME: THIS is to get people started - shoudl be in a wizard */
snprintf(buf, sizeof(buf), "%s/.e/e/fileman/favorites", homedir);