Hey all,
This is a patch that adds desktop switching via the mouse wheel when
you wheel over the pager, just like XFCE4 and recent Gnome versions.
It's my first development with e17, so if I need to fix anything up,
just let me know.
'grats to everyone who put together the EFL, as it was very
straightforward to write this.
Jonathan (giard)
--- /home/jonathan/BACKUP2005_09_06/e_mod_main.c 2005-09-06
10:47:35.000000000 -0400
+++ e_mod_main.c 2005-09-06 10:51:46.000000000 -0400
@@ -61,6 +61,7 @@
static void _pager_desk_cb_mouse_down(void *data, Evas *e,
Evas_Object *obj, void *event_info);
static void _pager_desk_cb_mouse_up(void *data, Evas *e,
Evas_Object *obj, void *event_info);
static void _pager_desk_cb_mouse_move(void *data, Evas *e,
Evas_Object *obj, void *event_info);
+static void _pager_desk_cb_mouse_wheel(void *data, Evas *e,
Evas_Object *obj, void *event_info);
static void _pager_desk_cb_intercept_move(void *data,
Evas_Object *o, Evas_Coord x, Evas_Coord y);
static void _pager_desk_cb_intercept_resize(void *data,
Evas_Object *o, Evas_Coord w, Evas_Coord h);
@@ -734,6 +735,7 @@
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_pager_desk_cb_mouse_down, pd);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,
_pager_desk_cb_mouse_up, pd);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE,
_pager_desk_cb_mouse_move, pd);
+ evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL,
_pager_desk_cb_mouse_wheel, pd);
evas_object_show(o);
o = e_layout_add(face->evas);
@@ -1671,6 +1673,61 @@
desk = data;
}
+static void
+_pager_desk_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj,
void *event_info)
+{
+ Evas_Event_Mouse_Wheel *ev;
+ Evas_List *l;
+ Pager_Desk *desk;
+ Pager_Face *face;
+
+ ev = event_info;
+ desk = data;
+ face = desk->face;
+ l = face->desks;
+
+ for (l = face->desks; l; l = l->next)
+ {
+ Pager_Desk *pd;
+ pd = l->data;
+ if (pd->current)
+ {
+ /* Mouse wheel up, scroll back through desks */
+ if (ev->z < 0)
+ {
+ if (l->prev)
+ {
+ pd = l->prev->data;
+ e_desk_show(pd->desk);
+ }
+ else
+ {
+ /* We've looped around, go to the last desk. Not sure if
there's a better way. */
+ Evas_List *l2;
+ for (l2 = face->desks; l2->next; l2 = l2->next);
+ pd = l2->data;
+ e_desk_show(pd->desk);
+ }
+ }
+ /* Mouse wheel down, scroll forward through desks */
+ else if (ev->z > 0)
+ {
+ if (l->next)
+ {
+ pd = l->next->data;
+ e_desk_show(pd->desk);
+ }
+ else
+ {
+ /* We've looped around, start back at the first desk */
+ pd = face->desks->data;
+ e_desk_show(pd->desk);
+ }
+ }
+ break;
+ }
+ }
+}
/*****/
static void
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel