discomfitor pushed a commit to branch master.
commit 4e2dd06861d2c9b38465bb44d01e39cce16fa509
Author: Thomas Gstädtner <[email protected]>
Date: Mon Jun 17 07:49:22 2013 +0100
ibar exec list: allow fast application switching by scrollwheel
---
src/modules/ibar/e_mod_main.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c
index 7bc36c7..fbb6216 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;
--
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev