forked from enlightenment/enlightenment
fix several focus issues with alt+tab, closing of windows etc.
SVN revision: 75697
This commit is contained in:
parent
ada59ec667
commit
95909021ea
|
@ -2119,6 +2119,10 @@ e_border_focus_set(E_Border *bd,
|
||||||
(!bd->client.icccm.take_focus))
|
(!bd->client.icccm.take_focus))
|
||||||
return;
|
return;
|
||||||
if ((set) && (focus) && (bd->lock_focus_out)) return;
|
if ((set) && (focus) && (bd->lock_focus_out)) return;
|
||||||
|
|
||||||
|
void *btc[200];
|
||||||
|
int btn = backtrace(btc, 200);
|
||||||
|
backtrace_symbols_fd(btc, btn, 2);
|
||||||
/* dont focus an iconified window. that's silly! */
|
/* dont focus an iconified window. that's silly! */
|
||||||
if (focus)
|
if (focus)
|
||||||
{
|
{
|
||||||
|
@ -2135,7 +2139,8 @@ e_border_focus_set(E_Border *bd,
|
||||||
}
|
}
|
||||||
/* FIXME: hack for deskflip animation:
|
/* FIXME: hack for deskflip animation:
|
||||||
* dont update focus when sliding previous desk */
|
* dont update focus when sliding previous desk */
|
||||||
else if ((!bd->sticky) && (bd->desk != e_desk_current_get(bd->desk->zone)))
|
else if ((!bd->sticky) &&
|
||||||
|
(bd->desk != e_desk_current_get(bd->desk->zone)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2152,8 +2157,6 @@ e_border_focus_set(E_Border *bd,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fprintf(stderr, "focus set bd %p client %x focus %i set %i [%s]\n", bd, bd->client.win, focus, set, bd->client.netwm.name); */
|
|
||||||
|
|
||||||
if (focus)
|
if (focus)
|
||||||
{
|
{
|
||||||
if (set)
|
if (set)
|
||||||
|
@ -2211,10 +2214,12 @@ e_border_focus_set(E_Border *bd,
|
||||||
}
|
}
|
||||||
if ((!unfocus_is_parent) &&
|
if ((!unfocus_is_parent) &&
|
||||||
(!e_config->allow_above_fullscreen))
|
(!e_config->allow_above_fullscreen))
|
||||||
|
{
|
||||||
e_border_iconify(bd2);
|
e_border_iconify(bd2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
focus_changed = EINA_TRUE;
|
focus_changed = EINA_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2223,19 +2228,48 @@ e_border_focus_set(E_Border *bd,
|
||||||
bd->want_focus = 0;
|
bd->want_focus = 0;
|
||||||
focus_next = eina_list_remove(focus_next, bd);
|
focus_next = eina_list_remove(focus_next, bd);
|
||||||
if (bd == focusing) focusing = NULL;
|
if (bd == focusing) focusing = NULL;
|
||||||
|
|
||||||
if (bd->focused)
|
if (bd->focused)
|
||||||
{
|
{
|
||||||
|
Eina_Bool wasfocused = EINA_FALSE;
|
||||||
bd_unfocus = bd;
|
bd_unfocus = bd;
|
||||||
|
|
||||||
/* should always be the case. anyway */
|
/* should always be the case. anyway */
|
||||||
if (bd == focused)
|
if (bd == focused)
|
||||||
|
{
|
||||||
focused = NULL;
|
focused = NULL;
|
||||||
|
wasfocused = EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if ((set) && (!focus_next) && (!focusing))
|
if ((set) && (!focus_next) && (!focusing))
|
||||||
{
|
{
|
||||||
e_grabinput_focus(bd->zone->container->bg_win,
|
e_grabinput_focus(bd->zone->container->bg_win,
|
||||||
E_FOCUS_METHOD_PASSIVE);
|
E_FOCUS_METHOD_PASSIVE);
|
||||||
}
|
}
|
||||||
|
if ((bd->fullscreen) && (wasfocused))
|
||||||
|
{
|
||||||
|
Eina_Bool have_vis_child = EINA_FALSE;
|
||||||
|
Eina_List *l;
|
||||||
|
E_Border *bd2;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(e_border_client_list(), l, bd2)
|
||||||
|
{
|
||||||
|
if ((bd2 != bd) &&
|
||||||
|
(bd2->zone == bd->zone) &&
|
||||||
|
((bd2->desk == bd->desk) ||
|
||||||
|
(bd2->sticky) || (bd->sticky)))
|
||||||
|
{
|
||||||
|
if (bd2->parent == bd)
|
||||||
|
{
|
||||||
|
have_vis_child = EINA_TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((!have_vis_child) &&
|
||||||
|
(!e_config->allow_above_fullscreen))
|
||||||
|
e_border_iconify(bd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2282,9 +2316,11 @@ e_border_focus_set(E_Border *bd,
|
||||||
bd_parent = bd->parent;
|
bd_parent = bd->parent;
|
||||||
}
|
}
|
||||||
if ((!unfocus_is_parent) && (!e_config->allow_above_fullscreen))
|
if ((!unfocus_is_parent) && (!e_config->allow_above_fullscreen))
|
||||||
|
{
|
||||||
e_border_iconify(bd_unfocus);
|
e_border_iconify(bd_unfocus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (focus_changed)
|
if (focus_changed)
|
||||||
{
|
{
|
||||||
|
@ -8474,9 +8510,11 @@ _e_border_eval(E_Border *bd)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bd2)
|
if (!bd2)
|
||||||
|
{
|
||||||
e_border_focus_set_with_pointer(bd);
|
e_border_focus_set_with_pointer(bd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (bd->need_maximize)
|
if (bd->need_maximize)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue