~Mike Blumenkrantz

Creative Problem Solving

It's about time for another of my yearly personal blog posts. This time I'll be covering a creative approach that I took to implementing a feature.

The feature: EMPC has a filesystem view which displays a gengrid of all available music. When the user types while this view is active, an entry appears to search for entities in the current directory. While the entry is active, however, the user should also be able to continue using the arrow keys to navigate. Also, there is no cursor in this entry so allowing left/right arrows to move the cursor position is something that must be avoided.

The problem: This seemingly requires splitting focus between the gengrid widget and the entry widget and redirecting certain key presses to each widget. EFL does not permit this type of focus splitting, and attempting to redirect key presses to various widgets is not smart.

First attempt: Initially I figured I'd just let Elementary figure out focus and things would "magically work". I added object key callbacks for both the gengrid and the entry; the gengrid would append to the entry for keys with compose strings, and the entry would operate as usual. Both callbacks had handling code for special keys Escape/Return/Enter which would hide the entry.

Minor success: The arrow keys still functioned as expected, typing continued incrementing the search as expected, and hiding the entry worked as expected.

Major failure: Pressing backspace, which has a valid compose string ("\b"), would cause invalid characters to be added to the entry, and the user would have to start over. Also, other entry keybinds (eg. ctrl+a) would never work as expected. The entry was never receiving focus (thanks elm!), and it would have blocked arrow navigation if it had worked as I expected.

Second attempt: After tossing out a few more failure ideas, I came to the conclusion that there was no way to do this which did not involve the entry itself having focus at all times. Compose, backspace, and shortcut handling is all done in edje internals, and I had no desire to face the efl repo commit message ghestapo unnecessarily by breaking out such features as utility functions. Nor did I want to do any shenanigans with changing the focus object during key press and faking the input object path. No, my path was simpler. I would create an ecore key event handler before the elementary event handler.
To do this requires some knowledge of efl init internals and ordering, but the basic idea is that you manually call ecore_event_init() before elm_init(), set up whatever input event handlers you want (eg. ECORE_EVENT_KEY_DOWN), and then call elm_init(). In the corresponding handler, you can then return 0/false/EINA_FALSE/ECORE_CALLBACK_DONE/ECORE_CALLBACK_CANCEL to prevent the event from being propagated any farther down the canvas. So now, when the entry is active, focus is disallowed on the gengrid to force it onto the entry, and then the arrow keys are filtered in my pre-event handler.
The downside here is that gengrid is another failure widget which lacks a lot of functionality/testing, and so there are no externally accessible functions for navigating directionally. Since there is the constant talk of scrapping gengrid, I opted to write a simple algorithm in my app to calculate and find the target item xy coordinates using elm_gengrid_item_pos_get() with some iteration.

Success: Everything is working as expected, and the related event filtering code can be found here, while the gengrid item navigation code is here.

Overall this was a clever solution to the issue, but not necessarily a great one. I've used this technique for a number of input-related issues in EMPC, and it feels hacky in every case. I think that ideally there should probably be a more intuitive way of doing input blocking and filtering which doesn't require the awful key grab api in evas.

by discomfitor (noreply@blogger.com) at March 10, 2015 06:00 PM

Official Announcements

Enventor v0.5.0

We're glad to announce the release of the Enventor v0.5.0.
For more information please visit the link.


by Hermet (ChunEon Park) at March 02, 2015 05:33 AM


Elive 2.5.8 beta released

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

This new version includes:

  • Kernel: Much improved optimizations to be smaller, faster, and more optimized. A good amount of patches are also included to improve stability even more.
  • More options to select in the boot process for special machines unable to boot correctly, like some rare intel cards.
  • Touchpad: automated detections and special configurations included, like:
  • clickpads has the bottom zone disabled so you are not

Check more in the Elive Linux website.

by Thanatermesis at February 27, 2015 09:30 PM

Official Announcements

Efl and Elementary 1.13.1 release

Another update for the 1.13.x series

Efl fixes:

  • Evas masking: Fix some garbage pixels with the SW engine
  • Evas masking: Fix potential issues with map & masking
  • Evas masking: Force BLEND mode in case of image masking (GL)
  • ecore-drm should not use sscanf when getting logind vt
  • ecore/drm: Fix libinput >= 0.8 check
  • ee-win32 probably might compile now
  • Evas GL: Fix leak of surfaces with GLES 1.1
  • eina + ecore - fix main loop thread id tracking on fork

