Serious Face: Already On

I fixed a number of issues related to windows today. Specifically:

  • Shaded windows work more reliably across restarts of E
  • Shaded windows no longer allow resizing
  • Shaded/shading windows no longer fetch pixmap info in the compositor
  • Shaded windows no longer animate on restart of E
  • Windows no longer sometimes position themselves slightly offscreen on a restart of E
  • Shaped windows no longer place their border icons on the desktop
  • Shaped windows now accept mouse input only in the expected shape rectangles, allowing things like recordmydesktop to function again
  • Autoraise once again functions when mousing into an already-focused window
  • Fixed some cases where focus should have been applied to modal windows but weren’t
  • Fixed an issue where focus could become permanently locked onto a window due to pointer warping

Sparklebear: Creating An Annoying Window Frame With Edje

I decided today to take some time and do something which I’m about to advocate in a presentation: write a fun developer tutorial. Will I succeed? Maybe.

Step 1: Figure out what the hell to write about.
I see lots of tutorials on various programming languages or toolkits, and the examples are almost always boring and a waste of my time. As the E18ReleaseManager, I’ll need to write a tutorial which is the opposite: interesting and a waste of my time.

Step 2: Ensure that the tutorial has no practical application.
If I tell people how to write an IRC client, I’ll get flooded by people testing their clients or asking for help. This has to be a tutorial for something which can’t possibly be used for any purpose other than the one that I plan for.

Step 3: Find an artist.
Tutorials which use custom artwork are always much better than other tutorials. I had the amazing Paul Amesbury at my side for a few minutes today to accomplish exactly this purpose. Beautiful custom artwork: check.

 

Step 4: Explain the tutorial’s purpose.

See the title of this post. I don’t think I really need to go into more detail, do I?

 

Step 5: Write the code.

WordPress doesn’t format code effectively.

Going over the code here is hard since you’ll have to flip back and forth, but I have to waste more time flipping back and forth just to write it so I think it’ll even out.

  • I’ve inherited the default border frame group using Edje’s group inheritance mechanism. This gives me a sort of blank slate that I can modify, and it’ll still behave just like the default frame.
  • The gorgeous custom artwork replaces the normal, boring frame gradient.
  • A new part, stacked above (insert_after) the normal top of the frame, is set as a PROXY, meaning it just renders the exact same thing as its source: in this case, the top of the border. This allows me to use the original geometry of the top of the frame.
  • The rest of the part code is just overwriting some geometry from the original group so that the objects will remain relative to the new proxy object at all times.
  • There’s really only three important programs here:
  1. “in” – sets the coordinates when the mouse enters the frame
  2. “out” – resets the frame (using animations!) when the mouse leaves it
  3. “anim” – increases the usability of the frame by moving it towards the mouse
  • The rest of the programs just block the usability-enhancing program during resize; we don’t want to be TOO helpful!

 

Step 6: Commit to upstream, preferably without testing, to let your readers know that you made an awesome code drop.

I’ve failed part of this since I spent some time explaining the merits of the usability-enhancing frame to my coworkers, and thus did some actual testing. My apologies to all the readers out there.

 

Step 7: Screenshots.

I would have made a movie or a gif, but…I didn’t.

Here’s a shot of this artistic window frame in its natural, focused state:

Another shot while focused, this time we see the frame utilizing its increased mobility to enhance my experience while trying to close the window.

And, lastly, here’s another shot (this time unfocused!) where the frame is helpfully moving aside so that I can click the conveniently located button behind it.

 

 

And there you have it: an unparalleled, step-by-step developer tutorial on how to create beautiful and helpful new window frames for E18 using Edje.

 

Other Items Of Import:

  • Systray no longer sometimes shrinks to 0×0 when its contents are cleared
  • Appmenus using dbus no longer crash
  • Shaped windows now set input rectangles more accurately and effectively

Slow Burn

I added a new top-level entry to the border menu today:

Other Items Of Import:

  • Shaded windows once again ignore mouse events
  • Menus no longer permanently grab the mouse in some cases
  • Mouse focus events are now blocked during desk flip animations

Bugs Closed:

Note that Trac is dead, and I will not look at any bugs filed there.

Bits And Pieces

Not too much excitement to report today. Window shading is now done by edje and compositor which makes it look a lot smoother, and edge bindings should now function once more. Lots of time spent in bureaucracy again.

Regret

I’m currently embroiled in a bitter fight to the death with a presentation this week, so it’s unlikely that I will be doing much code-related stuff. Stay tuned for my eventual world dominationreturn to real work, hopefully by the end of this week or early next.

 

