you nailed it, thanks ! On Thursday 06 January 2022 12:17, Marcel Hollerbach wrote : > bu5hm4n pushed a commit to branch master. > > http://git.enlightenment.org/core/enlightenment.git/commit/?id=2d86d75139c40e7365e34880b0e3b56f248b0e41 > > commit 2d86d75139c40e7365e34880b0e3b56f248b0e41 > Author: Marcel Hollerbach <m...@marcel-hollerbach.de> > Date: Thu Jan 6 20:57:38 2022 +0100 > > e_client: revert focus instead of setting it to NULL > > 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. > --- > src/bin/e_client.c | 10 +++++----- > src/bin/e_comp_object.c | 5 +++-- > 2 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/src/bin/e_client.c b/src/bin/e_client.c > index 6e605a339..85f5504a7 100644 > --- a/src/bin/e_client.c > +++ b/src/bin/e_client.c > @@ -400,8 +400,8 @@ _e_client_mouse_action_end(E_Client *ec) > E_FREE_FUNC(ec->cur_mouse_action, e_object_unref); > } > > -static void > -_e_client_revert_focus(E_Client *ec) > +E_API void > +e_client_revert_focus(E_Client *ec) > { > E_Client *pec; > E_Desk *desk; > @@ -644,7 +644,7 @@ _e_client_del(E_Client *ec) > evas_object_hide(ec->internal_elm_win); > > if (ec->focused) > - _e_client_revert_focus(ec); > + e_client_revert_focus(ec); > if (ec->frame) evas_object_focus_set(ec->frame, 0); > > E_FREE_FUNC(ec->ping_poller, ecore_poller_del); > @@ -1560,7 +1560,7 @@ _e_client_cb_evas_hide(void *data, Evas *e EINA_UNUSED, > Evas_Object *obj EINA_UN > if (!ec->hidden) > { > if (ec->focused) > - _e_client_revert_focus(ec); > + e_client_revert_focus(ec); > } > ec->want_focus = ec->take_focus = 0; > > @@ -4642,7 +4642,7 @@ e_client_iconify(E_Client *ec) > { > if (!ec->new_client) > { > - _e_client_revert_focus(ec); > + e_client_revert_focus(ec); > evas_object_hide(ec->frame); > } > e_client_urgent_set(ec, ec->icccm.urgent); > diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c > index 04b0bd330..77720aa19 100644 > --- a/src/bin/e_comp_object.c > +++ b/src/bin/e_comp_object.c > @@ -1877,8 +1877,9 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, > Eina_Bool focus) > } > else > { > - if (e_client_focused_get() == ec) > - e_client_focused_set(NULL); > + if (e_client_focused_get() == ec) { > + e_client_revert_focus(ec); > + } > } > evas_object_focus_set(obj, focus); > } > > -- > > --- Hell'O from Yverdoom
Jérémy (jeyzu) _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel