program { name: "thumb_show_delayed";
signal: "e,action,thumb,show_delayed";
source: "e";
- action: STATE_SET "default" 0.2;
+ action: STATE_SET "default" 0.1;
target: "base";
after: "thumb_show_delayed2";
}
program { name: "thumb_show_delayed2";
action: STATE_SET "visible" 0.0;
- transition: SINUSOIDAL 0.6;
+ transition: SINUSOIDAL 0.2;
target: "base";
}
program { name: "thumb_show";
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
- visible: 0;
+ visible: 1;
color: 255 255 255 255;
}
}
}
part { name: "e.text.label";
type: TEXT;
- /* clip_to: "base"; */
+ clip_to: "base";
effect: SOFT_SHADOW;
mouse_events: 0;
scale: 1;
program { name: "thumb_show_delayed";
signal: "e,action,thumb,show_delayed";
source: "e";
- action: STATE_SET "default" 0.2;
+ action: STATE_SET "default" 0.1;
target: "base";
after: "thumb_show_delayed2";
}
program { name: "thumb_show_delayed2";
action: STATE_SET "visible" 0.0;
- transition: SINUSOIDAL 0.3;
+ transition: SINUSOIDAL 0.2;
target: "base";
}
program { name: "thumb_show";
/* not to be set by plugin! */
Evas_Object *o_icon;
-};
-
-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);
+ int priority;
+};
+/* evry.c */
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 int evry_list_win_show(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 void evry_item_free(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_clear_input(void);
+/* evry_util.c */
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 int evry_fuzzy_match(const char *str, const char *match);
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,
const char *type_in, const char *type_out,
E_Border *border;
};
-static Evry_Plugin *plugin;
-static Inst *inst;
-
+static Evry_Plugin *plugin = NULL;
+static Inst *inst = NULL;
+static Evry_Action *act = NULL;
static void
_act_cb_border_switch_to(E_Border *bd)
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
_init(void)
{
_begin, _cleanup, _fetch, _action, _item_icon_get, NULL, NULL);
evry_plugin_register(plugin, 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;
}
{
EVRY_PLUGIN_FREE(plugin);
E_FREE(inst);
+
+ evry_action_free(act);
}
act = evry_action_new("Copy to Clipboard", "TEXT", NULL, NULL, "edit-copy",
_action, _check_item, NULL, NULL, NULL);
- evry_action_register(act);
+ evry_action_register(act, 10);
clipboard_win = win;
}
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);
/* TODO sorting, initialization, etc */
}
extern Config *evry_conf;
extern Evry_Selector **selectors;
-
+extern Evry_Plugin *action_selector;
#endif
static Ecore_X_Window input_window = 0;
static Eina_List *handlers = NULL;
static Ecore_Timer *update_timer = NULL;
-static Evry_Plugin *action_selector = NULL;
+
static Evry_Selector *selector = NULL;
static const char *thumb_types = NULL;
Evry_Selector **selectors;
+Evry_Plugin *action_selector;
/* externally accessible functions */
int
const Evry_Item *it1 = data1;
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)
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)
return (it1->priority - it2->priority);
it = evry_item_new(NULL, p, act->name, NULL);
it->fuzzy_match = match;
it->data = act;
+ it->priority = act->priority;
EVRY_PLUGIN_ITEM_APPEND(p, it);
}
}
const Evry_Item *it1 = data1;
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) &&
(it1->priority - it2->priority))
return (it1->priority - it2->priority);
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;
+}
#include "Evry.h"
#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;
static Evry_Action *act2 = NULL;
static Evry_Action *act3 = NULL;
static Evry_Action *act4 = NULL;
-static Evry_Action *act5 = NULL;
-static Evry_Action *act6 = NULL;
static Eina_List *exe_path = NULL;
static Ecore_Idler *exe_scan_idler = NULL;
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
_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! */
tmp = E_NEW(Evry_Item_App, 1);
snprintf(buf, sizeof(buf), TERM_ACTION_CMD, app->file);
tmp->file = buf;
- ret = _app_action(EVRY_ITEM(tmp), NULL);
+ ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL);
E_FREE(tmp);
PLUGIN(p, plugin);
if (p->candidate)
- return _app_action(it, p->candidate);
+ return evry_util_exec_app(it, p->candidate);
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
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
_init(void)
_icon_get, NULL, NULL);
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,
"everything-launch",
_exec_app_action, _exec_app_check_item,
NULL, NULL,NULL);
-
+
act1 = evry_action_new("Open File...", "APPLICATION", "FILE", "APPLICATION",
"document-open",
_exec_app_action, _exec_app_check_item,
NULL, NULL, NULL);
- act2 = evry_action_new("Edit Application Entry", "APPLICATION", NULL, NULL,
- "everything-launch",
- _edit_app_action, _edit_app_check_item,
+ act2 = evry_action_new("Run in Terminal", "APPLICATION", NULL, NULL,
+ "system-run",
+ _exec_term_action, _exec_term_check_item,
NULL, NULL, NULL);
- act3 = evry_action_new("New Application Entry", "APPLICATION", NULL, NULL,
+ act3 = evry_action_new("Edit Application Entry", "APPLICATION", NULL, NULL,
"everything-launch",
- _new_app_action, _new_app_check_item,
+ _edit_app_action, _edit_app_check_item,
NULL, NULL, NULL);
-
- act4 = evry_action_new("Open File...", "BORDER", "FILE", "APPLICATION",
+
+ act4 = evry_action_new("New Application Entry", "APPLICATION", NULL, NULL,
"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",
- _exec_term_action, _exec_term_check_item,
+ _new_app_action, _new_app_check_item,
NULL, NULL, NULL);
- act6 = evry_action_new("Open Terminal here", "FILE", NULL, NULL,
- "system-run",
- _open_term_action, NULL, 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 */
exelist_exe_edd = E_CONFIG_DD_NEW("E_Exe", E_Exe);
#undef T
evry_action_free(act2);
evry_action_free(act3);
evry_action_free(act4);
- evry_action_free(act5);
- evry_action_free(act6);
E_CONFIG_DD_FREE(exelist_edd);
E_CONFIG_DD_FREE(exelist_exe_edd);
_action, NULL, NULL, NULL, NULL);
evry_plugin_register(p, 10);
- evry_action_register(act);
+
+ evry_action_register(act, 0);
return EINA_TRUE;
}
#include "Evry.h"
-
#define MAX_ITEMS 100
+#define TERM_ACTION_DIR "/usr/bin/xterm -e \'cd %s && /bin/bash\'"
typedef struct _Plugin Plugin;
typedef struct _Data Data;
Eina_List *files;
};
-static Evry_Plugin *p1;
-static Evry_Plugin *p2;
-static Evry_Action *act;
+static Evry_Plugin *p1 = NULL;
+static Evry_Plugin *p2 = NULL;
+static Evry_Action *act1 = NULL;
+static Evry_Action *act2 = NULL;
static long thread_cnt = 0;
static long thread_last = 0;
Plugin *p = data;
Eina_List *l;
Evry_Item_File *file;
+ Eina_Bool update = EINA_FALSE;
+
int cnt = 20;
if (!p->idler) return 0;
{
_item_fill(file);
cnt--;
+
+ if (eina_list_data_find_list(EVRY_PLUGIN(p)->items, file))
+ update = EINA_TRUE;
+
}
if (cnt == 0) break;
}
- if (!p->command)
+ if (update && !p->command)
{
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
evry_plugin_async_update(EVRY_PLUGIN(p), EVRY_ASYNC_UPDATE_ADD);
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
_init(void)
{
evry_plugin_register(p1, 3);
evry_plugin_register(p2, 1);
- act = evry_action_new("Open Folder (EFM)", "FILE", NULL, NULL, "folder-open",
- _open_folder_action, _open_folder_check, NULL, NULL, NULL);
+ act1 = evry_action_new("Open Folder (EFM)", "FILE", NULL, NULL, "folder-open",
+ _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");
return EINA_TRUE;
eina_stringshare_del(mime_folder);
- evry_action_free(act);
+ evry_action_free(act1);
+ evry_action_free(act2);
}
struct _View
{
Evry_View view;
- Evas *evas;
- const Evry_State *state;
Tab_View *tabs;
+ const Evry_State *state;
+ const Evry_Plugin *plugin;
+
+ Evas *evas;
Evas_Object *bg, *sframe, *span;
int iw, ih;
int zoom;
Item *sel_item;
Ecore_Idle_Enterer *idle_enter;
Ecore_Idle_Enterer *thumb_idler;
+ Ecore_Idle_Enterer *update_idler;
Ecore_Animator *animator;
Evas_Coord x, y, w, h;
Evas_Coord cx, cy, cw, ch;
Evas_Coord sx, sy;
double selmove;
Eina_Bool update : 1;
-
+ Eina_Bool switch_mode : 1;
};
struct _Item
Item *it;
int iw, redo = 0, changed = 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;
if (!sd) return 0;
changed = 1;
}
- ox = 0;
- oy = 0;
+ if (sd->switch_mode)
+ {
+ 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->w > sd->cw) ox = (sd->w - sd->cw) / 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)
{
xx = sd->x - sd->cx + it->x + ox;
edje_object_part_text_set(it->frame, "e.text.label", it->item->label);
evas_object_show(it->frame);
- if (sd->update)
- edje_object_signal_emit(it->frame, "e,action,thumb,show_delayed", "e");
+ if (it->changed)
+ {
+ edje_object_signal_emit(it->frame, "e,action,thumb,show_delayed", "e");
+ }
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;
}
- /* 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 &&
it->item->plugin && it->item->plugin->icon_get)
{
evas_object_move(it->frame, xx, yy);
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)
{
it->thumb = e_thumb_icon_add(sd->view->evas);
if (!sd->thumb_idler)
sd->thumb_idler = ecore_idle_enterer_before_add(_thumb_idler, sd);
}
+
+ it->changed = EINA_FALSE;
+
}
else if (it->visible)
{
it->have_thumb = EINA_FALSE;
it->do_thumb = EINA_FALSE;
it->visible = EINA_FALSE;
- it->changed = TRUE;
}
+ it->changed = EINA_FALSE;
}
if (changed)
}
static void
-_e_smart_show(Evas_Object *obj)
-{
- /* Smart_Data *sd = evas_object_smart_data_get(obj); */
- // evas_object_show(sd->child_obj);
-}
+_e_smart_show(Evas_Object *obj){}
static void
-_e_smart_hide(Evas_Object *obj)
-{
- /* Smart_Data *sd = evas_object_smart_data_get(obj); */
- // evas_object_hide(sd->child_obj);
-}
+_e_smart_hide(Evas_Object *obj){}
static void
-_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);
-}
+_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a){}
static void
-_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);
-}
+_e_smart_clip_set(Evas_Object *obj, Evas_Object * clip){}
static void
-_e_smart_clip_unset(Evas_Object *obj)
-{
- /* Smart_Data *sd = evas_object_smart_data_get(obj); */
- // evas_object_clip_unset(sd->child_obj);
-}
+_e_smart_clip_unset(Evas_Object *obj){}
static Evas_Object *
_pan_add(Evas *evas)
sd->items = eina_list_append(sd->items, it);
it->obj = obj;
it->item = item;
+ it->changed = EINA_TRUE;
if (_check_item(item))
it->get_thumb = EINA_TRUE;
_pan_item_select(Evas_Object *obj, Item *it)
{
Smart_Data *sd = evas_object_smart_data_get(obj);
+ int align = -1;
- sd->sel_item->selected = EINA_FALSE;
- edje_object_signal_emit(sd->sel_item->frame, "e,state,unselected", "e");
- sd->sel_item = it;
- sd->sel_item->selected = EINA_TRUE;
+ if (sd->sel_item)
+ {
+ sd->sel_item->selected = EINA_FALSE;
+ 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 (sd->view->zoom < 2)
- edje_object_signal_emit(sd->sel_item->frame, "e,state,selected", "e");
+ if (it)
+ {
+ sd->update = EINA_FALSE;
- if (sd->idle_enter) ecore_idle_enterer_del(sd->idle_enter);
- sd->idle_enter = ecore_idle_enterer_before_add(_e_smart_reconfigure_do, obj);
+ 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);
+
+ 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
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
_view_update(Evry_View *view)
{
Item *v_it;
Evry_Item *p_it;
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)
{
_view_clear(view);
return 1;
}
-
+
p_items = v->state->plugin->items;
+ /* go through current view items */
EINA_LIST_FOREACH(sd->items, l, v_it)
{
last_pos = v_it->pos;
v_it->pos = 0;
- pos = 1;
-
+ pos = 1;
+
+ /* go through plugins current items */
EINA_LIST_FOREACH(p_items, ll, p_it)
{
if (v_it->item == p_it)
{
if (pos != last_pos)
v_it->changed = EINA_TRUE;
-
+
v_it->pos = pos;
+ /* set selected state -> TODO remove*/
if (p_it == v->state->sel_item)
{
sd->sel_item = v_it;
pos++;
}
- if(v_it->pos)
+ if (v_it->visible)
+ {
+ if (!first_vis)
+ first_vis = v_it->pos;
+ last_vis = v_it->pos;
+ }
+
+ /* view item is in list of current items */
+ if (v_it->pos)
{
v_items = eina_list_append(v_items, v_it->item);
+
if (_check_item(v_it->item))
v_it->get_thumb = EINA_TRUE;
+
+ if (v_it->visible && v_it->changed)
+ update = EINA_TRUE;
}
-
else
- v_remove = eina_list_append(v_remove, v_it);
+ {
+ if (v_it->visible) update = EINA_TRUE;
+ v_remove = eina_list_append(v_remove, v_it);
+ }
}
- if (v_remove)
- sd->update = EINA_TRUE;
-
EINA_LIST_FREE(v_remove, v_it)
_pan_item_remove(v->span, v_it);
+ /* go through plugins current items */
pos = 1;
- int added = 0;
-
EINA_LIST_FOREACH(p_items, l, p_it)
{
+ /* item is not already in view */
if (!eina_list_data_find_list(v_items, p_it))
{
- added = 1;
v_it = _pan_item_add(v->span, p_it);
if (!v_it) continue;
v_it->pos = pos;
+ /* TODO no needed */
if (p_it == v->state->sel_item)
{
sd->sel_item = v_it;
v_it->selected = EINA_TRUE;
}
+
+ if (pos > first_vis && pos < last_vis)
+ update = EINA_TRUE;
}
pos++;
}
sd->items = eina_list_sort(sd->items, eina_list_count(sd->items), _sort_cb);
- if (added) sd->update = EINA_TRUE;
-
- 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);
-
+ if (update || !last_vis || v->plugin != v->state->plugin)
+ {
+ v->plugin = v->state->plugin;
+
+ sd->update = EINA_TRUE;
+ _update_frame(v->span);
+ }
+
if (v_items) eina_list_free(v_items);
-
+
v->tabs->update(v->tabs);
- return 1;
+ sd->update_idler = NULL;
+
+ return 0;
}
+
static void
_clear_items(Evas_Object *obj)
{
(!strcmp(ev->key, "2")))
{
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);
-
- 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);
+ _update_frame(v->span);
}
else if ((ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) &&
((!strcmp(ev->key, "plus")) ||
- (!strcmp(ev->key, "z"))))
+ (!strcmp(ev->key, "3"))))
{
v->zoom++;
if (v->zoom > 2) v->zoom = 0;
-
if (v->zoom == 2)
_clear_items(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);
-
+ _update_frame(v->span);
goto end;
}