Implement pass binds (#2503)

* Implement pass binds

Pass binds run the associated dispatcher but do not prevent windows
from receiving the bind.

* Fix pass binds not working properly with release binds

* Rename `pass` to `nonConsuming`
This commit is contained in:
outfoxxed 2023-06-14 04:08:56 -07:00 committed by GitHub
parent 9a88c19f1a
commit f0e4f6622e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 21 deletions

View file

@ -414,6 +414,9 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const std::string&
}
if (pressed && k.release) {
if (k.nonConsuming)
return false;
// suppress down event
m_kHeldBack = keysym;
return true;
@ -452,7 +455,8 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const std::string&
wl_event_source_timer_update(m_pActiveKeybindEventSource, PACTIVEKEEB->repeatDelay);
}
found = true;
if (!k.nonConsuming)
found = true;
}
return found;

View file

@ -11,16 +11,17 @@ class CConfigManager;
class CPluginSystem;
struct SKeybind {
std::string key = "";
int keycode = -1;
uint32_t modmask = 0;
std::string handler = "";
std::string arg = "";
bool locked = false;
std::string submap = "";
bool release = false;
bool repeat = false;
bool mouse = false;
std::string key = "";
int keycode = -1;
uint32_t modmask = 0;
std::string handler = "";
std::string arg = "";
bool locked = false;
std::string submap = "";
bool release = false;
bool repeat = false;
bool mouse = false;
bool nonConsuming = false;
// DO NOT INITIALIZE
bool shadowed = false;