Official Announcements

EFL and friends 1.12.0 alpha 1

A bunch of fresh new tarballs with our latest work waiting for your testing before we can go into the final stages of releases.

EFL, Elementary and friends 1.12 alpha tarballs

The second merge window for 1.12 closed a few days ago which means it is time for an alpha tarball of what we have been working on over the last two months. You can find the generated NEWS file content below. They might get updated over the next weeks before the final release but still should give you a rough idea what this release will bring you.

When you take them for some testing please have an eye on problems with OpenGL as we had some big last minute changes here.


Its getting a long post so the most important stuff upfront. Downloads. :-)


What's New



  • evas: add evas gl-drm engine
  • eina: port Eina_Spinlock for OSX
  • eo: mmap()/unmap() are also supported on OSX
  • ecore-wayland: Implement ivi-shell support for Ecore_Wayland (T1552)
  • ecore_cocoa: NSRunLoop integration
  • edje: Edje_Edit - add code to generate edc source for all transition types in programs
  • ecore-drm: Add API function for getting screen geometry
  • ecore-drm: Add API function to get screen geometry
  • ecore-evas-drm: Add function to return screen geometry
  • Eolian/Generator: support @empty and @auto.
  • edje: Edje_Edit - get the buffer with sound's data
  • eeze: Add missing drm subsystem & device type and add a new Eeze_Udev_Type for drm
  • eeze: Add case for EEZE_UDEV_TYPE_DRM in eeze_udev_find_by_type function
  • eeze: Add ability to get syspath from a watch for DRM
  • Merge branch 'devs/devilhorns/eeze'
  • eeze: Add eeze_udev_syspath_get_synum function
  • eeze: Add code for eeze_udev_syspath_get_sysnum function
  • +eina_value_util api
  • eeze: Add Eeze udev types for backlight and leds
  • eeze: Add cases for backlight and leds in eeze_udev_find_by_type
  • eeze: Add cases for backlight and leds in get_syspath_from_watch.
  • ecore-drm: Port ecore_drm_inputs code to use Eeze instead of udev
  • Merge branch 'devs/devilhorns/ecore_drm_eeze'
  • +eina_strdup(), eina_streq()
  • ecore-drm: Added private functions to get brightness levels in backlight
  • Evil: add strptime()
  • ecore-wayland: Add API functions to iconify an Ecore_Wl_Window
  • Merge branch 'devs/devilhorns/xdg_shell'
  • evas: Evas_3D - add .eet export/import
  • edje: Edje_Edit - get the source name of the sample
  • Evas GL: Add API evas_gl_error_get()
  • Evas GL: Add APIs to get current surface/context
  • Evas GL: Add API evas_gl_rotation_get
  • Evas GL: Add support for client-side rotation
  • Evas GL: Add evasglCreateImageForContext + import defs
  • Evas GL: Add support for fence_sync and similar extensions
  • Evas GL: Add evas_gl_surface_query
  • Evas GL: Add support for pbuffer surfaces
  • Evas GL: Add support for OpenGL-ES 1.1 (part 1)


  • evas: Evas_Gl_X11 - add missing eng_window_free
  • evas: Evas_wayland_Egl - fix black surface during resize
  • evas: Evas_Wayland_Egl - change size of common gl context after egl make current according to current Outbuf's size
  • edje: Edje_Edit - fix support for program's targets
  • edje: Edje_cc - fix not storing edc sources in .edj file with --no-save option
  • ecore_evas: Ecore_Evas_X - make sure that ecore evas post render is always called.
  • ecore-evas-wayland: Fix ecore_evas async rendering with wayland engines
  • fix efl deadlock with thread queues
  • ecore-wayland: Remove need for function prototypes
  • ecore-wayland: Fix ecore_wl_screen_size_get function to handle more than one output.
  • ecore_evas: Ecore_Evas_X - Fix broken rendering during rotation with resize (T1371)
  • eina_file: fixing wrong return value on access problems in file copy process
  • gl-drm: Fix missing link to gbm for ecore_evas_drm and clean up build script
  • shutup ecore-x vsync stupid log domain failures
  • ecore-drm: Add local function to free outputs and on any errors during create, call it
  • ecore-drm: Fix copy/paste build error
  • ecore-evas-drm: Fix misplaced #ifdef from gl_drm patch
  • emotion - fix calling pos update cb for gst1 module in frame new
  • emotion - audio volume - leave as-is on file open/init
  • evas textblock: fixed ellipsis character cut off issue with complex markup text. (T1213)
  • edje_cc now throws an error during link combination when the current part has no name
  • evas: fix build on armv7l. (T1620)
  • evas-drm: Fix evas-drm picking incorrect resolution/mode for outputs
  • edje embryo stop_program() should stop pending actions
  • ecore: Check that eo_data_scope_get returns valid Ecore_Timer_Data before trying to use it
  • evas: let's freeze the canvas, shall we ?
  • edje: prevent resource leak.
  • ecore-evas-drm: Implement ecore_evas_pointer_xy_get for drm engine
  • ecore-drm: Close input device fd on error during open and fix some todo messages
  • ecore-drm: Fix missing close of fd on _device_add
  • ecore-drm: Fix drm VT switching to work again
  • Evas: Fix crash in hide
  • ecore-wayland: Allow setting input->cursor_size even if we don't have the shm interface yet
  • ecore-wayland: Don't crash if we have no shm interface yet when setting cursor theme
  • Evas filters: Fix parsing of argument lists (T1615)
  • edje_program: added signal "focus,part,out" when focus is discarded
  • evas: Gl_Cocoa - fix early segfault caused by unloaded symbols
  • efl: Move Eldbus above Ecore_Drm
  • ecore-drm: Remove direct dbus dependency from Ecore_Drm
  • ecore-drm: Add Eldbus header to private header file
  • ecore-drm: Include config.h in private header
  • ecore-drm: Fix private function prototypes for new dbus functions
  • ecore-drm: Rework input code to function with Eldbus
  • ecore-drm: Rework internal dbus code to use Eldbus
  • Merge branch 'devs/devilhorns/ecore_drm'
  • efl - vsync - deal with both broken and non-broken libdrm
  • eina: do no use umask on Windows in eina_file_mkstemp()
  • eeze: Fix return value for eeze_udev_syspath_get_sysnum
  • eeze: Fix issue with eeze_udev_find_by_type not finding devices when name is NULL.
  • ecore-evas-drm: Fix calling ecore_drm_device_find twice in some cases
  • ecore-drm: Move Eeze above Ecore_Drm
  • ecore-drm: Add Eeze as a dependency for Ecore_Drm
  • ecore-drm: Remove dependency on libudev for ecore-drm
  • ecore-drm: Remove internal dependency on libudev
  • ecore-drm: Add Eeze as an internal dependency for ecore-drm
  • ecore-drm: Fix comment to not mention udev
  • ecore-drm: Remove references to udev functions and init Eeze during startup
  • ecore-drm: Fix ecore_drm_device_find function to use Eeze
  • ecore-drm: Remove udev from private header and add an Eeze_Udev_Watch for Ecore_Drm_Input
  • ecore-drm: Port ecore_drm_output backlight init code to use Eeze
  • eeze: Fix missing break in switch(s) (CID1240225, CID1240226)
  • ecore_x_vsync - fix tiny leaklet of drmversion
  • ecore-drm: Remove need to use an extra variable for storing device.
  • ecore-drm: Add an extra blank line just to separate code
  • efreet: Accept both only_show_in and not_show_in
  • ecore-drm: Fix adding an input device when we don't get the devpath from Eeze.
  • ecore-drm: Add some more debug information if a device fails to open
  • ecore-drm: Don't crash if we get no devpath from Eeze
  • Evas Textblock: Fix bad empty line add on wrapping
  • ecore-drm: Fix _device_add function to check input
  • ecore vsync - fix up dual nvidia + dri/drm driver discovery
  • Evil: fix fcntl() when used with F_SETFL
  • eeze: Add configure check for older libudev version
  • eeze: Add ifdef trap for older udev version
  • edje_cc: fix memory leak.
  • eeze - sensors - ints for sensor events were decld in .h - and never .c
  • Evas Textblock: Fix native width of BiDi text (T1532)
  • ecore-wayland: Check return of calloc
  • ecore-wayland: Check for valid shell before sending bound event
  • ecore-wayland: Add support for xdg_surface class name
  • ecore-wayland: Bump xdg_shell version for pending release
  • ecore-wayland: Cleanup shell surface creation
  • ecore-wayland: Add support for handling surface delete callback
  • evas textblock: return text direction for under cursor in cursor geometry get
  • eina: open files in read-onnly for eina_file_open() on Windows
  • ecore_drm: Verifying if name format is /dev/xyz before assigning to tty.
  • evas-gl-common: Fix compile for EGL due to missing GL_LINE_SMOOTH
  • ecore-drm: Fix failure of finding drm device on ARM platforms.
  • ecore-drm: Fix drm cards on ARM platform not having boot_vga parameter
  • ecore-evas-drm: Set the ecore_drm_device reference in the engine data
  • eina: remove macros referencing to absent functions.
  • evas: GL_X11 context need to always be with alpha or it will fail to change.
  • Edje_Edit: creating new hash in global data if it is not created yet
  • Ecore_Win32: Fix string for the BackSpace key on Windows
  • edje: Edje_Edit - fix edje_edit_image_usage_list_get() to return usage list with images with USER compression.
  • edje: Edje_Edit - add state alloc for PROXY part.
  • eio: actually correctly set all field to NULL. (T1729)
  • ecore-wayland: We should be dispatching pending events After we flush clients
  • evas: evas_map - fix cast from double to int with using lround()
  • edje: Edje_Edit - fix edje_edit_state_aspect_pref_set() function to setup Source and None aspect preferences
  • evil: simplify implementation of localtime_r
  • eet: enhance error messages with libjpeg
  • ecore-drm: Default output to NULL and add safety check for NULL output after the device loop.
  • ecore-drm: Create udev watch for each output, and delete the watch when we free the output.
  • evas: Evas_Box - layout_flow_horizontal and layout_flow_vertical fix
  • evas-wayland-egl: Fix function prototype for eng_context_create



  • theme - improve efm icons provided by ApB (T575)
  • elm process state - add events and state get function
  • Introduce current_name_{set|get} (T1664)
  • GLView: Add more configuration flags for the surface
  • GLView: Add support for client-side rotation
  • GLView: Add constructor for GLES 1.1 context glview


  • elm_notify: fixing style applying
  • genlist: Fixed item select logic when item select mode is ALWAYS.
  • gengrid, genlist, list, toolbar: Fixed DISPLAY_ONLY select mode for an object.
  • gengrid: Fixed _item_unselect to check select value not highlight value.
  • genlist: Fixed ELM_OBJECT_SELECT_MODE_NONE codes and added more DISPLAY_ONLY check.
  • gengrid: Fixed ELM_OBJECT_SELECT_MODE_NONE codes and added more DISPLAY_ONLY check.
  • list: Fixed ELM_OBJECT_SELECT_MODE_NONE codes and added more DISPLAY_ONLY check.
  • gengrid/popup: Fix wrong return type of _item_del_pre_hook.
  • gengrid: Fixed item select logic when item select mode is ALWAYS.
  • label: Fix size calculation for wrapped label
  • panel: resize scrollable content in content_size_set API
  • elm examples - missing -lm link - fix
  • elm_map: the widget use efreet cache home to save image files to, so efreet should be initialized.
  • module: detect extention just based on if its windows or not.
  • conform, inwin, progressbar, radio: Fixed wrong part_alias_description implementations and documentations.
  • genlist: Fixed a crash bug in case of calling a genlist_clear in a select callback function.
  • elm_win should not check ELM_ACCEL variable if application has overridden it
  • remove accel_override from elm_config
  • bg: fix the _elm_bg_elm_layout_sizing_eval bug.
  • win: fix segfaults (wrong checking)
  • widget: fix seg fault when ts is NULL.

