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 c3c8f6a316104200c10433dfbf108e0dd8284d8f
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Thu Aug 31 10:20:57 2023 +0100
rationalize add and mod file cmds to share code and handle size changes right
---
src/efm/efm_back_end.c | 232 ++++++++++++++++++++++---------------------------
src/efm/efm_structs.h | 31 +++----
2 files changed, 121 insertions(+), 142 deletions(-)
diff --git a/src/efm/efm_back_end.c b/src/efm/efm_back_end.c
index 5c98af2..249a323 100644
--- a/src/efm/efm_back_end.c
+++ b/src/efm/efm_back_end.c
@@ -311,6 +311,78 @@ _icon_xy_wh_get(Smart_Data *sd, Icon *icon, Cmd *c)
}
}
+static void
+_max_size_recalc(Smart_Data *sd)
+{
+ Icon *icon;
+ Eina_List *l;
+
+ sd->file_max = 0;
+ EINA_LIST_FOREACH(sd->icons, l, icon)
+ {
+ if (icon->info.size > sd->file_max) sd->file_max = icon->info.size;
+ }
+}
+
+static void
+_icon_add_mod_props_get(Icon *icon, Cmd *c, const char *label)
+{
+ const char *s;
+ unsigned long long size;
+ Eina_Bool recalc = EINA_FALSE, queue = EINA_FALSE;
+
+ eina_stringshare_replace(&(icon->info.label), label);
+ s = cmd_key_find(c, "label-clicked");
+ if (!s) s = cmd_key_find(c, "link-label-clicked");
+ eina_stringshare_replace(&(icon->info.label_clicked), s);
+ s = cmd_key_find(c, "label-selected");
+ if (!s) s = cmd_key_find(c, "link-label-selected");
+ eina_stringshare_replace(&(icon->info.label_selected), s);
+ s = cmd_key_find(c, "mime");
+ if (s) eina_stringshare_replace(&(icon->info.mime), s);
+ if (s) printf("XXXXX mime=%s\n", icon->info.mime);
+ s = cmd_key_find(c, "desktop-icon");
+ if (!s) s = cmd_key_find(c, "link-desktop-icon");
+ if (s) eina_stringshare_replace(&(icon->info.pre_lookup_icon), s);
+ s = cmd_key_find(c, "desktop-icon.lookup");
+ if (!s) s = cmd_key_find(c, "link-desktop-icon.lookup");
+ if (!s) s = cmd_key_find(c, "icon");
+ if ((s) && (s[0] == '/')) eina_stringshare_replace(&(icon->info.icon), s);
+ s = cmd_key_find(c, "link-desktop-icon-clicked");
+ if (!s) s = cmd_key_find(c, "desktop-icon-clicked");
+ if (s) eina_stringshare_replace(&(icon->info.icon_clicked), s);
+ s = cmd_key_find(c, "link-desktop-icon-selected");
+ if (!s) s = cmd_key_find(c, "desktop-icon-selected");
+ if (s) eina_stringshare_replace(&(icon->info.icon_selected), s);
+ s = cmd_key_find(c, "mime-icon");
+ 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, "broken-link");
+ if ((s) && (!strcmp(s, "true"))) icon->info.broken = EINA_TRUE;
+ else icon->info.broken = EINA_FALSE;
+ s = cmd_key_find(c, "size");
+ if (s)
+ {
+ size = atoll(s);
+
+ if ((icon->info.size == icon->sd->file_max) && // icon already max size
+ (size < icon->sd->file_max)) // new size is now less
+ {
+ recalc = EINA_TRUE; // need to recalc what is max
+ queue = EINA_TRUE; // we need to also update all bars
+ }
+ icon->info.size = size;
+ if (size > icon->sd->file_max)
+ { // new size is bigger than prev max size
+ icon->sd->file_max = size;
+ queue = EINA_TRUE; // queue all size bar updates
+ }
+ if (recalc) _max_size_recalc(icon->sd);
+ if (queue) _size_bars_update_queue(icon->sd);
+ }
+}
+
static void
_cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
{ // handle data from the view thread to the UI - this will be a batch of cmds
@@ -355,6 +427,8 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
sd->listing_done_reblock = EINA_TRUE;
CMD_DONE;
}
+
+ // below commands all send a path for a specific file
file = cmd_key_find(c, "path");
printf("XXXXX [%s] [%s]\n", c->command, file);
if (file)
@@ -393,42 +467,18 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
icon->cmd = c;
icon->changed = EINA_TRUE;
icon->info.file = eina_stringshare_add(file);
- eina_stringshare_replace(&(icon->info.label), label);
- s = cmd_key_find(c, "label-clicked");
- if (!s) s = cmd_key_find(c, "link-label-clicked");
- eina_stringshare_replace(&(icon->info.label_clicked), s);
- s = cmd_key_find(c, "label-selected");
- if (!s) s = cmd_key_find(c, "link-label-selected");
- eina_stringshare_replace(&(icon->info.label_selected), s);
- s = cmd_key_find(c, "mime");
- if (s) eina_stringshare_replace(&(icon->info.mime), s);
- if (s) printf("XXXXX mime=%s\n", icon->info.mime);
- s = cmd_key_find(c, "desktop-icon");
- if (!s) s = cmd_key_find(c, "link-desktop-icon");
- if (s) eina_stringshare_replace(&(icon->info.pre_lookup_icon), s);
- s = cmd_key_find(c, "desktop-icon.lookup");
- if (!s) s = cmd_key_find(c, "link-desktop-icon.lookup");
- if (!s) s = cmd_key_find(c, "icon");
- if ((s) && (s[0] == '/')) eina_stringshare_replace(&(icon->info.icon), s);
- s = cmd_key_find(c, "link-desktop-icon-clicked");
- if (!s) s = cmd_key_find(c, "desktop-icon-clicked");
- if (s) eina_stringshare_replace(&(icon->info.icon_clicked), s);
- s = cmd_key_find(c, "link-desktop-icon-selected");
- if (!s) s = cmd_key_find(c, "desktop-icon-selected");
- if (s) eina_stringshare_replace(&(icon->info.icon_selected), s);
- s = cmd_key_find(c, "mime-icon");
- 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);
+
+ _icon_add_mod_props_get(icon, c, label);
+
+ // handle raw "stat" type and set mime accordingly if needed
+ // this can't change on a file - it'd have to be deleted and
+ // added again to do this.
s = cmd_key_find(c, "type");
if (s)
{
if (!strcmp(s, "link"))
{
icon->info.link = EINA_TRUE;
- s = cmd_key_find(c, "broken-link");
- if ((s) && (!strcmp(s, "true")))
- icon->info.broken = EINA_TRUE;
s = cmd_key_find(c, "link-type");
}
if (s)
@@ -465,23 +515,13 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
}
}
}
- s = cmd_key_find(c, "size");
- if (s)
- {
- unsigned long long size = atoll(s);
-
- if (size > sd->file_max)
- {
- sd->file_max = size;
- _size_bars_update_queue(sd);
- }
- }
if (!icon->info.mime)
eina_stringshare_replace((&icon->info.mime),
"inode/file");
_icon_xy_wh_get(sd, icon, c);
+ // insert the icon in the right place in the list
for ( ; il; il = il->next)
{
icon2 = il->data;
@@ -501,9 +541,7 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
unsigned long long size = atoll(s);
if (size == sd->file_max)
- {
- _size_bars_max_update_queue(sd);
- }
+ _size_bars_max_update_queue(sd);
}
_icon_free(icon2);
if (il) icon2 = il->data;
@@ -517,8 +555,25 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
}
}
if (!il)
+ sd->icons = eina_list_append(sd->icons, icon);
+ }
+ else if (!strcmp(c->command, "file-mod"))
+ {
+ for ( ; il; il = il->next)
{
- sd->icons = eina_list_append(sd->icons, icon);
+ icon = il->data;
+ if (!strcmp(file, icon->info.file))
+ {
+ icon->changed = EINA_TRUE;
+
+ _icon_add_mod_props_get(icon, c, label);
+
+ _icon_xy_wh_get(sd, icon, c);
+
+ cmd_free(icon->cmd);
+ icon->cmd = c;
+ break;
+ }
}
}
else if (!strcmp(c->command, "file-del"))
@@ -536,15 +591,10 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
{
// XXX: select prev or next icon
}
- s = cmd_key_find(icon->cmd, "size");
- if (s)
- {
- unsigned long long size = atoll(s);
-
- if (size == sd->file_max)
- {
- _size_bars_max_update_queue(sd);
- }
+ if (icon->info.size == icon->sd->file_max)
+ { // this icon is at max size in dir
+ _max_size_recalc(icon->sd); // find new max
+ _size_bars_update_queue(icon->sd); // redo all bars
}
_icon_free(icon);
break;
@@ -553,78 +603,6 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
cmd_free(c);
c = NULL;
}
- else if (!strcmp(c->command, "file-mod"))
- {
- for ( ; il; il = il->next)
- {
- icon = il->data;
- if (!strcmp(file, icon->info.file))
- {
- icon->changed = EINA_TRUE;
- eina_stringshare_replace(&(icon->info.label), label);
- s = cmd_key_find(c, "label-clicked");
- if (!s) s = cmd_key_find(c, "link-label-clicked");
- eina_stringshare_replace(&(icon->info.label_clicked), s);
- s = cmd_key_find(c, "label-selected");
- if (!s) s = cmd_key_find(c, "link-label-selected");
- eina_stringshare_replace(&(icon->info.label_selected), s);
- s = cmd_key_find(c, "mime");
- if (s) eina_stringshare_replace(&(icon->info.mime), s);
- if (!icon->info.mime)
- eina_stringshare_replace((&icon->info.mime),
- "inode/file");
- s = cmd_key_find(c, "desktop-icon");
- if (!s) s = cmd_key_find(c, "link-desktop-icon");
- if (s) eina_stringshare_replace(&(icon->info.pre_lookup_icon), s);
- s = cmd_key_find(c, "desktop-icon.lookup");
- if (!s) s = cmd_key_find(c, "link-desktop-icon.lookup");
- if (!s) s = cmd_key_find(c, "icon");
- if ((s) && (s[0] == '/')) eina_stringshare_replace(&(icon->info.icon), s);
- s = cmd_key_find(c, "link-desktop-icon-clicked");
- if (!s) s = cmd_key_find(c, "desktop-icon-clicked");
- if (s) eina_stringshare_replace(&(icon->info.icon_clicked), s);
- s = cmd_key_find(c, "link-desktop-icon-selected");
- if (!s) s = cmd_key_find(c, "desktop-icon-selected");
- if (s) eina_stringshare_replace(&(icon->info.icon_selected), s);
- s = cmd_key_find(c, "mime-icon");
- 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, "broken-link");
- if ((s) && (!strcmp(s, "true")))
- icon->info.broken = EINA_TRUE;
- else
- icon->info.broken = EINA_FALSE;
- s = cmd_key_find(icon->cmd, "size");
- if (s)
- {
- unsigned long long size = atoll(s);
-
- if (size == sd->file_max)
- {
- _size_bars_max_update_queue(sd);
- }
- }
- s = cmd_key_find(c, "size");
- if (s)
- {
- unsigned long long size = atoll(s);
-
- if (size > sd->file_max)
- {
- sd->file_max = size;
- _size_bars_update_queue(sd);
- }
- }
-
- _icon_xy_wh_get(sd, icon, c);
-
- cmd_free(icon->cmd);
- icon->cmd = c;
- break;
- }
- }
- }
cprev = c;
}
eina_list_free(batch);
@@ -635,7 +613,7 @@ _cb_thread_notify(void *data, Ecore_Thread *th EINA_UNUSED, void *msg)
{
if (block->realized_num <= 0) continue;
EINA_LIST_FOREACH(block->icons, il, icon)
- { // unrealize the icon - we odd/event forces this
+ { // unrealize the icon - list odd/even forces this
if (!icon->realized) continue;
icon->realized = EINA_FALSE;
icon->block->realized_num--;
diff --git a/src/efm/efm_structs.h b/src/efm/efm_structs.h
index 75fe215..c671fcd 100644
--- a/src/efm/efm_structs.h
+++ b/src/efm/efm_structs.h
@@ -110,21 +110,22 @@ struct _Smart_Data
// file info gagthered
struct _File_Info
{
- const char *file;
- const char *label;
- const char *label_selected;
- const char *label_clicked;
- const char *mime;
- const char *icon;
- const char *icon_selected;
- const char *icon_clicked;
- const char *mime_icon;
- const char *pre_lookup_icon;
- const char *thumb;
- Eina_Bool dir : 1;
- Eina_Bool link : 1;
- Eina_Bool broken : 1;
- Eina_Bool special : 1;
+ const char *file;
+ const char *label;
+ const char *label_selected;
+ const char *label_clicked;
+ const char *mime;
+ const char *icon;
+ const char *icon_selected;
+ const char *icon_clicked;
+ const char *mime_icon;
+ const char *pre_lookup_icon;
+ const char *thumb;
+ unsigned long long size;
+ Eina_Bool dir : 1;
+ Eina_Bool link : 1;
+ Eina_Bool broken : 1;
+ Eina_Bool special : 1;
};
// a block of icons as a group
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.