Page MenuHomePhabricator

Theme Migration
Updated 1,893 Days AgoPublic

This page lists theme API changes/breaks. The use of must and should in this document should be interpreted identically to their uses in RFC text.


Enlightenment 22 provides a new gadget infrastructure, and in turn new gadgets were created. The following is a list of aliases you can use, as well as which gadgets will need their own theme.


Modules -> Gadgets
*e/modules/backlight/main -> e/gadget/backlight/main
*e/modules/backlight/main -> e/gadget/backlight/main_vert
*e/modules/battery/main -> e/gadget/batman/main
*e/modules/battery/main -> e/gadget/batman/main_vert
*e/modules/cpufreq/main -> e/gadget/cpuclock/main
*e/modules/cpufreq/main -> e/gadget/cpuclock/main_vert
*e/modules/mixer/main -> e/gadget/mixer/main
*e/modules/mixer/main -> e/gadget/mixer/main_vert
*e/modules/pager16/popup -> e/gadget/pager/popup
*e/modules/pager16/desk -> e/gadget/pager/default/desk *See Note At Bottom
*e/modules/pager_plain/desk -> e/gadget/pager/plain/desk *See Note At Bottom
*e/modules/pager_plain/window -> e/gadget/pager/plain/window
*e/modules/start/main -> e/gadget/start/main
*e/modules/temperature/main -> e/gadget/thermal/main
*e/modules/temperature/main -> e/gadget/thermal/main_vert
*e/modules/xkbswitch/main -> e/gadget/xkbswitch/main
*e/modules/xkbswitch/main -> e/gadget/xkbswitch/main_vert

If you are not familiar with aliasing please read the edje documentation on groups here:

**For e/gadget/pager/default/desk and e/gadget/pager/plain/desk, you will need to add one part just before your e.swallow.content part called e.swallow.drop and here is an example (Including this part in your e/modules/pager* theme will have no effect on the shelf version of pager, only the e/gadget/ alias):

part { name: "e.swallow.drop"; type: SWALLOW;
         clip_to: "clip";
         description { state: "default" 0.0;
            rel2.offset: -2 -1;
            visible: 1;
            link.base: "e,state,visible" "e";
         description { state: "hidden" 0.0;
            visible: 0;
            link.base: "e,state,hidden" "e";


The following are new theme parts introduced that you will not be able to alias:

View the theme files here: to get a full list of what signals are used and what scripts/messages to handle



  • e/widgets/border/modal/border is used for modal dialogs; currently an alias of e/widgets/border/dialog/border
  • e/widgets/border/* now has data.item`frame_extends` which is a hint to fix input for themes which extend past the object's bounding box (ie. have negative offsets)
  • e/deskmirror/frame/*
  • e/modules/packagekit/*
  • e/comp/effects/iconify/*
  • e/desklock/pin_box
  • e/desklock/pin_button
  • e/modules/pager/* <- new pager module, previously pager16
  • e/comp/frame/* <- moved from e/comp/border/*, NOT backwards compatible. Any theme providing this group must adapt to the following changes:
    • e,state,visible,on -> e,state,visible
    • e,state,visible,off -> e,state,hidden
    • e,state,focus,on -> e,state,focused
    • e,state,focus,off -> e,state,unfocused
    • e,state,urgent,on -> e,state,urgent
    • e,state,urgent,off -> e,state,not_urgent


  • As a result of Edje 1.10 changes, any TEXT part which has text.min: 1 [0|1]; set must also have text.ellipsis: -1; set to prevent the text from ellipsizing
  • e/conf/randr/main/frame group now has e,state,refresh,[enabled|disabled] signals (source: e) to allow toggling of refresh arrow visibility
  • e/desklock/login_box now has e,state,logo,[hidden|visible] signals (source: e) to allow toggling of logo visibility
  • e/comp/screen/overlay/default theme must emit e,state,screensaver,active (source: e) after completing any animations resulting from signal e,state,screensaver,on source e
  • e/fileman/default/icon/* now has e,state,rename,[on|off] signals (source: e) to determine rename state
  • e/modules/ibar/menu theme must emit e,action,show,done (source: e) after completing any animations resulting from signal e,action,show source e
  • modules/music-control/* -> e/modules/music-control/*
  • Groups which previously used the shadow data.item to determine shadow visibility must now instead use the noshadow flag for disabling shadows; shadows are enabled by default.
  • e/modules/pager/* -> e/modules/pager_plain/*



  • e/modules/ibar/separator/default
  • e/modules/ibar/separator/horizontal
  • e/modules/ibar/menu
  • e/modules/ibar/menu/item
  • e/comp/screen/base/noeffects
  • e/comp/effects/none
  • e/comp/effects/auto/* <--these are the per-window desk flip animation styles

slated for rename due to lack of namespacing (blame @zehortigoza and possibly @lucasdemarchi):

  • modules/music-control/icon
  • modules/music-control/main
  • modules/music-control/popup


  • e/modules/systray/main group is now only a RECT for events under a single BOX with part name "box"
    • this is slated for rename to "" for proper namespacing in future; direct blame to @zehortigoza
  • e/modules/comp/* has been renamed to e/comp/*
  • e/modules/comp/$border_type has been renamed to e/comp/border/$border_type
  • e/comp/border/$border_type groups should have corresponding e/comp/border/$border_type/fast group with shorter effect durations
  • e/comp/screen/base/default and e/comp/screen/base/noeffects groups must contain a SWALLOW part "e.swallow.background" in order for wallpapers to be displayed
    • this SWALLOW part should be clipped
  • e/modules/conf_edgebindings/selection now has BOX part "" instead of SWALLOW part "e.swallow.check", alignment changed, developers should read corresponding Elementary-1.8 theme
  • e/widgets/menu/* groups must have mouse event coverage for the entire space of the group in order for menus to receive mouse events
  • e/widgets/border/* groups:
    • must clip SWALLOW part "e.swallow.client"
    • must set visibility:0 on SWALLOW part "e.swallow.client" during shaded state
    • must set mouse_events:1 for SWALLOW part "e.swallow.client"
    • must have the shadow parts in theme if shadows are desired; default e/comp/* groups no longer provides window shadows
    • should set data.item "shadow" "1" if they provide a shadow
    • should have clipper for shadow parts to use during window shading
      • shadow display is now enabled with signal "e,state,shadow,on" and disabled with signal "e,state,shadow,off"
    • must have event coverage for entire group
    • must set repeat_events:1 for event parts
    • must have pixel-perfect part positioning with no gaps between parts
  • e/widgets/button group can now receive "e,state,focused" and "e,state,unfocused" signals to indicate focus state
  • e/modules/ibar/icon group now receives "e,state,on" and "e,state,off" signals to control application launch indicator parts
Last Author
Last Edited
Sep 28 2017, 8:10 AM