Evas Generic Loaders


  • Improve LO binary detection

Emotion Generic Players

No significant changes in this release.

by stefan_schmidt (Stefan Schmidt) at October 21, 2014 03:24 PM

Efl and Elementary 1.11.4 releases

Quickly after our last stable update we discovered a regression we introduced in it. This update fixes this regression in efl. If you had problem with efl and the binary Nvidia driver please update to this version.

EFL fixes:

  • Ecore_Win32: Fix string for the BackSpace key on Windows
  • revert this gl x11 alpha "fix". this is worse than before

Elementary fixes:

  • widget: fix seg fault when ts is NULL.



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. If you are compiling the above, please compile them in the following order:


If you have an existing EFL or Elementary install, you may wish to delete its header files and libraries before building the above.

by stefan_schmidt (Stefan Schmidt) at October 21, 2014 01:24 PM

~Boris Faure

Gravatar integration in Terminology

A long time ago, I received an email from a friend on my phone through the K9 application. I didn't have her in my contacts (yet) but it did show me her picture next to the email. I wonder what was the black magic behind that!

It was just K9 using gravatar to try to fetch a picture related to her email address. Since that event, I want to display gravatars as tooltip over email addresses in Terminology. It can be nice in your email client if you use a console-based one or to see an avatar after git-blaming someone :)

