forked from enlightenment/enlightenment
'everything' module:
- added edit/new application entry actions - cleaned up action-selector plugin SVN revision: 41349
This commit is contained in:
parent
d5ca129dfc
commit
ff06789039
|
@ -42,6 +42,8 @@ struct _Config
|
||||||
|
|
||||||
int auto_select_first;
|
int auto_select_first;
|
||||||
|
|
||||||
|
Eina_Hash *key_bindings;
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
Eina_List *plugins;
|
Eina_List *plugins;
|
||||||
|
|
||||||
|
@ -141,9 +143,11 @@ struct _Evry_Action
|
||||||
Evry_Item *thing1;
|
Evry_Item *thing1;
|
||||||
Evry_Item *thing2;
|
Evry_Item *thing2;
|
||||||
|
|
||||||
int (*action) (void);
|
int (*action) (Evry_Action *act);
|
||||||
|
|
||||||
void (*icon_get) (Evry_Plugin *p, Evry_Item *it, Evas *e);
|
int (*check_item) (Evry_Action *act, Evry_Item *it);
|
||||||
|
|
||||||
|
void (*icon_get) (Evry_Action *act, Evry_Item *it, Evas *e);
|
||||||
|
|
||||||
void *priv;
|
void *priv;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ static void _evry_plugin_selector_show(Evry_Plugin *p);
|
||||||
static int _evry_cb_plugin_sort(const void *data1, const void *data2);
|
static int _evry_cb_plugin_sort(const void *data1, const void *data2);
|
||||||
|
|
||||||
static int _evry_plug_act_select_init(void);
|
static int _evry_plug_act_select_init(void);
|
||||||
static int _evry_plug_act_select_actions_set(void);
|
static int _evry_plug_act_select_begin(Evry_Plugin *p, Evry_Item *it);
|
||||||
static int _evry_plug_act_select_fetch(Evry_Plugin *p, const char *input);
|
static int _evry_plug_act_select_fetch(Evry_Plugin *p, const char *input);
|
||||||
static int _evry_plug_act_select_action(Evry_Plugin *p, Evry_Item *item, const char *input);
|
static int _evry_plug_act_select_action(Evry_Plugin *p, Evry_Item *item, const char *input);
|
||||||
static void _evry_plug_act_select_cleanup(Evry_Plugin *p);
|
static void _evry_plug_act_select_cleanup(Evry_Plugin *p);
|
||||||
|
@ -433,7 +433,7 @@ _evry_push_state(void)
|
||||||
{
|
{
|
||||||
if (!p->config->enabled) continue;
|
if (!p->config->enabled) continue;
|
||||||
|
|
||||||
if (strstr(p->type_in, cur_type))
|
if (strstr(p->type_in, cur_type) || p == action_selector)
|
||||||
{
|
{
|
||||||
/* printf("%s- in:%s out:%s\n", p->name, p->type_in, p->type_out); */
|
/* printf("%s- in:%s out:%s\n", p->name, p->type_in, p->type_out); */
|
||||||
|
|
||||||
|
@ -460,18 +460,8 @@ _evry_push_state(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s && !s->cur_action)
|
|
||||||
{
|
|
||||||
if (_evry_plug_act_select_actions_set())
|
|
||||||
{
|
|
||||||
list = eina_list_append(list, action_selector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!list) return 0;
|
if (!list) return 0;
|
||||||
|
|
||||||
/* list = eina_list_sort(list, eina_list_count(list), _evry_cb_plugin_sort); */
|
|
||||||
|
|
||||||
_evry_list_clear();
|
_evry_list_clear();
|
||||||
|
|
||||||
s = E_NEW(Evry_State, 1);
|
s = E_NEW(Evry_State, 1);
|
||||||
|
@ -486,6 +476,7 @@ _evry_push_state(void)
|
||||||
{
|
{
|
||||||
s->request_type = cur_state->request_type;
|
s->request_type = cur_state->request_type;
|
||||||
s->cur_action = cur_state->cur_action;
|
s->cur_action = cur_state->cur_action;
|
||||||
|
s->cur_actions = cur_state->cur_actions;
|
||||||
s->initial = 0;
|
s->initial = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -868,9 +859,8 @@ _evry_plugin_action(int finished)
|
||||||
if (s->cur_plugin == action_selector)
|
if (s->cur_plugin == action_selector)
|
||||||
{
|
{
|
||||||
/* set cur_action and start plugins for second parameter (if required)*/
|
/* set cur_action and start plugins for second parameter (if required)*/
|
||||||
if (s->sel_item) _evry_plug_act_select_action(s->cur_plugin, s->sel_item, s->input);
|
if (s->sel_item)
|
||||||
|
finished = _evry_plug_act_select_action(s->cur_plugin, s->sel_item, s->input);
|
||||||
finished = 0;
|
|
||||||
}
|
}
|
||||||
else if (s->cur_action)
|
else if (s->cur_action)
|
||||||
{
|
{
|
||||||
|
@ -878,7 +868,7 @@ _evry_plugin_action(int finished)
|
||||||
if (s->sel_item && (!strcmp(s->cur_plugin->type_out, s->request_type)))
|
if (s->sel_item && (!strcmp(s->cur_plugin->type_out, s->request_type)))
|
||||||
{
|
{
|
||||||
s->cur_action->thing2 = s->sel_item;
|
s->cur_action->thing2 = s->sel_item;
|
||||||
s->cur_action->action();
|
s->cur_action->action(s->cur_action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (s->cur_plugin && (s->sel_item || s->input))
|
else if (s->cur_plugin && (s->sel_item || s->input))
|
||||||
|
@ -1036,14 +1026,13 @@ _evry_matches_update(Evry_Plugin *cur_plugin)
|
||||||
/* remove tabs for not active plugins */
|
/* remove tabs for not active plugins */
|
||||||
EINA_LIST_FOREACH(evry_conf->plugins, l, p)
|
EINA_LIST_FOREACH(evry_conf->plugins, l, p)
|
||||||
{
|
{
|
||||||
if (!p->config->enabled) continue;
|
|
||||||
|
|
||||||
if (p->tab && !eina_list_data_find(s->cur_plugins, p))
|
if (p->tab && !eina_list_data_find(s->cur_plugins, p))
|
||||||
{
|
{
|
||||||
evas_object_del(p->tab);
|
evas_object_del(p->tab);
|
||||||
p->tab = NULL;
|
p->tab = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show/update tabs of active plugins */
|
/* show/update tabs of active plugins */
|
||||||
EINA_LIST_FOREACH(s->cur_plugins, l, p)
|
EINA_LIST_FOREACH(s->cur_plugins, l, p)
|
||||||
_evry_plugin_selector_show(p);
|
_evry_plugin_selector_show(p);
|
||||||
|
@ -1100,7 +1089,7 @@ _evry_scroll_to(int i)
|
||||||
{
|
{
|
||||||
scroll_align_to = (double)i / (double)(n - 1);
|
scroll_align_to = (double)i / (double)(n - 1);
|
||||||
if (evry_conf->scroll_animate)
|
if (evry_conf->scroll_animate)
|
||||||
{
|
{
|
||||||
if (!scroll_timer)
|
if (!scroll_timer)
|
||||||
scroll_timer = ecore_timer_add(0.01, _evry_scroll_timer, NULL);
|
scroll_timer = ecore_timer_add(0.01, _evry_scroll_timer, NULL);
|
||||||
if (!scroll_animator)
|
if (!scroll_animator)
|
||||||
|
@ -1377,35 +1366,50 @@ _evry_plugin_selector_show(Evry_Plugin *p)
|
||||||
p->tab = o;
|
p->tab = o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* action selector plugin: provides list of actions registered for
|
||||||
|
candidate types provided by current plugin */
|
||||||
static int
|
static int
|
||||||
_evry_plug_act_select_init(void)
|
_evry_plug_act_select_init(void)
|
||||||
{
|
{
|
||||||
|
Plugin_Config *pc;
|
||||||
Evry_Plugin *p = E_NEW(Evry_Plugin, 1);
|
Evry_Plugin *p = E_NEW(Evry_Plugin, 1);
|
||||||
p->name = "Select Action";
|
p->name = "Select Action";
|
||||||
p->type_in = "ANY";
|
p->type_in = "ANY";
|
||||||
p->type_out = "NONE";
|
p->type_out = "NONE";
|
||||||
|
p->begin = &_evry_plug_act_select_begin;
|
||||||
p->cleanup = &_evry_plug_act_select_cleanup;
|
p->cleanup = &_evry_plug_act_select_cleanup;
|
||||||
p->fetch = &_evry_plug_act_select_fetch;
|
p->fetch = &_evry_plug_act_select_fetch;
|
||||||
p->action = &_evry_plug_act_select_action;
|
p->action = &_evry_plug_act_select_action;
|
||||||
p->icon_get = &_evry_plug_act_select_item_icon_get;
|
p->icon_get = &_evry_plug_act_select_item_icon_get;
|
||||||
|
|
||||||
|
pc = E_NEW(Plugin_Config, 1);
|
||||||
|
pc->name = eina_stringshare_add(p->name);
|
||||||
|
pc->enabled = 1;
|
||||||
|
pc->priority = 100;
|
||||||
|
p->config = pc;
|
||||||
|
|
||||||
|
evry_conf->plugins = eina_list_append(evry_conf->plugins, p);
|
||||||
action_selector = p;
|
action_selector = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_evry_plug_act_select_actions_set(void)
|
_evry_plug_act_select_begin(Evry_Plugin *p, Evry_Item *it)
|
||||||
{
|
{
|
||||||
Evry_Action *act;
|
Evry_Action *act;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Evry_State *s = cur_state;
|
Evry_State *s = cur_state;
|
||||||
Evry_Plugin *p = action_selector;
|
|
||||||
|
|
||||||
_evry_plug_act_select_cleanup(p);
|
_evry_plug_act_select_cleanup(p);
|
||||||
|
|
||||||
|
if (!s || !s->cur_plugin || s->cur_action) return 0;
|
||||||
|
|
||||||
const char *type = s->cur_plugin->type_out;
|
const char *type = s->cur_plugin->type_out;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(actions, l, act)
|
EINA_LIST_FOREACH(actions, l, act)
|
||||||
{
|
{
|
||||||
if (strstr(act->type_in1, type))
|
if ((strstr(act->type_in1, type)) &&
|
||||||
|
(!act->check_item || act->check_item(act, s->sel_item)))
|
||||||
{
|
{
|
||||||
act->thing1 = s->sel_item;
|
act->thing1 = s->sel_item;
|
||||||
s->cur_actions = eina_list_append(s->cur_actions, act);
|
s->cur_actions = eina_list_append(s->cur_actions, act);
|
||||||
|
@ -1422,10 +1426,11 @@ _evry_plug_act_select_fetch(Evry_Plugin *p, const char *input)
|
||||||
{
|
{
|
||||||
Evry_Action *act;
|
Evry_Action *act;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
Evry_State *s = cur_state;
|
||||||
|
|
||||||
if (p->items) return 1;
|
if (p->items) return 1;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(actions, l, act)
|
EINA_LIST_FOREACH(s->cur_actions, l, act)
|
||||||
{
|
{
|
||||||
Evry_Item *it;
|
Evry_Item *it;
|
||||||
|
|
||||||
|
@ -1446,10 +1451,19 @@ _evry_plug_act_select_action(Evry_Plugin *p, Evry_Item *it, const char *input)
|
||||||
{
|
{
|
||||||
Evry_Action *act = it->data[0];
|
Evry_Action *act = it->data[0];
|
||||||
cur_state->cur_action = act;
|
cur_state->cur_action = act;
|
||||||
|
if (strcmp(act->type_in2, "NONE"))
|
||||||
cur_state->request_type = act->type_in2;
|
{
|
||||||
|
/* XXX hackish - param for push? */
|
||||||
return _evry_push_state();
|
cur_state->request_type = act->type_in2;
|
||||||
|
_evry_push_state();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
act->action(act);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1457,6 +1471,8 @@ _evry_plug_act_select_cleanup(Evry_Plugin *p)
|
||||||
{
|
{
|
||||||
Evry_Item *it;
|
Evry_Item *it;
|
||||||
|
|
||||||
|
if (!cur_state) return;
|
||||||
|
|
||||||
EINA_LIST_FREE(p->items, it)
|
EINA_LIST_FREE(p->items, it)
|
||||||
{
|
{
|
||||||
eina_stringshare_del(it->label);
|
eina_stringshare_del(it->label);
|
||||||
|
@ -1467,12 +1483,6 @@ _evry_plug_act_select_cleanup(Evry_Plugin *p)
|
||||||
cur_state->cur_actions = NULL;
|
cur_state->cur_actions = NULL;
|
||||||
|
|
||||||
p->items = NULL;
|
p->items = NULL;
|
||||||
|
|
||||||
if (p->tab)
|
|
||||||
{
|
|
||||||
evas_object_del(p->tab);
|
|
||||||
p->tab = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -17,11 +17,16 @@ static void _cleanup(Evry_Plugin *p);
|
||||||
static void _item_add(Evry_Plugin *p, Efreet_Desktop *desktop, char *file, int prio);
|
static void _item_add(Evry_Plugin *p, Efreet_Desktop *desktop, char *file, int prio);
|
||||||
static int _cb_sort(const void *data1, const void *data2);
|
static int _cb_sort(const void *data1, const void *data2);
|
||||||
static void _item_icon_get(Evry_Plugin *p, Evry_Item *it, Evas *e);
|
static void _item_icon_get(Evry_Plugin *p, Evry_Item *it, Evas *e);
|
||||||
static int _exec_action(void);
|
static int _exec_app_action(Evry_Action *act);
|
||||||
|
static int _edit_app_action(Evry_Action *act);
|
||||||
|
static int _edit_app_check_item(Evry_Action *act, Evry_Item *it);
|
||||||
|
static int _new_app_action(Evry_Action *act);
|
||||||
|
|
||||||
static Evry_Plugin *p1;
|
static Evry_Plugin *p1;
|
||||||
static Evry_Plugin *p2;
|
static Evry_Plugin *p2;
|
||||||
static Evry_Action *act;
|
static Evry_Action *act;
|
||||||
|
static Evry_Action *act2;
|
||||||
|
static Evry_Action *act3;
|
||||||
static Inst *inst;
|
static Inst *inst;
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,9 +62,26 @@ evry_plug_apps_init(void)
|
||||||
act->type_in1 = "APPLICATION";
|
act->type_in1 = "APPLICATION";
|
||||||
act->type_in2 = "FILE";
|
act->type_in2 = "FILE";
|
||||||
act->type_out = "NONE";
|
act->type_out = "NONE";
|
||||||
act->action = &_exec_action;
|
act->action = &_exec_app_action;
|
||||||
evry_action_register(act);
|
evry_action_register(act);
|
||||||
|
|
||||||
|
act2 = E_NEW(Evry_Action, 1);
|
||||||
|
act2->name = "Edit Application Entry";
|
||||||
|
act2->type_in1 = "APPLICATION";
|
||||||
|
act2->type_in2 = "NONE";
|
||||||
|
act2->type_out = "NONE";
|
||||||
|
act2->action = &_edit_app_action;
|
||||||
|
act2->check_item = &_edit_app_check_item;
|
||||||
|
evry_action_register(act2);
|
||||||
|
|
||||||
|
act3 = E_NEW(Evry_Action, 1);
|
||||||
|
act3->name = "New Application Entry";
|
||||||
|
act3->type_in1 = "APPLICATION";
|
||||||
|
act3->type_in2 = "NONE";
|
||||||
|
act3->type_out = "NONE";
|
||||||
|
act3->action = &_new_app_action;
|
||||||
|
evry_action_register(act3);
|
||||||
|
|
||||||
inst = NULL;
|
inst = NULL;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -71,6 +93,8 @@ evry_plug_apps_shutdown(void)
|
||||||
evry_plugin_unregister(p1);
|
evry_plugin_unregister(p1);
|
||||||
evry_plugin_unregister(p2);
|
evry_plugin_unregister(p2);
|
||||||
evry_action_unregister(act);
|
evry_action_unregister(act);
|
||||||
|
evry_action_unregister(act2);
|
||||||
|
evry_action_unregister(act3);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -149,14 +173,14 @@ _action(Evry_Plugin *p, Evry_Item *it, const char *input)
|
||||||
|
|
||||||
if (desktop)
|
if (desktop)
|
||||||
{
|
{
|
||||||
if (inst->candidate)
|
if (inst && inst->candidate)
|
||||||
files = eina_list_append(files, inst->candidate->uri);
|
files = eina_list_append(files, inst->candidate->uri);
|
||||||
|
|
||||||
zone = e_util_zone_current_get(e_manager_current_get());
|
zone = e_util_zone_current_get(e_manager_current_get());
|
||||||
|
|
||||||
e_exec(zone, desktop, NULL, files, "everything");
|
e_exec(zone, desktop, NULL, files, "everything");
|
||||||
|
|
||||||
if (inst->candidate && inst->candidate->mime)
|
if (inst && inst->candidate && inst->candidate->mime)
|
||||||
e_exehist_mime_desktop_add(inst->candidate->mime, desktop);
|
e_exehist_mime_desktop_add(inst->candidate->mime, desktop);
|
||||||
|
|
||||||
if (!it)
|
if (!it)
|
||||||
|
@ -207,10 +231,12 @@ _fetch(Evry_Plugin *p, const char *input)
|
||||||
char *file;
|
char *file;
|
||||||
char match1[4096];
|
char match1[4096];
|
||||||
char match2[4096];
|
char match2[4096];
|
||||||
|
Evry_Item *it;
|
||||||
|
Evry_App *app;
|
||||||
|
|
||||||
_list_free(p);
|
_list_free(p);
|
||||||
|
|
||||||
if (inst->apps)
|
if (inst && inst->apps)
|
||||||
{
|
{
|
||||||
if (!input)
|
if (!input)
|
||||||
{
|
{
|
||||||
|
@ -279,9 +305,17 @@ _fetch(Evry_Plugin *p, const char *input)
|
||||||
inst->added = NULL;
|
inst->added = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->items)
|
it = E_NEW(Evry_Item, 1);
|
||||||
|
app = E_NEW(Evry_App, 1);
|
||||||
|
app->file = eina_stringshare_add(input);
|
||||||
|
app->desktop = NULL;
|
||||||
|
it->data[0] = app;
|
||||||
|
it->priority = 100;
|
||||||
|
it->label = eina_stringshare_add("Run Command");
|
||||||
|
p->items = eina_list_append(p->items, it);
|
||||||
|
|
||||||
|
if (p->items)
|
||||||
{
|
{
|
||||||
/* if (input) */
|
|
||||||
p->items = eina_list_sort(p->items, eina_list_count(p->items), _cb_sort);
|
p->items = eina_list_sort(p->items, eina_list_count(p->items), _cb_sort);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -429,20 +463,158 @@ _cb_sort(const void *data1, const void *data2)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_exec_action()
|
_exec_app_action(Evry_Action *act)
|
||||||
{
|
{
|
||||||
if (act->thing1 && act->thing2)
|
if (act->thing1 && act->thing2)
|
||||||
{
|
{
|
||||||
inst = E_NEW(Inst, 1);
|
E_Zone *zone;
|
||||||
inst->candidate = act->thing2;
|
Evry_App *app = NULL;
|
||||||
|
Efreet_Desktop *desktop = NULL;
|
||||||
|
Eina_List *files = NULL;
|
||||||
|
|
||||||
_action(NULL, act->thing1, NULL);
|
app = act->thing1->data[0];
|
||||||
|
|
||||||
E_FREE(inst);
|
if (app->desktop)
|
||||||
inst = NULL;
|
desktop = app->desktop;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
desktop = efreet_desktop_empty_new("");
|
||||||
|
if (strchr(app->file, '%'))
|
||||||
|
desktop->exec = strdup(app->file);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int len = strlen(app->file) + 4;
|
||||||
|
desktop->exec = malloc(len);
|
||||||
|
if (desktop->exec)
|
||||||
|
snprintf(desktop->exec, len, "%s %%U", app->file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
if (desktop)
|
||||||
|
{
|
||||||
|
files = eina_list_append(files, act->thing2->uri);
|
||||||
|
|
||||||
|
zone = e_util_zone_current_get(e_manager_current_get());
|
||||||
|
|
||||||
|
e_exec(zone, desktop, NULL, files, "everything");
|
||||||
|
|
||||||
|
if (act->thing2->mime)
|
||||||
|
e_exehist_mime_desktop_add(act->thing2->mime, desktop);
|
||||||
|
|
||||||
|
if (!app->desktop)
|
||||||
|
efreet_desktop_free(desktop);
|
||||||
|
|
||||||
|
eina_list_free(files);
|
||||||
|
|
||||||
|
return EVRY_ACTION_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EVRY_ACTION_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_edit_app_check_item(Evry_Action *act, Evry_Item *it)
|
||||||
|
{
|
||||||
|
Evry_App *app = it->data[0];
|
||||||
|
if (app->desktop)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
_edit_app_action(Evry_Action *act)
|
||||||
|
{
|
||||||
|
if (act->thing1)
|
||||||
|
{
|
||||||
|
Evry_Item *it = act->thing1;
|
||||||
|
Evry_App *app = it->data[0];
|
||||||
|
|
||||||
|
Efreet_Desktop *desktop;
|
||||||
|
|
||||||
|
if (app->desktop)
|
||||||
|
desktop = app->desktop;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char buf[128];
|
||||||
|
snprintf(buf, 128, "%s/.local/share/applications/%s.desktop", e_user_homedir_get(), app->file);
|
||||||
|
|
||||||
|
desktop = efreet_desktop_empty_new(eina_stringshare_add(buf));
|
||||||
|
/* XXX check if this is freed */
|
||||||
|
desktop->exec = strdup(app->file);
|
||||||
|
}
|
||||||
|
|
||||||
|
e_desktop_edit(e_container_current_get(e_manager_current_get()), desktop);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
_new_app_action(Evry_Action *act)
|
||||||
|
{
|
||||||
|
if (act->thing1)
|
||||||
|
{
|
||||||
|
Evry_Item *it = act->thing1;
|
||||||
|
Evry_App *app = it->data[0];
|
||||||
|
char *name;
|
||||||
|
char buf[4096];
|
||||||
|
char *end;
|
||||||
|
Efreet_Desktop *desktop;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (app->desktop)
|
||||||
|
name = strdup(app->desktop->name);
|
||||||
|
else
|
||||||
|
/* TODO replace '/' and remove other special characters */
|
||||||
|
name = strdup(app->file);
|
||||||
|
|
||||||
|
if ((end = strchr(name, ' ')))
|
||||||
|
name[end - name] = '\0';
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
snprintf(buf, 4096, "%s/.local/share/applications/%s-%d.desktop", e_user_homedir_get(), name, i);
|
||||||
|
if (ecore_file_exists(buf))
|
||||||
|
{
|
||||||
|
buf[0] = '\0';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(name);
|
||||||
|
|
||||||
|
if (strlen(buf) == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!app->desktop)
|
||||||
|
{
|
||||||
|
desktop = efreet_desktop_empty_new(buf);
|
||||||
|
desktop->exec = strdup(app->file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
efreet_desktop_save_as(app->desktop, buf);
|
||||||
|
/*XXX hackish - desktop is removed on save_as..*/
|
||||||
|
efreet_desktop_new(app->desktop->orig_path);
|
||||||
|
|
||||||
|
desktop = efreet_desktop_new(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
e_desktop_edit(e_container_current_get(e_manager_current_get()), desktop);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue