Fix a nasty ecore.x and ecore.input conflict

Both modules register the ECORE_EVENT_* events, so if you use them toghether one of the 2 was failing to run because the events was already registered by the other.

I'm fixing this by keeping a local event map in ecore.input, not the cleaner solution but it's the safer one I can found (in term of backward compatibility)

This fix (at least) epymc in standalone mode (without a wm)
This commit is contained in:
Davide Andreoli 2017-07-15 22:52:39 +02:00
parent 26a4c38d67
commit 5b9ba62e8f
1 changed files with 18 additions and 16 deletions

View File

@ -17,7 +17,6 @@
from efl.utils.conversions cimport _ctouni
from efl.ecore cimport _event_mapping_register, _event_mapping_get
ECORE_EVENT_MODIFIER_SHIFT = enums.ECORE_EVENT_MODIFIER_SHIFT
@ -34,23 +33,25 @@ ECORE_EVENT_LOCK_SHIFT = enums.ECORE_EVENT_LOCK_SHIFT
ECORE_EVENT_MODIFIER_ALTGR = enums.ECORE_EVENT_MODIFIER_ALTGR
cdef int _input_events_registered = 0
# NOTE: Cannot use ecore._event_mapping_register helper here
# because ECORE_EVENT_* are already registered by ecore.x
# Thus we need a separate mapping to not conflict.
cdef object _input_event_type_mapping = None
cdef int _ecore_input_events_register() except 0:
global _input_events_registered
global _input_event_type_mapping
if _input_events_registered == 0:
_event_mapping_register(ECORE_EVENT_KEY_DOWN, EventKey)
_event_mapping_register(ECORE_EVENT_KEY_UP, EventKey)
_event_mapping_register(ECORE_EVENT_MOUSE_BUTTON_DOWN, EventMouseButton)
_event_mapping_register(ECORE_EVENT_MOUSE_BUTTON_UP, EventMouseButton)
_event_mapping_register(ECORE_EVENT_MOUSE_MOVE, EventMouseMove)
_event_mapping_register(ECORE_EVENT_MOUSE_IN, EventMouseIO)
_event_mapping_register(ECORE_EVENT_MOUSE_OUT, EventMouseIO)
_event_mapping_register(ECORE_EVENT_MOUSE_WHEEL, EventMouseWheel)
_input_events_registered = 1
if not _input_event_type_mapping:
_input_event_type_mapping = {
ECORE_EVENT_KEY_DOWN: EventKey,
ECORE_EVENT_KEY_UP: EventKey,
ECORE_EVENT_MOUSE_BUTTON_DOWN: EventMouseButton,
ECORE_EVENT_MOUSE_BUTTON_UP: EventMouseButton,
ECORE_EVENT_MOUSE_MOVE: EventMouseMove,
ECORE_EVENT_MOUSE_IN: EventMouseIO,
ECORE_EVENT_MOUSE_OUT: EventMouseIO,
ECORE_EVENT_MOUSE_WHEEL: EventMouseWheel,
}
return 1
@ -85,7 +86,7 @@ cdef class InputEventHandler(EventHandler):
if not callable(func):
raise TypeError("Parameter 'func' must be callable")
event_cls = _event_mapping_get(type)
event_cls = _input_event_type_mapping.get(type)
if event_cls is None:
raise ValueError("Unknow Ecore_Event type %d" % type)
@ -145,6 +146,7 @@ cdef class EventPoint:
def __repr__(self):
return "<EventPoint x=%d y=%d>" % (self.x, self.y)
cdef class EventMulti:
"""
:ivar int device: 0 if normal mouse, 1+ for other mouse-devices (eg multi-touch - other fingers)