This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository efm2.
View the commit online.
commit 3de3fbbb2237916945422352d2f676b5a70d32e8
Author: Carsten Haitzler (Rasterman) <[email protected]>
AuthorDate: Tue Feb 17 13:15:05 2026 +0000
implement custom meta fields for icons to override
---
TODO.md | 1 -
src/backends/default/open.c | 30 +++++++++++++++++++++++++++++-
src/efm/efm_back_end.c | 19 +++++++++++++++++++
3 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/TODO.md b/TODO.md
index 1ab843c..c29596e 100644
--- a/TODO.md
+++ b/TODO.md
@@ -22,7 +22,6 @@
* Filesystem info (df like with total available)
* Remember scroll pos, view size/pos
* Set window icon correctly for dir
-* Set custom icon per file
* Special icons for special filenames/paths (~/Desktop, ~/Videos etc.)
* Single click/select mode
* Favorites view move (manual .order changes, cb's for selecting single click)
diff --git a/src/backends/default/open.c b/src/backends/default/open.c
index 33190d5..38b7097 100644
--- a/src/backends/default/open.c
+++ b/src/backends/default/open.c
@@ -729,6 +729,25 @@ _file_add_mod_meta_append(const char *path, const char *meta, const char *key,
eina_stringshare_del(s);
}
+static void
+_file_add_mod_meta_icon_append(const char *path, const char *meta,
+ const char *key, struct stat *st,
+ Eina_Strbuf *strbuf)
+{
+ Eina_Stringshare *s = meta_get(path, meta);
+ char *resolved = NULL;
+
+ if (!s) return;
+ if ((s[0]) && (s[0] != '/')
+ && (resolved = _icon_resolve(path, s, st)))
+ {
+ cmd_strbuf_append(strbuf, key, resolved);
+ free(resolved);
+ }
+ else cmd_strbuf_append(strbuf, key, s);
+ eina_stringshare_del(s);
+}
+
static void
_cmd_typebuf_icon_send(const char *icon)
{
@@ -1067,6 +1086,15 @@ _file_add_mod_info(Eina_Strbuf *strbuf, const char *path, Eina_Bool delay)
// add extra meta keys that might be used for immediate icon/file display
_file_add_mod_meta_append(path, "xy", "meta.xy", strbuf);
_file_add_mod_meta_append(path, "wh", "meta.wh", strbuf);
+ _file_add_mod_meta_icon_append(path, "icon", "meta.icon", &st, strbuf);
+ _file_add_mod_meta_icon_append(path, "icon-selected", "meta.icon-selected",
+ &st, strbuf);
+ _file_add_mod_meta_icon_append(path, "icon-clicked", "meta.icon-clicked",
+ &st, strbuf);
+ _file_add_mod_meta_icon_append(path, "icon-over", "meta.icon-over", &st,
+ strbuf);
+ _file_add_mod_meta_icon_append(path, "icon-badge", "meta.icon-badge", &st,
+ strbuf);
// get order index number if any
order = _order_index_get(file);
if (order > 0)
@@ -1948,4 +1976,4 @@ do_shutdown(void)
efreet_shutdown();
ecore_file_shutdown();
}
-;
\ No newline at end of file
+;
diff --git a/src/efm/efm_back_end.c b/src/efm/efm_back_end.c
index bfd4e93..f28c02b 100644
--- a/src/efm/efm_back_end.c
+++ b/src/efm/efm_back_end.c
@@ -322,6 +322,15 @@ _icon_xy_wh_get(Smart_Data *sd, Icon *icon, Cmd *c)
}
}
+static void
+_icon_meta_override(Icon *icon, const char *value)
+{
+ if ((!value) || (!value[0])) return;
+ eina_stringshare_replace(&(icon->info.pre_lookup_icon), value);
+ if (value[0] == '/')
+ eina_stringshare_replace(&(icon->info.icon), value);
+}
+
static void
_max_size_recalc(Smart_Data *sd)
{
@@ -375,6 +384,16 @@ _icon_add_mod_props_get(Icon *icon, Cmd *c, const char *label)
if (s) eina_stringshare_replace(&(icon->info.mime_icon), s);
s = cmd_key_find(c, "thumb");
if (s) eina_stringshare_replace(&(icon->info.thumb), s);
+ s = cmd_key_find(c, "meta.icon");
+ if (s) _icon_meta_override(icon, s);
+ s = cmd_key_find(c, "meta.icon-clicked");
+ if (s) eina_stringshare_replace(&(icon->info.icon_clicked), s);
+ s = cmd_key_find(c, "meta.icon-selected");
+ if (s) eina_stringshare_replace(&(icon->info.icon_selected), s);
+ s = cmd_key_find(c, "meta.icon-over");
+ if (s) eina_stringshare_replace(&(icon->info.icon_over), s);
+ s = cmd_key_find(c, "meta.icon-badge");
+ if (s) eina_stringshare_replace(&(icon->info.icon_badge), s);
s = cmd_key_find(c, "broken-link");
if ((s) && (!strcmp(s, "true"))) icon->info.broken = EINA_TRUE;
else icon->info.broken = EINA_FALSE;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.