I finally wrote the code to do that for the EFL dev day 2014.

How does it work?

It's simple! Take an email, let's say

  1. Trim the leading and trailing spaces.
  2. Lower-case the address. in our example.
  3. Take the md5 hash of that string: 0bc83cb571cd1c50ba6f3e8a78ef1346 in that case.
  4. Fetch + the md5sum.

How does it look?

A small capture of live action:

gravatar tooltip in terminology

Of course it is possible to disable that feature in the Behavior panel in the Settings.

If you have any cool ideas you want to see in Terminology, tell me about them!

by billiob at October 19, 2014 12:00 AM


Elive 2.3.9 beta released

The Elive Team is proud to announce the release of the beta version 2.3.9

This new version includes:

  • VIM suite pre-configured with the best plugins and features available, keeping it fast and full featured
  • Important fixes in the installer: screen turned blank during installation process fixed, grub bootloader fixes and improvements, fixes on upgrade-mode, configurations are run in a detachable tmux now
  • Fix for Thunar that blocked when create a new file
  • Bash security fix included

Notes from the Developers:…

Check more in the Elive website.

by Thanatermesis at October 17, 2014 07:35 PM

Interesting stuff on E

Enlightenment Developer Day 2014

We recently concluded the third Enlightenment Developers Day. It took place on Sunday at the Radisson in Dusseldorf, and was followed by an evening event at the Stammhaus Schumacher brewery.
We would like to thank Samsung for sponsoring the event, all the speakers for the work they put in, and of course, all of the attendees for coming.

The day started out well, with 26 attendees out of 28 that registered. Both missing person were accounted for, and weren't able to attend due to illness or beer-related poor decisions made the night before. We are in Germany after-all. We have had a total of 18 talks by 17 different speakers covering a wide range of topics in the EFL world. We also had a nice lunch sponsored by Samsung, and a lot of interesting conversations in between the talks. All the talks were recorded on video and will be uploaded to the wiki page once we are done with editing.

More information about the schedule, links to the presentations, and links to the videos (once uploaded) can be found on the dev day's wiki page:

In summary, we have a had a good time, managed to cover a lot of topics, and are looking forward to the next one.

by tasn (Tom Hacohen) at October 17, 2014 04:20 PM

~Andy Williams

Enlightenment Dev Day 2014 – Düsseldorf

Another year another E developer day right? Almost. This time was different – I was up to present… Showing the guys how my IDE project was going and why they should all get involved in helping me out. This fitted the theme of the event quite well – Raster started the day by showing how much faster the EFL is growing than GTK+ or Qt and calling to our attention that we needed more developers to support that growth.


I proposed that a great way to encourage more developers is to provide an integrated tooling environment that practically teaches you the EFL way of doing things. Linux has a great many text editors, some of which understand code. If what you want is just to create a project and get coding however there is a significant lack.

