Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_evas Modified Files: ecore_evas.c ecore_evas_private.h ecore_evas_x.c Log Message: ignore events. Should we add extra windows to the ignore list (ecore_x_window_ignore_set)? =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/ecore_evas.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- ecore_evas.c 3 Oct 2005 06:45:45 -0000 1.21 +++ ecore_evas.c 8 Oct 2005 12:41:59 -0000 1.22 @@ -1517,6 +1517,46 @@ return ee->prop.sticky ? 1:0; } +/** + * Set if this evas should ignore events + * + * @param ee The Ecore_Evas whose window's to ignore events + * @param sticky The Ecore_Evas new ignore state + * + */ +void +ecore_evas_ignore_events_set(Ecore_Evas *ee, int ignore) +{ + if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS)) + { + ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, + "ecore_evas_ignore_events_set"); + return; + } + + IFC(ee, fn_ignore_events_set) (ee, ignore); + IFE; +} + +/** + * Returns the ignore state of an Ecore_Evas' window. + * + * @param ee The Ecore_Evas whose window's ignore events state is returned. + * @return The Ecore_Evas window's ignore state. + * + */ +int +ecore_evas_ignore_events_get(Ecore_Evas *ee) +{ + if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS)) + { + ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS, + "ecore_evas_ignore_events_get"); + return 0; + } else + return ee->ignore_events ? 1 : 0; +} + #ifndef WIN32 /* fps debug calls - for debugging how much time your app actually spends */ /* rendering graphics... :) */ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/ecore_evas_private.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- ecore_evas_private.h 3 Oct 2005 06:45:45 -0000 1.17 +++ ecore_evas_private.h 8 Oct 2005 12:41:59 -0000 1.18 @@ -82,6 +82,7 @@ void (*fn_avoid_damage_set) (Ecore_Evas *ee, int on); void (*fn_withdrawn_set) (Ecore_Evas *ee, int withdrawn); void (*fn_sticky_set) (Ecore_Evas *ee, int sticky); + void (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore); }; struct _Ecore_Evas_Engine @@ -205,6 +206,8 @@ Ecore_Evas_Engine engine; Evas_List *sub_ecore_evas; + + unsigned char ignore_events : 1; }; #ifdef BUILD_ECORE_X =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_evas/ecore_evas_x.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -3 -r1.59 -r1.60 --- ecore_evas_x.c 4 Oct 2005 18:19:16 -0000 1.59 +++ ecore_evas_x.c 8 Oct 2005 12:41:59 -0000 1.60 @@ -333,7 +333,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); evas_event_feed_key_down(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL); return 1; @@ -347,7 +347,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); evas_event_feed_key_up(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL); return 1; @@ -362,7 +362,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK; if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK; @@ -378,7 +378,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); evas_event_feed_mouse_up(ee->evas, e->button, EVAS_BUTTON_NONE, e->time, NULL); return 1; @@ -393,8 +393,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) - return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); evas_event_feed_mouse_wheel(ee->evas, e->direction, e->z, e->time, NULL); @@ -410,7 +409,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); _ecore_evas_x_mouse_move_process(ee, e->x, e->y, e->time); return 1; @@ -424,7 +423,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ if (e->event_win == ee->engine.x.win_container) return 0; /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */ if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee); @@ -442,7 +441,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ if (e->event_win == ee->engine.x.win_container) return 0; /* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */ _ecore_evas_x_modifier_locks_update(ee, e->modifiers); @@ -461,7 +460,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ ee->prop.focused = 1; if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee); return 1; @@ -475,7 +474,7 @@ e = event; ee = _ecore_evas_x_match(e->win); - if (!ee) return 1; /* pass on event */ + if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */ if (ee->prop.fullscreen) ecore_x_window_focus(ee->engine.x.win); ee->prop.focused = 0; @@ -1385,6 +1384,30 @@ } static void +_ecore_evas_x_ignore_events_set(Ecore_Evas *ee, int ignore) +{ + if ((ee->ignore_events && ignore) || + (!ee->ignore_events && !ignore)) return; + + if (ignore) + { + ee->ignore_events = 1; + if (ee->engine.x.win_container) + ecore_x_window_ignore_set(ee->engine.x.win_container, 1); + if (ee->engine.x.win) + ecore_x_window_ignore_set(ee->engine.x.win, 1); + } + else + { + ee->ignore_events = 0; + if (ee->engine.x.win_container) + ecore_x_window_ignore_set(ee->engine.x.win_container, 0); + if (ee->engine.x.win) + ecore_x_window_ignore_set(ee->engine.x.win, 0); + } +} + +static void _ecore_evas_x_override_set(Ecore_Evas *ee, int on) { if (((ee->prop.override) && (on)) || @@ -1605,7 +1628,8 @@ _ecore_evas_x_fullscreen_set, _ecore_evas_x_avoid_damage_set, _ecore_evas_x_withdrawn_set, - _ecore_evas_x_sticky_set + _ecore_evas_x_sticky_set, + _ecore_evas_x_ignore_events_set }; #endif ------------------------------------------------------- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs