PointingButton makeButtons(void) const { if (count_ + lock_count_ > 0) { return button_; } else { return PointingButton(); } }
ToEvent(unsigned int datatype, unsigned int v) { switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: type_ = Type::KEY; key_ = KeyCode(v); break; case BRIDGE_DATATYPE_CONSUMERKEYCODE: type_ = Type::CONSUMER_KEY; consumer_ = ConsumerKeyCode(v); break; case BRIDGE_DATATYPE_POINTINGBUTTON: type_ = Type::POINTING_BUTTON; button_ = PointingButton(v); break; default: IOLOG_ERROR("Unknown datatype: %d\n", datatype); type_ = Type::NONE; break; } }
FromEvent(AddDataType datatype, AddValue v) : isPressing_(false) { switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: type_ = Type::KEY; key_ = KeyCode(v); break; case BRIDGE_DATATYPE_CONSUMERKEYCODE: type_ = Type::CONSUMER_KEY; consumer_ = ConsumerKeyCode(v); break; case BRIDGE_DATATYPE_POINTINGBUTTON: type_ = Type::POINTING_BUTTON; button_ = PointingButton(v); break; default: IOLOG_ERROR("Unknown datatype: %u\n", static_cast<unsigned int>(datatype)); type_ = Type::NONE; break; } }
void SimultaneousKeyPresses::add(unsigned int datatype, unsigned int newval) { switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: case BRIDGE_DATATYPE_POINTINGBUTTON: { // ---------------------------------------- // The first data is virtualkey_. if (index_ == 0) { if (datatype != BRIDGE_DATATYPE_KEYCODE) { IOLOG_ERROR("Invalid SimultaneousKeyPresses::add\n"); return; } virtualkey_ = newval; goto finish; } // ---------------------------------------- // From keys if (! isFromInfoFull_) { FromInfo fi; switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: fi.set(KeyCode(newval)); break; case BRIDGE_DATATYPE_POINTINGBUTTON: fi.set(PointingButton(newval)); break; default: IOLOG_ERROR("Invalid SimultaneousKeyPresses::add unknown datatype\n"); return; } fromInfo_.push_back(fi); if (isUseSeparator_ == false) { if (index_ == 2) { isFromInfoFull_ = true; } } goto finish; } // ---------------------------------------- // To keys { ToType type = TOTYPE_NONE; switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: type = TOTYPE_KEY; break; case BRIDGE_DATATYPE_POINTINGBUTTON: type = TOTYPE_BUTTON; break; default: IOLOG_ERROR("Invalid SimultaneousKeyPresses::add unknown datatype\n"); return; } if (toType_ == TOTYPE_NONE) { toType_ = type; switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: keytokey_.add(virtualkey_); keytokey_.add(fromFlags_); toKey_raw_ = newval; break; case BRIDGE_DATATYPE_POINTINGBUTTON: keytopointingbutton_.add(virtualkey_); keytopointingbutton_.add(fromFlags_); break; default: IOLOG_ERROR("Invalid SimultaneousKeyPresses::add unknown datatype\n"); return; } } if (toType_ != type) { IOLOG_ERROR("Invalid SimultaneousKeyPresses::add\n"); return; } switch (datatype) { case BRIDGE_DATATYPE_KEYCODE: keytokey_.add(KeyCode(newval)); break; case BRIDGE_DATATYPE_POINTINGBUTTON: keytopointingbutton_.add(PointingButton(newval)); break; default: IOLOG_ERROR("Invalid SimultaneousKeyPresses::add unknown datatype\n"); return; } } finish: ++index_; break; } case BRIDGE_DATATYPE_FLAGS: { if (index_ < 2) { IOLOG_ERROR("Invalid SimultaneousKeyPresses::add\n"); return; } else if (toType_ == TOTYPE_NONE) { fromFlags_ = newval; } else { switch (toType_) { case TOTYPE_KEY: keytokey_.add(Flags(newval)); break; case TOTYPE_BUTTON: keytopointingbutton_.add(Flags(newval)); break; default: IOLOG_ERROR("Invalid SimultaneousKeyPresses::add unknown datatype\n"); return; } } break; } case BRIDGE_DATATYPE_OPTION: { if (Option::SIMULTANEOUSKEYPRESSES_RAW == newval) { if (toType_ != TOTYPE_KEY) { IOLOG_ERROR("Invalid SimultaneousKeyPresses::add\n"); } else { isToRaw_ = true; } } else if (Option::SIMULTANEOUSKEYPRESSES_STRICT_KEY_ORDER == newval) { isStrictKeyOrder_ = true; } else if (Option::USE_SEPARATOR == newval) { isUseSeparator_ = true; } else if (Option::SEPARATOR == newval) { isFromInfoFull_ = true; } else if (Option::NOREPEAT == newval || Option::KEYTOKEY_BEFORE_KEYDOWN == newval || Option::KEYTOKEY_AFTER_KEYUP == newval) { if (toType_ != TOTYPE_KEY) { IOLOG_ERROR("Invalid SimultaneousKeyPresses::add\n"); } else { keytokey_.add(Option(newval)); } } else { IOLOG_ERROR("SimultaneousKeyPresses::add unknown option:%d\n", newval); } break; } default: IOLOG_ERROR("SimultaneousKeyPresses::add invalid datatype:%d\n", datatype); break; } }