Buffering

As anyone who is subscribed to the development mailing list already may have seen, today is almost a noteworthy day in E world. Why’s that?

 

E19 is going into feature freeze at the end of next month. Read more about it on the mailing list if you aren’t lazy.

 

FAQ (let’s be honest, there’s only one)

  • Q: When will E19 be released?
  • A: There is currently no set date or estimated date for E19. My only goal with regard to time is to release before July 2023, though I may be forced to delay until September 2026 depending on celestial alignments.

Resistance

I was going to say something clever, but then I added another feature after writing the title and forgot what I was going to say. Suffice to say, nothing of value was lost. Let’s git log it up:

  • Iconify animations are now even more themeable thanks to some work by Carsten “Canvas Commander” Haitzler
  • Pager popups once again delete themselves after the configured delay
  • Compositor effect signals are now extensible
  • Some crashes may or may not have been added or removed
  • Focus no longer resets to iconic clients (except on startup because I haven’t fixed that yet)
  • Menu placement improved thanks to Daniel “I like Quake” Kolesa
  • Pager16 popups now have shadows
  • Internal canvas objects with compositor hooks can now be matched for themes like windows and popups
  • Compositor theme matching is now more accurate
  • Compositor theme matching dialog no longer crashes after an edit
  • X window stacking is now more accurate
  • First draws of X windows are now more complete
  • Internal windows now show their compositor visibility animations
  • New option for active hint policy to only activate windows on a visible desktop

 

I also spent some time on the second category of the config option docs today. Unfortunately, this page cannot be edited by mere mortals, and it truncates itself when people try; I apparently can’t even revert to a previous working version after someone broke it yesterday, so it’ll have to wait for  someone with more internet powers to fix it with the updates.

 

Tomorrow is going to be an announcement day, so stay tuned!

Accelerated Evolution

Okay, when I get comments about my lack of posts and people start finding this blog on The Reddit, that’s usually an indicator that I need to blog more often.

First up, let’s check the git logs since there’s been a lot of activity (~100 commits) over the past week:

  • Fullscreen toggling on windows restores correct positioning
  • More backlight handling improvements and significant optimization
  • Window frame icons now delete themselves when using themes without icons (eg. pixel borders)
  • Connman check in first-run wizard now less likely to fail
  • EFM now has no icon shadows when renaming
  • Application menus/popups/etc once again render shadows as expected
  • Drag-n-drop to external applications once again functions as expected
  • Internal windows with multiple drop handlers (eg. EFM with navigation toolbar) now accurately drop to the right handler
  • Internal windows with multiple drop handlers (eg. EFM with navigation toolbar) no longer leak handlers
  • Many improvements to internal input tracking
  • Various popups once again show above windows
  • Lots of improvements to shaped X client rendering (eg. fucking chromium  addon menus; it’s 2014 guys, read up on argb)
  • More accurately reset focus when closing various popups
  • Lots of improvements to X window stacking accuracy
  • Restarts of E19 now preserve window stacking accurately
  • …and also re-set focus more reliably
  • Mouse cursor cleanups
  • Various GTK clients render again after becoming maximized
  • Improve accuracy and speed of rendering for X overrides (ie. application menus/popups)
  • Slider widget moves in correct direction when up/down keys are pressed
  • Pager modules no longer have symbol conflicts and crash when switching between them
  • Pager (original) popups are once again visible
  • Canvas focus now correctly resets when closing last remaining visible window
  • Binding resets now reset according to original parent profile
  • EFM has a new option to allow video size clamping in preview popups
  • EFM video previews now show resolution
  • Urgency state is now set more reliably in various cases
  • Sticky windows now function as expected
  • Various CPU-intensive features are now frozen while screensaver is active

In vaguely related happenings, EFL 1.8.5, Elementary 1.8.4, Emotion Generic Players 1.8.1, and Enlightenment 0.18.3 releases occurred today. A big thanks to Stefan Schmidt for including the E18.3 release with the others. This release includes all bugfixes which have occurred since the E18.2 release last month, most notably the fix for external DND operations.

During the process of fixing some things last week I was planning on posting a feature article about the process of fixing a “hard” bug, with some screenshots and various ramblings about how much I hate the XSHAPE extension, but it got away from me and I didn’t take screenshots or document anything as I went. Also, I was skeptical that anyone would actually care since the process would take time away from more interesting topics as well as actual bug fixing. Ideally next time I find a funny bug I’ll take some good screenshots to post as bloopers since the last time I posted bloopers it was fairly well received. Articles like this are fun to write since it’s easy to come up with the content.

