- Joystick *js = [controller findJoystickByRef:device];
- if (((ApplicationController *)[NSApplication sharedApplication].delegate).active) {
- JSAction *mainAction = [js actionForEvent:value];
- if (!mainAction)
- return;
-
- [mainAction notifyEvent:value];
- NSArray *children = mainAction.children ? mainAction.children : @[mainAction];
- for (JSAction *subaction in children) {
- Target *target = [[controller->configsController currentConfig] getTargetForAction:subaction];
- if (!target)
- continue;
- // TODO: Can we just trigger based on setRunning:?
- if (target.running != subaction.active) {
- if (subaction.active)
- [target trigger:controller];
- else
- [target untrigger:controller];
- target.running = subaction.active;
- }
-
- // FIXME: Hack, should just expose analog info properly in continuous target.
- if ([mainAction isKindOfClass:[JSActionAnalog class]]) {
- double realValue = [(JSActionAnalog *)mainAction getRealValue:IOHIDValueGetIntegerValue(value)];
- [target setInputValue:realValue];
- if (target.isContinuous && target.running)
- [controller addRunningTarget:target];
- }
- }
- } else if ([NSApplication sharedApplication].isActive && [NSApplication sharedApplication].mainWindow.isVisible) {
- // joysticks not active, use it to select stuff
- JSAction *handler = [js handlerForEvent:value];
- if (!handler)
- return;
-
- [controller expandRecursive:handler];
- controller->programmaticallySelecting = YES;
- [controller->outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:[controller->outlineView rowForItem:handler]] byExtendingSelection: NO];
+ if (controller.sendingRealEvents) {
+ [controller runTargetForDevice:device value:value];
+ } else if ([NSApplication sharedApplication].mainWindow.isVisible) {
+ [controller showTargetForDevice:device value:value];