In other news, an attempt was made (and immediately shot down) to do an EFL 1.8 alpha release today. Better luck next time, gents.

Bigass Update

It’s been a while since I’ve written a real blog post, so I’m going to do a bit of a roundup here. Brace yourselves.

WAYLAND STATUS:

Thanks to the work of Chris “devilhorns” Michael, AKA “The Man With Two First Names”, Wayland client support in E18 is a go.

Wayland clients DO:

  • Display normally
  • Use E focus models (sloppy/click/pointer)
  • Receive keyboard/mouse input, including keymap inheritance
  • Dynamically update keymaps
  • Correctly perform window actions including moving, resizing, maximizing, closing
  • Display popup menus normally
  • Allow interaction with popup menus

Wayland clients DO NOT:

  • Minimize (not implemented in Wayland protocol)
  • Fullscreen (un-fullscreening not implemented, so this was disabled to prevent complaining)
  • Use EGL when rendering (wait a couple days)

Videos:

EFL:

Carsten “rasterman” Haitzler has written a new scaling algorithm for OpenGL images in Evas so that they will render more smoothly.

Cedric “King of B0rkers” Bail has spent most of this development cycle breaking things as usual working to dramatically reduce memory consumption, and Edje objects are now almost 50% smaller than they were a few months ago.

Terminology has, after less than a year, reached v0.3 on 26 March 2013. Since then, there have been improvements in:

  • Man page existence (Panagiotis “Godfath3r” Galatsanos)
  • Media playing
  • Tabs
  • Text reflow (Boris “billiob” Faure)
  • Not crashing
  • Command line parameters
  • Creation/usage of edje objects as widgets

Meanwhile, a mild engineering war came and went between a Polish engineer at Samsung using QT and a French engineer at Samsung using EFL. TL;DR: EFL test case starts 3 times faster and uses 30% less memory, but QT is probably easier to write with due to the immaturity of our Elev8 project.

Rafael “RGB” Antognolli has taken up the mantle of managing our stable releases, and there was a flurry of packaging done the week of his inaugural 1.7.6 release (9 April 2013). Ubuntu users can still find the official EFL PPA here, and users of other distributions probably don’t need as much hand-holding.

Infrastructure:

Thanks to the combined efforts of the so-called gitsvn elimination team (Tom “TAsn” Hacohen and Daniel “asdfuser” Willmann), we have recently moved most of our currently active projects to our new git server. The transition was mostly without incident, and they’ve also switched us from Trac to Phabricator. Some stragglers are still living in the past and using Trac, but we expect to lock that soon and finalize the switch. Anyone wanting to join the new age can find our bug tracker here.

In addition to this, Stefan Schmidt and Daniel “asdfuser” Willmann (The German Coalition of Efficiency and Excellence) have set up a number of Jenkins installations to stop Cedricvarious people from constantly breaking builds. Interested readers will note I am currently dominating the leaderboard to the point that I have been accused of locally build-botting my own commits.

Enlightenment:

Most surfaces (menus, popups, window border frames, startup splash, DND images) have been flattened onto the compositor canvas. This means that we are now able to do neat things with image proxies on that canvas, such as the deskmirror widget I blogged about yesterday. All of this is now the simple case of taking pixel data which will be rendered in one place and then also rendering it in another place, made possible by the scenegraph workings of Evas. It also means generally faster interaction with these objects since we no longer have to wait for X roundtrips when trying to move/resize/configure them; users will see a more dramatic improvement here during the E19 development cycle.

Other related improvements of note:

  • Options for automatic screen locking/unlocking based on bluetooth device availability with l2ping (Cedric “King of B0rkers” Bail)
  • Various mixer fixes (Jérémy “jeyzu” Zurcher)
  • More work on systemd session support (Cedric “King of B0rkers” Bail)
  • Desk flip animations are now theme-defined and much smoother; also added new and gratuitous “zoom” animation
  • More crashing

At this point, E18 is nearly feature-complete, and we are expecting its release within the next few months.

Mirrormaze

It’s been a while since I’ve blogged, but work has progressed.

 

At this point, E18 is functionally complete. All targeted surfaces have been merged onto the compositor canvas, and we can do some pretty neat graphical stuff. I’m planning to post in a bit more depth, but in the meanwhile some teaser images of the new “deskmirror” widget which I’ve been using for bug testing over the past week:

 

 

 

Everything in the central popup is a mirror of the outer object, and no object data has been duplicated.

Follow

Get every new post delivered to your Inbox.