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:

Reference:

https://git.enlightenment.org/core/enlightenment.git/tree/src/modules/start/start.c

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.

Terms:

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



Guarantees:

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



Features:

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

mandatory API functions in order to write a new gadget 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.