Recode 'back' message to work on focus per-zone.

SVN revision: 45312
This commit is contained in:
Christopher Michael 2010-01-19 02:21:14 +00:00
parent f3e837c31b
commit 3bf5c6c2f3
2 changed files with 9 additions and 6 deletions

View File

@ -483,23 +483,25 @@ _e_mod_layout_cb_client_message(void *data, int type, void *event)
} }
else if (ev->message_type == ECORE_X_ATOM_E_ILLUME_BACK) else if (ev->message_type == ECORE_X_ATOM_E_ILLUME_BACK)
{ {
E_Border *bd, *fbd; E_Zone *zone;
Eina_List *focused, *l; Eina_List *focused, *l;
E_Border *fbd;
if (!(bd = e_border_focused_get())) return 1; zone = e_util_zone_window_find(ev->win);
focused = e_border_focus_stack_get(); focused = e_border_focus_stack_get();
EINA_LIST_REVERSE_FOREACH(focused, l, fbd) EINA_LIST_REVERSE_FOREACH(focused, l, fbd)
{ {
E_Border *fb; if (fbd->zone != zone) continue;
if (fbd->zone != bd->zone) continue;
if (e_object_is_del(E_OBJECT(fbd))) continue; if (e_object_is_del(E_OBJECT(fbd))) continue;
if ((!fbd->client.icccm.accepts_focus) && if ((!fbd->client.icccm.accepts_focus) &&
(!fbd->client.icccm.take_focus)) continue; (!fbd->client.icccm.take_focus)) continue;
if (fbd->client.netwm.state.skip_taskbar) continue; if (fbd->client.netwm.state.skip_taskbar) continue;
if (fbd == bd) if (fbd == e_border_focused_get())
{ {
E_Border *fb;
if (!(fb = focused->next->data)) continue; if (!(fb = focused->next->data)) continue;
if (fb->zone != zone) continue;
if (e_object_is_del(E_OBJECT(fb))) continue; if (e_object_is_del(E_OBJECT(fb))) continue;
if ((!fb->client.icccm.accepts_focus) && if ((!fb->client.icccm.accepts_focus) &&
(!fb->client.icccm.take_focus)) continue; (!fb->client.icccm.take_focus)) continue;

View File

@ -58,6 +58,7 @@ void
_layout_border_focus_in(E_Border *bd) _layout_border_focus_in(E_Border *bd)
{ {
/* Do something if focus enters a window */ /* Do something if focus enters a window */
e_border_focus_latest_set(bd);
} }
void void