I was struck by a terrible and interesting idea this morning. I did something similar last January, so perhaps this is a recurring idea that I get every January. Next year may confirm or reject this hypothesis. Anyway, I’ve begun writing full documentation for every configuration option in E. So far, the “Look” category is done, and I’m going to try and do one category each day* until it’s done.

I’ve got a big announcement planned for the end of the week, and I may or may not update the blog before that.

* “Day” here is defined as “time when I remembered that I was documenting configuration options”

<raster> i added that support last year in march or so

It’s been a busy several days despite my best efforts to not do work. I fixed lots of things and a new module was merged, so let’s recap the git logs:

 

  • PackageKit module merged from Davde Andreoli to provide Easy access to package management
  • Fixed menus to not hide before showing themselves in some cases
  • Fixed input being allowed during client hide animations
  • Removed erroneous raise on maximize
  • Fixed input when maximizing/fullscreening windows
  • Fixed geometry adjustments when maximizing/fullscreening windows
  • Fixed client raise stack to not be changed when frozen
  • Ibar menu ignores mouse events during animation
  • Ibar menu now more natural timings for showing and hiding on mouseover
  • Ibar menu now dynamically adds new items while open
  • Ibar menu can no longer be open at the same time as its gadget menu
  • Fixed shaped window rendering in cases where BOUNDING shape changed
  • Ensure WITHDRAWN state is set on non-closing X clients during hide
  • Fixed syscon popup to show above clients
  • Improved input accuracy for borderless clients
  • Added options for screen wakeups on various events
  • Fixed focus issues when (un)iconifying clients
  • Fixed shading animations
  • Removed some unnecessary compositing renders
  • Fixed first frame rendering accuracy for clients
  • Fixed Xrandr backlight level resume from blank

I also cooked a big block of pork last night.

Replicant

New tickets opened in the past 24 hours: 22

Tickets I’ve closed in the past 24 hours: 11

Commits I’ve pushed to master in the past 24 hours: 95

Hours I’ve spent with GDB running in the past 24 hours: 18

 

MRW

Extraneous

I blame my lack of posts here on the lack of people bugging me to write posts here. I don’t wake up in the afternoon, put on my developer capris, drink five cups of coffee, and then immediately think “I should write a blog post”. No, I do the rest of those things, fire up GDB, and then emerge from a debugging fugue sometime the following day wondering what happened.

 

A while ago, I promised roadmap postage. Given that I just pushed out a huge dump of commits from E19 into master, this seems like an apt time for talking a bit about what’s coming in the E19 release. Let’s start with the main things first:

  • New compositor / window manager

As some of you may know, E17 was in development for a little while. What you may not know is that it did not have a composite module for the entire duration of that development cycle. Given that, as I’ve said before, the E17 compositor was much like the outboard motor of compositors, it’s safe to say that there was a lot of work to be done to properly integrate it. E18 was a step in the right direction, but it was a very small and timid step: basically the outboard motor got some duct tape strapped around it to hold it on better.

With E19, the compositor is completely integrated with the rest of the architecture. This lets us do neat things like treat clients (regardless of whether they’re X or Wayland) as regular canvas objects. Moving/resizing/restacking canvas objects is much easier than doing the same for “windows”! It also makes it a lot easier to do some other things like bring back the E16 pager or do some slightly more advanced move/resize/flip effects, such as those provided by the desksanity module. More on this, as well as some demos and screenshots, in future posts.

  • Better Wayland integration

HTML5Wayland is the future, and we must appease our non-X overlords. Wayland support in E18 was…interesting, to say the least, and E19 makes it much simpler. There’s still a bunch of work to be done here before I would call it completely usable, but it does work without crashing right now, and that’s 90% of the battle.

 

That’s it. Those are the only main features which were needed for a release of E19. There are a number of other goodies besides these two, but I would have been fine with releasing nothing else. What other features are planned in this release? Here’s some of the things which have already been done in core:

  • Compositor config is no longer a module
  • E16-like live pager
  • Desk flip animations can be handled externally
  • Move/resize animations can be handled externally
  • Custom (non-system) desklock passwords
  • Desklock visuals are now handled by modules
  • PIN-style desklock
  • New config option: Raise on revert focus
  • XPRESENT extension support

I’ve still got one more noteworthy-but-totally-sekrit feature that I’m planning on adding before release, and it’s also very likely that Davide Andreoli’s PackageKit module will be merged within the next week given previous community demand, my own positive code review, and its tiny code size (918 lines wtfisthisheromodule).  After that, I’ll probably be closing the feature window sometime in February which will start up another release marathon. Didn’t I just do a major release? Overlapping development cycles are confusing.