e:winlist: fix issue with non-stop animation

SVN revision: 51451
This commit is contained in:
Boris Faure 2010-08-19 21:09:58 +00:00
parent fbc45ea4d1
commit ee84be7253
2 changed files with 101 additions and 74 deletions

View File

@ -3,8 +3,10 @@
/* actual module specifics */ /* actual module specifics */
static void _e_mod_action_winlist_cb(E_Object *obj, const char *params); static void _e_mod_action_winlist_cb(E_Object *obj, const char *params);
static void _e_mod_action_winlist_mouse_cb(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev); static void _e_mod_action_winlist_mouse_cb(E_Object *obj, const char *params,
static void _e_mod_action_winlist_key_cb(E_Object *obj, const char *params, Ecore_Event_Key *ev); Ecore_Event_Mouse_Button *ev);
static void _e_mod_action_winlist_key_cb(E_Object *obj, const char *params,
Ecore_Event_Key *ev);
static E_Module *conf_module = NULL; static E_Module *conf_module = NULL;
static E_Action *act = NULL; static E_Action *act = NULL;
@ -28,7 +30,7 @@ e_modapi_init(E_Module *m)
act->func.go = _e_mod_action_winlist_cb; act->func.go = _e_mod_action_winlist_cb;
act->func.go_mouse = _e_mod_action_winlist_mouse_cb; act->func.go_mouse = _e_mod_action_winlist_mouse_cb;
act->func.go_key = _e_mod_action_winlist_key_cb; act->func.go_key = _e_mod_action_winlist_key_cb;
e_action_predef_name_set(_("Window : List"), _("Next Window"), e_action_predef_name_set(_("Window : List"), _("Next Window"),
"winlist", "next", NULL, 0); "winlist", "next", NULL, 0);
e_action_predef_name_set(_("Window : List"), _("Previous Window"), e_action_predef_name_set(_("Window : List"), _("Previous Window"),
"winlist", "prev", NULL, 0); "winlist", "prev", NULL, 0);
@ -59,9 +61,9 @@ e_modapi_shutdown(E_Module *m __UNUSED__)
{ {
e_action_predef_name_del(_("Window : List"), _("Previous Window")); e_action_predef_name_del(_("Window : List"), _("Previous Window"));
e_action_predef_name_del(_("Window : List"), _("Next Window")); e_action_predef_name_del(_("Window : List"), _("Next Window"));
e_action_predef_name_del(_("Window : List"), e_action_predef_name_del(_("Window : List"),
_("Previous window of same class")); _("Previous window of same class"));
e_action_predef_name_del(_("Window : List"), e_action_predef_name_del(_("Window : List"),
_("Next window of same class")); _("Next window of same class"));
e_action_predef_name_del(_("Window : List"), _("Window on the Left")); e_action_predef_name_del(_("Window : List"), _("Window on the Left"));
e_action_predef_name_del(_("Window : List"), _("Window Down")); e_action_predef_name_del(_("Window : List"), _("Window Down"));
@ -149,7 +151,8 @@ _e_mod_action_winlist_cb(E_Object *obj, const char *params)
} }
static void static void
_e_mod_action_winlist_mouse_cb(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev) _e_mod_action_winlist_mouse_cb(E_Object *obj, const char *params,
Ecore_Event_Mouse_Button *ev)
{ {
E_Zone *zone = NULL; E_Zone *zone = NULL;

View File

@ -56,6 +56,8 @@ static int _warp_to_x = 0;
static int _warp_to_y = 0; static int _warp_to_y = 0;
static int _warp_x = 0; static int _warp_x = 0;
static int _warp_y = 0; static int _warp_y = 0;
static int _old_warp_x = 0;
static int _old_warp_y = 0;
static int _scroll_to = 0; static int _scroll_to = 0;
static double _scroll_align_to = 0.0; static double _scroll_align_to = 0.0;
static double _scroll_align = 0.0; static double _scroll_align = 0.0;
@ -124,7 +126,8 @@ e_winlist_show(E_Zone *zone, Eina_Bool same_class)
e_border_focus_track_freeze(); e_border_focus_track_freeze();
evas_event_feed_mouse_in(_winlist->evas, ecore_x_current_time_get(), NULL); evas_event_feed_mouse_in(_winlist->evas, ecore_x_current_time_get(), NULL);
evas_event_feed_mouse_move(_winlist->evas, -1000000, -1000000, ecore_x_current_time_get(), NULL); evas_event_feed_mouse_move(_winlist->evas, -1000000, -1000000,
ecore_x_current_time_get(), NULL);
e_popup_layer_set(_winlist, 255); e_popup_layer_set(_winlist, 255);
evas_event_freeze(_winlist->evas); evas_event_freeze(_winlist->evas);
@ -367,10 +370,9 @@ e_winlist_left(E_Zone *zone)
Eina_List *l; Eina_List *l;
E_Desk *desk; E_Desk *desk;
E_Border *bd_orig; E_Border *bd_orig;
int delta = 9999999; int delta = INT_MAX;
int center; int center;
EINA_LOG_ERR("WINLIST LEFT");
_bd_next = NULL; _bd_next = NULL;
E_OBJECT_CHECK_RETURN(zone, 0); E_OBJECT_CHECK_RETURN(zone, 0);
@ -398,7 +400,7 @@ e_winlist_left(E_Zone *zone)
{ {
if (!e_config->winlist_list_show_iconified) continue; if (!e_config->winlist_list_show_iconified) continue;
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_iconified)) (!e_config->winlist_list_show_other_screen_iconified))
continue; continue;
if ((bd->desk != desk) && if ((bd->desk != desk) &&
(!e_config->winlist_list_show_other_desk_iconified)) continue; (!e_config->winlist_list_show_other_desk_iconified)) continue;
@ -408,7 +410,7 @@ e_winlist_left(E_Zone *zone)
if (bd->sticky) if (bd->sticky)
{ {
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_windows)) (!e_config->winlist_list_show_other_screen_windows))
continue; continue;
} }
else else
@ -449,15 +451,19 @@ e_winlist_left(E_Zone *zone)
{ {
_warp_to_x = _bd_next->x + (_bd_next->w / 2); _warp_to_x = _bd_next->x + (_bd_next->w / 2);
if (_warp_to_x < (_bd_next->zone->x + 1)) if (_warp_to_x < (_bd_next->zone->x + 1))
_warp_to_x = _bd_next->zone->x + ((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2); _warp_to_x = _bd_next->zone->x +
((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2);
else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1)) else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1))
_warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2; _warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2;
_warp_to_y = _bd_next->y + (_bd_next->h / 2); _warp_to_y = _bd_next->y + (_bd_next->h / 2);
if (_warp_to_y < (_bd_next->zone->y + 1)) if (_warp_to_y < (_bd_next->zone->y + 1))
_warp_to_y = _bd_next->zone->y + ((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2); _warp_to_y = _bd_next->zone->y +
((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2);
else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1)) else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1))
_warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2; _warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2;
_old_warp_x = _old_warp_y = INT_MAX;
} }
ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y); ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y);
@ -469,10 +475,10 @@ e_winlist_left(E_Zone *zone)
if (!_animator) if (!_animator)
_animator = ecore_animator_add(_e_winlist_animator, NULL); _animator = ecore_animator_add(_e_winlist_animator, NULL);
if ((!_bd_next->lock_user_stacking) && if ((!_bd_next->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting)) (e_config->winlist_list_raise_while_selecting))
e_border_raise(_bd_next); e_border_raise(_bd_next);
if ((!_bd_next->lock_focus_out) && if ((!_bd_next->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting)) (e_config->winlist_list_focus_while_selecting))
e_border_focus_set(_bd_next, 1, 1); e_border_focus_set(_bd_next, 1, 1);
} }
@ -484,7 +490,7 @@ e_winlist_down(E_Zone *zone)
Eina_List *l; Eina_List *l;
E_Desk *desk; E_Desk *desk;
E_Border *bd_orig; E_Border *bd_orig;
int delta = 9999999; int delta = INT_MAX;
int center; int center;
_bd_next = NULL; _bd_next = NULL;
@ -514,7 +520,7 @@ e_winlist_down(E_Zone *zone)
{ {
if (!e_config->winlist_list_show_iconified) continue; if (!e_config->winlist_list_show_iconified) continue;
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_iconified)) (!e_config->winlist_list_show_other_screen_iconified))
continue; continue;
if ((bd->desk != desk) && if ((bd->desk != desk) &&
(!e_config->winlist_list_show_other_desk_iconified)) continue; (!e_config->winlist_list_show_other_desk_iconified)) continue;
@ -524,7 +530,7 @@ e_winlist_down(E_Zone *zone)
if (bd->sticky) if (bd->sticky)
{ {
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_windows)) (!e_config->winlist_list_show_other_screen_windows))
continue; continue;
} }
else else
@ -565,15 +571,19 @@ e_winlist_down(E_Zone *zone)
{ {
_warp_to_x = _bd_next->x + (_bd_next->w / 2); _warp_to_x = _bd_next->x + (_bd_next->w / 2);
if (_warp_to_x < (_bd_next->zone->x + 1)) if (_warp_to_x < (_bd_next->zone->x + 1))
_warp_to_x = _bd_next->zone->x + ((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2); _warp_to_x = _bd_next->zone->x +
((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2);
else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1)) else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1))
_warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2; _warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2;
_warp_to_y = _bd_next->y + (_bd_next->h / 2); _warp_to_y = _bd_next->y + (_bd_next->h / 2);
if (_warp_to_y < (_bd_next->zone->y + 1)) if (_warp_to_y < (_bd_next->zone->y + 1))
_warp_to_y = _bd_next->zone->y + ((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2); _warp_to_y = _bd_next->zone->y +
((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2);
else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1)) else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1))
_warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2; _warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2;
_old_warp_x = _old_warp_y = INT_MAX;
} }
ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y); ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y);
@ -585,9 +595,11 @@ e_winlist_down(E_Zone *zone)
if (!_animator) if (!_animator)
_animator = ecore_animator_add(_e_winlist_animator, NULL); _animator = ecore_animator_add(_e_winlist_animator, NULL);
if ((!_bd_next->lock_user_stacking) && (e_config->winlist_list_raise_while_selecting)) if ((!_bd_next->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting))
e_border_raise(_bd_next); e_border_raise(_bd_next);
if ((!_bd_next->lock_focus_out) && (e_config->winlist_list_focus_while_selecting)) if ((!_bd_next->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting))
e_border_focus_set(_bd_next, 1, 1); e_border_focus_set(_bd_next, 1, 1);
} }
} }
@ -598,7 +610,7 @@ e_winlist_up(E_Zone *zone)
Eina_List *l; Eina_List *l;
E_Desk *desk; E_Desk *desk;
E_Border *bd_orig; E_Border *bd_orig;
int delta = 9999999; int delta = INT_MAX;
int center; int center;
_bd_next = NULL; _bd_next = NULL;
@ -628,7 +640,7 @@ e_winlist_up(E_Zone *zone)
{ {
if (!e_config->winlist_list_show_iconified) continue; if (!e_config->winlist_list_show_iconified) continue;
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_iconified)) (!e_config->winlist_list_show_other_screen_iconified))
continue; continue;
if ((bd->desk != desk) && if ((bd->desk != desk) &&
(!e_config->winlist_list_show_other_desk_iconified)) continue; (!e_config->winlist_list_show_other_desk_iconified)) continue;
@ -638,7 +650,7 @@ e_winlist_up(E_Zone *zone)
if (bd->sticky) if (bd->sticky)
{ {
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_windows)) (!e_config->winlist_list_show_other_screen_windows))
continue; continue;
} }
else else
@ -679,15 +691,19 @@ e_winlist_up(E_Zone *zone)
{ {
_warp_to_x = _bd_next->x + (_bd_next->w / 2); _warp_to_x = _bd_next->x + (_bd_next->w / 2);
if (_warp_to_x < (_bd_next->zone->x + 1)) if (_warp_to_x < (_bd_next->zone->x + 1))
_warp_to_x = _bd_next->zone->x + ((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2); _warp_to_x = _bd_next->zone->x +
((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2);
else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1)) else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1))
_warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2; _warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2;
_warp_to_y = _bd_next->y + (_bd_next->h / 2); _warp_to_y = _bd_next->y + (_bd_next->h / 2);
if (_warp_to_y < (_bd_next->zone->y + 1)) if (_warp_to_y < (_bd_next->zone->y + 1))
_warp_to_y = _bd_next->zone->y + ((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2); _warp_to_y = _bd_next->zone->y +
((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2);
else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1)) else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1))
_warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2; _warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2;
_old_warp_x = _old_warp_y = INT_MAX;
} }
ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y); ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y);
@ -699,9 +715,11 @@ e_winlist_up(E_Zone *zone)
if (!_animator) if (!_animator)
_animator = ecore_animator_add(_e_winlist_animator, NULL); _animator = ecore_animator_add(_e_winlist_animator, NULL);
if ((!_bd_next->lock_user_stacking) && (e_config->winlist_list_raise_while_selecting)) if ((!_bd_next->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting))
e_border_raise(_bd_next); e_border_raise(_bd_next);
if ((!_bd_next->lock_focus_out) && (e_config->winlist_list_focus_while_selecting)) if ((!_bd_next->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting))
e_border_focus_set(_bd_next, 1, 1); e_border_focus_set(_bd_next, 1, 1);
} }
} }
@ -712,7 +730,7 @@ e_winlist_right(E_Zone *zone)
Eina_List *l; Eina_List *l;
E_Desk *desk; E_Desk *desk;
E_Border *bd_orig; E_Border *bd_orig;
int delta = 9999999; int delta = INT_MAX;
int center; int center;
_bd_next = NULL; _bd_next = NULL;
@ -742,7 +760,7 @@ e_winlist_right(E_Zone *zone)
{ {
if (!e_config->winlist_list_show_iconified) continue; if (!e_config->winlist_list_show_iconified) continue;
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_iconified)) (!e_config->winlist_list_show_other_screen_iconified))
continue; continue;
if ((bd->desk != desk) && if ((bd->desk != desk) &&
(!e_config->winlist_list_show_other_desk_iconified)) continue; (!e_config->winlist_list_show_other_desk_iconified)) continue;
@ -752,7 +770,7 @@ e_winlist_right(E_Zone *zone)
if (bd->sticky) if (bd->sticky)
{ {
if ((bd->zone != zone) && if ((bd->zone != zone) &&
(!e_config->winlist_list_show_other_screen_windows)) (!e_config->winlist_list_show_other_screen_windows))
continue; continue;
} }
else else
@ -770,7 +788,7 @@ e_winlist_right(E_Zone *zone)
} }
} }
/* bd is suitable */ /* bd is suitable */
center_next = bd->x + bd->w/2; center_next = bd->x + bd->w / 2;
if (center_next <= center) continue; if (center_next <= center) continue;
delta_next = bd->x - (bd_orig->x + bd_orig->w); delta_next = bd->x - (bd_orig->x + bd_orig->w);
if (delta_next < 0) delta = center_next - center; if (delta_next < 0) delta = center_next - center;
@ -793,15 +811,19 @@ e_winlist_right(E_Zone *zone)
{ {
_warp_to_x = _bd_next->x + (_bd_next->w / 2); _warp_to_x = _bd_next->x + (_bd_next->w / 2);
if (_warp_to_x < (_bd_next->zone->x + 1)) if (_warp_to_x < (_bd_next->zone->x + 1))
_warp_to_x = _bd_next->zone->x + ((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2); _warp_to_x = _bd_next->zone->x +
((_bd_next->x + _bd_next->w - _bd_next->zone->x) / 2);
else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1)) else if (_warp_to_x >= (_bd_next->zone->x + _bd_next->zone->w - 1))
_warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2; _warp_to_x = (_bd_next->zone->x + _bd_next->zone->w + _bd_next->x) / 2;
_warp_to_y = _bd_next->y + (_bd_next->h / 2); _warp_to_y = _bd_next->y + (_bd_next->h / 2);
if (_warp_to_y < (_bd_next->zone->y + 1)) if (_warp_to_y < (_bd_next->zone->y + 1))
_warp_to_y = _bd_next->zone->y + ((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2); _warp_to_y = _bd_next->zone->y +
((_bd_next->y + _bd_next->h - _bd_next->zone->y) / 2);
else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1)) else if (_warp_to_y >= (_bd_next->zone->y + _bd_next->zone->h - 1))
_warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2; _warp_to_y = (_bd_next->zone->y + _bd_next->zone->h + _bd_next->y) / 2;
_old_warp_x = _old_warp_y = INT_MAX;
} }
ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y); ecore_x_pointer_xy_get(zone->container->win, &_warp_x, &_warp_y);
@ -813,9 +835,11 @@ e_winlist_right(E_Zone *zone)
if (!_animator) if (!_animator)
_animator = ecore_animator_add(_e_winlist_animator, NULL); _animator = ecore_animator_add(_e_winlist_animator, NULL);
if ((!_bd_next->lock_user_stacking) && (e_config->winlist_list_raise_while_selecting)) if ((!_bd_next->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting))
e_border_raise(_bd_next); e_border_raise(_bd_next);
if ((!_bd_next->lock_focus_out) && (e_config->winlist_list_focus_while_selecting)) if ((!_bd_next->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting))
e_border_focus_set(_bd_next, 1, 1); e_border_focus_set(_bd_next, 1, 1);
} }
} }
@ -1005,7 +1029,8 @@ _e_winlist_activate(void)
if (!_win_selected) return; if (!_win_selected) return;
ww = _win_selected->data; ww = _win_selected->data;
edje_object_signal_emit(ww->bg_object, "e,state,selected", "e"); edje_object_signal_emit(ww->bg_object, "e,state,selected", "e");
if (ww->icon_object) edje_object_signal_emit(ww->icon_object, "e,state,selected", "e"); if (ww->icon_object) edje_object_signal_emit(ww->icon_object,
"e,state,selected", "e");
if ((ww->border->iconic) && if ((ww->border->iconic) &&
(e_config->winlist_list_uncover_while_selecting)) (e_config->winlist_list_uncover_while_selecting))
@ -1046,19 +1071,24 @@ _e_winlist_activate(void)
{ {
_warp_to_x = ww->border->x + (ww->border->w / 2); _warp_to_x = ww->border->x + (ww->border->w / 2);
if (_warp_to_x < (ww->border->zone->x + 1)) if (_warp_to_x < (ww->border->zone->x + 1))
_warp_to_x = ww->border->zone->x + ((ww->border->x + ww->border->w - ww->border->zone->x) / 2); _warp_to_x = ww->border->zone->x +
((ww->border->x + ww->border->w - ww->border->zone->x) / 2);
else if (_warp_to_x >= (ww->border->zone->x + ww->border->zone->w - 1)) else if (_warp_to_x >= (ww->border->zone->x + ww->border->zone->w - 1))
_warp_to_x = (ww->border->zone->x + ww->border->zone->w + ww->border->x) / 2; _warp_to_x = (ww->border->zone->x +
ww->border->zone->w + ww->border->x) / 2;
_warp_to_y = ww->border->y + (ww->border->h / 2); _warp_to_y = ww->border->y + (ww->border->h / 2);
if (_warp_to_y < (ww->border->zone->y + 1)) if (_warp_to_y < (ww->border->zone->y + 1))
_warp_to_y = ww->border->zone->y + ((ww->border->y + ww->border->h - ww->border->zone->y) / 2); _warp_to_y = ww->border->zone->y +
((ww->border->y + ww->border->h - ww->border->zone->y) / 2);
else if (_warp_to_y >= (ww->border->zone->y + ww->border->zone->h - 1)) else if (_warp_to_y >= (ww->border->zone->y + ww->border->zone->h - 1))
_warp_to_y = (ww->border->zone->y + ww->border->zone->h + ww->border->y) / 2; _warp_to_y = (ww->border->zone->y +
ww->border->zone->h + ww->border->y) / 2;
} }
if (e_config->winlist_warp_while_selecting) if (e_config->winlist_warp_while_selecting)
{ {
ecore_x_pointer_xy_get(_winlist->zone->container->win, &_warp_x, &_warp_y); ecore_x_pointer_xy_get(_winlist->zone->container->win,
&_warp_x, &_warp_y);
_win = &_winlist->zone->container->win; _win = &_winlist->zone->container->win;
e_border_focus_latest_set(ww->border); e_border_focus_latest_set(ww->border);
_warp_to = 1; _warp_to = 1;
@ -1082,12 +1112,15 @@ _e_winlist_activate(void)
} }
} }
if ((!ww->border->lock_user_stacking) && (e_config->winlist_list_raise_while_selecting)) if ((!ww->border->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting))
e_border_raise(ww->border); e_border_raise(ww->border);
if ((!ww->border->lock_focus_out) && (e_config->winlist_list_focus_while_selecting)) if ((!ww->border->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting))
e_border_focus_set(ww->border, 1, 1); e_border_focus_set(ww->border, 1, 1);
} }
edje_object_part_text_set(_bg_object, "e.text.label", e_border_name_get(ww->border)); edje_object_part_text_set(_bg_object, "e.text.label",
e_border_name_get(ww->border));
if (_icon_object) if (_icon_object)
{ {
evas_object_del(_icon_object); evas_object_del(_icon_object);
@ -1130,7 +1163,8 @@ _e_winlist_deactivate(void)
} }
edje_object_part_text_set(_bg_object, "e.text.label", ""); edje_object_part_text_set(_bg_object, "e.text.label", "");
edje_object_signal_emit(ww->bg_object, "e,state,unselected", "e"); edje_object_signal_emit(ww->bg_object, "e,state,unselected", "e");
if (ww->icon_object) edje_object_signal_emit(ww->icon_object, "e,state,unselected", "e"); if (ww->icon_object) edje_object_signal_emit(ww->icon_object,
"e,state,unselected", "e");
if (!ww->border->lock_focus_in) if (!ww->border->lock_focus_in)
e_border_focus_set(ww->border, 0, 0); e_border_focus_set(ww->border, 0, 0);
} }
@ -1185,7 +1219,8 @@ _e_winlist_restore_desktop(void)
} }
static Eina_Bool static Eina_Bool
_e_winlist_cb_event_border_add(void *data __UNUSED__, int type __UNUSED__, void *event) _e_winlist_cb_event_border_add(void *data __UNUSED__, int type __UNUSED__,
void *event)
{ {
E_Event_Border_Add *ev; E_Event_Border_Add *ev;
@ -1197,7 +1232,8 @@ _e_winlist_cb_event_border_add(void *data __UNUSED__, int type __UNUSED__, void
} }
static Eina_Bool static Eina_Bool
_e_winlist_cb_event_border_remove(void *data __UNUSED__, int type __UNUSED__, void *event) _e_winlist_cb_event_border_remove(void *data __UNUSED__, int type __UNUSED__,
void *event)
{ {
E_Event_Border_Remove *ev; E_Event_Border_Remove *ev;
@ -1421,7 +1457,7 @@ _e_winlist_cb_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event
if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON; if (ev->window != _input_window) return ECORE_CALLBACK_PASS_ON;
evas_event_feed_mouse_move(_winlist->evas, ev->x - _winlist->x + evas_event_feed_mouse_move(_winlist->evas, ev->x - _winlist->x +
_winlist->zone->x, ev->y - _winlist->y + _winlist->zone->x, ev->y - _winlist->y +
_winlist->zone->y, ev->timestamp, NULL); _winlist->zone->y, ev->timestamp, NULL);
return ECORE_CALLBACK_PASS_ON; return ECORE_CALLBACK_PASS_ON;
@ -1435,7 +1471,7 @@ _e_winlist_scroll_timer(void *data __UNUSED__)
double spd; double spd;
spd = e_config->winlist_scroll_speed; spd = e_config->winlist_scroll_speed;
_scroll_align = (_scroll_align * (1.0 - spd)) + _scroll_align = (_scroll_align * (1.0 - spd)) +
(_scroll_align_to * spd); (_scroll_align_to * spd);
return 1; return 1;
} }
@ -1446,17 +1482,15 @@ _e_winlist_scroll_timer(void *data __UNUSED__)
static Eina_Bool static Eina_Bool
_e_winlist_warp_timer(void *data __UNUSED__) _e_winlist_warp_timer(void *data __UNUSED__)
{ {
if (_warp_to) if (_warp_to && _warp_timer)
{ {
int x, y; double spd = e_config->winlist_warp_speed;
double spd;
spd = e_config->winlist_warp_speed; _old_warp_x = _warp_x;
x = _warp_x; _old_warp_y = _warp_y;
y = _warp_y; _warp_x = (_warp_x * (1.0 - spd)) + (_warp_to_x * spd);
_warp_x = (x * (1.0 - spd)) + (_warp_to_x * spd); _warp_y = (_warp_y * (1.0 - spd)) + (_warp_to_y * spd);
_warp_y = (y * (1.0 - spd)) + (_warp_to_y * spd); return ECORE_CALLBACK_RENEW;
return 1;
} }
_warp_timer = NULL; _warp_timer = NULL;
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
@ -1467,13 +1501,7 @@ _e_winlist_animator(void *data __UNUSED__)
{ {
if (_warp_to) if (_warp_to)
{ {
int dx, dy; if (_warp_x == _old_warp_x && _warp_y == _old_warp_y)
dx = _warp_x - _warp_to_x;
dy = _warp_y - _warp_to_y;
dx = dx * dx;
dy = dy * dy;
if ((dx <= 1) && (dy <= 1))
{ {
_warp_x = _warp_to_x; _warp_x = _warp_to_x;
_warp_y = _warp_to_y; _warp_y = _warp_to_y;
@ -1495,7 +1523,6 @@ _e_winlist_animator(void *data __UNUSED__)
e_box_align_set(_list_object, 0.5, 1.0 - _scroll_align); e_box_align_set(_list_object, 0.5, 1.0 - _scroll_align);
} }
if ((_warp_to) || (_scroll_to)) return ECORE_CALLBACK_RENEW; if ((_warp_to) || (_scroll_to)) return ECORE_CALLBACK_RENEW;
_animator = NULL;
if (_bd_next) if (_bd_next)
{ {
if (_bd_next->iconic) if (_bd_next->iconic)
@ -1523,14 +1550,11 @@ _e_winlist_animator(void *data __UNUSED__)
if ((e_config->focus_policy != E_FOCUS_CLICK) || if ((e_config->focus_policy != E_FOCUS_CLICK) ||
(e_config->winlist_warp_at_end) || (e_config->winlist_warp_at_end) ||
(e_config->winlist_warp_while_selecting)) (e_config->winlist_warp_while_selecting))
ecore_x_pointer_warp(_bd_next->zone->container->win, _warp_to_x, _warp_to_y); ecore_x_pointer_warp(_bd_next->zone->container->win,
_warp_to_x, _warp_to_y);
_bd_next = NULL; _bd_next = NULL;
if (_warp_timer)
{
ecore_timer_del(_warp_timer);
_warp_timer = NULL;
}
} }
_animator = NULL;
_win = NULL; _win = NULL;
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }