Don't fail (and terminate the i3 plugin) if we receive a window event
where the 'container' doesn't have a 'pid' property.
This means we won't be able to determine the application the window
belongs to.
Closes#2
We previously used the 'pid' property of the 'container' object in a
window event to lookup the application name under /proc/<pid>/comm.
In many cases, the application name is already available in the window
event itself, in the 'app_id' property.
Use this, if available, and fallback to the old PID method otherwise.
A quick experiment suggests 'app_id' is set for all Wayland native
applications, but not for X11 applications running under XWayland.
All decoration, particle and module interfaces now takes a
pixman_image_t parameter, and all drawing is done using pixman APIs.
The wayland/xcb backends implement a new interface functions,
get_pixman_image(), that should return a pixman image instance that is
suitable for rendering.
In the wayland backend, the image uses the same backing data as the
cairo surface.
In the XCB backend, we create a new image each time, and then blit it
to the cairo surface at commit time.
We subscribe to Sway's 'input' events, and use these to expose input
devices' active XKB layout.
The module is configured by specifying a list of 'identifiers'; these
are the input devices (keyboards, typically), that we'll be
monitoring. All other input devices are ignored.
'content' is a template, and the module will instantiate a dynlist
with a 'content' for each *existing* input found in the 'identifiers'
list.
We also monitor for device 'added' and 'removed' events, and update
our internal list of existing inputs.
This means the user can configure a set of identifiers, and only those
that are actually present will be displayed. If a device that is
listed in the 'identifiers' list is added, it will be displayed. If it
is removed, it will no longer be displayed.
The main advantage is when targeting sway/wayland instead of i3/x11;
sway doesn't package ipc.h. There *is* an ipc.h in the sway sources,
but it doesn't define e.g the header format, and has different names
for the constants.
json_object_object_get() is deprecated.
At the same time, simplify code by removing error messages; it's
not *our* problem if someone is sending malformed IPC replies.
* Only care about 'close', 'focus' and 'title' events
* Remove application/title on 'close'
* Ignore 'title' events if it's not for the currently active
window (from the last 'focus' event)
This fixes an issue where we rendered a 'title' event just like a
focus event. Meaning that a non-focused window, perhaps even on a
different workspace, that changed its title, would cause us to refresh
with its title being used.