From 239c288662c6c001d2ee27b9c1ba1836bc0ed52b Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Thu, 25 Aug 2011 14:26:16 +0000 Subject: [PATCH] e17: fix focus with pointer. - dont update focus_track when focus is frozen SVN revision: 62822 --- src/bin/e_border.c | 49 +++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 8d3eecb56..2770a69d7 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -1954,40 +1954,20 @@ e_border_focus_set_with_pointer(E_Border *bd) (!bd->client.icccm.take_focus)) return; if (bd->lock_focus_out) return; - /* Try to grab the pointer to make sure it's not "in use" */ -/* - * this causes problems as the grab can cause an in/out event (by grab) that - * normally would be like a grab from a menu or something else and e gets into - * a self-feeding loop. sorry - can't grab :( - if (!ecore_x_pointer_grab(bd->zone->container->win)) + e_border_focus_set(bd, 1, 1); + + if (e_config->focus_policy == E_FOCUS_CLICK) return; - */ - + if (e_config->focus_policy == E_FOCUS_SLOPPY) { - if (e_border_under_pointer_get(bd->desk, bd)) - { - if (!e_border_pointer_warp_to_center(bd)) - { - e_border_focus_set(bd, 1, 1); - } - } - else - { - e_border_focus_set(bd, 1, 1); - } - } - else if (e_config->focus_policy == E_FOCUS_CLICK) - { - e_border_focus_set(bd, 1, 1); + if (e_border_under_pointer_get(bd->desk, bd)) + e_border_pointer_warp_to_center(bd); } else - if (!e_border_pointer_warp_to_center(bd)) { - e_border_focus_set(bd, 1, 1); + e_border_pointer_warp_to_center(bd); } - - //ecore_x_pointer_ungrab(); } EAPI void @@ -2037,7 +2017,7 @@ e_border_focus_set(E_Border *bd, if (focus) { if (set) - { + { if (bd->visible && bd->changes.visible) { bd->want_focus = 1; @@ -2046,6 +2026,9 @@ e_border_focus_set(E_Border *bd, else if ((!bd->focused) || (focus_next && (bd != eina_list_data_get(focus_next)))) { Eina_List *l; + + /* waiting for pointer warp timer to reach its window...*/ + if (warp_timer) return; if ((l = eina_list_data_find_list(focus_next, bd))) focus_next = eina_list_promote_list(focus_next, l); @@ -2118,7 +2101,10 @@ e_border_focus_set(E_Border *bd, E_Event_Border_Focus_In *ev; e_focus_event_focus_in(bd); - e_border_focus_latest_set(bd); + + if (focus_track_frozen) + e_border_focus_latest_set(bd); + e_hints_active_window_set(bd->zone->container->manager, bd); edje_object_signal_emit(bd->bg_object, "e,state,focused", "e"); @@ -8965,8 +8951,9 @@ _e_border_pointer_warp_to_center_timer(void *data __UNUSED__) (y - warp_y) > 5 || (y - warp_y) < -5) { /* User moved the mouse, so stop warping */ - warp_to = 0; - goto cleanup; + printf("user stopped pinter warp\n"); + warp_to = 0; + goto cleanup; } /* We just use the same warp speed as configured