Elementary fixes:

  • elm engine: Restore explicit use of ELM_ENGNE env var
  • entry: Don't unlink empty files when saving @fix T2122.
  • datetime: Fix elm_datetime_field_limit_set.
  • genlist/gengrid: Add upadating 'focus' state in item realized function.



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 February 27, 2015 03:21 PM

Official Announcements

Enlightenment DR 0.19.4 Release

This bugfix release improves on the 0.19.3 release and resolves a number of issues.


Carsten @raster Haitzler (5):

maximization bug affecting libreoffice and others - fix
e - client list update after adding to client list - fix netwm bug
efm - make dir listing far faster - no file magic content and dont sync
e - menus - fix autoscroll on zones not at 0 y...
e - menus - fix submenu popup direction when zones are not at 0 y

Chidambar @illogict Zinnoury (1):

e backlight: use saner default values.

Dmitry Luhtionov (1):

cpufreq: freebsd fixes

Mike @zmike Blumenkrantz (21):

continue to hide window input regions on desk flip if they are shaded
ensure no duplicate XDG paths are prepended during startup
check for eldbus instead of edbus in device backend libs
block linear desk flips that would wrap if desk flip wrapping is disabled
use direct path for setting icons in util theme set function when icon is a path
don't send unfocused signal to override clients
escape notification popup text...always
fix crashing when changing desklock settings and using pin/personal auth
clamp client size to screen when client limit policy does not allow offscreen
rename extremely frustratingly-named E_Screen_Limits enum and members
do not reapply focus on canvas object ungrab/close for pointer-focus enthusiasts
remove unnecessary icon setting and fix sizing in edgebindings
fix dialog sizing when icon setting fails
set default text for edgebindings caption when no bindings exist
fix appindicator icon loading when using IconThemePath key
don't clamp bgpreview vsize if bgpreview is a fullscreen overlay
fix border frame color classes to be configured as solids, not text
remove wayland-only support

Vincent @vtorri Torri (1):

add MIN define for non-linux systems

As always, stay tuned to the latest infrequent E updates on the release blog.


Enlightenment DR 0.19.4 GZIP1bada8285d9125820a71bc8f5ad9d64b1c07776d5ad31dffe7758f4a9e1def06
Enlightenment DR 0.19.4 BZIP22899e6e67bc13cb53e9d78a4a1e9aace5861485064157d338de327ff50e50c3e
Enlightenment DR 0.19.4 XZe777febb2fa751ec3320fdc3e2ecb0a9b70ec75f2d188fb02edd31004e536b64

Disclaimer: Enlightenment developers cannot be responsible for any successes which occur during testing of E19.

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):

  1. efl
  2. elementary
  3. emotion_generic_players
  4. evas_generic_loaders

Note: E19 depends on EFL v1.11 or newer.

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

by zmike (Mike Blumenkrantz) at February 25, 2015 09:31 PM

Official Announcements

Terminology 0.8

We are pleased to announce the release of Terminology 0.8.

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.8.0.tar.xz or as terminology-0.8.0.tar.gz.

This release introduces the following changes:

Some pretty screenshots:

d4c02adfc0c20615a89d48e54bdf1c8a7f193ebb terminology-0.8.0.tar.gz
917cd21afdab9464e4f4f87443f16a0a0ec6a10a terminology-0.8.0.tar.xz

7a10d44b023cf6134c2483304e4ad33bea6df0f11266aec482f54fa67a3ce628 terminology-0.8.0.tar.gz
e21f1c03a13b7fa4425a078cf8f2d914499ea1311fc99a04e6155ddf6a33786a terminology-0.8.0.tar.xz

by billiob (Boris Faure) at February 15, 2015 05:41 PM


Elive 2.5.4 beta released

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

