@@ -199,7 +199,7 @@ KeySequence Stage::set_active_client_contexts(const std::vector<int> &indices) {
199199 assert (i >= 0 && i < static_cast <int >(m_contexts.size ()));
200200
201201 m_active_client_contexts = indices;
202- update_active_contexts ();
202+ update_active_contexts (any_device_index );
203203
204204 // cancel output on release when the focus changed
205205 cancel_inactive_output_on_release ();
@@ -218,15 +218,15 @@ bool Stage::match_context_modifier_filter(const KeySequence& modifiers) {
218218 return true ;
219219}
220220
221- void Stage::update_active_contexts () {
221+ void Stage::update_active_contexts (int device_index ) {
222222 std::swap (m_prev_active_contexts, m_active_contexts);
223223
224224 // evaluate modifier and device filter of contexts which were set active by client
225225 m_active_contexts.clear ();
226226 for (auto index : m_active_client_contexts) {
227227 const auto & context = m_contexts[index];
228228 if ((match_context_modifier_filter (context.modifier_filter ) ^ context.invert_modifier_filter ) &&
229- ((! context. device_filter && !context. device_id_filter ) || context. matching_device_bits )) {
229+ device_matches_filter ( context, device_index )) {
230230 index = fallthrough_context (index);
231231 if (m_active_contexts.empty () || m_active_contexts.back () != index)
232232 m_active_contexts.push_back (index);
@@ -385,9 +385,6 @@ auto Stage::match_input(bool first_iteration, bool matched_are_optional,
385385
386386 for (auto context_index : m_active_contexts) {
387387 const auto & context = m_contexts[context_index];
388- if (!device_matches_filter (context, device_index))
389- continue ;
390-
391388 for (const auto & context_input : context.inputs ) {
392389 const auto & input = context_input.input ;
393390 const auto no_might_match_mapping =
@@ -508,7 +505,7 @@ void Stage::apply_input(const KeyEvent event, int device_index) {
508505 }
509506
510507 // update contexts with modifier filter
511- update_active_contexts ();
508+ update_active_contexts (device_index );
512509
513510 if (event.state == KeyState::Up) {
514511
@@ -668,7 +665,7 @@ void Stage::apply_input(const KeyEvent event, int device_index) {
668665 release_triggered (event.key );
669666
670667 // update contexts with modifier filter
671- update_active_contexts ();
668+ update_active_contexts (device_index );
672669
673670 // remove matched timeout events
674671 while (!m_sequence.empty () &&
0 commit comments