forked from enlightenment/enlightenment
'everything'
- optimized view to update when required - dirbrowse send asnyc upadte only when current list has changed - ++ evry_action priorities, needs config option though - moved _app_action to evry_util_app_exec SVN revision: 42051
This commit is contained in:
parent
a72325c9d3
commit
f211ebb853
|
@ -28270,13 +28270,13 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
|
||||||
program { name: "thumb_show_delayed";
|
program { name: "thumb_show_delayed";
|
||||||
signal: "e,action,thumb,show_delayed";
|
signal: "e,action,thumb,show_delayed";
|
||||||
source: "e";
|
source: "e";
|
||||||
action: STATE_SET "default" 0.2;
|
action: STATE_SET "default" 0.1;
|
||||||
target: "base";
|
target: "base";
|
||||||
after: "thumb_show_delayed2";
|
after: "thumb_show_delayed2";
|
||||||
}
|
}
|
||||||
program { name: "thumb_show_delayed2";
|
program { name: "thumb_show_delayed2";
|
||||||
action: STATE_SET "visible" 0.0;
|
action: STATE_SET "visible" 0.0;
|
||||||
transition: SINUSOIDAL 0.6;
|
transition: SINUSOIDAL 0.2;
|
||||||
target: "base";
|
target: "base";
|
||||||
}
|
}
|
||||||
program { name: "thumb_show";
|
program { name: "thumb_show";
|
||||||
|
@ -28335,7 +28335,7 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
|
||||||
}
|
}
|
||||||
description { state: "visible" 0.0;
|
description { state: "visible" 0.0;
|
||||||
inherit: "default" 0.0;
|
inherit: "default" 0.0;
|
||||||
visible: 0;
|
visible: 1;
|
||||||
color: 255 255 255 255;
|
color: 255 255 255 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28389,7 +28389,7 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
|
||||||
}
|
}
|
||||||
part { name: "e.text.label";
|
part { name: "e.text.label";
|
||||||
type: TEXT;
|
type: TEXT;
|
||||||
/* clip_to: "base"; */
|
clip_to: "base";
|
||||||
effect: SOFT_SHADOW;
|
effect: SOFT_SHADOW;
|
||||||
mouse_events: 0;
|
mouse_events: 0;
|
||||||
scale: 1;
|
scale: 1;
|
||||||
|
@ -28452,13 +28452,13 @@ MIMEBASE("application/x-font-bdf","icon_mime_font_generic.png", ".BDF", 128);
|
||||||
program { name: "thumb_show_delayed";
|
program { name: "thumb_show_delayed";
|
||||||
signal: "e,action,thumb,show_delayed";
|
signal: "e,action,thumb,show_delayed";
|
||||||
source: "e";
|
source: "e";
|
||||||
action: STATE_SET "default" 0.2;
|
action: STATE_SET "default" 0.1;
|
||||||
target: "base";
|
target: "base";
|
||||||
after: "thumb_show_delayed2";
|
after: "thumb_show_delayed2";
|
||||||
}
|
}
|
||||||
program { name: "thumb_show_delayed2";
|
program { name: "thumb_show_delayed2";
|
||||||
action: STATE_SET "visible" 0.0;
|
action: STATE_SET "visible" 0.0;
|
||||||
transition: SINUSOIDAL 0.3;
|
transition: SINUSOIDAL 0.2;
|
||||||
target: "base";
|
target: "base";
|
||||||
}
|
}
|
||||||
program { name: "thumb_show";
|
program { name: "thumb_show";
|
||||||
|
|
|
@ -211,34 +211,35 @@ struct _Evry_Action
|
||||||
|
|
||||||
/* not to be set by plugin! */
|
/* not to be set by plugin! */
|
||||||
Evas_Object *o_icon;
|
Evas_Object *o_icon;
|
||||||
|
|
||||||
|
int priority;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* evry.c */
|
||||||
EAPI void evry_plugin_register(Evry_Plugin *p, int priority);
|
|
||||||
EAPI void evry_plugin_unregister(Evry_Plugin *p);
|
|
||||||
EAPI void evry_action_register(Evry_Action *act);
|
|
||||||
EAPI void evry_action_unregister(Evry_Action *act);
|
|
||||||
EAPI void evry_view_register(Evry_View *view, int priority);
|
|
||||||
EAPI void evry_view_unregister(Evry_View *view);
|
|
||||||
|
|
||||||
EAPI void evry_item_select(const Evry_State *s, Evry_Item *it);
|
EAPI void evry_item_select(const Evry_State *s, Evry_Item *it);
|
||||||
EAPI void evry_plugin_select(const Evry_State *s, Evry_Plugin *p);
|
EAPI void evry_plugin_select(const Evry_State *s, Evry_Plugin *p);
|
||||||
EAPI int evry_list_win_show(void);
|
EAPI int evry_list_win_show(void);
|
||||||
EAPI void evry_list_win_hide(void);
|
EAPI void evry_list_win_hide(void);
|
||||||
|
|
||||||
|
|
||||||
EAPI Evry_Item *evry_item_new(Evry_Item *base, Evry_Plugin *p, const char *label, void (*cb_free) (Evry_Item *item));
|
EAPI Evry_Item *evry_item_new(Evry_Item *base, Evry_Plugin *p, const char *label, void (*cb_free) (Evry_Item *item));
|
||||||
EAPI void evry_item_free(Evry_Item *it);
|
EAPI void evry_item_free(Evry_Item *it);
|
||||||
EAPI void evry_item_ref(Evry_Item *it);
|
EAPI void evry_item_ref(Evry_Item *it);
|
||||||
|
|
||||||
EAPI void evry_plugin_async_update(Evry_Plugin *plugin, int state);
|
EAPI void evry_plugin_async_update(Evry_Plugin *plugin, int state);
|
||||||
EAPI void evry_clear_input(void);
|
EAPI void evry_clear_input(void);
|
||||||
|
|
||||||
|
/* evry_util.c */
|
||||||
EAPI Evas_Object *evry_icon_mime_get(const char *mime, Evas *e);
|
EAPI Evas_Object *evry_icon_mime_get(const char *mime, Evas *e);
|
||||||
EAPI Evas_Object *evry_icon_theme_get(const char *icon, Evas *e);
|
EAPI Evas_Object *evry_icon_theme_get(const char *icon, Evas *e);
|
||||||
|
|
||||||
EAPI int evry_fuzzy_match(const char *str, const char *match);
|
EAPI int evry_fuzzy_match(const char *str, const char *match);
|
||||||
EAPI Eina_List *evry_fuzzy_match_sort(Eina_List *items);
|
EAPI Eina_List *evry_fuzzy_match_sort(Eina_List *items);
|
||||||
|
EAPI int evry_util_exec_app(const Evry_Item *it_app, const Evry_Item *it_file);
|
||||||
|
|
||||||
|
/* e_mod_main.c */
|
||||||
|
EAPI void evry_plugin_register(Evry_Plugin *p, int priority);
|
||||||
|
EAPI void evry_plugin_unregister(Evry_Plugin *p);
|
||||||
|
EAPI void evry_action_register(Evry_Action *act, int priority);
|
||||||
|
EAPI void evry_action_unregister(Evry_Action *act);
|
||||||
|
EAPI void evry_view_register(Evry_View *view, int priority);
|
||||||
|
EAPI void evry_view_unregister(Evry_View *view);
|
||||||
|
|
||||||
EAPI Evry_Plugin *evry_plugin_new(Evry_Plugin *base, const char *name, int type,
|
EAPI Evry_Plugin *evry_plugin_new(Evry_Plugin *base, const char *name, int type,
|
||||||
const char *type_in, const char *type_out,
|
const char *type_in, const char *type_out,
|
||||||
|
|
|
@ -8,9 +8,9 @@ struct _Inst
|
||||||
E_Border *border;
|
E_Border *border;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Evry_Plugin *plugin;
|
static Evry_Plugin *plugin = NULL;
|
||||||
static Inst *inst;
|
static Inst *inst = NULL;
|
||||||
|
static Evry_Action *act = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_act_cb_border_switch_to(E_Border *bd)
|
_act_cb_border_switch_to(E_Border *bd)
|
||||||
|
@ -198,6 +198,52 @@ _item_icon_get(Evry_Plugin *p __UNUSED__, const Evry_Item *it, Evas *e)
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
_exec_border_check_item(Evry_Action *act __UNUSED__, const Evry_Item *it)
|
||||||
|
{
|
||||||
|
E_Border *bd = it->data;
|
||||||
|
E_OBJECT_CHECK_RETURN(bd, 0);
|
||||||
|
E_OBJECT_TYPE_CHECK_RETURN(bd, E_BORDER_TYPE, 0);
|
||||||
|
|
||||||
|
if ((bd->desktop && bd->desktop->exec) &&
|
||||||
|
((strstr(bd->desktop->exec, "%u")) ||
|
||||||
|
(strstr(bd->desktop->exec, "%U")) ||
|
||||||
|
(strstr(bd->desktop->exec, "%f")) ||
|
||||||
|
(strstr(bd->desktop->exec, "%F"))))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_exec_border_action(Evry_Action *act)
|
||||||
|
{
|
||||||
|
return evry_util_exec_app(act->item1, act->item2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_exec_border_intercept(Evry_Action *act)
|
||||||
|
{
|
||||||
|
Evry_Item_App *app = E_NEW(Evry_Item_App, 1);
|
||||||
|
E_Border *bd = act->item1->data;
|
||||||
|
|
||||||
|
app->desktop = bd->desktop;
|
||||||
|
act->item1 = EVRY_ITEM(app);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
_exec_border_cleanup(Evry_Action *act)
|
||||||
|
{
|
||||||
|
ITEM_APP(app, act->item1);
|
||||||
|
E_FREE(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_init(void)
|
_init(void)
|
||||||
{
|
{
|
||||||
|
@ -205,9 +251,14 @@ _init(void)
|
||||||
_begin, _cleanup, _fetch, _action, _item_icon_get, NULL, NULL);
|
_begin, _cleanup, _fetch, _action, _item_icon_get, NULL, NULL);
|
||||||
|
|
||||||
evry_plugin_register(plugin, 1);
|
evry_plugin_register(plugin, 1);
|
||||||
|
|
||||||
inst = E_NEW(Inst, 1);
|
inst = E_NEW(Inst, 1);
|
||||||
|
|
||||||
|
act = evry_action_new("Open File...", "BORDER", "FILE", "APPLICATION",
|
||||||
|
"everything-launch",
|
||||||
|
_exec_border_action, _exec_border_check_item,
|
||||||
|
_exec_border_cleanup, _exec_border_intercept, NULL);
|
||||||
|
evry_action_register(act, 10);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,6 +267,8 @@ _shutdown(void)
|
||||||
{
|
{
|
||||||
EVRY_PLUGIN_FREE(plugin);
|
EVRY_PLUGIN_FREE(plugin);
|
||||||
E_FREE(inst);
|
E_FREE(inst);
|
||||||
|
|
||||||
|
evry_action_free(act);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ _init(void)
|
||||||
act = evry_action_new("Copy to Clipboard", "TEXT", NULL, NULL, "edit-copy",
|
act = evry_action_new("Copy to Clipboard", "TEXT", NULL, NULL, "edit-copy",
|
||||||
_action, _check_item, NULL, NULL, NULL);
|
_action, _check_item, NULL, NULL, NULL);
|
||||||
|
|
||||||
evry_action_register(act);
|
evry_action_register(act, 10);
|
||||||
|
|
||||||
clipboard_win = win;
|
clipboard_win = win;
|
||||||
|
|
||||||
|
|
|
@ -453,8 +453,9 @@ evry_plugin_unregister(Evry_Plugin *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evry_action_register(Evry_Action *action)
|
evry_action_register(Evry_Action *action, int priority)
|
||||||
{
|
{
|
||||||
|
action->priority = priority;
|
||||||
evry_conf->actions = eina_list_append(evry_conf->actions, action);
|
evry_conf->actions = eina_list_append(evry_conf->actions, action);
|
||||||
/* TODO sorting, initialization, etc */
|
/* TODO sorting, initialization, etc */
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,5 +105,5 @@ EAPI void evry_tab_view_free(Tab_View *v);
|
||||||
|
|
||||||
extern Config *evry_conf;
|
extern Config *evry_conf;
|
||||||
extern Evry_Selector **selectors;
|
extern Evry_Selector **selectors;
|
||||||
|
extern Evry_Plugin *action_selector;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -89,11 +89,12 @@ static Evry_List_Window *list = NULL;
|
||||||
static Ecore_X_Window input_window = 0;
|
static Ecore_X_Window input_window = 0;
|
||||||
static Eina_List *handlers = NULL;
|
static Eina_List *handlers = NULL;
|
||||||
static Ecore_Timer *update_timer = NULL;
|
static Ecore_Timer *update_timer = NULL;
|
||||||
static Evry_Plugin *action_selector = NULL;
|
|
||||||
static Evry_Selector *selector = NULL;
|
static Evry_Selector *selector = NULL;
|
||||||
static const char *thumb_types = NULL;
|
static const char *thumb_types = NULL;
|
||||||
|
|
||||||
Evry_Selector **selectors;
|
Evry_Selector **selectors;
|
||||||
|
Evry_Plugin *action_selector;
|
||||||
|
|
||||||
/* externally accessible functions */
|
/* externally accessible functions */
|
||||||
int
|
int
|
||||||
|
|
|
@ -58,10 +58,6 @@ _cb_sort(const void *data1, const void *data2)
|
||||||
const Evry_Item *it1 = data1;
|
const Evry_Item *it1 = data1;
|
||||||
const Evry_Item *it2 = data2;
|
const Evry_Item *it2 = data2;
|
||||||
|
|
||||||
if ((it1->plugin == it2->plugin) &&
|
|
||||||
(it1->priority - it2->priority))
|
|
||||||
return (it1->priority - it2->priority);
|
|
||||||
|
|
||||||
if (it1->fuzzy_match || it2->fuzzy_match)
|
if (it1->fuzzy_match || it2->fuzzy_match)
|
||||||
{
|
{
|
||||||
if (it1->fuzzy_match && !it2->fuzzy_match)
|
if (it1->fuzzy_match && !it2->fuzzy_match)
|
||||||
|
@ -74,9 +70,6 @@ _cb_sort(const void *data1, const void *data2)
|
||||||
return (it1->fuzzy_match - it2->fuzzy_match);
|
return (it1->fuzzy_match - it2->fuzzy_match);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (it1->plugin->config->priority - it2->plugin->config->priority)
|
|
||||||
return (it1->plugin->config->priority - it2->plugin->config->priority);
|
|
||||||
|
|
||||||
if (it1->priority - it2->priority)
|
if (it1->priority - it2->priority)
|
||||||
return (it1->priority - it2->priority);
|
return (it1->priority - it2->priority);
|
||||||
|
|
||||||
|
@ -105,6 +98,7 @@ _fetch(Evry_Plugin *p, const char *input)
|
||||||
it = evry_item_new(NULL, p, act->name, NULL);
|
it = evry_item_new(NULL, p, act->name, NULL);
|
||||||
it->fuzzy_match = match;
|
it->fuzzy_match = match;
|
||||||
it->data = act;
|
it->data = act;
|
||||||
|
it->priority = act->priority;
|
||||||
EVRY_PLUGIN_ITEM_APPEND(p, it);
|
EVRY_PLUGIN_ITEM_APPEND(p, it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,18 @@ _cb_sort(const void *data1, const void *data2)
|
||||||
const Evry_Item *it1 = data1;
|
const Evry_Item *it1 = data1;
|
||||||
const Evry_Item *it2 = data2;
|
const Evry_Item *it2 = data2;
|
||||||
|
|
||||||
|
if ((it1->plugin == action_selector) ||
|
||||||
|
(it2->plugin == action_selector))
|
||||||
|
{
|
||||||
|
if ((it1->plugin == action_selector) &&
|
||||||
|
(it2->plugin == action_selector))
|
||||||
|
return (it1->priority - it2->priority);
|
||||||
|
else if (it1->plugin == action_selector)
|
||||||
|
return (it1->priority - it2->plugin->config->priority);
|
||||||
|
else
|
||||||
|
return (it1->plugin->config->priority - it2->priority);
|
||||||
|
}
|
||||||
|
|
||||||
if ((it1->plugin == it2->plugin) &&
|
if ((it1->plugin == it2->plugin) &&
|
||||||
(it1->priority - it2->priority))
|
(it1->priority - it2->priority))
|
||||||
return (it1->priority - it2->priority);
|
return (it1->priority - it2->priority);
|
||||||
|
|
|
@ -276,3 +276,84 @@ evry_icon_mime_get(const char *mime, Evas *e)
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
evry_util_exec_app(const Evry_Item *it_app, const Evry_Item *it_file)
|
||||||
|
{
|
||||||
|
E_Zone *zone;
|
||||||
|
Eina_List *files = NULL;
|
||||||
|
char *exe = NULL;
|
||||||
|
|
||||||
|
if (!it_app) return 0;
|
||||||
|
ITEM_APP(app, it_app);
|
||||||
|
|
||||||
|
zone = e_util_zone_current_get(e_manager_current_get());
|
||||||
|
|
||||||
|
if (app->desktop)
|
||||||
|
{
|
||||||
|
if (it_file)
|
||||||
|
{
|
||||||
|
ITEM_FILE(file, it_file);
|
||||||
|
|
||||||
|
Eina_List *l;
|
||||||
|
char *mime;
|
||||||
|
char *path = NULL;
|
||||||
|
int open_folder = 0;
|
||||||
|
|
||||||
|
if (!EVRY_ITEM(file)->browseable)
|
||||||
|
{
|
||||||
|
EINA_LIST_FOREACH(app->desktop->mime_types, l, mime)
|
||||||
|
{
|
||||||
|
if (!strcmp(mime, "x-directory/normal"))
|
||||||
|
{
|
||||||
|
open_folder = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (open_folder)
|
||||||
|
{
|
||||||
|
path = ecore_file_dir_get(file->uri);
|
||||||
|
files = eina_list_append(files, path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
files = eina_list_append(files, file->uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
e_exec(zone, app->desktop, NULL, files, NULL);
|
||||||
|
|
||||||
|
if (file && file->mime && !open_folder)
|
||||||
|
e_exehist_mime_desktop_add(file->mime, app->desktop);
|
||||||
|
|
||||||
|
if (files)
|
||||||
|
eina_list_free(files);
|
||||||
|
|
||||||
|
if (open_folder && path)
|
||||||
|
free(path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
e_exec(zone, app->desktop, NULL, NULL, "everything");
|
||||||
|
}
|
||||||
|
else if (app->file)
|
||||||
|
{
|
||||||
|
if (it_file)
|
||||||
|
{
|
||||||
|
ITEM_FILE(file, it_file);
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = strlen(app->file) + strlen(file->uri) + 2;
|
||||||
|
exe = malloc(len);
|
||||||
|
snprintf(exe, len, "%s %s", app->file, file->uri);
|
||||||
|
e_exec(zone, NULL, exe, NULL, NULL);
|
||||||
|
free(exe);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exe = (char *) app->file;
|
||||||
|
e_exec(zone, NULL, exe, NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "Evry.h"
|
#include "Evry.h"
|
||||||
|
|
||||||
#define TERM_ACTION_CMD "/usr/bin/xterm -hold -e '%s'"
|
#define TERM_ACTION_CMD "/usr/bin/xterm -hold -e '%s'"
|
||||||
#define TERM_ACTION_DIR "/usr/bin/xterm -e \'cd %s && /bin/bash\'"
|
|
||||||
|
|
||||||
typedef struct _Plugin Plugin;
|
typedef struct _Plugin Plugin;
|
||||||
|
|
||||||
|
@ -34,8 +34,6 @@ static Evry_Action *act1 = NULL;
|
||||||
static Evry_Action *act2 = NULL;
|
static Evry_Action *act2 = NULL;
|
||||||
static Evry_Action *act3 = NULL;
|
static Evry_Action *act3 = NULL;
|
||||||
static Evry_Action *act4 = NULL;
|
static Evry_Action *act4 = NULL;
|
||||||
static Evry_Action *act5 = NULL;
|
|
||||||
static Evry_Action *act6 = NULL;
|
|
||||||
|
|
||||||
static Eina_List *exe_path = NULL;
|
static Eina_List *exe_path = NULL;
|
||||||
static Ecore_Idler *exe_scan_idler = NULL;
|
static Ecore_Idler *exe_scan_idler = NULL;
|
||||||
|
@ -494,92 +492,10 @@ _exec_app_check_item(Evry_Action *act __UNUSED__, const Evry_Item *it)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
_app_action(const Evry_Item *it1, const Evry_Item *it2)
|
|
||||||
{
|
|
||||||
E_Zone *zone;
|
|
||||||
Eina_List *files = NULL;
|
|
||||||
char *exe = NULL;
|
|
||||||
|
|
||||||
if (!it1) return 0;
|
|
||||||
ITEM_APP(app, it1);
|
|
||||||
|
|
||||||
zone = e_util_zone_current_get(e_manager_current_get());
|
|
||||||
|
|
||||||
if (app->desktop)
|
|
||||||
{
|
|
||||||
if (it2)
|
|
||||||
{
|
|
||||||
ITEM_FILE(file, it2);
|
|
||||||
|
|
||||||
Eina_List *l;
|
|
||||||
char *mime;
|
|
||||||
char *path = NULL;
|
|
||||||
int open_folder = 0;
|
|
||||||
|
|
||||||
if (!EVRY_ITEM(file)->browseable)
|
|
||||||
{
|
|
||||||
EINA_LIST_FOREACH(app->desktop->mime_types, l, mime)
|
|
||||||
{
|
|
||||||
if (!strcmp(mime, "x-directory/normal"))
|
|
||||||
{
|
|
||||||
open_folder = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (open_folder)
|
|
||||||
{
|
|
||||||
path = ecore_file_dir_get(file->uri);
|
|
||||||
files = eina_list_append(files, path);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
files = eina_list_append(files, file->uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
e_exec(zone, app->desktop, NULL, files, NULL);
|
|
||||||
|
|
||||||
if (file && file->mime && !open_folder)
|
|
||||||
e_exehist_mime_desktop_add(file->mime, app->desktop);
|
|
||||||
|
|
||||||
if (files)
|
|
||||||
eina_list_free(files);
|
|
||||||
|
|
||||||
if (open_folder && path)
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
e_exec(zone, app->desktop, NULL, NULL, "everything");
|
|
||||||
}
|
|
||||||
else if (app->file)
|
|
||||||
{
|
|
||||||
if (it2)
|
|
||||||
{
|
|
||||||
ITEM_FILE(file, it2);
|
|
||||||
int len;
|
|
||||||
|
|
||||||
len = strlen(app->file) + strlen(file->uri) + 2;
|
|
||||||
exe = malloc(len);
|
|
||||||
snprintf(exe, len, "%s %s", app->file, file->uri);
|
|
||||||
e_exec(zone, NULL, exe, NULL, NULL);
|
|
||||||
free(exe);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
exe = (char *) app->file;
|
|
||||||
e_exec(zone, NULL, exe, NULL, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_exec_app_action(Evry_Action *act)
|
_exec_app_action(Evry_Action *act)
|
||||||
{
|
{
|
||||||
return _app_action(act->item1, act->item2);
|
return evry_util_exec_app(act->item1, act->item2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO config option for terminal and shell! */
|
/* TODO config option for terminal and shell! */
|
||||||
|
@ -594,7 +510,7 @@ _exec_term_action(Evry_Action *act)
|
||||||
tmp = E_NEW(Evry_Item_App, 1);
|
tmp = E_NEW(Evry_Item_App, 1);
|
||||||
snprintf(buf, sizeof(buf), TERM_ACTION_CMD, app->file);
|
snprintf(buf, sizeof(buf), TERM_ACTION_CMD, app->file);
|
||||||
tmp->file = buf;
|
tmp->file = buf;
|
||||||
ret = _app_action(EVRY_ITEM(tmp), NULL);
|
ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL);
|
||||||
|
|
||||||
E_FREE(tmp);
|
E_FREE(tmp);
|
||||||
|
|
||||||
|
@ -618,45 +534,11 @@ _open_with_action(Evry_Plugin *plugin, const Evry_Item *it)
|
||||||
PLUGIN(p, plugin);
|
PLUGIN(p, plugin);
|
||||||
|
|
||||||
if (p->candidate)
|
if (p->candidate)
|
||||||
return _app_action(it, p->candidate);
|
return evry_util_exec_app(it, p->candidate);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
_open_term_action(Evry_Action *act)
|
|
||||||
{
|
|
||||||
ITEM_FILE(file, act->item1);
|
|
||||||
Evry_Item_App *tmp;
|
|
||||||
char buf[1024];
|
|
||||||
char *dir, *path;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (act->item1->browseable)
|
|
||||||
{
|
|
||||||
path = ecore_file_escape_name(file->uri);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dir = ecore_file_dir_get(file->uri);
|
|
||||||
if (!dir) return 0;
|
|
||||||
path = ecore_file_escape_name(dir);
|
|
||||||
|
|
||||||
free(dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (path)
|
|
||||||
{
|
|
||||||
tmp = E_NEW(Evry_Item_App, 1);
|
|
||||||
snprintf(buf, sizeof(buf), TERM_ACTION_DIR, path);
|
|
||||||
tmp->file = buf;
|
|
||||||
ret = _app_action(EVRY_ITEM(tmp), NULL);
|
|
||||||
E_FREE(tmp);
|
|
||||||
free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -760,49 +642,6 @@ _new_app_action(Evry_Action *act)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
_exec_border_check_item(Evry_Action *act __UNUSED__, const Evry_Item *it)
|
|
||||||
{
|
|
||||||
E_Border *bd = it->data;
|
|
||||||
E_OBJECT_CHECK_RETURN(bd, 0);
|
|
||||||
E_OBJECT_TYPE_CHECK_RETURN(bd, E_BORDER_TYPE, 0);
|
|
||||||
|
|
||||||
if ((bd->desktop && bd->desktop->exec) &&
|
|
||||||
((strstr(bd->desktop->exec, "%u")) ||
|
|
||||||
(strstr(bd->desktop->exec, "%U")) ||
|
|
||||||
(strstr(bd->desktop->exec, "%f")) ||
|
|
||||||
(strstr(bd->desktop->exec, "%F"))))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
_exec_border_action(Evry_Action *act)
|
|
||||||
{
|
|
||||||
return _app_action(act->item1, act->item2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
_exec_border_intercept(Evry_Action *act)
|
|
||||||
{
|
|
||||||
Evry_Item_App *app = E_NEW(Evry_Item_App, 1);
|
|
||||||
E_Border *bd = act->item1->data;
|
|
||||||
|
|
||||||
app->desktop = bd->desktop;
|
|
||||||
act->item1 = EVRY_ITEM(app);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
_exec_border_cleanup(Evry_Action *act)
|
|
||||||
{
|
|
||||||
ITEM_APP(app, act->item1);
|
|
||||||
E_FREE(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_init(void)
|
_init(void)
|
||||||
|
@ -817,7 +656,7 @@ _init(void)
|
||||||
_icon_get, NULL, NULL);
|
_icon_get, NULL, NULL);
|
||||||
|
|
||||||
evry_plugin_register(EVRY_PLUGIN(p1), 1);
|
evry_plugin_register(EVRY_PLUGIN(p1), 1);
|
||||||
evry_plugin_register(EVRY_PLUGIN(p2), 3);
|
evry_plugin_register(EVRY_PLUGIN(p2), 1);
|
||||||
|
|
||||||
act = evry_action_new("Launch", "APPLICATION", NULL, NULL,
|
act = evry_action_new("Launch", "APPLICATION", NULL, NULL,
|
||||||
"everything-launch",
|
"everything-launch",
|
||||||
|
@ -829,38 +668,30 @@ _init(void)
|
||||||
_exec_app_action, _exec_app_check_item,
|
_exec_app_action, _exec_app_check_item,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
act2 = evry_action_new("Edit Application Entry", "APPLICATION", NULL, NULL,
|
act2 = evry_action_new("Run in Terminal", "APPLICATION", NULL, NULL,
|
||||||
"everything-launch",
|
|
||||||
_edit_app_action, _edit_app_check_item,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
|
|
||||||
act3 = evry_action_new("New Application Entry", "APPLICATION", NULL, NULL,
|
|
||||||
"everything-launch",
|
|
||||||
_new_app_action, _new_app_check_item,
|
|
||||||
NULL, NULL, NULL);
|
|
||||||
|
|
||||||
act4 = evry_action_new("Open File...", "BORDER", "FILE", "APPLICATION",
|
|
||||||
"everything-launch",
|
|
||||||
_exec_border_action, _exec_border_check_item,
|
|
||||||
_exec_border_cleanup, _exec_border_intercept, NULL);
|
|
||||||
|
|
||||||
act5 = evry_action_new("Run in Terminal", "APPLICATION", NULL, NULL,
|
|
||||||
"system-run",
|
"system-run",
|
||||||
_exec_term_action, _exec_term_check_item,
|
_exec_term_action, _exec_term_check_item,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
act6 = evry_action_new("Open Terminal here", "FILE", NULL, NULL,
|
act3 = evry_action_new("Edit Application Entry", "APPLICATION", NULL, NULL,
|
||||||
"system-run",
|
"everything-launch",
|
||||||
_open_term_action, NULL, NULL, NULL, NULL);
|
_edit_app_action, _edit_app_check_item,
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
|
act4 = evry_action_new("New Application Entry", "APPLICATION", NULL, NULL,
|
||||||
|
"everything-launch",
|
||||||
|
_new_app_action, _new_app_check_item,
|
||||||
|
NULL, NULL, NULL);
|
||||||
|
|
||||||
|
evry_action_register(act, 0);
|
||||||
|
evry_action_register(act1, 1);
|
||||||
|
evry_action_register(act2, 2);
|
||||||
|
evry_action_register(act3, 3);
|
||||||
|
evry_action_register(act4, 4);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
evry_action_register(act);
|
|
||||||
evry_action_register(act1);
|
|
||||||
evry_action_register(act5);
|
|
||||||
evry_action_register(act6);
|
|
||||||
evry_action_register(act2);
|
|
||||||
evry_action_register(act3);
|
|
||||||
evry_action_register(act4);
|
|
||||||
|
|
||||||
/* taken from e_exebuf.c */
|
/* taken from e_exebuf.c */
|
||||||
exelist_exe_edd = E_CONFIG_DD_NEW("E_Exe", E_Exe);
|
exelist_exe_edd = E_CONFIG_DD_NEW("E_Exe", E_Exe);
|
||||||
|
@ -891,8 +722,6 @@ _shutdown(void)
|
||||||
evry_action_free(act2);
|
evry_action_free(act2);
|
||||||
evry_action_free(act3);
|
evry_action_free(act3);
|
||||||
evry_action_free(act4);
|
evry_action_free(act4);
|
||||||
evry_action_free(act5);
|
|
||||||
evry_action_free(act6);
|
|
||||||
|
|
||||||
E_CONFIG_DD_FREE(exelist_edd);
|
E_CONFIG_DD_FREE(exelist_edd);
|
||||||
E_CONFIG_DD_FREE(exelist_exe_edd);
|
E_CONFIG_DD_FREE(exelist_exe_edd);
|
||||||
|
|
|
@ -122,7 +122,8 @@ _init(void)
|
||||||
_action, NULL, NULL, NULL, NULL);
|
_action, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
evry_plugin_register(p, 10);
|
evry_plugin_register(p, 10);
|
||||||
evry_action_register(act);
|
|
||||||
|
evry_action_register(act, 0);
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "Evry.h"
|
#include "Evry.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAX_ITEMS 100
|
#define MAX_ITEMS 100
|
||||||
|
#define TERM_ACTION_DIR "/usr/bin/xterm -e \'cd %s && /bin/bash\'"
|
||||||
|
|
||||||
typedef struct _Plugin Plugin;
|
typedef struct _Plugin Plugin;
|
||||||
typedef struct _Data Data;
|
typedef struct _Data Data;
|
||||||
|
@ -30,9 +30,10 @@ struct _Data
|
||||||
Eina_List *files;
|
Eina_List *files;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Evry_Plugin *p1;
|
static Evry_Plugin *p1 = NULL;
|
||||||
static Evry_Plugin *p2;
|
static Evry_Plugin *p2 = NULL;
|
||||||
static Evry_Action *act;
|
static Evry_Action *act1 = NULL;
|
||||||
|
static Evry_Action *act2 = NULL;
|
||||||
|
|
||||||
static long thread_cnt = 0;
|
static long thread_cnt = 0;
|
||||||
static long thread_last = 0;
|
static long thread_last = 0;
|
||||||
|
@ -86,6 +87,8 @@ _dirbrowse_idler(void *data)
|
||||||
Plugin *p = data;
|
Plugin *p = data;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Evry_Item_File *file;
|
Evry_Item_File *file;
|
||||||
|
Eina_Bool update = EINA_FALSE;
|
||||||
|
|
||||||
int cnt = 20;
|
int cnt = 20;
|
||||||
|
|
||||||
if (!p->idler) return 0;
|
if (!p->idler) return 0;
|
||||||
|
@ -96,11 +99,15 @@ _dirbrowse_idler(void *data)
|
||||||
{
|
{
|
||||||
_item_fill(file);
|
_item_fill(file);
|
||||||
cnt--;
|
cnt--;
|
||||||
|
|
||||||
|
if (eina_list_data_find_list(EVRY_PLUGIN(p)->items, file))
|
||||||
|
update = EINA_TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (cnt == 0) break;
|
if (cnt == 0) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p->command)
|
if (update && !p->command)
|
||||||
{
|
{
|
||||||
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
|
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
|
||||||
evry_plugin_async_update(EVRY_PLUGIN(p), EVRY_ASYNC_UPDATE_ADD);
|
evry_plugin_async_update(EVRY_PLUGIN(p), EVRY_ASYNC_UPDATE_ADD);
|
||||||
|
@ -456,6 +463,41 @@ _open_folder_action(Evry_Action *act)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_open_term_action(Evry_Action *act)
|
||||||
|
{
|
||||||
|
ITEM_FILE(file, act->item1);
|
||||||
|
Evry_Item_App *tmp;
|
||||||
|
char buf[1024];
|
||||||
|
char *dir, *path;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (act->item1->browseable)
|
||||||
|
{
|
||||||
|
path = ecore_file_escape_name(file->uri);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dir = ecore_file_dir_get(file->uri);
|
||||||
|
if (!dir) return 0;
|
||||||
|
path = ecore_file_escape_name(dir);
|
||||||
|
|
||||||
|
free(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path)
|
||||||
|
{
|
||||||
|
tmp = E_NEW(Evry_Item_App, 1);
|
||||||
|
snprintf(buf, sizeof(buf), TERM_ACTION_DIR, path);
|
||||||
|
tmp->file = buf;
|
||||||
|
ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL);
|
||||||
|
E_FREE(tmp);
|
||||||
|
free(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_init(void)
|
_init(void)
|
||||||
{
|
{
|
||||||
|
@ -470,10 +512,17 @@ _init(void)
|
||||||
evry_plugin_register(p1, 3);
|
evry_plugin_register(p1, 3);
|
||||||
evry_plugin_register(p2, 1);
|
evry_plugin_register(p2, 1);
|
||||||
|
|
||||||
act = evry_action_new("Open Folder (EFM)", "FILE", NULL, NULL, "folder-open",
|
act1 = evry_action_new("Open Folder (EFM)", "FILE", NULL, NULL, "folder-open",
|
||||||
_open_folder_action, _open_folder_check, NULL, NULL, NULL);
|
_open_folder_action, _open_folder_check, NULL, NULL, NULL);
|
||||||
|
evry_action_register(act1, 0);
|
||||||
|
|
||||||
|
act2 = evry_action_new("Open Terminal here", "FILE", NULL, NULL,
|
||||||
|
"system-run",
|
||||||
|
_open_term_action, NULL, NULL, NULL, NULL);
|
||||||
|
evry_action_register(act2, 2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
evry_action_register(act);
|
|
||||||
|
|
||||||
mime_folder = eina_stringshare_add("inode/directory");
|
mime_folder = eina_stringshare_add("inode/directory");
|
||||||
|
|
||||||
|
@ -488,7 +537,8 @@ _shutdown(void)
|
||||||
|
|
||||||
eina_stringshare_del(mime_folder);
|
eina_stringshare_del(mime_folder);
|
||||||
|
|
||||||
evry_action_free(act);
|
evry_action_free(act1);
|
||||||
|
evry_action_free(act2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,12 @@ typedef struct _Item Item;
|
||||||
struct _View
|
struct _View
|
||||||
{
|
{
|
||||||
Evry_View view;
|
Evry_View view;
|
||||||
Evas *evas;
|
|
||||||
const Evry_State *state;
|
|
||||||
Tab_View *tabs;
|
Tab_View *tabs;
|
||||||
|
|
||||||
|
const Evry_State *state;
|
||||||
|
const Evry_Plugin *plugin;
|
||||||
|
|
||||||
|
Evas *evas;
|
||||||
Evas_Object *bg, *sframe, *span;
|
Evas_Object *bg, *sframe, *span;
|
||||||
int iw, ih;
|
int iw, ih;
|
||||||
int zoom;
|
int zoom;
|
||||||
|
@ -25,13 +27,14 @@ struct _Smart_Data
|
||||||
Item *sel_item;
|
Item *sel_item;
|
||||||
Ecore_Idle_Enterer *idle_enter;
|
Ecore_Idle_Enterer *idle_enter;
|
||||||
Ecore_Idle_Enterer *thumb_idler;
|
Ecore_Idle_Enterer *thumb_idler;
|
||||||
|
Ecore_Idle_Enterer *update_idler;
|
||||||
Ecore_Animator *animator;
|
Ecore_Animator *animator;
|
||||||
Evas_Coord x, y, w, h;
|
Evas_Coord x, y, w, h;
|
||||||
Evas_Coord cx, cy, cw, ch;
|
Evas_Coord cx, cy, cw, ch;
|
||||||
Evas_Coord sx, sy;
|
Evas_Coord sx, sy;
|
||||||
double selmove;
|
double selmove;
|
||||||
Eina_Bool update : 1;
|
Eina_Bool update : 1;
|
||||||
|
Eina_Bool switch_mode : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Item
|
struct _Item
|
||||||
|
@ -118,7 +121,7 @@ _e_smart_reconfigure_do(void *data)
|
||||||
Item *it;
|
Item *it;
|
||||||
int iw, redo = 0, changed = 0;
|
int iw, redo = 0, changed = 0;
|
||||||
static int recursion = 0;
|
static int recursion = 0;
|
||||||
Evas_Coord x, y, xx, yy, ww, hh, mw, mh, ox, oy; //, dd;
|
Evas_Coord x, y, xx, yy, ww, hh, mw, mh, ox = 0, oy = 0;
|
||||||
Evas_Coord aspect_w, aspect_h;
|
Evas_Coord aspect_w, aspect_h;
|
||||||
|
|
||||||
if (!sd) return 0;
|
if (!sd) return 0;
|
||||||
|
@ -223,8 +226,18 @@ _e_smart_reconfigure_do(void *data)
|
||||||
changed = 1;
|
changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ox = 0;
|
if (sd->switch_mode)
|
||||||
oy = 0;
|
{
|
||||||
|
if (changed)
|
||||||
|
evas_object_smart_callback_call(obj, "changed", NULL);
|
||||||
|
|
||||||
|
sd->update = EINA_TRUE;
|
||||||
|
sd->switch_mode = EINA_FALSE;
|
||||||
|
|
||||||
|
if (recursion == 0)
|
||||||
|
sd->idle_enter = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!sd->view->list_mode)
|
if (!sd->view->list_mode)
|
||||||
{
|
{
|
||||||
|
@ -232,22 +245,6 @@ _e_smart_reconfigure_do(void *data)
|
||||||
if (sd->h > sd->ch) oy = (sd->h - sd->ch) / 2;
|
if (sd->h > sd->ch) oy = (sd->h - sd->ch) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd->sel_item)
|
|
||||||
{
|
|
||||||
int align = -1;
|
|
||||||
it = sd->sel_item;
|
|
||||||
|
|
||||||
if (sd->view->list_mode)
|
|
||||||
align = it->y - (double)it->y / (double)sd->ch * (sd->h - it->h);
|
|
||||||
else if ((it->y + it->h) - sd->cy > sd->h)
|
|
||||||
align = it->y - (2 - sd->view->zoom) * it->h;
|
|
||||||
else if (it->y < sd->cy)
|
|
||||||
align = it->y;
|
|
||||||
|
|
||||||
if (align >= 0)
|
|
||||||
e_scrollframe_child_pos_set(sd->view->sframe, 0, align);
|
|
||||||
}
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(sd->items, l, it)
|
EINA_LIST_FOREACH(sd->items, l, it)
|
||||||
{
|
{
|
||||||
xx = sd->x - sd->cx + it->x + ox;
|
xx = sd->x - sd->cx + it->x + ox;
|
||||||
|
@ -272,23 +269,18 @@ _e_smart_reconfigure_do(void *data)
|
||||||
edje_object_part_text_set(it->frame, "e.text.label", it->item->label);
|
edje_object_part_text_set(it->frame, "e.text.label", it->item->label);
|
||||||
evas_object_show(it->frame);
|
evas_object_show(it->frame);
|
||||||
|
|
||||||
if (sd->update)
|
if (it->changed)
|
||||||
edje_object_signal_emit(it->frame, "e,action,thumb,show_delayed", "e");
|
{
|
||||||
|
edje_object_signal_emit(it->frame, "e,action,thumb,show_delayed", "e");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
edje_object_signal_emit(it->frame, "e,action,thumb,show", "e");
|
{
|
||||||
|
edje_object_signal_emit(it->frame, "e,action,thumb,show", "e");
|
||||||
|
}
|
||||||
|
|
||||||
it->visible = EINA_TRUE;
|
it->visible = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hmmm somehow this should be moved up to !it->visible */
|
|
||||||
if (sd->update)
|
|
||||||
{
|
|
||||||
if (it->selected && sd->view->zoom < 2)
|
|
||||||
edje_object_signal_emit(it->frame, "e,state,selected", "e");
|
|
||||||
else
|
|
||||||
edje_object_signal_emit(it->frame, "e,state,unselected", "e");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!it->image && !it->have_thumb &&
|
if (!it->image && !it->have_thumb &&
|
||||||
it->item->plugin && it->item->plugin->icon_get)
|
it->item->plugin && it->item->plugin->icon_get)
|
||||||
{
|
{
|
||||||
|
@ -305,6 +297,14 @@ _e_smart_reconfigure_do(void *data)
|
||||||
evas_object_move(it->frame, xx, yy);
|
evas_object_move(it->frame, xx, yy);
|
||||||
evas_object_resize(it->frame, it->w, it->h);
|
evas_object_resize(it->frame, it->w, it->h);
|
||||||
|
|
||||||
|
if (sd->update || it->changed)
|
||||||
|
{
|
||||||
|
if (it->selected && sd->view->zoom < 2)
|
||||||
|
edje_object_signal_emit(it->frame, "e,state,selected", "e");
|
||||||
|
else
|
||||||
|
edje_object_signal_emit(it->frame, "e,state,unselected", "e");
|
||||||
|
}
|
||||||
|
|
||||||
if (it->get_thumb && !it->thumb)
|
if (it->get_thumb && !it->thumb)
|
||||||
{
|
{
|
||||||
it->thumb = e_thumb_icon_add(sd->view->evas);
|
it->thumb = e_thumb_icon_add(sd->view->evas);
|
||||||
|
@ -312,6 +312,9 @@ _e_smart_reconfigure_do(void *data)
|
||||||
if (!sd->thumb_idler)
|
if (!sd->thumb_idler)
|
||||||
sd->thumb_idler = ecore_idle_enterer_before_add(_thumb_idler, sd);
|
sd->thumb_idler = ecore_idle_enterer_before_add(_thumb_idler, sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it->changed = EINA_FALSE;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (it->visible)
|
else if (it->visible)
|
||||||
{
|
{
|
||||||
|
@ -327,8 +330,8 @@ _e_smart_reconfigure_do(void *data)
|
||||||
it->have_thumb = EINA_FALSE;
|
it->have_thumb = EINA_FALSE;
|
||||||
it->do_thumb = EINA_FALSE;
|
it->do_thumb = EINA_FALSE;
|
||||||
it->visible = EINA_FALSE;
|
it->visible = EINA_FALSE;
|
||||||
it->changed = TRUE;
|
|
||||||
}
|
}
|
||||||
|
it->changed = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed)
|
if (changed)
|
||||||
|
@ -406,39 +409,19 @@ _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_smart_show(Evas_Object *obj)
|
_e_smart_show(Evas_Object *obj){}
|
||||||
{
|
|
||||||
/* Smart_Data *sd = evas_object_smart_data_get(obj); */
|
|
||||||
// evas_object_show(sd->child_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_smart_hide(Evas_Object *obj)
|
_e_smart_hide(Evas_Object *obj){}
|
||||||
{
|
|
||||||
/* Smart_Data *sd = evas_object_smart_data_get(obj); */
|
|
||||||
// evas_object_hide(sd->child_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
|
_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a){}
|
||||||
{
|
|
||||||
/* Smart_Data *sd = evas_object_smart_data_get(obj); */
|
|
||||||
// evas_object_color_set(sd->child_obj, r, g, b, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_smart_clip_set(Evas_Object *obj, Evas_Object * clip)
|
_e_smart_clip_set(Evas_Object *obj, Evas_Object * clip){}
|
||||||
{
|
|
||||||
/* Smart_Data *sd = evas_object_smart_data_get(obj); */
|
|
||||||
// evas_object_clip_set(sd->child_obj, clip);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_smart_clip_unset(Evas_Object *obj)
|
_e_smart_clip_unset(Evas_Object *obj){}
|
||||||
{
|
|
||||||
/* Smart_Data *sd = evas_object_smart_data_get(obj); */
|
|
||||||
// evas_object_clip_unset(sd->child_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Evas_Object *
|
static Evas_Object *
|
||||||
_pan_add(Evas *evas)
|
_pan_add(Evas *evas)
|
||||||
|
@ -546,6 +529,7 @@ _pan_item_add(Evas_Object *obj, Evry_Item *item)
|
||||||
sd->items = eina_list_append(sd->items, it);
|
sd->items = eina_list_append(sd->items, it);
|
||||||
it->obj = obj;
|
it->obj = obj;
|
||||||
it->item = item;
|
it->item = item;
|
||||||
|
it->changed = EINA_TRUE;
|
||||||
|
|
||||||
if (_check_item(item))
|
if (_check_item(item))
|
||||||
it->get_thumb = EINA_TRUE;
|
it->get_thumb = EINA_TRUE;
|
||||||
|
@ -578,18 +562,36 @@ static void
|
||||||
_pan_item_select(Evas_Object *obj, Item *it)
|
_pan_item_select(Evas_Object *obj, Item *it)
|
||||||
{
|
{
|
||||||
Smart_Data *sd = evas_object_smart_data_get(obj);
|
Smart_Data *sd = evas_object_smart_data_get(obj);
|
||||||
|
int align = -1;
|
||||||
|
|
||||||
sd->sel_item->selected = EINA_FALSE;
|
if (sd->sel_item)
|
||||||
edje_object_signal_emit(sd->sel_item->frame, "e,state,unselected", "e");
|
{
|
||||||
sd->sel_item = it;
|
sd->sel_item->selected = EINA_FALSE;
|
||||||
sd->sel_item->selected = EINA_TRUE;
|
edje_object_signal_emit(sd->sel_item->frame, "e,state,unselected", "e");
|
||||||
|
sd->sel_item = it;
|
||||||
|
sd->sel_item->selected = EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
sd->update = EINA_FALSE;
|
if (it)
|
||||||
if (sd->view->zoom < 2)
|
{
|
||||||
edje_object_signal_emit(sd->sel_item->frame, "e,state,selected", "e");
|
sd->update = EINA_FALSE;
|
||||||
|
|
||||||
if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
|
if (sd->view->list_mode)
|
||||||
sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, obj);
|
align = it->y - (double)it->y / (double)sd->ch * (sd->h - it->h);
|
||||||
|
else if ((it->y + it->h) - sd->cy > sd->h)
|
||||||
|
align = it->y - (2 - sd->view->zoom) * it->h;
|
||||||
|
else if (it->y < sd->cy)
|
||||||
|
align = it->y;
|
||||||
|
|
||||||
|
if (align >= 0)
|
||||||
|
e_scrollframe_child_pos_set(sd->view->sframe, 0, align);
|
||||||
|
|
||||||
|
if (sd->view->zoom < 2)
|
||||||
|
edje_object_signal_emit(sd->sel_item->frame, "e,state,selected", "e");
|
||||||
|
|
||||||
|
if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
|
||||||
|
sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -624,6 +626,21 @@ _sort_cb(const void *data1, const void *data2)
|
||||||
return it1->pos - it2->pos;
|
return it1->pos - it2->pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_update_frame(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Smart_Data *sd = evas_object_smart_data_get(obj);
|
||||||
|
sd->switch_mode = EINA_TRUE;
|
||||||
|
_e_smart_reconfigure_do(obj);
|
||||||
|
sd->switch_mode = EINA_FALSE;
|
||||||
|
_pan_item_select(obj, sd->sel_item);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _view_update_do(void *data);
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_view_update(Evry_View *view)
|
_view_update(Evry_View *view)
|
||||||
{
|
{
|
||||||
|
@ -632,7 +649,8 @@ _view_update(Evry_View *view)
|
||||||
Item *v_it;
|
Item *v_it;
|
||||||
Evry_Item *p_it;
|
Evry_Item *p_it;
|
||||||
Eina_List *l, *ll, *p_items, *v_remove = NULL, *v_items = NULL;
|
Eina_List *l, *ll, *p_items, *v_remove = NULL, *v_items = NULL;
|
||||||
int pos, last_pos;
|
int pos, last_pos, last_vis = 0, first_vis = 0;
|
||||||
|
Eina_Bool update = EINA_FALSE;
|
||||||
|
|
||||||
if (!v->state->plugin)
|
if (!v->state->plugin)
|
||||||
{
|
{
|
||||||
|
@ -642,12 +660,14 @@ _view_update(Evry_View *view)
|
||||||
|
|
||||||
p_items = v->state->plugin->items;
|
p_items = v->state->plugin->items;
|
||||||
|
|
||||||
|
/* go through current view items */
|
||||||
EINA_LIST_FOREACH(sd->items, l, v_it)
|
EINA_LIST_FOREACH(sd->items, l, v_it)
|
||||||
{
|
{
|
||||||
last_pos = v_it->pos;
|
last_pos = v_it->pos;
|
||||||
v_it->pos = 0;
|
v_it->pos = 0;
|
||||||
pos = 1;
|
pos = 1;
|
||||||
|
|
||||||
|
/* go through plugins current items */
|
||||||
EINA_LIST_FOREACH(p_items, ll, p_it)
|
EINA_LIST_FOREACH(p_items, ll, p_it)
|
||||||
{
|
{
|
||||||
if (v_it->item == p_it)
|
if (v_it->item == p_it)
|
||||||
|
@ -657,6 +677,7 @@ _view_update(Evry_View *view)
|
||||||
|
|
||||||
v_it->pos = pos;
|
v_it->pos = pos;
|
||||||
|
|
||||||
|
/* set selected state -> TODO remove*/
|
||||||
if (p_it == v->state->sel_item)
|
if (p_it == v->state->sel_item)
|
||||||
{
|
{
|
||||||
sd->sel_item = v_it;
|
sd->sel_item = v_it;
|
||||||
|
@ -670,59 +691,79 @@ _view_update(Evry_View *view)
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(v_it->pos)
|
if (v_it->visible)
|
||||||
{
|
{
|
||||||
v_items = eina_list_append(v_items, v_it->item);
|
if (!first_vis)
|
||||||
if (_check_item(v_it->item))
|
first_vis = v_it->pos;
|
||||||
v_it->get_thumb = EINA_TRUE;
|
last_vis = v_it->pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
/* view item is in list of current items */
|
||||||
v_remove = eina_list_append(v_remove, v_it);
|
if (v_it->pos)
|
||||||
}
|
{
|
||||||
|
v_items = eina_list_append(v_items, v_it->item);
|
||||||
|
|
||||||
if (v_remove)
|
if (_check_item(v_it->item))
|
||||||
sd->update = EINA_TRUE;
|
v_it->get_thumb = EINA_TRUE;
|
||||||
|
|
||||||
|
if (v_it->visible && v_it->changed)
|
||||||
|
update = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (v_it->visible) update = EINA_TRUE;
|
||||||
|
v_remove = eina_list_append(v_remove, v_it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EINA_LIST_FREE(v_remove, v_it)
|
EINA_LIST_FREE(v_remove, v_it)
|
||||||
_pan_item_remove(v->span, v_it);
|
_pan_item_remove(v->span, v_it);
|
||||||
|
|
||||||
|
/* go through plugins current items */
|
||||||
pos = 1;
|
pos = 1;
|
||||||
int added = 0;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(p_items, l, p_it)
|
EINA_LIST_FOREACH(p_items, l, p_it)
|
||||||
{
|
{
|
||||||
|
/* item is not already in view */
|
||||||
if (!eina_list_data_find_list(v_items, p_it))
|
if (!eina_list_data_find_list(v_items, p_it))
|
||||||
{
|
{
|
||||||
added = 1;
|
|
||||||
v_it = _pan_item_add(v->span, p_it);
|
v_it = _pan_item_add(v->span, p_it);
|
||||||
|
|
||||||
if (!v_it) continue;
|
if (!v_it) continue;
|
||||||
|
|
||||||
v_it->pos = pos;
|
v_it->pos = pos;
|
||||||
|
|
||||||
|
/* TODO no needed */
|
||||||
if (p_it == v->state->sel_item)
|
if (p_it == v->state->sel_item)
|
||||||
{
|
{
|
||||||
sd->sel_item = v_it;
|
sd->sel_item = v_it;
|
||||||
v_it->selected = EINA_TRUE;
|
v_it->selected = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pos > first_vis && pos < last_vis)
|
||||||
|
update = EINA_TRUE;
|
||||||
}
|
}
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
sd->items = eina_list_sort(sd->items, eina_list_count(sd->items), _sort_cb);
|
sd->items = eina_list_sort(sd->items, eina_list_count(sd->items), _sort_cb);
|
||||||
|
|
||||||
if (added) sd->update = EINA_TRUE;
|
if (update || !last_vis || v->plugin != v->state->plugin)
|
||||||
|
{
|
||||||
|
v->plugin = v->state->plugin;
|
||||||
|
|
||||||
if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
|
sd->update = EINA_TRUE;
|
||||||
sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, v->span);
|
_update_frame(v->span);
|
||||||
|
}
|
||||||
|
|
||||||
if (v_items) eina_list_free(v_items);
|
if (v_items) eina_list_free(v_items);
|
||||||
|
|
||||||
v->tabs->update(v->tabs);
|
v->tabs->update(v->tabs);
|
||||||
|
|
||||||
return 1;
|
sd->update_idler = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_clear_items(Evas_Object *obj)
|
_clear_items(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
|
@ -761,27 +802,19 @@ _cb_key_down(Evry_View *view, const Ecore_Event_Key *ev)
|
||||||
(!strcmp(ev->key, "2")))
|
(!strcmp(ev->key, "2")))
|
||||||
{
|
{
|
||||||
v->list_mode = v->list_mode ? EINA_FALSE : EINA_TRUE;
|
v->list_mode = v->list_mode ? EINA_FALSE : EINA_TRUE;
|
||||||
|
|
||||||
e_scrollframe_child_pos_set(sd->view->sframe, 0, sd->h);
|
|
||||||
|
|
||||||
_clear_items(v->span);
|
_clear_items(v->span);
|
||||||
|
_update_frame(v->span);
|
||||||
if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
|
|
||||||
sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, v->span);
|
|
||||||
}
|
}
|
||||||
else if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
|
else if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
|
||||||
((!strcmp(ev->key, "plus")) ||
|
((!strcmp(ev->key, "plus")) ||
|
||||||
(!strcmp(ev->key, "z"))))
|
(!strcmp(ev->key, "3"))))
|
||||||
{
|
{
|
||||||
v->zoom++;
|
v->zoom++;
|
||||||
if (v->zoom > 2) v->zoom = 0;
|
if (v->zoom > 2) v->zoom = 0;
|
||||||
|
|
||||||
if (v->zoom == 2)
|
if (v->zoom == 2)
|
||||||
_clear_items(v->span);
|
_clear_items(v->span);
|
||||||
|
|
||||||
if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
|
_update_frame(v->span);
|
||||||
sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, v->span);
|
|
||||||
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue