From: Felix Domke Date: Tue, 17 May 2005 01:47:57 +0000 (+0000) Subject: - add "wildcard" (empty) context to receive all keys X-Git-Tag: 2.6.0~5855 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/a2fdb25ccdde65e3b545adbc1916c092582edf7d - add "wildcard" (empty) context to receive all keys --- diff --git a/lib/actions/action.cpp b/lib/actions/action.cpp index 26eba7a4..25db199e 100644 --- a/lib/actions/action.cpp +++ b/lib/actions/action.cpp @@ -134,42 +134,61 @@ void eActionMap::keyPressed(int device, int key, int flags) /* is this a native context? */ if (i->second.m_widget) { - std::multimap::const_iterator - k = m_native_keys.lower_bound(i->second.m_context), - e = m_native_keys.upper_bound(i->second.m_context); - - for (; k != e; ++k) + /* is this a named context, i.e. not the wildcard? */ + if (i->second.m_context.size()) { - if ( - // (k->second.m_device == m_device) && - (k->second.m_key == key) && - (k->second.m_flags & (1<::const_iterator + k = m_native_keys.lower_bound(i->second.m_context), + e = m_native_keys.upper_bound(i->second.m_context); + + for (; k != e; ++k) { - if (i->second.m_widget->event(eWidget::evtAction, 0, (void*)k->second.m_action)) - return; + if ( + // (k->second.m_device == m_device) && + (k->second.m_key == key) && + (k->second.m_flags & (1<second.m_widget->event(eWidget::evtAction, 0, (void*)k->second.m_action)) + return; + } } + } else + { + /* wildcard - get any keys. */ + if (i->second.m_widget->event(eWidget::evtKey, (void*)key, (void*)flags)) + return; } } else if (i->second.m_fnc) { - std::multimap::const_iterator - k = m_python_keys.lower_bound(i->second.m_context), - e = m_python_keys.upper_bound(i->second.m_context); - - for (; k != e;) + if (i->second.m_context.size()) { - if ( - // (k->second.m_device == m_device) && - (k->second.m_key == key) && - (k->second.m_flags & (1<::const_iterator + k = m_python_keys.lower_bound(i->second.m_context), + e = m_python_keys.upper_bound(i->second.m_context); + + for (; k != e;) { - PyObject *pArgs = PyTuple_New(2); - PyTuple_SetItem(pArgs, 0, PyString_FromString(k->first.c_str())); - PyTuple_SetItem(pArgs, 1, PyString_FromString(k->second.m_action.c_str())); - ++k; - ePython::call(i->second.m_fnc, pArgs); - Py_DECREF(pArgs); - } else - ++k; + if ( + // (k->second.m_device == m_device) && + (k->second.m_key == key) && + (k->second.m_flags & (1<first.c_str())); + PyTuple_SetItem(pArgs, 1, PyString_FromString(k->second.m_action.c_str())); + ++k; + ePython::call(i->second.m_fnc, pArgs); + Py_DECREF(pArgs); + } else + ++k; + } + } else + { + PyObject *pArgs = PyTuple_New(2); + PyTuple_SetItem(pArgs, 0, PyInt_FromLong(key)); + PyTuple_SetItem(pArgs, 1, PyInt_FromLong(flags)); + ePython::call(i->second.m_fnc, pArgs); + Py_DECREF(pArgs); } } }