This fixes a few bugs I found related to custom opener.
Instead of sending the entire exec as a single argument, this properly
splits the command, trims trailing whitespaces, and lets the receiving
opener iterate over terms.
Pipewire's pulseaudio server requires a different number of iterations
to get the callback through properly.
Set a flag from the callbacks, and iterate until the flag is set to
ensure that the right number of iterations are made.
The commit with no set_size was interpreted as having set_size of 0,0,
which is no longer valid if anchors are not set.
However, are just configuring our surface, not yet committing content.
As workaround, specify a bogus 1,1 size to begin with.
Closes: https://github.com/kennylevinsen/wldash/issues/36
This is implemented by propagating the expected remaining space to all
widget draw calls. It is not currently as smart as it could be, but it
works well enough to let the last widget in a row/column fill things.
BarWidget-type widgets and the Launcher widget now fill remaining space
if their length is set to 0.
Use fontconfig to load fonts. Fonts can be added to the `fonts` map in
the config, and referenced from individual widgets' configurations for
customizability.
Fonts default to values "mono" and "sans" if nothing is set.
Use of DateTime<Local> can lead to excessive inspection of the system
timezone.
Instead, propagate only a timezone-compensated NaiveDateTime throughout
the widgets.
Move the matching in the launcher to its own struct and make it so the
matches are unique and we don't end up with 2 or 3 matches for the same
program. Change the priorities so that they are bundled together with
the fuzzy matching score and thus very good keyword matches will beat
out very poor name matches.
Keyword matches are always at a lower priority than name matches. It
would probably make sense to extend this into something smarter where
very good matches of keywords beat really poor matches of name.