Step in EDI – it will be the complete development environment for EFL / Linux and hopefully match the style and polish we all love in Enlightenment too. Lots more exciting things to come on this topic but feel free to grab it now (from source) it’s got the basic functionality in already!

Shortly it will be moved to the main E apps development space and pick up the pace of development too :)

The presentation was recorded and should be online soon – I’ll link to it once it’s available.

Filed under: Coding, Conferences, Enlightenment

by at October 15, 2014 10:52 PM

Official Announcements

Efl, Elementary 1.11.3 and Enlightenment 0.19.1 releases

We are happy to release another stable update for the 1.11.x series.

EFL fixes:

  • Evas filters: Fix parsing of argument lists (T1615)
  • edje_program: added signal "focus,part,out" when focus is discarded
  • efl - vsync - deal with both broken and non-broken libdrm
  • ecore_x_vsync - fix tiny leaklet of drmversion
  • Evas Textblock: Fix bad empty line add on wrapping
  • ecore vsync - fix up dual nvidia + dri/drm driver discovery
  • eeze - sensors - ints for sensor events were decld in .h - and never .c
  • Evas Textblock: Fix native width of BiDi text (T1532)
  • ecore_imf/ibus : provide to get surrounding text
  • evas: GL_X11 context need to always be with alpha or it will fail to change.

Elementary fixes:

  • elm_win should not check ELM_ACCEL variable if application has overridden it
  • remove accel_override from elm_config
  • bg: fix the _elm_bg_elm_layout_sizing_eval bug.


  • don't add nocomp damages for input-only windows
  • check protocol visibility for nocomp breaks, not comp object visibility
  • manually break out of nocomp
  • end nocomp on nocomp end...always
  • force render queue on unmaximize if client was fullscreen
  • add borderless theme for deskmirror clients to support various animations
  • comp render queue on every client resize instead of on unmaximize
  • force comp render queue more aggressively to detect changes in nocomp
  • client hooks should not continue to be called if the client has been deleted
  • thaw evas on winlist activation with no clients available
  • modules/teamwork: Use eina_file_mkstemp() to avoid problems with umask
  • fix: Add more desktops to be tiled by default in the tiling config.

This release comes with a snapshot release of the EFX library containing bugfixes required to use Desksanity 1.0, a module containing various compositing demos and features.



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. If you are compiling the above, please compile them in the following order:


If you have an existing EFL or Elementary install, you may wish to delete its header files and libraries before building the above.

by stefan_schmidt (Stefan Schmidt) at October 14, 2014 02:06 PM

~Boris Faure

Terminology at the EFL Dev Day 2014

The 2014 edition of the EFL Dev Day was held in Düsseldorf yesterday. I gave a quick talk about Terminology.

Just like last year, I used Terminology itself to render my talk.

The code is on github. I refactored it a bit and it should be more usable than the single script I had last year.

Terminology 0.7

During the talk I said that the version 0.7 of Terminology would go out soon and within few hours, it was released.

Distro involvement

I complained about the state of Terminology in the various Linux distributions. It is still hard on many distributions to get Terminology. If Terminology is not available in your distribution, please ask the distribution maintainers to package it!

The future

We have some great features planned but I don't know what features people would like to see soon in Terminology.

Here is a quick list of possibilities:

  • Make miniview an awesome scrollbar,
  • Improvements on CPU usage when on battery,
  • Searchable buffer,
  • Zooming on images,
  • Instant Replay to be able to render the terminal from few seconds ago,
  • Splits in tabs (Currently tabs can be in splits but not the other way around),
  • Have more common "tabs",
  • Bold/Italic,
  • Tmux integration,

If you have some nice ideas, I would like to hear about them! Feel free to contact me or open a "Wishlist" task on phab.

I will probably make a poll about those ideas to know what people think is important to add to Terminology.

The slides

Here are the slides:

Terminology - Oct 2014 - Beyond words

$ whoami

