From 0e08ecd3fe77ddc3a38ba2679cdbb808c28fe190 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 12 Jul 2005 17:51:16 +0000 Subject: [PATCH] fix winlist (alt tab) as it screwed up focsu order a bit - fixed now fix up unfocus with want focus flag fix up initial focus on wm start SVN revision: 15753 --- src/bin/e_border.c | 12 ++++++++---- src/bin/e_border.h | 1 + src/bin/e_winlist.c | 7 +++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/bin/e_border.c b/src/bin/e_border.c index c4c1288da..b26741fe2 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -850,6 +850,13 @@ e_border_stack_below(E_Border *bd, E_Border *below) } } +void +e_border_focus_latest_set(E_Border *bd) +{ + focus_stack = evas_list_remove(focus_stack, bd); + focus_stack = evas_list_prepend(focus_stack, bd); +} + void e_border_focus_set(E_Border *bd, int focus, int set) { @@ -869,10 +876,7 @@ e_border_focus_set(E_Border *bd, int focus, int set) return; } if (!e_winlist_active_get()) - { - focus_stack = evas_list_remove(focus_stack, bd); - focus_stack = evas_list_prepend(focus_stack, bd); - } + e_border_focus_latest_set(bd); // printf("EMIT 0x%x activeve\n", bd->client.win); edje_object_signal_emit(bd->bg_object, "active", ""); e_focus_event_focus_in(bd); diff --git a/src/bin/e_border.h b/src/bin/e_border.h index 1a8b8b6a3..32bcd9d90 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -473,6 +473,7 @@ EAPI void e_border_raise(E_Border *bd); EAPI void e_border_lower(E_Border *bd); EAPI void e_border_stack_above(E_Border *bd, E_Border *above); EAPI void e_border_stack_below(E_Border *bd, E_Border *below); +EAPI void e_border_focus_latest_set(E_Border *bd); EAPI void e_border_focus_set(E_Border *bd, int focus, int set); EAPI void e_border_shade(E_Border *bd, E_Direction dir); EAPI void e_border_unshade(E_Border *bd, E_Direction dir); diff --git a/src/bin/e_winlist.c b/src/bin/e_winlist.c index 339f8501f..f93639ece 100644 --- a/src/bin/e_winlist.c +++ b/src/bin/e_winlist.c @@ -252,8 +252,11 @@ e_winlist_hide(void) } if (!bd->lock_user_stacking) e_border_raise(bd); - if (!bd->lock_focus_in) - e_border_focus_set(bd, 1, 1); + if (!bd->lock_focus_out) + { + e_border_focus_set(bd, 1, 1); + e_border_focus_latest_set(bd); + } if ((e_config->focus_policy != E_FOCUS_CLICK) || (e_config->winlist_warp_at_end) || (e_config->winlist_warp_while_selecting))