forked from enlightenment/enlightenment
focus: do not revert to another client when client is unfocused
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.
This commit is contained in:
parent
aff854b2ea
commit
841c8f477f
|
@ -1878,7 +1878,7 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus)
|
|||
else
|
||||
{
|
||||
if (e_client_focused_get() == ec) {
|
||||
e_client_revert_focus(ec);
|
||||
e_client_focused_set(NULL);
|
||||
}
|
||||
}
|
||||
evas_object_focus_set(obj, focus);
|
||||
|
@ -2353,8 +2353,9 @@ _e_comp_smart_hide(Evas_Object *obj)
|
|||
edje_object_play_set(cw->frame_object, 0);
|
||||
}
|
||||
/* ensure focus-out */
|
||||
if (cw->ec->focused)
|
||||
evas_object_focus_set(cw->ec->frame, 0);
|
||||
if (cw->ec->focused) {
|
||||
e_client_revert_focus(cw->ec);
|
||||
}
|
||||
e_comp_render_queue(); //force nocomp recheck
|
||||
e_comp_shape_queue();
|
||||
}
|
||||
|
|
|
@ -2884,7 +2884,7 @@ _e_comp_x_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_
|
|||
else if (ev->detail == ECORE_X_EVENT_DETAIL_INFERIOR)
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
evas_object_focus_set(ec->frame, 0);
|
||||
e_client_revert_focus(ec);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
|
|
|
@ -454,8 +454,9 @@ e_desk_last_focused_focus(E_Desk *desk)
|
|||
evas_object_raise(ecs->frame);
|
||||
return ecs;
|
||||
}
|
||||
if (e_client_focused_get())
|
||||
evas_object_focus_set(e_client_focused_get()->frame, 0);
|
||||
if (e_client_focused_get()) {
|
||||
e_client_revert_focus(e_client_focused_get());
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,8 +35,9 @@ e_focus_event_mouse_out(E_Client *ec)
|
|||
{
|
||||
if (!ec->lock_focus_in)
|
||||
{
|
||||
if (ec->focused)
|
||||
evas_object_focus_set(ec->frame, 0);
|
||||
if (ec->focused) {
|
||||
e_client_revert_focus(ec);
|
||||
}
|
||||
}
|
||||
}
|
||||
E_FREE_FUNC(ec->raise_timer, ecore_timer_del);
|
||||
|
|
Loading…
Reference in New Issue