e17/evry:

- evry gadget now shows a window that works with illume for keyboard input
- added app menu browser
- evry_icon_get refactoring 


SVN revision: 62518
This commit is contained in:
Hannes Janetzek 2011-08-16 23:26:07 +00:00
parent c3595e9d2b
commit 034e60d9d5
10 changed files with 330 additions and 335 deletions

View File

@ -110,7 +110,6 @@ e_modapi_init(E_Module *m)
SET(action_find);
SET(api_version_check);
SET(type_register);
SET(icon_mime_get);
SET(icon_theme_get);
SET(fuzzy_match);
SET(util_exec_app);
@ -526,7 +525,7 @@ _e_mod_run_defer_cb(void *data)
E_Zone *zone;
zone = data;
if (zone) evry_show(zone, E_ZONE_EDGE_NONE, _params);
if (zone) evry_show(zone, E_ZONE_EDGE_NONE, _params, EINA_TRUE);
_idler = NULL;
return ECORE_CALLBACK_CANCEL;
@ -570,7 +569,7 @@ _e_mod_action_cb_edge(E_Object *obj __UNUSED__, const char *params, E_Event_Zon
if (_idler) ecore_idle_enterer_del(_idler);
evry_show(ev->zone, ev->edge, _params);
evry_show(ev->zone, ev->edge, _params, EINA_TRUE);
}
/* menu item callback(s) */

View File

@ -205,7 +205,7 @@ void evry_plugin_update(Evry_Plugin *plugin, int state);
void evry_clear_input(Evry_Plugin *p);
/* evry_util.c */
Evas_Object *evry_icon_mime_get(const char *mime, Evas *e);
/* Evas_Object *evry_icon_mime_get(const char *mime, Evas *e); */
Evas_Object *evry_icon_theme_get(const char *icon, Evas *e);
int evry_fuzzy_match(const char *str, const char *match);
Eina_List *evry_fuzzy_match_sort(Eina_List *items);
@ -281,7 +281,7 @@ void evry_plug_collection_shutdown(void);
int evry_init(void);
int evry_shutdown(void);
Evry_Window *evry_show(E_Zone *zone, E_Zone_Edge edge, const char *params);
Evry_Window *evry_show(E_Zone *zone, E_Zone_Edge edge, const char *params, Eina_Bool popup);
void evry_hide(Evry_Window *win, int clear);
int evry_plug_actions_init();

View File

@ -147,7 +147,7 @@ _evry_cb_item_changed(__UNUSED__ void *data, __UNUSED__ int type, void *event)
}
Evry_Window *
evry_show(E_Zone *zone, E_Zone_Edge edge, const char *params)
evry_show(E_Zone *zone, E_Zone_Edge edge, const char *params, Eina_Bool popup)
{
Evry_Window *win;
Evry_Selector *sel;
@ -163,18 +163,22 @@ evry_show(E_Zone *zone, E_Zone_Edge edge, const char *params)
if (!(win = _evry_window_new(zone, edge)))
return NULL;
e_win_layer_set(win->ewin, 255);
ecore_x_netwm_window_type_set(win->ewin->evas_win,
ECORE_X_WINDOW_TYPE_UTILITY);
if (popup)
{
e_win_layer_set(win->ewin, 255);
ecore_x_netwm_window_type_set(win->ewin->evas_win,
ECORE_X_WINDOW_TYPE_UTILITY);
ecore_evas_name_class_set(win->ewin->ecore_evas, "E", "everything");
ecore_evas_show(win->ewin->ecore_evas);
if (e_grabinput_get(win->ewin->evas_win, 0, win->ewin->evas_win))
win->grab = 1;
else
ERR("could not acquire grab");
ecore_evas_name_class_set(win->ewin->ecore_evas, "E", "everything");
ecore_evas_show(win->ewin->ecore_evas);
if (e_grabinput_get(win->ewin->evas_win, 0, win->ewin->evas_win))
win->grab = 1;
else
ERR("could not acquire grab");
}
evry_history_load();
if (params)
@ -1236,7 +1240,8 @@ _evry_selector_thumb(Evry_Selector *sel, const Evry_Item *it)
evas_object_del(sel->o_thumb);
sel->o_thumb = NULL;
if (it->type != EVRY_TYPE_FILE) return 0;
if (it->type != EVRY_TYPE_FILE)
return 0;
GET_FILE(file, it);
@ -1605,23 +1610,26 @@ evry_browse_item(Evry_Item *it)
}
else
{
if ((it->plugin->browse) &&
(pp = it->plugin->browse(it->plugin, it)))
if ((it->plugin->browse) && (pp = it->plugin->browse(it->plugin, it)))
{
plugins = eina_list_append(plugins, pp);
pref = pp;
}
EINA_LIST_FOREACH(sel->plugins, l, p)
/* items of type NONE can only be browsed by their own plugin */
if (!CHECK_TYPE(it, EVRY_TYPE_NONE))
{
if (!p->browse)
continue;
EINA_LIST_FOREACH(sel->plugins, l, p)
{
if (!p->browse)
continue;
if ((pref) && (!strcmp(p->name, pref->name)))
continue;
if ((pref) && (!strcmp(p->name, pref->name)))
continue;
if ((pp = p->browse(p, it)))
plugins = eina_list_append(plugins, pp);
if ((pp = p->browse(p, it)))
plugins = eina_list_append(plugins, pp);
}
}
}

