Wayfire 0.7.0 announcement

Hello everyone! Today is the day that Wayfire 0.7.0 was released. There have been quite a few exciting changes since the last time I wrote here. Check all the new features and (unfortunately) the few breaking changes below:

Scale plugin (in 0.6.0)

Scale plugin is definitely the coolest new feature in Wayfire. Developed primarily by Scott Moreau and Daniel Kondor, it is now part of the main plugins. Scale lets you view all windows on the current or on all workspaces by arranging these windows in a grid, very similar to how GNOME’s Overview works. Check out the video below to see it in action:

Setting it up is quite simple - first, enable the scale plugin either via WCM or the config file, then set up the bindings:

[scale]
toggle = <super>
toggle_all = <super> KEY_A

interact = false # Or true

Both are activator bindings which means that you can set keys, buttons or gestures to activate the plugin. Scale also has an interactive mode, which lets you actually type in or click on the scaled windows. See the wiki for full information on the available options.

Revamped window-rules (in 0.6.0)

Another contributor, Erik Van Hamme, has completely rewritten the window-rules plugin. window-rules lets you execute certain actions when a window is opened, maximized and on a few other events. The actions themselves can be maximizing, moving a window to a workspace or changing its alpha. For details on the exact syntax, available events and actions consult this wiki section.

Touchscreen improvements (in 0.6.0)

I have completely rewritten the touchscreen handling in Wayfire. A few bugs regarding multitouch in clients were fixed along the way, but the noticeable improvements are in the gesture handling. Gesture recognition has been split out from the main repository and resides in the wf-touch library. New features include support for swipe and pinch gestures with less than 3 fingers (especially useful for edge swipe gestures), and also support for arbitrary gestures in plugins like tap, multi-touch drag, rotate, etc.

Blur optimizations (in 0.6.0)

The last big changes which made it in the 0.6.0 release were three significant performance improvements to the blur plugin:

  1. The blur algorithms themselves now support a much higher degrade (up to 10). The degrade parameter makes the blur algorithms scale down the background before doing computations. Because of the nature of the effect, higher degrade values actually mean both improved performance and stronger blurring!

  2. It is now possible to specify which windows are to be blurred. This way you could for example blur your terminal and panel, but not blur other mostly opaque applications.

  3. The damage tracking of blurred surfaces has also been improved, resulting in overall less redrawn areas when blur is active.

Breaking changes (in 0.7.0)

There have, unfortunately, been several breaking changes related to input and output devices. The section for an output is now called output:<connector> instead of just <connector> (e.g. renamed from [HDMI-A-1] to [output:HDMI-A-2]). The layout option in each output’s configuration has been renamed to position. The mode option now no longer supports specifying the refresh rate as a floating-point number.

Input devices have had a similar change. A device called [Wacom Tablet] would now have a section named [input-device:Wacom Tablet].

The motivation for these changes has been that with the new syntax, they can be properly checked by wf-config and users can now see error messages indicating the exact line where their config is wrong.

Another breaking change is the removal of the simple animation from the Grid plugin. It should be replaced with crossfade, which is much smoother.

New protocols support

  • The input-method and text-input protocols are supported for touchscreen keyboards.
  • The idle-inhibit protocol is now supported so that outputs are not turned off because of inactivity when for example Firefox is open with a video playing.
  • The wp-viewporter protocol is supported for scaling and cropping view’s contents. It is needed for Xwayland games which attempt to change the resolution (there are still other missing pieces though), as well as for some Wayland-native clients.

Sticky windows support

Sticky windows always stay on the current workspace. The sticky state of a window can be toggled with the activator binding wm-actions/toggle_sticky from the wm-actions plugin.

Others

There have been numerous smaller additions and bug fixes. Notable ones:

  • Core has support for direct scanout, which means that some clients (fullscreen, matching output scale and transform, without any transformers) can be directly presented to the driver instead of being rendered by Wayfire. This can lead to higher performance for such clients, because the GPU does not have to copy the contents of the window to Wayfire’s buffer.
  • There have been several new actions that are available via the wm-actions plugin. Users can now configure bindings to minimize and maximize a view or to show the desktop.
  • A new wraparound option in vswitch which makes switching to another workspace overflow when on the leftmost/rightmost/etc workspace.
  • The follow-focus plugin has been added to wayfire-plugins-extra, makes it possible to have window focus follow the mouse.
  • It is now possible to drag a window between two outputs which have Expo and/or Scale active.
  • Wayfire now uses wlroots 0.12
  • Added support for hotspots (i.e triggering actions from the corners of an output), see the PR for details.
  • There have been, as usual, a lot of other bug fixes and new options, check out the git log for a full list.

Changes for plugin authors (in 0.7.0)

Wayfire now has support for writing custom configuration backends. This means that Wayfire can now use gsettings as a backend, and in theory could support any config file format, should someone write the code for it.

Other major changes include the proper support for list options, and now plugins can call other plugin’s activator bindings.

As you can see, the last few release cycles have been quite busy. As a result, Wayfire 0.7.0 is better than ever! Try it out, and stay tuned for more updates!