BUT i want Cocoa not to emit an "error beep" each time a key is pressed (PB Keyboard Shortcuts are not usable in my case).
I have read that it is needed to subclass the NSView to return YES to the "performKeyEquivalent:" event to avoid the "error beep" from Cocoa when pressing a key :
http://stackoverflow.com/questions/8869 ... -in-nsview
But i don't know how to do it in PB. Can some Cocoa guru help me ?
Code: Select all
EnableExplicit
#NSKeyDown                   = 10
#NSKeyUp                     = 11
#NSFlagsChanged              = 12
ImportC "" ;{
   sel_registerName(str.p-ascii)
   class_addMethod(class, selector, imp, types.p-ascii)
EndImport ;}
ProcedureC OS_CallBackEventsHandler(obj, sel, notification)
   Define sharedApplication = CocoaMessage(0, 0, "NSApplication sharedApplication")
   Define currentEvent = CocoaMessage(0, sharedApplication, "currentEvent")
   Define Object = CocoaMessage(0, currentEvent, "window")
   Static lastEvent
   If currentEvent = lastEvent : ProcedureReturn : EndIf
   lastEvent = currentEvent
   If currentEvent
      Select CocoaMessage(0, currentEvent, "type")
         Case #NSKeyDown
            Debug "KeyDown : keyCode = " + CocoaMessage(0, currentEvent, "keyCode")
            Define Long = CocoaMessage(0, currentEvent, "characters")
            CocoaMessage(@Long, Long, "UTF8String")
            Debug "KeyDown : keyChar = " + Asc(PeekS(Long, -1, #PB_UTF8))
          
         Case #NSKeyUp
            Debug "KeyUp : keyCode = " + CocoaMessage(0, currentEvent, "keyCode")
          
         Case #NSFlagsChanged ; SHIFT, CMD, ALT, CTRL, CAPS
            Debug "Flags : " + Bin(CocoaMessage(0, currentEvent, "modifierFlags"))
         
      EndSelect
   EndIf
EndProcedure
OpenWindow(0, 100, 100, 300, 200, "Test")
Define notificationCenter = CocoaMessage(0, 0, "NSNotificationCenter defaultCenter")
Define appDelegate = CocoaMessage(0, CocoaMessage(0, 0, "NSApplication sharedApplication"), "delegate")
Define delegateClass = CocoaMessage(0, appDelegate, "class")
Define selector = sel_registerName("EventsHandlerCallback:") ; Necessary ?
class_addMethod(delegateClass, selector, @OS_CallBackEventsHandler(), "v@:@")
CocoaMessage(0, notificationCenter, "addObserver:", appDelegate, "selector:", selector, "name:", #Null, "object:", WindowID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