This new version includes:

  • Automatically detect and notify users about possible hard disk failures (S.M.A.R.T)
  • Wine is updated to last version 1.7
  • File Manager feature: You can now open .ISO images or similar format files and browse their contents. Images ares automatically mounted in a temporary directory) for easier access.
  • You can now use PPA style repositories in Elive (the packager needs to have packages available

Check more in the Elive Linux website.

by Thanatermesis at February 07, 2015 10:24 AM

~Boris Faure

Terminology: on selections

I wanted to fix some bugs around selections in Terminology. In order to keep Terminology rock-solid, I need to test all the ways to make a selection after my changes to be sure I didn't break anything. It is time to make a list and document them.

Usual way to make a selection

Terminology supports selection by clicking somewhere in the window and dragging the pointer to where you want the selection to end, while keeping down the left button of your mouse.

Because Terminology is build with the EFL, a selection is more fancy than just inversing the color like it is usually the case with other terminal emulators.

Here is what is looks like in action:

simple selection

Stretching selections

One nice feature of Terminology is to be able to adjust selections after they have been set.

There are 2 anchors that can be moved. They are the red bars on the words portittor and Aliquam. An animation is played when the mouse hovers the anchors. Clicking and dragging the anchors allows for expanding or expanding the selection.

stretching a selection

Introducing the box selection

Sometimes, the usual way of selecting text is not practical and one would want to crop the text. The box selection is here in that case. Press ctrl when doing the selection and the selection will be a rectangle.

a box selection

It is possible to stretch/shrink those selections too.

Word and line selection

Double-click on a word and it will select it. Triple-click on some text and the whole line will be selected.

a line selection

Resizing the selection will now go by word/line. If you keep the mouse button pressed on your double-click, the selection will go by words as you drag the mouse, until you release the mouse button.

Other ways to make selections

Moving the mouse while having the left button of the mouse may not be practical in some situations. In that case, click somewhere where you would like to start your selection then move the mouse to where you would like your selection to end. There, press shift and click and you have your selection.

ctrl-shift+click makes a box selection. shift+double-click selects text from the original click, up to the word being double-clicked on. This also works with lines and triple-clicks.

Once there is already a selection, making a shift click will extend the current selection up to where the mouse pointer is.

From the original selection, this is what happens after a shift-click above the selection and below it:

an extended selection

When the application is stealing the mouse?

Simply do the selection action with shift pressed.

When is all that available?

It is currently in the master branch of the Terminology repository. The 0.8 version of Terminology will have all those features. It will be released soon.

by billiob at February 07, 2015 12:00 AM


Elive 2.5.2 beta released

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

This new version includes:

  • GIT and SVN integrations into your file-manager!
  • You can now use your iphone to connect to internet using the USB cable
  • Improvements in mobile networks as wimax, also there’s included a wider range of providers for 3G/hdspa
  • Command-not-found feature included now in your shell
  • Default applications assigned to filetypes are much improved now
  • Debian packages updated to 7.8
  • New applications selected: sound-juicer,

Check more in the Elive Linux website.

by Thanatermesis at January 14, 2015 02:35 PM

~Brian Miculcy

XBMC/Kodi: Solving xbmcswift2 error

Some people (including me) stumbled over the error "ImportError: No module named xbmcswift2" when using the TwitchTV or Media.CCC.de Addon. Here is the way to go:
  • Download latest xbmc zip file from here to your XBMC/Kodi installation.
  • Select "Addons" - "Install from Zip" and select the previously downloaded zip file.
  • Restart XMBC/Kodi - done.

by Brian 'morlenxus' Miculcy at January 01, 2015 08:44 PM


Elive 2.5.0 beta released

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

This new version includes:

    • Optimizations in Kernel: CK2 (Con Kolivas patches) with the BFS (Brain F@#k Scheduler) and BFQ (Budget Fair Queueing) set by default that improves your desktop interactivity and your hard disk I/O
    • Updated version 3.16.7 of the kernel to include the new CKT patches that includes a lot of bug-fixes
    • Much more friendly way to know who and where you are in your

    Check more in the Elive Linux website.

    by Thanatermesis at December 18, 2014 05:47 PM

    ~Brian Miculcy

    Start Windowmanager automatically with Systemd

    If you have an encrypted harddisk, you might want to login automatically into X and run your Window Manager. Here is a simple solution to do that without a Login Manager and with Systemd:
    • Uninstall existing Login Managers first.
    • Create a dir `sudo mkdir /etc/systemd/system/getty@tty1.service.d/`.
    • Add a file `sudo vi /etc/systemd/system/getty@tty1.service.d/startx.conf` with this content:
      ExecStart=/usr/bin/sudo -i -u <USERNAME> /usr/bin/startx
    • Reboot system.

    by Brian 'morlenxus' Miculcy at November 20, 2014 11:41 AM

    ~Andy Williams

    Recording of my EDI presentation at E Dev Day 2014

    A video of my EDI (Enlightenment IDE) presentation in Düsseldorf last month – not bad for my first E related appearance I think…

    Filed under: Enlightenment

    by ajwillia.ms at November 18, 2014 08:30 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 MyEmailAddress@example.com.

    1. Trim the leading and trailing spaces.
    2. Lower-case the address. myemailaddress@example.com in our example.
    3. Take the md5 hash of that string: 0bc83cb571cd1c50ba6f3e8a78ef1346 in that case.
    4. Fetch http://www.gravatar.com/avatar/ + 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

    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: https://phab.enlightenment.org/w/events/enlightenment_developer_day_2014/

    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 ajwillia.ms at October 15, 2014 10:52 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

    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