This was a nice idea to fix most focus bugs at once. However, due to the
runtime of e many things can get "randomly" focused, for exmaple: volume
control on the frame, internal dialogs, config value screens when
grabbing for keys, widgets when they get created in a gadget. The list
is quite long. However, fixing all those little bugs is hard and partly
impossible as the behaviour is correct in the context of a toolkit, not
in the context of a compositor.
Long term we should split window-focus and canvas-focus from each other,
then bugs like these would not be a problem anymore.
if window deleted is the focused on... oops - BOOM. not handled.
handle it. also revert x focus to root so bindings work.
fixes previous 2d86d75139
@fix
When closing a client a few different things can happen:
1. Client hides, this will destroy the e_client object, which will
reverts focus to another client.
2. Client hook del, this will recover focus to the root window if no
e_client is focused.
3. Client unfocus event, setted the focused to NULL and sets the focus field to 0.
when first 1 happens then 2 or 3 everything is fine. However, it seems
that sometimes first 3 happend, then 2, then 1. Which results in focus
beeing first NULL, then recovered to the root window, resulting in the
wrong things happening.
the volume style is not a border but the gadget - a mistake made long
ago when this was added. cant change now due to theme compat to filter
out in code
@fix
so... you go through wizard - only in vbox it seems (or maybe other
vm's - don't know - only tried vbox - this doesnt happen on real
systems). at the end e restarts... and it's blank. e is actually
rendering. you can screengrab (eg import -window root out.png) and see
the screen drawn just fine. xrandr is all set up right - everything is
kosher... but nothing will display except the curosr. xorg is just not
displaying rendered content. somehow e's gesture code and use of
logind/libinput to get inpiut devices for gestures tickles this xorg
bug. i don't quite know why as xorg doesnt seem to be complaining.
once you restart the xorg process everything works fine from there on.
it's some bug inside xorg that just refuses to display output.
manually changing resolution with xrandr will reset things and have
things render... until e restarts. a fukll xorg re-run is needed to
fix it... there just is nothing i can see that e is doing wrong or to
fix in e... so this is a workaround the xorg side by just not using
the gesture support if on a vm. they won't have touchpads anyway and
emulate mice so ... no real loss. this won't affect peolpe on real
systems and it may not always work as a workaround as it relies on
systemd-detect-virt or hostnamectl.
@fix
e is not ignoring the first unmap event on this reparent ... this
fixes that and the nextcloud app stops making e sit and spin at full
cpu and flickering tasks etc.
@fix
~/.e-log.log is now the stdout/err from e and child processes. finally
it always goes to a single known file. always. e will rename the old
old ~/.e-log.log.old on start - e_start handles this before it execs e.
this will wipe out what the client set - this is valid for managed
clients only, not override windows.
this fixes teams and its big fullscreen sized window eating up events.
@fix
efm now tracks the most recent 30 files opened with timestamps in
100th of a second and a menu with these recent files under
main menu -> navigate ... the icons are plain mime type icons and not
thumbnails as the efm code isnmt really usafle to create icons in
menus without a lot of work. something to keep in mind for the redo of
efm... :)
at least you can easily access recently opened files with efm now :)
@feat
new chrome versions now set a CSd gtk property of 0 0 0 0 on
windows.... but set it later on thus confusing e into seeing
information changes for csd frame insets for a window that has no csd
frame but is ssd! this drops into a logic hole of "this shouldn't
happen" and weird stuff does happen. avoid this weirdness and just
assume a ssd window as normal then.
@fix
in some situations the xserver randr driver doesn't refresh edid's on
its own. it should, but doesn't. for example - optmus setups. this
seems to fix it. works around that.
@fix