PointingButton makeButtons(void) const {
   if (count_ + lock_count_ > 0) {
     return button_;
   } else {
     return PointingButton();
   }
 }
Example #2
0
 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;
   }
 }
Example #3
0
 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;
      }
    }