[vtkusers] VTK tutorial, step 5 (Cone5), OSX-Cocoa: fails to capture keyboard events

Michael Jackson mike.jackson at bluequartz.net
Thu Mar 19 19:09:30 EDT 2009

These are from my own notes about the render window not getting the  
key events.. or maybe it was the mouse events:

I recently moved up to Leopard and this is now hitting me also so I  
went looking around and here is the solution that I came up with and  
it would seem to work all the way back to Panther (10.3.x). This is  
probably ONLY necessary if you build VTK with Carbon instead of Cocoa.  
You would build against Carbon in the following Situations:
   * You will be using Qt versions 4.0 through at least Qt 4.4
   * You are using another toolkit that requires Carbon?
   * You are building ParaView 3.2 or probably ParaView 3.4 (which  
uses Qt 4.3/Qt 4.4)

I added the following code to my "main" method:

In your “main” method have the following:

#ifdef __APPLE__ && defined (VTK_USE_CARBON)
#include <Processes.h>
void Apple_Carbon_Focus_Fix()
   ProcessSerialNumber psn = { 0, kCurrentProcess };
   OSErr err = GetCurrentProcess (&psn);
   OSStatus status =  TransformProcessType ( &psn,  
void Apple_Carbon_Focus_Fix()

// ----------------------------------------------
int main(int argc, char* argv[])


   return 0;

Then in your CMakeLists.txt file have the following (VTK is used as  
the example)
# This must be AFTER the VTK package has been found....
        # We must include this header directory in order to use some  
carbon specific calls

Mike Jackson                  mike.jackson at bluequartz.net
BlueQuartz Software                    www.bluequartz.net
Principal Software Engineer                  Dayton, Ohio

On Mar 19, 2009, at 7:03 PM, Sean McBride wrote:

> On 3/19/09 3:58 PM, Darren Weber said:
>> I'm not yet versed in Cocoa to make the change required.  I can  
>> follow
>> specific instructions...  I wonder if the keyboard event capture  
>> should
>> apply at the level of the window or at the level of the interactor?
> The snippit you had was good (wrong header though), so just paste it
> into the vtkCocoaRenderWindowInteractor constructor:
> #include <ApplicationServices/ApplicationServices.h>
> ProcessSerialNumber psn = { 0, kCurrentProcess };
> OSStatus error = TransformProcessType( &psn,
> kProcessTransformToForegroundApplication );
> assert (error == noErr);
> -- 
> ____________________________________________________________
> Sean McBride, B. Eng                 sean at rogue-research.com
> Rogue Research                        www.rogue-research.com
> Mac Software Developer              Montréal, Québec, Canada
> _______________________________________________
> Powered by www.kitware.com
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers

More information about the vtkusers mailing list