Enlightenment DR 0.20.6 Release

This bugfix release improves on the 0.20.5 release and resolves a number of issues.
Note: Wayland >= 1.10 is now required for Wayland compositor support.

Carsten “raster” Haitzler (2):

  • e – efm: fix op registry listener add and dont use eina_error
  • e xkbswitch: don’t free layouts that are just pointed to in instances

Chris “devilhorns” Michael (6):

  • update mailmap addresses
  • update mailmap addresses
  • add prototype functions for missing wl_data_offer interface
  • add prototype function for missing wl_seat interface
  • add prototype functions for missing wl_data_source interface
  • don’t have to hook the ecore_evas resize callback here as that should be handled by elm now

Derek “ManMower” Foreman (20):

  • Ensure wayland clients haven’t been deleted when processing callbacks
  • Remove wayland frame callbacks from subsurface cache on destruction
  • Fix xdg-shell destructors
  • Protect the wayland frame callback list from corruption
  • Use eina_list_merge instead of eina_list_move for wayland lists
  • Move pixmap free to client free from client destroy
  • Bump wayland version requirement
  • Remove wayland focus timer in delete callback
  • Add a NULL check in native_surface_init under wayland
  • Render deleted objects as long as they still have a pixmap
  • Track whether objects are on the post_updates list or not
  • Take an extra reference on wayland clients
  • Don’t allow deleted wayland clients to set the cursor
  • Track whether a render is in progress or not
  • Rework wayland buffer handling
  • Remove wayland buffer reference
  • Re-enable window close animations for wayland
  • Stop copying all wayland buffers
  • Don’t use e_pixmap_image_data_argb_convert for wayland images
  • Remove argb_convert for wayland buffers

Mike “zmike” Blumenkrantz (42):

  • clamp minimum shelf size to 20px in shelf config
  • do not perform special case position adjustment for re_manage clients
  • do not clamp comp object input regions to 0,0
  • improve enforcement of shelf autohide-related window adjustment
  • reshuffle x11 comp init to cleanup on failure cases
  • pre-remove pixmap from x11 clients during del hook
  • enable comp object image data refresh if a dirty call is made with no damages
  • redo wayland pixmap ids to use monotonic decreasing ints with no collisions
  • remove some unused variables
  • make bgpreview create vdesk config dialog on mouse up instead of mouse down
  • do not decrement e_comp->new_clients for non-new clients during _e_client_eval
  • update winlist ui when using directional window selection
  • force changed when adding or removing keyboard layouts in config
  • disable emotion_shutdown during shutdown procedure
  • use strbufs instead of strcat in fwin navbars
  • do not set XCURSOR_PATH variable if re-setting existing value
  • remove security hole in e_start_main
  • remove DISPLAY usage from E_IPC_SOCKET value
  • remove multihead env var setting in e_exec
  • strcpy -> strncpy in evry files plugin
  • use strbuf instead of strcat in keybinding string synthesis
  • use strbuf instead of strcat in edgebinding string synthesis
  • use dblequal for double comparisons in edgebindings config
  • replace static buffer usage with binbuf in e_fm_ipc
  • prevent potential null deref during pager (plain) window drag
  • remove unused value in config profile saving
  • remove useless client_add handler in e_ipc
  • use uint instead of int for eina_list_count() return in cpufreq (trivial)
  • simplify static grab case statements
  • remove ipc command allowing arbitrary command execution by the compositor
  • simplify ipc socket creation
  • remove impossible null check in color dialog
  • do not add render updates during damage of deleted clients
  • don’t directly use image data when creating a comp object mirror
  • Revert “send mouse out+in on desk flip end”
  • reject x11 client mouse-in events on comp object based on frame geometry
  • reverse ordering for x11 client mouse in NotifyVirtual and NotifyInferior details
  • only use x11 mouse out event if client has received mouse in previously
  • apply x11 mouse in event for clients using a job
  • apply x11 focus/unfocus using jobs
  • block re-unsetting of native surface for comp objects
  • always run client res changes in e_comp_canvas_update()

Tickets Addressed

As always, stay tuned to the latest infrequent E updates here!


Enlightenment: for when you might otherwise find yourself being too productive.

Building and Dependencies

If you have an existing EFL or Elementary install, you may wish to delete its header files and libraries before compiling and installing to avoid possible conflicts during compilation. Please compile the dependencies in the following order (click for README):

Note: E20 depends on EFL v1.15.2 or newer for X11 compositing and 1.17 for Wayland support.

Below are links to the project pages for each of the dependencies:




The merge finally happened, and the new system is in git. I’ll be doing some posts over the coming days/weeks about various topics, such as how to write gadgets.


The Gadgets Currently In-tree:

  • Start – an exact port of the existing Start gadget which opens the main manu
  • Time – a series of time-related gadgets (obsoletes Clock+TClock modules/gadgets)
    • Analog clock
    • Digital clock with high levels of customization
    • Calendar (just as popup from clock gadgets for now)
  • Wireless – a network connection manager gadget (obsoletes connman gadget + EConnman app)
    • Currently only supports connman, but the gadget is abstracted to make adding support for other systems easier

Without going into too much detail, here’s some basics to know when creating a new gadget:



This is the simplest gadget. It consists of an elm_layout which creates an E_Menu when clicked, and it orients itself based on the gadget anchoring.



  • Gadget site: the container object for gadgets.
    • Maintains configuration data for its gadgets
    • Can be moved, resized, stacked just like any other object
  • Gadget: an object “inside” a gadget site
    • Inside only refers to management, not geometry or stacking
    • Can be moved, resized, stacked just like any other object IF orientation is not set
  • Gadget popup: a popup created by a gadget
    • An object becomes a gadget popup when it passes through the “gadget_popup” smart callback
    • Used to easily track things like when to not autohide the gadget site
    • Some utility functions provided for placing/creating common types of gadget popups
  • Bryce: the new version of E_Shelf
    • This is what happens when I ask for name suggestions and one person decides to make wisecracks
    • Name choice open to discussion
    • Some E_Shelf features NYI



E_Gadget offers a few nice guarantees which its predecessor did not.

  • Orientation will never change for the lifetime of a gadget
    • A gadget will be destroyed and then created again if a different orientation is needed
  • A gadget’s lifetime is either the lifetime of its container OR the lifetime that the gadget decides
    • Gadgets are never destroyed and re-created for any other reason (currently)
  • A gadget’s size will be based on the gadget-set aspect ratio size hint (evas_object_size_hint_aspect_set)
  • DnD is no longer a thing. Ever.
  • Gadget objects will never receive focus
    • This is guaranteed only for gadgets and gadget popups



E_Gadget has a very different set of features, focusing on rapid development and flexibility

  • TWO (2) mandatory API functions in order to write a new gadget
    • e_gadget_type_add, e_gadget_type_del
    • All other functions/callbacks are optional in order to greatly reduce boilerplate code
  • Any object can be a gadget
    • Even windows
    • Or filemanager
  • Gadget sites can be placed anywhere at any time
    • Can dynamically attach themselves to named objects and create/destroy based on target object’s lifetime
      • Lockscreen!
  • Size calculations not necessary other than aspect setting
    • Use aspect. Seriously.


That’s all for now.