This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch animated-tasks-bar
in repository efl.
View the commit online.
commit 351eac0043aebbd7ede0c119e0f696b1daa29121
Author: [email protected] <[email protected]>
AuthorDate: Sat Mar 7 17:11:11 2026 -0700
feat: add text scrolling animation to taskbar items on hover
The taskbar (tasks module) displays window titles with ellipsis (...) when
text is too long to fit. This adds a smooth scrolling animation triggered
by mouse hover, revealing the full window title by animating left and right
across a sinusoidal 2-second loop. The effect matches the existing connman
gadget's WiFi SSID scroll behavior for UI consistency.
Additionally, the icon dims to 25% opacity during hover, drawing user
attention to the scrolling title and improving visual hierarchy.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
data/elementary/themes/edc/tasks.edc | 157 ++++++++++++++++++++++++++++++++++-
1 file changed, 156 insertions(+), 1 deletion(-)
diff --git a/data/elementary/themes/edc/tasks.edc b/data/elementary/themes/edc/tasks.edc
index 1ceae93a91..1411d108d4 100644
--- a/data/elementary/themes/edc/tasks.edc
+++ b/data/elementary/themes/edc/tasks.edc
@@ -88,6 +88,15 @@ group { name:"e/modules/tasks/item";
visible: 1;
}
}
+ part { name: "icon_dim"; type: RECT; mouse_events: 0;
+ clip_to: "icon_clip";
+ description { state: "default" 0.0;
+ color: 255 255 255 255; // no cc
+ }
+ description { state: "visible" 0.0;
+ color: 255 255 255 64; // no cc
+ }
+ }
part { name: "normal_clip"; type: RECT; mouse_events: 0;
clip_to: "label_clip";
description { state: "default" 0.0;
@@ -122,6 +131,38 @@ group { name:"e/modules/tasks/item";
inherit: "default" 0.0;
color_class: "/fg/pressed/gadgets/tasks/text/normal";
}
+ description { state: "scroll_left" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/normal";
+ offscale;
+ rel1.relative: 0.0 0.0;
+ rel1.offset: 4 4;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: 4 -5;
+ align: 1.0 0.5;
+ fixed: 1 1;
+ text { font: FN; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ }
+ }
+ description { state: "scroll_right" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/normal";
+ offscale;
+ rel1.relative: 1.0 0.0;
+ rel1.offset: -5 4;
+ rel2.relative: 1.0 1.0;
+ rel2.offset: -5 -5;
+ align: 0.0 0.5;
+ fixed: 1 1;
+ text { font: FN; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ }
+ }
}
part { name: "focused_clip"; type: RECT; mouse_events: 0;
clip_to: "label_clip";
@@ -158,6 +199,40 @@ group { name:"e/modules/tasks/item";
inherit: "default" 0.0;
color_class: "/fg/pressed/gadgets/tasks/text/focused";
}
+ description { state: "scroll_left" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/focused";
+ offscale;
+ rel1.relative: 0.0 0.0;
+ rel1.offset: 4 4;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: 4 -5;
+ align: 1.0 0.5;
+ fixed: 1 1;
+ text { font: FNBD; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ text_source: "e.text.label";
+ }
+ }
+ description { state: "scroll_right" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/focused";
+ offscale;
+ rel1.relative: 1.0 0.0;
+ rel1.offset: -5 4;
+ rel2.relative: 1.0 1.0;
+ rel2.offset: -5 -5;
+ align: 0.0 0.5;
+ fixed: 1 1;
+ text { font: FNBD; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ text_source: "e.text.label";
+ }
+ }
}
part { name: "iconic_clip"; type: RECT; mouse_events: 0;
clip_to: "label_clip";
@@ -194,6 +269,40 @@ group { name:"e/modules/tasks/item";
inherit: "default" 0.0;
color_class: "/fg/pressed/gadgets/tasks/text/iconified";
}
+ description { state: "scroll_left" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/iconified";
+ offscale;
+ rel1.relative: 0.0 0.0;
+ rel1.offset: 4 4;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: 4 -5;
+ align: 1.0 0.5;
+ fixed: 1 1;
+ text { font: FN; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ text_source: "e.text.label";
+ }
+ }
+ description { state: "scroll_right" 0.0;
+ color_class: "/fg/normal/gadgets/tasks/text/iconified";
+ offscale;
+ rel1.relative: 1.0 0.0;
+ rel1.offset: -5 4;
+ rel2.relative: 1.0 1.0;
+ rel2.offset: -5 -5;
+ align: 0.0 0.5;
+ fixed: 1 1;
+ text { font: FN; size: 10;
+ min: 1 1;
+ align: 0.5 0.5;
+ ellipsis: -1;
+ text_class: "tasks_text";
+ text_source: "e.text.label";
+ }
+ }
}
part { name: "icon"; type: SPACER;
scale: 1;
@@ -257,7 +366,7 @@ group { name:"e/modules/tasks/item";
}
}
part { name: "e.swallow.icon"; type: SWALLOW; mouse_events: 0;
- clip_to: "icon_clip";
+ clip_to: "icon_dim";
description { state: "default" 0.0;
aspect: 1.0 1.0; aspect_preference: VERTICAL;
rel.to: "icon2";
@@ -419,6 +528,52 @@ group { name:"e/modules/tasks/item";
target: "icon_clip";
target: "label_clip";
}
+
+ program { name: "scroll_start"; signal: "mouse,in"; source: "event";
+ action: STATE_SET "visible" 0.0;
+ transition: DECELERATE 0.25;
+ target: "icon_dim";
+ after: "scroll_init";
+ }
+ program { name: "scroll_init";
+ action: STATE_SET "scroll_right" 0.0;
+ target: "e.text.label";
+ target: "label_focused";
+ target: "label_iconic";
+ after: "scroll_l";
+ }
+ program { name: "scroll_l";
+ action: STATE_SET "scroll_left" 0.0;
+ transition: SINUSOIDAL 2.0;
+ target: "e.text.label";
+ target: "label_focused";
+ target: "label_iconic";
+ after: "scroll_r";
+ }
+ program { name: "scroll_r";
+ action: STATE_SET "scroll_right" 0.0;
+ transition: SINUSOIDAL 2.0;
+ target: "e.text.label";
+ target: "label_focused";
+ target: "label_iconic";
+ after: "scroll_l";
+ }
+ program { name: "scroll_stop"; signal: "mouse,out"; source: "event";
+ action: ACTION_STOP;
+ target: "scroll_start";
+ target: "scroll_init";
+ target: "scroll_l";
+ target: "scroll_r";
+ after: "scroll_reset";
+ }
+ program { name: "scroll_reset";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "e.text.label";
+ target: "label_focused";
+ target: "label_iconic";
+ target: "icon_dim";
+ }
}
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.