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.


4 thoughts on “Gadgets!

  1. My suggestion for a name to replace “Bryce” would be “gondola”.
    Those in the know ( comrades, obviously) know why, but here are some good reasons for those who don’t:
    – it is a fairly poetic name, as is Enlightenment,
    – it is its own translation in most European languages,
    – you are supposed to get in it, sailing endlessly forgetting all the hardships of life, like with E,
    – 『Aqua』 and 『Aria』 are great mangas,
    – it is also a supermarket shelf holder.


  2. Pingback: Links 6/3/2016: KDE Sprint at CERN, Collabora Office 5.0 | Techrights

Join the flame war

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s