void ListHookedPointing::apply(const Params_ScrollWheelEventCallback& params) { ListHookedPointing::Item* p = static_cast<ListHookedPointing::Item*>(get_replaced()); if (p) { p->apply(params); } }
void EventInputQueue::push_ScrollWheelEventCallback(OSObject* target, short deltaAxis1, short deltaAxis2, short deltaAxis3, IOFixed fixedDelta1, IOFixed fixedDelta2, IOFixed fixedDelta3, SInt32 pointDelta1, SInt32 pointDelta2, SInt32 pointDelta3, SInt32 options, AbsoluteTime ts, OSObject* sender, void* refcon) { GlobalLock::ScopedLock lk; if (! lk) return; Params_ScrollWheelEventCallback::log(true, deltaAxis1, deltaAxis2, deltaAxis3, fixedDelta1, fixedDelta2, fixedDelta3, pointDelta1, pointDelta2, pointDelta3, options); // ------------------------------------------------------------ Params_ScrollWheelEventCallback::auto_ptr ptr(Params_ScrollWheelEventCallback::alloc(deltaAxis1, deltaAxis2, deltaAxis3, fixedDelta1, fixedDelta2, fixedDelta3, pointDelta1, pointDelta2, pointDelta3, options)); if (! ptr) return; Params_ScrollWheelEventCallback& params = *ptr; // ------------------------------------------------------------ IOHIPointing* device = OSDynamicCast(IOHIPointing, sender); if (! device) return; ListHookedPointing::Item* item = static_cast<ListHookedPointing::Item*>(ListHookedPointing::instance().get(device)); if (! item) return; // ------------------------------------------------------------ CommonData::setcurrent_ts(ts); // ------------------------------------------------------------ bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); enqueue_(params, retainFlagStatusTemporaryCount, item->getDeviceIdentifier()); setTimer(); }
void EventInputQueue::push_ScrollWheelEventCallback(OSObject* target, short deltaAxis1, short deltaAxis2, short deltaAxis3, IOFixed fixedDelta1, IOFixed fixedDelta2, IOFixed fixedDelta3, SInt32 pointDelta1, SInt32 pointDelta2, SInt32 pointDelta3, SInt32 options, AbsoluteTime ts, OSObject* sender, void* refcon) { IOLockWrapper::ScopedLock lk_eventlock(CommonData::getEventLock()); if (! lk_eventlock) return; IOLockWrapper::ScopedLock lk(timer_.getlock()); if (! lk) return; // ------------------------------------------------------------ Params_ScrollWheelEventCallback::auto_ptr ptr(Params_ScrollWheelEventCallback::alloc(deltaAxis1, deltaAxis2, deltaAxis3, fixedDelta1, fixedDelta2, fixedDelta3, pointDelta1, pointDelta2, pointDelta3, options)); if (! ptr) return; Params_ScrollWheelEventCallback& params = *ptr; // ------------------------------------------------------------ DeviceVendor deviceVendor(0); DeviceProduct deviceProduct(0); { IOLockWrapper::ScopedLock lk_device(ListHookedKeyboard::instance().getListLock()); if (! lk_device) return; IOHIPointing* device = OSDynamicCast(IOHIPointing, sender); if (! device) return; ListHookedPointing::Item* item = static_cast<ListHookedPointing::Item*>(ListHookedPointing::instance().get_nolock(device)); if (! item) return; // ------------------------------------------------------------ CommonData::setcurrent_ts(ts); deviceVendor = item->getVendor(); deviceProduct = item->getProduct(); } // ------------------------------------------------------------ bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); bool updateWorkspaceData = false; enqueue_(params, retainFlagStatusTemporaryCount, updateWorkspaceData, deviceVendor, deviceProduct); setTimer(); }
void ListHookedPointing::apply(const Params_ScrollWheelEventCallback& params) { IOLockWrapper::ScopedLock lk(list_lock_); if (! lk) return; ListHookedPointing::Item* p = static_cast<ListHookedPointing::Item*>(get_replaced_nolock()); if (p) { p->apply(params); } }
void ListHookedPointing::apply(const Params_RelativePointerEventCallback& params) { // if all button are released, send event for all devices. if (params.buttons == Buttons(0) && params.dx == 0 && params.dy == 0) { for (Item* p = static_cast<Item*>(list_.safe_front()); p; p = static_cast<Item*>(p->getnext())) { if (!p->isReplaced()) continue; p->apply(params); } } else { ListHookedPointing::Item* p = static_cast<ListHookedPointing::Item*>(get_replaced()); if (p) { p->apply(params); } } }
// ---------------------------------------------------------------------- void EventInputQueue::push_RelativePointerEventCallback(OSObject* target, int buttons_raw, int dx, int dy, AbsoluteTime ts, OSObject* sender, void* refcon) { GlobalLock::ScopedLock lk; if (!lk) return; Params_RelativePointerEventCallback::log(true, Buttons(buttons_raw), dx, dy); // ------------------------------------------------------------ Buttons buttons(buttons_raw); Buttons justPressed; Buttons justReleased; IOHIPointing* device = OSDynamicCast(IOHIPointing, sender); if (!device) return; ListHookedPointing::Item* item = static_cast<ListHookedPointing::Item*>(ListHookedPointing::instance().get(device)); if (!item) return; // ------------------------------------------------------------ CommonData::setcurrent_ts(ts); // ------------------------------------------------------------ justPressed = buttons.justPressed(item->get_previousbuttons()); justReleased = buttons.justReleased(item->get_previousbuttons()); item->set_previousbuttons(buttons); // ------------------------------------------------------------ // divide an event into button and cursormove events. for (int i = 0; i < ButtonStatus::MAXNUM; ++i) { PointingButton btn(1 << i); if (justPressed.isOn(btn)) { Params_RelativePointerEventCallback params(buttons, 0, 0, btn, true); bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); enqueue_(params, retainFlagStatusTemporaryCount, item->getDeviceIdentifier()); } if (justReleased.isOn(btn)) { Params_RelativePointerEventCallback params(buttons, 0, 0, btn, false); bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); enqueue_(params, retainFlagStatusTemporaryCount, item->getDeviceIdentifier()); } } // If (dx == 0 && dy == 0), the event is either needless event or just pressing/releasing buttons event. // About just pressing/releasing buttons event, we handled these in the above processes. // So, we can drop (dx == 0 && dy == 0) events in here. if (dx != 0 || dy != 0) { Params_RelativePointerEventCallback params(buttons, dx, dy, PointingButton::NONE, false); bool retainFlagStatusTemporaryCount = true; enqueue_(params, retainFlagStatusTemporaryCount, item->getDeviceIdentifier()); } setTimer(); }
void ListHookedPointing::apply(const Params_RelativePointerEventCallback& params) { IOLockWrapper::ScopedLock lk(list_lock_); if (! lk) return; // if all button are released, send event for all devices. if (params.buttons == Buttons(0) && params.dx == 0 && params.dy == 0) { for (Item* p = static_cast<Item*>(list_->front()); p; p = static_cast<Item*>(p->getnext())) { if (! p->isReplaced()) continue; p->apply(params); } } else { ListHookedPointing::Item* p = static_cast<ListHookedPointing::Item*>(get_replaced_nolock()); if (p) { p->apply(params); } } }
// ---------------------------------------------------------------------- void EventInputQueue::push_RelativePointerEventCallback(OSObject* target, int buttons_raw, int dx, int dy, AbsoluteTime ts, OSObject* sender, void* refcon) { IOLockWrapper::ScopedLock lk_eventlock(CommonData::getEventLock()); if (! lk_eventlock) return; IOLockWrapper::ScopedLock lk(timer_.getlock()); if (! lk) return; // ------------------------------------------------------------ Buttons buttons(buttons_raw); Buttons justPressed; Buttons justReleased; DeviceVendor deviceVendor(0); DeviceProduct deviceProduct(0); { IOLockWrapper::ScopedLock lk_device(ListHookedKeyboard::instance().getListLock()); if (! lk_device) return; IOHIPointing* device = OSDynamicCast(IOHIPointing, sender); if (! device) return; ListHookedPointing::Item* item = static_cast<ListHookedPointing::Item*>(ListHookedPointing::instance().get_nolock(device)); if (! item) return; // ------------------------------------------------------------ CommonData::setcurrent_ts(ts); deviceVendor = item->getVendor(); deviceProduct = item->getProduct(); // ------------------------------------------------------------ justPressed = buttons.justPressed(item->get_previousbuttons()); justReleased = buttons.justReleased(item->get_previousbuttons()); item->set_previousbuttons(buttons); } // ------------------------------------------------------------ // divide an event into button and cursormove events. for (int i = 0; i < ButtonStatus::MAXNUM; ++i) { PointingButton btn(1 << i); if (justPressed.isOn(btn)) { Params_RelativePointerEventCallback::auto_ptr ptr(Params_RelativePointerEventCallback::alloc(buttons, 0, 0, btn, true)); if (! ptr) return; bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); enqueue_(*ptr, retainFlagStatusTemporaryCount, deviceVendor, deviceProduct); } if (justReleased.isOn(btn)) { Params_RelativePointerEventCallback::auto_ptr ptr(Params_RelativePointerEventCallback::alloc(buttons, 0, 0, btn, false)); if (! ptr) return; bool retainFlagStatusTemporaryCount = Config::get_essential_config(BRIDGE_ESSENTIAL_CONFIG_INDEX_general_lazy_modifiers_with_mouse_event); enqueue_(*ptr, retainFlagStatusTemporaryCount, deviceVendor, deviceProduct); } } Params_RelativePointerEventCallback::auto_ptr ptr(Params_RelativePointerEventCallback::alloc(buttons, dx, dy, PointingButton::NONE, false)); if (! ptr) return; bool retainFlagStatusTemporaryCount = true; enqueue_(*ptr, retainFlagStatusTemporaryCount, deviceVendor, deviceProduct); setTimer(); }