What is Terminology (in case you're really new here)?

What have we done during the past year?


Terminology 0.4 (Dec 2013)

Terminology 0.5 (Mar 2014)

Terminology 0.6 (July 2014)

Terminology 0.7 (now!!!)

Great, but we haven't conquered the world yet

State of Terminology in distros

What's next?

What's next?

Crazy ideas like…

Questions ?

by billiob at October 14, 2014 12:00 AM

Official Announcements

Terminology 0.7

The EFL dev day is over and as was announced, it's time to make a release of Terminology!

Terminology is still the best terminal emulator written with EFL, as described on its about page.

You can download the tarball either as terminology-0.7.0.tar.xz or as terminology-0.7.0.tar.gz.

This release introduces the following main changes:

  • Internationalization and Localization support
  • Configurable key bindings
  • Add a panel to launch elementary_config
  • Opacity level can be configured in translucent mode
  • Options -s/--split to start terminology with multiple splits
  • Add position indicator to the Miniview
  • Improve media controls
  • Use a scalable font on default configuration
  • Usual round of improvements on terminal compatibility
  • Fix issue with mute option
  • Various bug fixes

ed695dc07b54149145779fe958a5c00cf17f4051 terminology-0.7.0.tar.gz
cb761ee07258922c2aa0ccb54cab6c67bdc9a655 terminology-0.7.0.tar.xz

by billiob (Boris Faure) at October 12, 2014 03:49 PM


Elive 2.3.6 beta released

This new version includes:

  • Configured network connections are now persistent on reboot for USB Images.
  • Improved USB bootable Image by creating a separate partition, this fixes the issue with USB images not booting on some rare computers
  • Elive now boots with an amazing Splash theme
  • Improved the listing of kernels on the boot screen
  • Added memtest to the boot screen
  • SSH between Elive computers is now much faster

We appreciate your feedbacks and reports, you can found us on the …

Check more in the Elive website.

by Thanatermesis at September 24, 2014 07:34 PM

Go E19 ! Go !

Rumors And Heresay

Someone seems to have been starting up rumors about E19 release being this week. I don’t know who’s doing it, but they should knock it off this instant. If I find out who it was, they are going to be so grounded. No dessert for a month!

by e-releasemanager at September 09, 2014 01:28 PM

Go E19 ! Go !

The Septembering

It’s been a week, and things have been pretty busy. I’m bringing back an old segment that hasn’t been featured in a while.


E19 Changes From The Past Few Days Which You May Not Be Aware Of:

  • Coverity issues fixed
  • Wayland improvements
    • Pointer fixes
    • Resolution detection now more accurate
  • Systray improvements

Releases are pending.


And now, another new thing that will be appearing in the future:

by e-releasemanager at September 05, 2014 04:55 PM

Go E19 ! Go !

Clean-Up Crew

Lots of things happening lately. Let’s recap:

* Epour 0.60 released

I’m sure none of us would use this for anything other than seeding torrents of our favorite Linux distributions.

* EFL 1.11 released

It’s a dependency of E19. Install it.

* Rage 0.10 released

It’s the next app written by raster after Terminology. Why are you not using it to read this blog?

* EFL Developer Day announced

Signups not yet available, admission will be extremely limited.

* E19 RC3 released

I took a selfie while writing up the release notes as part of a weekly segment that I’ll be doing leading up to EFLDD2014. I’ll be showing teasers of various new things that I’ll be unveiling at the conference. See if you can spot the newness in this week’s shot:

by e-releasemanager at August 29, 2014 05:15 AM

Interesting stuff on E

Rage media player 0.1.0 is out


So I have released the first version of Rage. Version 0.1.0


It is a simple video and audio player intended to be slick yet simplistic, much like Mplayer. You can provide 1 or more files to play on the command-line or just DND files onto the rage window to insert them into the playlist. You can get a visual representation of everything on the playlist by hitting the / key, or just hovering your mouse over the right side of the window. Mouse back over the left side of the window ti dismiss it or press the key again. It has a full complement of key controls if you see the README for the full list. It will automatically search for album art for music files, if not already cached, and display that. It even generates thumbnails for the timeline of a video and allows you to preview the position on mouseover of the position bar at the bottom of the window.

A feature list at this point:

  • Play video and audio files
  • Support a playlist via command-line
  • Insert to playlist via DND
  • Controls hide on mouse idle, and appear on mouse movement
  • Fullscreen mode support with automatic "no blank" support
  • Playlist visual previews and controls
  • Subtitle file support
  • Supports Gstreamer 0.10, Gstreamer 1.x, Xine and VLC as media engines via Emotion modules
  • Selection of media back-end via command-line
  • Album art fetch and caching
  • Video thumbnail timeline generation and caching
  • Works with any Evas engine (OpenGL acceleration, pure software etc.)
  • Works in X11, Wayland and Framebuffer direct support
  • Accelerated seek on keyboard fowrard/reverse
  • Drag gestures for seeking
  • Special different UI modes for pure audio and video

If you want to see more go to the about page at The Enlightenment Rage About Page.


Download Rage 0.1.0

Rage GIT repository

by raster (Carsten Haitzler (Rasterman)) at August 24, 2014 01:54 PM

~Brian Miculcy (last public version) is back online

From time to time developers in IRC channels talk about the good old times in Enlightenment development. Much has been already forgotten, for example the great ETK vs. EWL war. Awesome themes and animated backgrounds hadn't been updated to a newer API and got lost.
That's why i converted the last public version of to a usable format and moved it back online. Maybe developers and themers get nice inspirations from that old stuff - i miss these days... :)

by Brian 'morlenxus' Miculcy at August 20, 2014 03:18 PM

Interesting stuff on E

Yet another C object model - but better

It has been a while since I posted anything about E or EFL. I have been neglectful and it's time to change that. I want to do a quick intro on something really cool and new in EFL. It's part of a long-term move towards EFL 2.0. And that something is... Eo.

So the "G" world (GLib, GTK+, GNOME etc.) has GObject. We couldn't let them have all the fun, so We've made our own. We call it Eo (EFL Objects). It gives you objects in plain-old-C. Not just plain objects, but a host of related features. What do you get?

  • Inheritance
  • Interfaces
  • Mixins
  • Multiple inheritance
  • Method / property overriding
  • Properties
  • All object internals are opaque
  • Reference counting
  • Callbacks (all objects)
  • Cross references
  • Parent / child object hierarchy
  • Weak references
  • Key / value attachment on all objects
  • Code generation / maintenance to avoid boilerplate
    • Define your classes in Eo files cleanly
  • Multiple language support (beyond C) for bindings
    • Done by code generation and base type support
    • Currently C++ and Lua
      • C++ bindings use C ABI, not C++ ABI (fewer problems)
    • Plans to add Python and JS (v8)
  • Runtime type safety for objects
  • Runtime method / property call safety (if not supported becomes NOOP)
  • Object indirection to remove pointer bugs
  • Multi-call per object de-reference (lowers object access overhead)
  • Construction finalizers allowing calls during construction for lower setup overheads

And I'm sure I missed a few things. Why are we doing this? Why re-invent wheels? Why not just port to C++? Oh so many questions.

First - we like C. It just needs some extra filling out. Eo does just that. Changing our API to C++ would instantly shut out a lot of C developers and limit our audience, instead we are doing the inverse. We are adding a full and proper C++ API to EFL that is a direct 1:1 mapping to our Eo classes, properties and so on.

We can't feasibly use GObject without bringing in all of the GLib world with it, and GObject doesn't do many of the above things, so we're choosing a home-grown solution. In fact if you look at Eo a bit, you'll see it resembles JS, Python or Lua in terms of objects more than C++. In fact our object pointer indirection alone means we need to do it ourselves. But really - it's more fun to make your own object system in C.

But really it's a by-product of trying to clean up our libraries and their existing ad-hoc object model. This is basically what GObject did for GTK+ and we are now doing the same. We have a lot of interfaces that are duplicated in normal C functions because that becomes a necessity. Like:

evas_object_image_file_set(obj, "blah.png", "key");
edje_object_file_set(obj, "blah.edj", "group");



There are 100's of such examples across APIs in EFL. We are moving to clean this up and have "one class to rule them all ... and in the darkness bind them":

eo_do(obj, efl_file_set("blah.file", "key"));



Nice and simple now. So how do you make a new class? It's not hard. Make an Eo file like this:

class Tst (Eo.Base)
   data: Tst_Data;
   properties {
      name {
         set { /*@ This sets the name of the tst object */
         get { /*@ This gets the name of the tst object if set */
         values {
            const(char) *name; /*@ The name of the tst object as a C string */
      size {
         set { /*@ This sets the size of the object, and on success
                * returns EINA_TRUE, and on failure EINA_FALSE */
            return Eina_Bool;
         get { /*@ This gets the size set */
         values {
            int size; /*@ The size in pixels */
   methods {
      activate { /*@ This method will activate the tst object, and when
                  * called, any events listening to activated will be
                  * triggered */
         params {
            @in int number; /*@ The number of pixels to activate */
            @in const(char) *string; /*@ A label to display on activation */
         return Eina_Bool; /* If activation succeeds, return EINA_TRUE */
      disable { /*@ This disables the tst object to the level indicated */
         params {
            @in int level; /*@ This is the disabling level to use */
   implements {
   events {
      activated; /*@ When the tst object has been activated */
      disabled; /*@ When the tst object has been disabled */

Now to use the eolian code generators to fill in your class nuts and bolts. Let's assume you saved the above as tst.eo

eolian_gen -I /usr/local/share/eolian/include/eo-1 --gc --eo -o tst.eo.c tst.eo
eolian_gen -I /usr/local/share/eolian/include/eo-1 --gh --eo -o tst.eo.h tst.eo
eolian_gen -I /usr/local/share/eolian/include/eo-1 --gi --eo -o tst.c tst.eo

This generates your class eo header (tst.eo.h) and the body of the code (tst.eo.c) and the actual class implementation in tst.c. You never have to touch tst.eo.c and tst.eo.h as these are fully generated and have no need for human maintenance. So let's look at tst.c:

#include <Eo.h>
#include "tst.eo.h"

typedef struct

} Tst_Data;

EOLIAN static void
_tst_name_set(Eo *obj, Tst_Data *pd, const char *name)


EOLIAN static const char *
_tst_name_get(Eo *obj, Tst_Data *pd)


EOLIAN static Eina_Bool
_tst_size_set(Eo *obj, Tst_Data *pd, int size)


EOLIAN static int
_tst_size_get(Eo *obj, Tst_Data *pd)


EOLIAN static Eina_Bool
_tst_activate(Eo *obj, Tst_Data *pd, int number, const char *string)


EOLIAN static void
_tst_disable(Eo *obj, Tst_Data *pd, int level)


EOLIAN static void
_tst_eo_base_constructor(Eo *obj, Tst_Data *pd)
   eo_do_super(obj, TST_CLASS, eo_constructor());

EOLIAN static void
_tst_eo_base_destructor(Eo *obj, Tst_Data *pd)
   eo_do_super(obj, TST_CLASS, eo_destructor());

#include "tst.eo.c"

This is basically an empty useless class that does nothing, BUT almost all of the boring boilerplate code is done for you. We have no code to USE our test class, so let's make some in main.c:

#include <Eo.h>
#include "tst.eo.h"

static Eina_Bool
on_activated(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info)
   printf("activated callback for %p\n", obj);
   return EINA_TRUE; // pass event on to next cb

static Eina_Bool
on_disabled(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info)
   printf("disabled callback for %p\n", obj);
   return EINA_TRUE; // pass event on to next cb

int main(int argc, char **argv)
   eo_init(); // init eo
   Eo *obj = eo_add(TST_CLASS, NULL);
         eo_event_callback_add(TST_EVENT_ACTIVATED, on_activated, NULL),
         eo_event_callback_add(TST_EVENT_DISABLED, on_disabled, NULL));
   eo_do(obj, tst_activate(37, "Chickens"));
   eo_do(obj, tst_disable(99));
   return 0;

And we shall compile all of this into a small test binary with:

gcc tst.c main.c -o tst `pkg-config --cflags --libs eo eina`

And voila. A tst" binary. Let's now go and fill in our class implementation and update tst.c to be like:

#include <Eo.h>
#include "tst.eo.h"

typedef struct
   int size;
   char *name;
   Eina_Bool activated : 1;
   Eina_Bool disabled : 1;
} Tst_Data;

EOLIAN static void
_tst_name_set(Eo *obj, Tst_Data *pd, const char *name)
   printf("set %s\n", name);
   if (pd->name) free(pd->name);
   pd->name = strdup(name);

EOLIAN static const char *
_tst_name_get(Eo *obj, Tst_Data *pd)
   return pd->name;

EOLIAN static Eina_Bool
_tst_size_set(Eo *obj, Tst_Data *pd, int size)
   printf("size set %i -> %i\n", pd->size, size);
   pd->size = size;
   return EINA_TRUE;

EOLIAN static int
_tst_size_get(Eo *obj, Tst_Data *pd)
   return pd->size;

EOLIAN static Eina_Bool
_tst_activate(Eo *obj, Tst_Data *pd, int number, const char *string)
   printf("activate! %i '%s'\n", number, string);
   pd->activated = EINA_TRUE;
   // strictly correct...
   eo_do(obj, eo_event_callback_call(TST_EVENT_ACTIVATED, NULL));

EOLIAN static void
_tst_disable(Eo *obj, Tst_Data *pd, int level)
   pd->disabled = EINA_TRUE;
   //this is just fine. it's a local call within  an eo_do() already
   // due to eo_do handling its own stack. this works with any method
   // actually that this object inherits/supports
   eo_event_callback_call(TST_EVENT_DISABLED, NULL);

EOLIAN static void
_tst_eo_base_constructor(Eo *obj, Tst_Data *pd)
   eo_do_super(obj, TST_CLASS, eo_constructor());
   pd->size = 77;

EOLIAN static void
_tst_eo_base_destructor(Eo *obj, Tst_Data *pd)
   eo_do_super(obj, TST_CLASS, eo_destructor());

#include "tst.eo.c"

And now things run and do something when we run ./tst:

set Smelly
size set 77 -> 100
activate! 37 'Chickens'
activated callback for 0x8000000000000001
disabled callback for 0x8000000000000001

Of course the above eolian_gen commands would become part of your Makefiles or build setup. it will even "maintain" the implementation file for you (tst.c in the case above) and add methods as you add methods and properties in your class. It won't remove old ones - you'll have to do that, and if parameters change, you'll need to do that yourself, but a lot of the manual footwork has been removed by automated code generation.

Now what if i want a C++ binding to my new class? Well that's easy:

eolian_cxx -I /usr/local/share/eolian/include/eo-1 tst.eo

This will add the base Eo include dir to scan for Eo files and generate bindings for the class in tst.eo and out will pop tst.eo.hh. I won't paste the .hh file here as it is large and complex template-based C++, but you now could write some C++ code to use the same C class such as:

#include <Eo.hh>
#include "tst.eo.hh"

int main()
   efl::eo::eo_init eo_;

   ::tst obj;
       std::cout << "activated callback for " << obj._eo_ptr() << std::endl;
       return true; // pass event on to next cb
       std::cout << "disabled callback for " << obj._eo_ptr() << std::endl;
       return true; // pass event on to next cb
   obj.activate(37, "Chickens");
   return 0;

Just compile it like so:

gcc -c tst.c -o tst.o `pkg-config --cflags eo eina`
g++ tst.o -o tstcc -std=c++11 `pkg-config --cflags --libs eo-cxx eina-cxx`

This ensures you build the pure C object file to tst.o then link it in as part of compiling

So Eo now makes doing objects in C a breeze. It removes a lot of the footwork in C that would make doing objects painful (and which often drives developers to C++ or some other language). It allows you to build simple C APIs that are usable not just from C in an OO way, but in C++ as if they are native C++ APIs, and in other languages too. We're fleshing out the Lua support at the moment, and other languages will appear as time goes on. This isn't just useful in EFL, but for anyone wanting to make simple OO code in C, be it in embedded devices, phones, desktops, laptops or servers. We happen to be doing it so we can offer far nicer APIs for EFL in future as well as clean up lots of internals, provide far more call safety at runtime, but I am sure this may sole some other problems people have out there.

We invite people to test this out and if you're interested, provide a bindings generator for your favorite language or runtime. This then allows such a language to be a "first class citizen" when using EFL, and any other APIs written using Eo. Such binding generation is then automatic with no human intervention. That is the only sane way to support bindings for languages as manual binding eventually fails.

Now what is object indirection? Well like GObject and older GTK+ before it, Qt and others, our objects before Eo were pointers to memory where the object data is stored. This allows programmers to "do bad things" (by accident) and pass in invalid pointers. We used to solve this by checking the pointer is NULL or not, and if not NULL, de-referencing it and checking for some magic numbers in the memory it points to to ensure the object is there and the right type. No more. Now what look like pointers are actually object IDs. They are not able to be de-referenced. They are broken up into separate fields (different bits in the pointer now have different meanings), and looked up in a table. The table is managed in memory away from normal heap allocations and managed by Eo core. This table in turn holds locations in memory of the objects. This means that an invalid pointer is always caught as it fails table range checks or the table entry is NULL. It even tries to detect false positives with generation count checks. This makes object addressing far more robust and basically almost impossible to get to crash. Eo brings this along with it to EFL, improving stability and correctness even when we don't find the bug and a user unfortunately has to encounter it.

This extra object reference checking leads us to the multi-call capability in Eo. This is where you do something like this:

      eo_event_callback_add(TST_EVENT_ACTIVATED, on_activated, NULL),
      eo_event_callback_add(TST_EVENT_DISABLED, on_disabled, NULL));

You can call multiple methods on an object with a single object de-reference/check. This amortizes the cost of such checks over more calls, thus eventually negating them as we now do less checking that we did before on average per call.

Eo also does a check on every method call. If the object does not support that interface/class the call is turned into a no-op and safely returns. This is now guaranteed for every single method call at the C level, so making mistakes and calling the wrong method on the wrong object simply results in some complaints to stderr, and safely marching on.

So much is added and improved with the addition of Eo. Even the existing "legacy" C calls are auto-generated and wrapped on top of Eo calls, so in using EFL today, you are already using Eo, just with a very simple wrapper function on top for compatibility. Every object in EFL is now an Eo object, so you can even mix-and-match old style C calls and newer Eo ones. Eo is a huge step forward for EFL and hopefully is useful to others as well.

by raster (Carsten Haitzler (Rasterman)) at August 18, 2014 03:41 AM


Elive 2.3.5 beta released

The Elive Team is proud to announce the release of the beta version 2.3.5

This new version includes:

  • EFL (enlightenment libraries) are updated to the beta version 1.11
  • Darktable and librecad applications included by default
  • Nightingale is now available from the repositories
  • Right-clicking on a PDF in the File Manager will now give you the option to shrink it
  • Interactive git shortcuts for the Shell
  • Users Home directory is now in their default language
  • Improvements were made to Tmux when

Check more in the Elive website.

by Thanatermesis at August 15, 2014 09:08 PM


Elive 2.3.4 beta released

The Elive Team is proud to announce the release of the beta version 2.3.4

This new version includes:

  • A “Send-to Dropbox” option has been added to the File Manager
  • Right-clicking on a Movie in the File Manager will now give you the option to get the subtitle
  • Applications menu has been redesigned to be more intuitive
  • Laptop wifi switch now works properly on re-activation
  • Keyboard hotkeys for volume and mute control is now configured automatically.

We appreciate your feedbacks and …

Check more in the Elive website.

by Thanatermesis at July 24, 2014 07:39 PM

~Andy Williams

Accelerating the return to enlightenment (With linux on a Yoga 2 Pro)

“If you want to succeed then you need to immerse yourself in the problem” – wise advice from a business mentor of mine… My long serving Apple Macs run everything – work, media, side project coding and now VMs filled with Linux and Enlightenment. They are shiny and solid but have strange keyboard layouts, nonstandard hardware and a bad implementation of virtual desktops that get in the way of desktop virtualisation. So for the first time in nearly 10 years I bought not-a-mac.

This new PC laptop (note not a “windows PC”, I hate that term – it came with windows but that’s not a defining feature…) should be a great device for pushing the limits of modern display and input software. I wanted something light, thin and powerful with at least a 13″ screen. Essentially a competitor to the MacBook Air, but more modern and without the Mac downsides – also avoiding a lookalike, something that’s cool in its own right.

Let’s face it there aren’t a lot of devices in this class but I settled (after some time) on the Lenovo Yoga 2 Pro. This is a solid core i7 device with a decent amount of RAM and SSD storage. The screen is an impressive 13.3″ that has more pixels than my retina 15″ MacBook Pro – as well as being a touch screen too! Couple that with the fact that it inverts to become a tablet. All of those features are packed into a bright orange shell that is no heavier or larger (at the thickest point) than a MacBook Air. Impressive!

So after a short trial of windows 8.1 (yuck! What a confused system) I installed arch Linux (details in a different post – to follow) and it went very smoothly. Out of the box it was up and running with full res video and complete audio in & out. The keyboard (including all the special function keys), trackpad and touchscreen also worked perfectly. After installing the wpa_gui wi-fi was complete too (a little config juggling was required to connect to my secured wifi and download the packages but nothing too taxing). And most surprising when the keyboard is folded back on the screen it is disabled as you expect – though I think this may be a hardware feature. As of now all that is not working is automatic screen rotation (the gyroscope seems non-standard) and the windows icon/button on the screen which I had not realised was a button.

The only issue with the machine so far has been the insanely high pixel density. You can work around it by telling Xorg to scale 2x but you lose the quality so I didn’t want to do that. Thankfully Enlightenment has built-in support for output scaling so I went right ahead and installed the latest version from their source. As with any large compiling from source task it took a while to get all the dependencies but I put that in a script for future use. The compile and install went well – grab EFL, Elementary, Enlightenment and Entrance for a good base experience. Git master is really stable and I really enjoy being on the cutting edge but if you don’t have that thirst then you should probably grab release tarballs instead.

This new machine has given me a great platform to immerse myself in Linux and Enlightenment. Scaling and touch interfaces are things that need a little work still but I’m helping out with that. Next I’m going to be further developing the Enlightenment IDE (EDI) which is already a good place to be working on EFL based code. It’s a work heavily in progress but I’m hoping to get some more contributors soon and start pulling in cool new features to get more Software Engineers into creating apps for Enlightenment.

Want to know more about my E install or Linux on the Yoga 2 Pro? Drop a comment below or hit the contact page.

Filed under: Coding, Enlightenment, Hardware, Operating Systems

by at June 24, 2014 12:25 PM