View File

@ -3,7 +3,7 @@
#include "evry_types.h"
#define EVRY_API_VERSION 27
#define EVRY_API_VERSION 28
#define EVRY_ACTION_OTHER 0
#define EVRY_ACTION_FINISHED 1
@ -101,8 +101,8 @@ struct _Evry_API
Evry_Type (*type_register)(const char *type);
/* evry_util.c */
Evas_Object *(*icon_mime_get)(const char *mime, Evas *e);
Evas_Object *(*icon_theme_get)(const char *icon, Evas *e);
int (*fuzzy_match)(const char *str, const char *match);
int (*util_exec_app)(const Evry_Item *it_app, const Evry_Item *it_file);
char *(*util_url_escape)(const char *string, int inlength);
@ -197,10 +197,10 @@ struct _Evry_Event_Action_Performed
EVRY_ITEM(_it)->icon = eina_stringshare_add(_icon);
#define CHECK_TYPE(_item, _type) \
(((Evry_Item *)_item)->type && ((Evry_Item *)_item)->type == _type)
(((Evry_Item *)_item)->type == _type)
#define CHECK_SUBTYPE(_item, _type) \
(((Evry_Item *)_item)->subtype && ((Evry_Item *)_item)->subtype == _type)
(((Evry_Item *)_item)->subtype == _type)
#define IS_BROWSEABLE(_item) ((Evry_Item *)_item)->browseable

View File

