diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c index 7bc36c7a0..fbb621668 100644 --- a/src/modules/ibar/e_mod_main.c +++ b/src/modules/ibar/e_mod_main.c @@ -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;