8

I'm pretty new in OS X programming and I'm trying to write an application that will capture Force Click event at system-wide context.

Based on various sources I wrote down code listed below:

var lastClickStage = -1

func checkAssistanceSettings () -> Bool {
    let checkOptPrompt = kAXTrustedCheckOptionPrompt.takeUnretainedValue() as NSString
    let options = [checkOptPrompt: true]
    let accessEnabled = AXIsProcessTrustedWithOptions(options)

    return accessEnabled == 1
}

func processForceClick(incomingEvent: NSEvent!) -> Void {
    let clickStage = incomingEvent.stage

    if clickStage == lastClickStage {
        return
    }

    if (lastClickStage == 2 && clickStage != 2) {
        lastClickStage = clickStage
        return
    }

    if (clickStage == 2 && lastClickStage != 2) {
        let applicationClicked = NSWorkspace.sharedWorkspace().frontmostApplication?.bundleIdentifier
        if (applicationClicked != nil) {
            NSLog("ForceClicked in \(applicationClicked!)!")
        }
        lastClickStage = clickStage
    }
}

func processForceClickLocally(incomingEvent: NSEvent!) -> NSEvent {
    processForceClick(incomingEvent)

    return incomingEvent
}

func applicationDidFinishLaunching(aNotification: NSNotification) {
    NSLog("\(checkAssistanceSettings())")

    NSEvent.addLocalMonitorForEventsMatchingMask(NSEventMaskFromType(NSEventType.EventTypePressure), handler: processForceClickLocally)
    NSEvent.addGlobalMonitorForEventsMatchingMask(NSEventMaskFromType(NSEventType.EventTypePressure), handler: processForceClick)
}

When I run my application local event listener seems to work like a charm, but global event listener never calls his handler, even if XCode or a specific built application gets grant to accessibility in System Settings (AXIsProcessTrustedWithOptions(options) evaluates as "true").

Can anyone point out what's wrong with it?

EDIT: Even strange thing discovered by me: seems like global listener not working with this NSEventMask. Got no problem with NSEventMask.LeftMouseDownMask for example. So now seems like question is transformed to "What wrong with NSEventMask.EventMaskPressure in global listeners?".

Fellrond
  • 211
  • 1
  • 7

0 Answers0