ibar exec list: allow fast application switching by scrollwheel

This commit is contained in:
Thomas Gstädtner 2013-06-17 07:49:22 +01:00 committed by Mike Blumenkrantz
parent 8b4802ad45
commit 4e2dd06861
1 changed files with 39 additions and 0 deletions

View File

@ -70,6 +70,7 @@ struct _IBar_Icon
Ecore_Timer *timer;
E_Exec_Instance *exe_inst;
Eina_List *exes; //all instances
Eina_List *exe_current;
E_Gadcon_Popup *menu;
int mouse_down;
struct
@ -112,6 +113,7 @@ static void _ibar_cb_icon_mouse_up(void *data, Evas *e, Evas_Object *obj
static void _ibar_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_cb_icon_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_cb_icon_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_cb_icon_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _ibar_inst_cb_enter(void *data, const char *type, void *event_info);
static void _ibar_inst_cb_move(void *data, const char *type, void *event_info);
static void _ibar_inst_cb_leave(void *data, const char *type, void *event_info);
@ -636,6 +638,8 @@ _ibar_icon_new(IBar *b, Efreet_Desktop *desktop)
_ibar_cb_icon_mouse_up, ic);
evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_MOVE,
_ibar_cb_icon_mouse_move, ic);
evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOUSE_WHEEL,
_ibar_cb_icon_wheel, ic);
evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_MOVE,
_ibar_cb_icon_move, ic);
evas_object_event_callback_add(ic->o_holder, EVAS_CALLBACK_RESIZE,
@ -660,6 +664,7 @@ _ibar_icon_free(IBar_Icon *ic)
if (ic->reset_timer) ecore_timer_del(ic->reset_timer);
ic->reset_timer = NULL;
ic->exe_current = NULL;
if (ic->ibar->ic_drop_before == ic)
ic->ibar->ic_drop_before = NULL;
_ibar_icon_empty(ic);
@ -1115,6 +1120,40 @@ _ibar_cb_icon_reset(void *data)
}
static void
_ibar_cb_icon_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Evas_Event_Mouse_Wheel *ev;
E_Exec_Instance *exe;
IBar_Icon *ic;
ev = event_info;
ic = data;
if (!ic->exes) return;
if (!ic->exe_current)
ic->exe_current = eina_list_nth_list(ic->exes, 0);
if (ev->z < 0)
{
ic->exe_current = eina_list_next(ic->exe_current);
if (!ic->exe_current)
ic->exe_current = eina_list_nth_list(ic->exes, 0);
}
else if (ev->z > 0)
{
ic->exe_current = eina_list_prev(ic->exe_current);
if (!ic->exe_current)
ic->exe_current = eina_list_last(ic->exes);
}
exe = eina_list_data_get(ic->exe_current);
if (!exe->bd) return;
e_border_activate(exe->bd, 1);
}
static void
_ibar_instance_watch(void *data, E_Exec_Instance *inst, E_Exec_Watch_Type type)
{
IBar_Icon *ic = data;