@ -153,19 +153,28 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_
ev = event_info;
if (ev->button == 1)
{
Evas_Coord x, y, w, h;
int cx, cy, pw, ph;
/* Evas_Coord x, y, w, h; */
/* int cx, cy, pw, ph; */
Evry_Window *win;
if (inst->win)
{
evry_hide(inst->win, 0);
return;
}
win = evry_show(e_util_zone_current_get(e_manager_current_get()), 0, "Start");
win = evry_show(e_util_zone_current_get(e_manager_current_get()), 0, "Start", EINA_FALSE);
if (!win) return;
evas_object_geometry_get(inst->o_button, &x, &y, &w, &h);
e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,
&cx, &cy, NULL, NULL);
x += cx;
y += cy;
e_win_show(win->ewin);
/* evas_object_geometry_get(inst->o_button, &x, &y, &w, &h);
* e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon,
* &cx, &cy, NULL, NULL);
* x += cx;
* y += cy; */
/* evas_object_resize(win->o_main,
* evry_conf->edge_width,
* evry_conf->edge_height);
@ -174,46 +183,46 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_
* evry_conf->edge_width,
* evry_conf->edge_height); */
pw = win->ewin->w;
ph = win->ewin->h;
switch (inst->gcc->gadcon->orient)
{
case E_GADCON_ORIENT_TOP:
case E_GADCON_ORIENT_CORNER_TL:
case E_GADCON_ORIENT_CORNER_TR:
e_win_move(win->ewin, x, y + h);
break;
case E_GADCON_ORIENT_BOTTOM:
case E_GADCON_ORIENT_CORNER_BR:
case E_GADCON_ORIENT_CORNER_BL:
e_win_move(win->ewin, x, y - ph);
break;
case E_GADCON_ORIENT_LEFT:
case E_GADCON_ORIENT_CORNER_LT:
case E_GADCON_ORIENT_CORNER_LB:
e_win_move(win->ewin, x + w, y);
break;
case E_GADCON_ORIENT_RIGHT:
case E_GADCON_ORIENT_CORNER_RT:
case E_GADCON_ORIENT_CORNER_RB:
e_win_move(win->ewin, x - pw, y);
break;
case E_GADCON_ORIENT_FLOAT:
case E_GADCON_ORIENT_HORIZ:
case E_GADCON_ORIENT_VERT:
default:
break;
}
/* pw = win->ewin->w;
* ph = win->ewin->h;
*
* switch (inst->gcc->gadcon->orient)
* {
*
* case E_GADCON_ORIENT_TOP:
* case E_GADCON_ORIENT_CORNER_TL:
* case E_GADCON_ORIENT_CORNER_TR:
* e_win_move(win->ewin, x, y + h);
* break;
* case E_GADCON_ORIENT_BOTTOM:
* case E_GADCON_ORIENT_CORNER_BR:
* case E_GADCON_ORIENT_CORNER_BL:
* e_win_move(win->ewin, x, y - ph);
* break;
* case E_GADCON_ORIENT_LEFT:
* case E_GADCON_ORIENT_CORNER_LT:
* case E_GADCON_ORIENT_CORNER_LB:
* e_win_move(win->ewin, x + w, y);
* break;
* case E_GADCON_ORIENT_RIGHT:
* case E_GADCON_ORIENT_CORNER_RT:
* case E_GADCON_ORIENT_CORNER_RB:
* e_win_move(win->ewin, x - pw, y);
* break;
* case E_GADCON_ORIENT_FLOAT:
* case E_GADCON_ORIENT_HORIZ:
* case E_GADCON_ORIENT_VERT:
* default:
* break;
* } */
inst->win = win;
if (win->ewin->x + pw > win->zone->w)
e_win_move(win->ewin, win->zone->w - pw, win->ewin->y);
if (win->ewin->y + ph > win->zone->h)
e_win_move(win->ewin, win->ewin->x, win->zone->h - ph);
/* if (win->ewin->x + pw > win->zone->w)
* e_win_move(win->ewin, win->zone->w - pw, win->ewin->y);
*
* if (win->ewin->y + ph > win->zone->h)
* e_win_move(win->ewin, win->ewin->x, win->zone->h - ph); */
e_gadcon_locked_set(inst->gcc->gadcon, 1);

View File

