forked from enlightenment/efl
ignore events.
Should we add extra windows to the ignore list (ecore_x_window_ignore_set)? SVN revision: 17317
This commit is contained in:
parent
a4c3c2868f
commit
ae491b7811
|
@ -1517,6 +1517,46 @@ ecore_evas_sticky_get(Ecore_Evas *ee)
|
||||||
return ee->prop.sticky ? 1:0;
|
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
|
#ifndef WIN32
|
||||||
/* fps debug calls - for debugging how much time your app actually spends */
|
/* fps debug calls - for debugging how much time your app actually spends */
|
||||||
/* rendering graphics... :) */
|
/* rendering graphics... :) */
|
||||||
|
|
|
@ -82,6 +82,7 @@ struct _Ecore_Evas_Engine_Func
|
||||||
void (*fn_avoid_damage_set) (Ecore_Evas *ee, int on);
|
void (*fn_avoid_damage_set) (Ecore_Evas *ee, int on);
|
||||||
void (*fn_withdrawn_set) (Ecore_Evas *ee, int withdrawn);
|
void (*fn_withdrawn_set) (Ecore_Evas *ee, int withdrawn);
|
||||||
void (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
|
void (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
|
||||||
|
void (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Ecore_Evas_Engine
|
struct _Ecore_Evas_Engine
|
||||||
|
@ -205,6 +206,8 @@ struct _Ecore_Evas
|
||||||
|
|
||||||
Ecore_Evas_Engine engine;
|
Ecore_Evas_Engine engine;
|
||||||
Evas_List *sub_ecore_evas;
|
Evas_List *sub_ecore_evas;
|
||||||
|
|
||||||
|
unsigned char ignore_events : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef BUILD_ECORE_X
|
#ifdef BUILD_ECORE_X
|
||||||
|
|
|
@ -333,7 +333,7 @@ _ecore_evas_x_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *e
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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_modifier_locks_update(ee, e->modifiers);
|
||||||
evas_event_feed_key_down(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL);
|
evas_event_feed_key_down(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -347,7 +347,7 @@ _ecore_evas_x_event_key_up(void *data __UNUSED__, int type __UNUSED__, void *eve
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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_modifier_locks_update(ee, e->modifiers);
|
||||||
evas_event_feed_key_up(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL);
|
evas_event_feed_key_up(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, e->time, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -362,7 +362,7 @@ _ecore_evas_x_event_mouse_button_down(void *data __UNUSED__, int type __UNUSED__
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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_modifier_locks_update(ee, e->modifiers);
|
||||||
if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
|
if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
|
||||||
if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
|
if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
|
||||||
|
@ -378,7 +378,7 @@ _ecore_evas_x_event_mouse_button_up(void *data __UNUSED__, int type __UNUSED__,
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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_modifier_locks_update(ee, e->modifiers);
|
||||||
evas_event_feed_mouse_up(ee->evas, e->button, EVAS_BUTTON_NONE, e->time, NULL);
|
evas_event_feed_mouse_up(ee->evas, e->button, EVAS_BUTTON_NONE, e->time, NULL);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -393,8 +393,7 @@ _ecore_evas_x_event_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
ee = _ecore_evas_x_match(e->win);
|
||||||
|
|
||||||
if (!ee)
|
if ((!ee) || (ee->ignore_events)) return 1; /* pass on event */
|
||||||
return 1; /* pass on event */
|
|
||||||
|
|
||||||
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
||||||
evas_event_feed_mouse_wheel(ee->evas, e->direction, e->z, e->time, NULL);
|
evas_event_feed_mouse_wheel(ee->evas, e->direction, e->z, e->time, NULL);
|
||||||
|
@ -410,7 +409,7 @@ _ecore_evas_x_event_mouse_move(void *data __UNUSED__, int type __UNUSED__, void
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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_modifier_locks_update(ee, e->modifiers);
|
||||||
_ecore_evas_x_mouse_move_process(ee, e->x, e->y, e->time);
|
_ecore_evas_x_mouse_move_process(ee, e->x, e->y, e->time);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -424,7 +423,7 @@ _ecore_evas_x_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *e
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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->event_win == ee->engine.x.win_container) return 0;
|
||||||
/* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
|
/* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
|
||||||
if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
|
if (ee->func.fn_mouse_in) ee->func.fn_mouse_in(ee);
|
||||||
|
@ -442,7 +441,7 @@ _ecore_evas_x_event_mouse_out(void *data __UNUSED__, int type __UNUSED__, void *
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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->event_win == ee->engine.x.win_container) return 0;
|
||||||
/* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
|
/* if (e->mode != ECORE_X_EVENT_MODE_NORMAL) return 0; */
|
||||||
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
_ecore_evas_x_modifier_locks_update(ee, e->modifiers);
|
||||||
|
@ -461,7 +460,7 @@ _ecore_evas_x_event_window_focus_in(void *data __UNUSED__, int type __UNUSED__,
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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;
|
ee->prop.focused = 1;
|
||||||
if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
|
if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -475,7 +474,7 @@ _ecore_evas_x_event_window_focus_out(void *data __UNUSED__, int type __UNUSED__,
|
||||||
|
|
||||||
e = event;
|
e = event;
|
||||||
ee = _ecore_evas_x_match(e->win);
|
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)
|
if (ee->prop.fullscreen)
|
||||||
ecore_x_window_focus(ee->engine.x.win);
|
ecore_x_window_focus(ee->engine.x.win);
|
||||||
ee->prop.focused = 0;
|
ee->prop.focused = 0;
|
||||||
|
@ -1384,6 +1383,30 @@ _ecore_evas_x_sticky_set(Ecore_Evas *ee, int sticky)
|
||||||
_ecore_evas_x_state_update(ee);
|
_ecore_evas_x_state_update(ee);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
_ecore_evas_x_override_set(Ecore_Evas *ee, int on)
|
_ecore_evas_x_override_set(Ecore_Evas *ee, int on)
|
||||||
{
|
{
|
||||||
|
@ -1605,7 +1628,8 @@ static const Ecore_Evas_Engine_Func _ecore_x_engine_func =
|
||||||
_ecore_evas_x_fullscreen_set,
|
_ecore_evas_x_fullscreen_set,
|
||||||
_ecore_evas_x_avoid_damage_set,
|
_ecore_evas_x_avoid_damage_set,
|
||||||
_ecore_evas_x_withdrawn_set,
|
_ecore_evas_x_withdrawn_set,
|
||||||
_ecore_evas_x_sticky_set
|
_ecore_evas_x_sticky_set,
|
||||||
|
_ecore_evas_x_ignore_events_set
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue