update winlist ui when using directional window selection

fix T3152
ref b1378ce77b
This commit is contained in:
Mike Blumenkrantz 2016-02-26 16:37:52 -05:00
parent 7b07b03c21
commit 71a85b7d08
1 changed files with 14 additions and 42 deletions

View File

@ -57,7 +57,6 @@ static double _scroll_align_to = 0.0;
static double _scroll_align = 0.0;
static Ecore_Timer *_scroll_timer = NULL;
static Ecore_Animator *_animator = NULL;
static E_Client *_ec_next = NULL;
static Eina_Bool
_wmclass_picked(const Eina_List *lst, const char *wmclass)
@ -369,43 +368,6 @@ e_winlist_prev(void)
_e_winlist_activate();
}
static void
_e_winlist_select(E_Client *ec)
{
Eina_Bool focus = EINA_FALSE;
if (ec->shaded)
{
if (!ec->lock_user_shade)
e_client_unshade(ec, ec->shade_dir);
}
if (ec->iconic)
e_client_uniconify(ec);
if ((!ec->lock_focus_out) &&
(!e_config->winlist_no_warp_on_direction) &&
((e_config->focus_policy != E_FOCUS_CLICK) ||
(e_config->winlist_warp_at_end) ||
(e_config->winlist_warp_while_selecting)))
{
if (!e_client_pointer_warp_to_center(ec))
focus = EINA_TRUE;
if (_list_object && (!_animator))
_animator = ecore_animator_add(_e_winlist_animator, NULL);
}
if ((!ec->lock_user_stacking) &&
(e_config->winlist_list_raise_while_selecting))
{
e_client_raise_latest_set(ec);
evas_object_raise(ec->frame);
}
if ((!ec->lock_focus_out) &&
(e_config->winlist_list_focus_while_selecting))
focus = EINA_TRUE;
if (focus)
evas_object_focus_set(ec->frame, 1);
}
static int
point_line_dist(int x, int y, int lx1, int ly1, int lx2, int ly2)
{
@ -450,11 +412,12 @@ e_winlist_direction_select(E_Zone *zone, int dir)
E_Client *ec;
Eina_List *l;
E_Desk *desk;
E_Client *ec_orig;
E_Client *ec_orig, *ec_next = NULL;
int distance = INT_MAX;
int cx, cy;
E_Winlist_Win *ww;
_ec_next = NULL;
ec_next = NULL;
E_OBJECT_CHECK(zone);
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
@ -566,11 +529,20 @@ e_winlist_direction_select(E_Zone *zone, int dir)
if (d >= distance) continue;
break;
}
_ec_next = ec;
ec_next = ec;
distance = d;
}
if (_ec_next) _e_winlist_select(_ec_next);
if (!ec_next) return;
_e_winlist_deactivate();
EINA_LIST_FOREACH(_wins, l, ww)
{
if (ww->client != ec_next) continue;
_win_selected = l;
break;
}
_e_winlist_show_active();
_e_winlist_activate();
}