e-modules/comp-scale: add arrow keys + hjklnp for scale-windows

SVN revision: 57542
This commit is contained in:
Hannes Janetzek 2011-03-06 19:02:10 +00:00
parent 25eebab6a5
commit 0400fb12b9
1 changed files with 102 additions and 40 deletions

View File

@ -1364,26 +1364,85 @@ _scale_item_select(int direction)
static void
_scale_switch(const char *params)
{
Item *it;
Item *it, *sel;
if (!strcmp(params, "_next"))
sel = selected_item;
if (params[0] == 0)
{
it = selected_item;
edje_object_signal_emit(it->o, "mouse,out", "e");
it = it->next;
edje_object_signal_emit(it->o, "mouse,in", "e");
e_border_focus_set(it->bd, 1, 1);
selected_item = it;
_scale_out(1);
return;
}
else if (!strcmp(params, "_next"))
{
it = sel->next;
}
else if (!strcmp(params, "_prev"))
{
it = selected_item;
edje_object_signal_emit(it->o, "mouse,out", "e");
it = it->prev;
edje_object_signal_emit(it->o, "mouse,in", "e");
e_border_focus_set(it->bd, 1, 1);
selected_item = it;
it = sel->prev;
}
else if (!strcmp(params, "_left"))
{
it = sel->prev;
if (it->slot_y != sel->slot_y)
{
it = sel;
while(sel->slot_y == it->next->slot_y)
{
it = it->next;
if (it == sel) break;
}
}
}
else if (!strcmp(params, "_right"))
{
it = sel->next;
if (it->slot_y != sel->slot_y)
{
it = sel;
while(sel->slot_y == it->prev->slot_y)
{
it = it->prev;
if (it == sel) break;
}
}
}
else if (!strcmp(params, "_up"))
{
it = sel;
while((sel->slot_y == it->slot_y) ||
(sel->slot_x < it->slot_x))
{
it = it->prev;
if (it == sel) break;
}
}
else if (!strcmp(params, "_down"))
{
it = sel;
while((sel->slot_y == it->slot_y) ||
(sel->slot_x > it->slot_x))
{
it = it->next;
if (it == sel) break;
}
}
if (it == sel)
{
printf("same item\n");
return;
}
edje_object_signal_emit(sel->o, "mouse,out", "e");
edje_object_signal_emit(it->o, "mouse,in", "e");
e_border_focus_set(it->bd, 1, 1);
selected_item = it;
}
static Eina_Bool
@ -1395,16 +1454,23 @@ _scale_cb_key_down(void *data, int type, void *event)
return ECORE_CALLBACK_PASS_ON;
printf("%s\n", ev->key);
/* if (!strcmp(ev->key, "Up"))
* _scale_switch("_up");
* else if (!strcmp(ev->key, "Down"))
* _scale_switch("_down");
* else if (!strcmp(ev->key, "Left"))
* _scale_switch("_left");
* else if (!strcmp(ev->key, "Right"))
* _scale_switch("_right");
* else */
if (!strcmp(ev->key, "p"))
if (!strcmp(ev->key, "Up"))
_scale_switch("_up");
else if (!strcmp(ev->key, "Down"))
_scale_switch("_down");
else if (!strcmp(ev->key, "Left"))
_scale_switch("_left");
else if (!strcmp(ev->key, "Right"))
_scale_switch("_right");
else if (!strcmp(ev->key, "h"))
_scale_switch("_left");
else if (!strcmp(ev->key, "j"))
_scale_switch("_down");
else if (!strcmp(ev->key, "k"))
_scale_switch("_up");
else if (!strcmp(ev->key, "l"))
_scale_switch("_right");
else if (!strcmp(ev->key, "p"))
_scale_switch("_prev");
else if (!strcmp(ev->key, "n"))
_scale_switch("_next");
@ -1484,7 +1550,8 @@ _scale_run(E_Manager *man)
Evas *e;
int i;
Item *it;
E_Border *bd;
e = e_manager_comp_evas_get(man);
if (!e) return EINA_FALSE;
@ -1628,20 +1695,17 @@ _scale_run(E_Manager *man)
evas_event_feed_mouse_move(e, -1000000, -1000000,
ecore_x_current_time_get(), NULL);
if (init_method == GO_KEY)
{
E_Border *bd = e_border_focused_get();
bd = e_border_focused_get();
EINA_LIST_FOREACH(items, l , it)
if (it->bd == bd) break;
EINA_LIST_FOREACH(items, l , it)
if (it->bd == bd) break;
if (it)
selected_item = it;
else
selected_item = eina_list_data_get(items);
if (it)
selected_item = it;
else
selected_item = eina_list_data_get(items);
edje_object_signal_emit(selected_item->o, "mouse,in", "e");
}
edje_object_signal_emit(selected_item->o, "mouse,in", "e");
if (scale_conf->pager_fade_windows)
{
@ -1752,15 +1816,13 @@ _scale_handler(void *data, const char *name, const char *info, int val,
E_Manager_Comp_Source *src = (E_Manager_Comp_Source *)msgdata;
Evas *e;
if (!scale_state) return;
if (strcmp(name, "comp.manager")) return;
DBG("handler... '%s' '%s'\n", name, info);
/* XXX disabled for now. */
return;
e = e_manager_comp_evas_get(man);
if (!strcmp(info, "change.comp"))
{