@ -93,7 +93,7 @@ _fetch(Evry_Plugin *plugin, const char *input)
if (it->usage >= 0)
evry_history_item_usage_set(it, input, context);
if (it->usage && it->usage > max_usage)
if (it->usage && (it->usage > max_usage))
max_usage = it->usage;
if (it->fuzzy_match == 0)
@ -222,9 +222,8 @@ _fetch(Evry_Plugin *plugin, const char *input)
{
EINA_LIST_FOREACH(pp->items, ll, it)
{
if (((it->usage >= 0) &&
(evry_history_item_usage_set(it, input, context))) ||
(!subj_sel))
if ((!subj_sel) || (it->usage < 0) ||
(evry_history_item_usage_set(it, input, context)))
{
it->fuzzy_match = 0;
items = eina_list_append(items, it);

View File

@ -17,17 +17,21 @@ typedef struct _Plugin Plugin;
typedef struct _Module_Config Module_Config;
typedef struct _E_Exe E_Exe;
typedef struct _E_Exe_List E_Exe_List;
typedef struct _Item_Menu Item_Menu;
struct _Plugin
{
Evry_Plugin base;
Eina_Bool browse;
const char *input;
Eina_List *apps_mime;
Eina_List *apps_all;
Eina_List *apps_hist;
Eina_List *menu_items;
Eina_Hash *added;
Efreet_Menu *menu;;
Evry_Item_App *command;
};
@ -51,6 +55,13 @@ struct _Module_Config
E_Module *module;
};
struct _Item_Menu
{
Evry_Item base;
Efreet_Menu *menu;;
};
static const Evry_API *evry = NULL;
static Evry_Module *evry_module = NULL;
static Eina_List *handlers = NULL;
@ -70,6 +81,9 @@ static Eina_List *exe_list2 = NULL;
static Eina_List *apps_cache = NULL;
static void _scan_executables();
#define GET_MENU(_m, _it) Item_Menu *_m = (Item_Menu *)_it
/***************************************************************************/
static void _hash_free(void *data)
@ -78,39 +92,6 @@ static void _hash_free(void *data)
EVRY_ITEM_FREE(app);
}
static Evas_Object *
_icon_get(Evry_Item *it, Evas *e)
{
GET_APP(app, it);
Evas_Object *o = NULL;
if (app->desktop && app->desktop->icon)
{
if (app->desktop->icon[0] == '/')
{
o = e_icon_add(e);
e_icon_preload_set(o, 1);
if (!e_icon_file_set(o, app->desktop->icon))
{
evas_object_del(o);
o = NULL;
}
}
if (!o)
o = evry->icon_theme_get(app->desktop->icon, e);
if (!o)
o = e_util_desktop_icon_add(app->desktop, 128, e);
}
if (!o)
o = evry->icon_theme_get("system-run", e);
return o;
}
static int
_exec_open_file_action(Evry_Action *act)
{
@ -118,7 +99,7 @@ _exec_open_file_action(Evry_Action *act)
}
static void
_item_free(Evry_Item *item)
_cb_item_free(Evry_Item *item)
{
GET_APP(app, item);
@ -135,7 +116,7 @@ _item_new(Plugin *p, const char *label, const char *id)
{
Evry_Item_App *app;
app = EVRY_ITEM_NEW(Evry_Item_App, p, label, _icon_get, _item_free);
app = EVRY_ITEM_NEW(Evry_Item_App, p, label, NULL, _cb_item_free);
EVRY_ACTN(app)->action = &_exec_open_file_action;
EVRY_ACTN(app)->it1.type = EVRY_TYPE_FILE;
EVRY_ITEM(app)->id = eina_stringshare_add(id);
@ -148,6 +129,24 @@ _item_new(Plugin *p, const char *label, const char *id)
return app;
}
static Item_Menu *
_item_menu_add(Plugin *p, Efreet_Menu *menu)
{
Item_Menu *m;
m = EVRY_ITEM_NEW(Item_Menu, p, NULL, NULL, NULL);
EVRY_ITEM(m)->type = EVRY_TYPE_NONE;
EVRY_ITEM(m)->browseable = EINA_TRUE;
EVRY_ITEM(m)->label = eina_stringshare_add(menu->name);
EVRY_ITEM(m)->icon = eina_stringshare_add(menu->icon);
EVRY_ITEM(m)->usage = -1;
m->menu = menu;
p->menu_items = eina_list_append(p->menu_items, m);
return m;
}
static int
_cb_sort(const void *data1, const void *data2)
{
@ -331,7 +330,7 @@ _begin_exe(Evry_Plugin *plugin, const Evry_Item *item)
p->added = eina_hash_string_small_new(_hash_free);
app = EVRY_ITEM_NEW(Evry_Item_App, p, NULL, _icon_get, _item_free);
app = EVRY_ITEM_NEW(Evry_Item_App, p, NULL, NULL, _cb_item_free);
EVRY_ACTN(app)->action = &_exec_open_file_action;
EVRY_ACTN(app)->remember_context = EINA_TRUE;
EVRY_ITEM(app)->subtype = EVRY_TYPE_ACTION;
@ -532,27 +531,55 @@ static Evry_Plugin *
_begin(Evry_Plugin *plugin, const Evry_Item *item)
{
Plugin *p;
if (item && (item != _act_open_with))
return NULL;
EVRY_PLUGIN_INSTANCE(p, plugin)
EVRY_PLUGIN_INSTANCE(p, plugin);
p->added = eina_hash_string_small_new(_hash_free);
p->menu = efreet_menu_get();
return EVRY_PLUGIN(p);
}
static Evry_Plugin *
_browse(Evry_Plugin *plugin, const Evry_Item *item)
{
Plugin *p;
if (!item)
return NULL;
if (!CHECK_TYPE(item, EVRY_TYPE_NONE))
return NULL;
EVRY_PLUGIN_INSTANCE(p, plugin);
GET_MENU(m, item);
p->added = eina_hash_string_small_new(_hash_free);
p->menu = m->menu;
p->browse = EINA_TRUE;
return EVRY_PLUGIN(p);
}
static void
_finish(Evry_Plugin *plugin)
{
GET_PLUGIN(p, plugin);
Efreet_Desktop *desktop;
Evry_Item *it;
GET_PLUGIN(p, plugin);
EVRY_PLUGIN_ITEMS_CLEAR(p);
/* TODO share with browse instances */
if (p->added)
eina_hash_free(p->added);
if ((!p->browse) && (p->menu))
efreet_menu_free(p->menu);
EINA_LIST_FREE(p->apps_all, desktop)
efreet_desktop_free(desktop);
@ -561,6 +588,9 @@ _finish(Evry_Plugin *plugin)
EINA_LIST_FREE(p->apps_mime, desktop)
efreet_desktop_free(desktop);
EINA_LIST_FREE(p->menu_items, it)
EVRY_ITEM_FREE(it);
E_FREE(p);
}
@ -572,36 +602,64 @@ _fetch(Evry_Plugin *plugin, const char *input)
Evry_Item *it;
History_Types *ht;
Efreet_Menu *entry;
int i = 1;
EVRY_PLUGIN_ITEMS_CLEAR(p);
if (input)
if (!p->browse)
{
if (!p->apps_all)
p->apps_all = _desktop_list_get();
_desktop_list_add(p, p->apps_all, input);
}
else
{
_desktop_list_add(p, p->apps_mime, input);
}
if (!input && !(plugin->items))
{
if (!p->apps_hist)
if (input)
{
ht = evry->history_types_get(EVRY_TYPE_APP);
if (ht) eina_hash_foreach(ht->types, _hist_items_get_cb, p);
if (!p->apps_all)
p->apps_all = _desktop_list_get();
_desktop_list_add(p, p->apps_all, input);
}
else
{
_desktop_list_add(p, p->apps_mime, input);
}
_desktop_list_add(p, p->apps_hist, NULL);
if ((!input) && (!plugin->items))
{
if (!p->apps_hist)
{
ht = evry->history_types_get(EVRY_TYPE_APP);
if (ht) eina_hash_foreach(ht->types, _hist_items_get_cb, p);
}
_desktop_list_add(p, p->apps_hist, NULL);
}
EINA_LIST_FOREACH(plugin->items, l, it)
evry->history_item_usage_set(it, input, NULL);
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
}
if ((p->menu) && (!p->menu_items))
{
EINA_LIST_FOREACH(p->menu->entries, l, entry)
{
if (entry->type == EFREET_MENU_ENTRY_DESKTOP)
{
_item_desktop_add(p, entry->desktop, i++);
}
else if (entry->type == EFREET_MENU_ENTRY_MENU)
{
_item_menu_add(p, entry);
}
/* else if (entry->type == EFREET_MENU_ENTRY_SEPARATOR)
* continue;
* else if (entry->type == EFREET_MENU_ENTRY_HEADER)
* continue; */
}
}
EINA_LIST_FOREACH(plugin->items, l, it)
evry->history_item_usage_set(it, input, NULL);
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
EINA_LIST_FOREACH(p->menu_items, l, it)
EVRY_PLUGIN_ITEM_APPEND(p, it);
return !!(plugin->items);
}
@ -1029,6 +1087,7 @@ _plugins_init(const Evry_API *api)
p = EVRY_PLUGIN_BASE("Applications", _module_icon, EVRY_TYPE_APP,
_begin, _finish, _fetch);
p->complete = &_complete;
p->browse = &_browse;
p->config_path = "extensions/everything-apps";
evry->plugin_register(p, EVRY_PLUGIN_SUBJECT, 1);
_plugins = eina_list_append(_plugins, p);

View File

@ -46,19 +46,16 @@ _finish(Evry_Plugin *plugin)
static Evas_Object *
_icon_get(Evry_Item *item, Evas *e)
{
Evas_Object *o;
Settings_Item *it = (Settings_Item *) item;
if (!item->icon)
{
if (it->eci && it->eci->icon)
item->icon = eina_stringshare_add(it->eci->icon);
else if (it->ecat->icon)
item->icon = eina_stringshare_add(it->ecat->icon);
}
if (it->eci && it->eci->icon &&
((o = evry->icon_theme_get(it->eci->icon, e)) ||
(o = e_util_icon_add(it->eci->icon, e))))
return o;
if (it->ecat->icon &&
((o = evry->icon_theme_get(it->ecat->icon, e)) ||
(o = e_util_icon_add(it->ecat->icon, e))))
return o;
return NULL;
}

View File

@ -391,146 +391,116 @@ evry_util_plugin_items_add(Evry_Plugin *p, Eina_List *items, const char *input,
Evas_Object *
evry_icon_theme_get(const char *icon, Evas *e)
{
Evas_Object *obj = e_icon_add(e);
e_icon_preload_set(obj, 1);
e_icon_scale_size_set(obj, 128);
if (!e_util_icon_theme_set(obj, icon))
{
evas_object_del(obj);
obj = NULL;
}
return obj;
}
static Evas_Object *
_evry_icon_mime_theme_get(const char *mime, Evas *e)
{
Evas_Object *o = NULL;
char buf[1024];
const char *file;
if (snprintf(buf, sizeof(buf), "e/icons/fileman/mime/%s", mime) >= (int)sizeof(buf))
if (!icon)
return NULL;
o = e_icon_add(e);
e_icon_scale_size_set(o, 128);
e_icon_preload_set(o, 1);
file = e_theme_edje_file_get("base/theme/icons", buf);
if (file && file[0])
if (icon[0] == '/')
{
o = edje_object_add(e);
if (!o) return NULL;
if (!edje_object_file_set(o, file, buf))
if (!e_icon_file_set(o, icon))
{
evas_object_del(o);
return NULL;
}
return o;
}
return NULL;
}
Evas_Object *
evry_icon_mime_get(const char *mime, Evas *e)
{
Evas_Object *o = NULL;
const char *icon;
if (!e_config->icon_theme_overrides)
o = _evry_icon_mime_theme_get(mime, e);
if (o) return o;
icon = efreet_mime_type_icon_get(mime, e_config->icon_theme, 128);
if (icon)
o = e_util_icon_add(icon, e);
if (o) return o;
return _evry_icon_mime_theme_get(mime, e);
}
static Evas_Object *
_file_icon_get(Evry_Item *it, Evas *e)
{
Evas_Object *o = NULL;
GET_FILE(file, it);
if (it->icon)
{
if (it->icon[0] == '/')
{
o = e_icon_add(e);
e_icon_preload_set(o, 1);
if (!e_icon_file_set(o, it->icon))
{
evas_object_del(o);
o = NULL;
}
o = NULL;
}
}
if (!(o) && (!it->icon) && file->mime &&
(/*(!strncmp(file->mime, "image/", 6)) || */
(!strncmp(file->mime, "video/", 6)) ||
(!strncmp(file->mime, "application/pdf", 15))) &&
(evry_file_url_get(file)))
else if (!e_util_icon_theme_set(o, icon))
{
char *sum = evry_util_md5_sum(file->url);
snprintf(thumb_buf, sizeof(thumb_buf),
"%s/.thumbnails/normal/%s.png",
e_user_homedir_get(), sum);
free(sum);
if (ecore_file_exists(thumb_buf))
it->icon = eina_stringshare_add(thumb_buf);
else
it->icon = eina_stringshare_add("");
evas_object_del(o);
o = NULL;
}
if (!(o) &&it->browseable)
o = evry_icon_theme_get("folder", e);
if (!(o) && file->mime)
o = evry_icon_mime_get(file->mime, e);
if (!o)
o = evry_icon_mime_get("unknown", e);
return o;
}
Evas_Object *
evry_util_icon_get(Evry_Item *it, Evas *e)
{
Evas_Object *o = NULL;
if (!o && it->icon_get)
if (it->icon_get)
o = it->icon_get(it, e);
if (o) return o;
if (CHECK_TYPE(it, EVRY_TYPE_FILE))
o = _file_icon_get(it, e);
if ((it->icon) && (it->icon[0] == '/'))
o = evry_icon_theme_get(it->icon, e);
if (o) return o;
if (!o && it->icon && it->icon[0] == '/')
if (CHECK_TYPE(it, EVRY_TYPE_FILE))
{
o = e_icon_add(e);
e_icon_preload_set(o, 1);
const char *icon;
char *sum;
GET_FILE(file, it);
if (!e_icon_file_set(o, it->icon))
if (it->browseable)
o = evry_icon_theme_get("folder", e);
if (o) return o;
if ((!it->icon) && (file->mime) &&
(/*(!strncmp(file->mime, "image/", 6)) || */
(!strncmp(file->mime, "video/", 6)) ||
(!strncmp(file->mime, "application/pdf", 15))) &&
(evry_file_url_get(file)))
{
evas_object_del(o);
o = NULL;
sum = evry_util_md5_sum(file->url);
snprintf(thumb_buf, sizeof(thumb_buf),
"%s/.thumbnails/normal/%s.png",
e_user_homedir_get(), sum);
free(sum);
if ((o = evry_icon_theme_get(thumb_buf, e)))
{
it->icon = eina_stringshare_add(thumb_buf);
return o;
}
}
if ((!it->icon) && (file->mime))
{
icon = efreet_mime_type_icon_get(file->mime, e_config->icon_theme, 128);
/* XXX can do _ref ?*/
if ((o = evry_icon_theme_get(icon, e)))
{
/* it->icon = eina_stringshare_add(icon); */
return o;
}
}
if ((icon = efreet_mime_type_icon_get("unknown", e_config->icon_theme, 128)))
it->icon = eina_stringshare_add(icon);
else
it->icon = eina_stringshare_add("");
}
if (CHECK_TYPE(it, EVRY_TYPE_APP))
{
GET_APP(app, it);
o = e_util_desktop_icon_add(app->desktop, 128, e);
if (o) return o;
o = evry_icon_theme_get("system-run", e);
if (o) return o;
}
if (!o && it->icon)
if (it->icon)
o = evry_icon_theme_get(it->icon, e);
if (o) return o;
if (it->browseable)
o = evry_icon_theme_get("folder", e);
if (o) return o;
o = evry_icon_theme_get("unknown", e);
return o;
}

View File

@ -393,9 +393,8 @@ _e_smart_reconfigure_do(void *data)
Smart_Data *sd = evas_object_smart_data_get(obj);
Eina_List *l;
Item *it;
int iw, changed = 0;
Evas_Coord x, y, xx, yy, ww, hh, mw, mh, ox = 0, oy = 0;
Evas_Coord aspect_w, aspect_h;
int changed = 0;
Evas_Coord x = 0, y = 0, xx, yy, ww, hh, mw = 0, mh = 0;
if (!sd) return ECORE_CALLBACK_CANCEL;
@ -407,86 +406,41 @@ _e_smart_reconfigure_do(void *data)
if (sd->cx < 0) sd->cx = 0;
if (sd->cy < 0) sd->cy = 0;
aspect_w = sd->w;
aspect_h = sd->h;
if (sd->view->mode == VIEW_MODE_LIST)
{
iw = sd->w;
ww = sd->w;
hh = SIZE_LIST;
}
else if (sd->view->mode == VIEW_MODE_DETAIL)
{
iw = sd->w;
ww = sd->w;
hh = SIZE_DETAIL;
}
else
{
int size;
int cnt = eina_list_count(sd->items);
double col = 1;
int width = sd->w - 8;
int div;
if (cnt < 5)
{
col = 2;
aspect_w = width * 2;
}
else if ((cnt < 9) && (sd->w < (double)sd->h * 1.2))
{
col = 2;
aspect_w = width * 3;
}
else if (cnt < 10)
{
col = 3;
aspect_w = width * 3;
}
else if (sd->view->zoom == 0)
{
size = 96;
aspect_w = width * (1 + (sd->h / size));
col = width / size;
}
if (sd->view->zoom == 0)
ww = 96;
else if (sd->view->zoom == 1)
{
size = 128;
col = width / size;
aspect_w = width * (1 + (sd->h / size));
}
ww = 128;
else /* if (sd->view->zoom == 2) */
{
size = 192;
col = width / size;
aspect_w = width * (1 + (sd->h / size));
}
ww = 192;
if (col < 1) col = 1;
div = sd->w / ww;
if (div < 1) div = 1;
ww += (sd->w - div * ww) / div;
iw = width / col;
aspect_w /= col;
div = sd->h / div;
if (div < 1) div = 1;
hh = ww + (sd->h - div * ww) / div;
if (hh > ww)
hh = ww + (sd->h - (div + 1) * ww) / (div + 1);
}
if (aspect_w <= 0) aspect_w = 1;
if (aspect_h <= 0) aspect_h = 1;
x = 0;
y = 0;
ww = iw;
if (sd->view->mode == VIEW_MODE_THUMB)
hh = (aspect_h * iw) / (aspect_w);
mw = mh = 0;
EINA_LIST_FOREACH(sd->items, l, it)
{
if (x > (sd->w - ww))
{
x = 0;
y += hh;
}
it->x = x;
it->y = y;
it->w = ww;
@ -495,10 +449,16 @@ _e_smart_reconfigure_do(void *data)
if ((x + ww) > mw) mw = x + ww;
if ((y + hh) > mh) mh = y + hh;
x += ww;
if (x <= (sd->w - ww))
continue;
x = 0;
y += hh;
}
if (sd->view->mode == VIEW_MODE_LIST ||
sd->view->mode == VIEW_MODE_DETAIL)
if ((sd->view->mode == VIEW_MODE_LIST) ||
(sd->view->mode == VIEW_MODE_DETAIL))
mh += sd->h % hh;
if ((mw != sd->cw) || (mh != sd->ch))
@ -518,16 +478,10 @@ _e_smart_reconfigure_do(void *data)
changed = 1;
}
if (sd->view->mode == VIEW_MODE_THUMB)
{
if (sd->w > sd->cw) ox = (sd->w - sd->cw) / 2;
if (sd->h > sd->ch) oy = (sd->h - sd->ch) / 2;
}
EINA_LIST_FOREACH(sd->items, l, it)
{
xx = sd->x - sd->cx + it->x + ox;
yy = sd->y - sd->cy + it->y + oy;
xx = sd->x - sd->cx + it->x;
yy = sd->y - sd->cy + it->y;
if (E_INTERSECTS(xx, yy, it->w, it->h, 0, sd->y - it->h,
sd->x + sd->w, sd->y + sd->h + it->h))