void KeyboardRepeat::set(EventType eventType, Flags flags, ConsumerKeyCode key, int delayUntilRepeat, int keyRepeat) { if (key == ConsumerKeyCode::VK_NONE) return; if (eventType == EventType::UP) { goto cancel; } else if (eventType == EventType::DOWN) { if (!key.isRepeatable()) { goto cancel; } cancel(); primitive_add(eventType, flags, key); primitive_start(delayUntilRepeat, keyRepeat); IOLOG_DEVEL("KeyboardRepeat::set consumer key:%d flags:0x%x\n", key.get(), flags.get()); } else { goto cancel; } return; cancel: cancel(); }
void KeyboardRepeat::primitive_add_downup(Flags flags, KeyCode key, KeyboardType keyboardType) { primitive_add(EventType::DOWN, flags, key, keyboardType, Item::TYPE_DOWNUP); }
void KeyboardRepeat::set(EventType eventType, Flags flags, ConsumerKeyCode key) { if (! queue_) return; if (key == ConsumerKeyCode::VK_NONE) return; if (eventType == EventType::UP) { goto cancel; } else if (eventType == EventType::DOWN) { if (! key.isRepeatable()) { goto cancel; } cancel(); primitive_add(eventType, flags, key); primitive_start(Config::get_repeat_consumer_initial_wait(), Config::get_repeat_consumer_wait()); IOLOG_DEVEL("KeyboardRepeat::set consumer key:%d flags:0x%x\n", key.get(), flags.get()); } else { goto cancel; } return; cancel: cancel(); }
void KeyboardRepeat::set(EventType eventType, Flags flags, KeyCode key, KeyboardType keyboardType, int delayUntilRepeat, int keyRepeat) { if (! queue_) return; if (key == KeyCode::VK_NONE) return; if (eventType == EventType::MODIFY) { goto cancel; } else if (eventType == EventType::UP) { // The repetition of plural keys is controlled by manual operation. // So, we ignore it. if (queue_->size() != 1) return; // We stop key repeat only when the repeating key is up. KeyboardRepeat::Item* p = static_cast<KeyboardRepeat::Item*>(queue_->front()); if (p && (p->params).type == ParamsUnion::KEYBOARD) { Params_KeyboardEventCallBack* params = (p->params).params.params_KeyboardEventCallBack; if (params && key == params->key) { goto cancel; } } } else if (eventType == EventType::DOWN) { cancel(); primitive_add(eventType, flags, key, keyboardType, Item::TYPE_NORMAL); primitive_start(delayUntilRepeat, keyRepeat); IOLOG_DEVEL("KeyboardRepeat::set key:%d flags:0x%x\n", key.get(), flags.get()); } else { goto cancel; } return; cancel: cancel(); }
void KeyboardRepeat::set(EventType eventType, Flags flags, KeyCode key, KeyboardType keyboardType, int delayUntilRepeat, int keyRepeat) { if (key == KeyCode::VK_NONE) return; if (eventType == EventType::MODIFY) { goto cancel; } else if (eventType == EventType::UP) { // The repetition of multiple keys is controlled by manual operation. // So, we ignore it. if (queue_.size() != 1) return; // We stop key repeat only when the repeating key is up. KeyboardRepeat::Item* p = static_cast<KeyboardRepeat::Item*>(queue_.safe_front()); if (p) { auto params = (p->getParamsBase()).get_Params_KeyboardEventCallBack(); if (params && key == params->key) { goto cancel; } } } else if (eventType == EventType::DOWN) { cancel(); primitive_add(eventType, flags, key, keyboardType); primitive_start(delayUntilRepeat, keyRepeat); IOLOG_DEVEL("KeyboardRepeat::set key:%d flags:0x%x\n", key.get(), flags.get()); } else { goto cancel; } return; cancel: cancel(); }
static void primitive_add(const Params_KeyboardSpecialEventCallback& params) { primitive_add(params.eventType, params.flags, params.key); }
// -------------------------------------------------- // primitive operations. static void primitive_add(const Params_KeyboardEventCallBack& params) { primitive_add(params.eventType, params.flags, params.key, params.keyboardType); }