]> git.saurik.com Git - wxWidgets.git/commitdiff
added carbon event handlers
authorStefan Csomor <csomor@advancedconcepts.ch>
Mon, 20 May 2002 20:14:22 +0000 (20:14 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Mon, 20 May 2002 20:14:22 +0000 (20:14 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15614 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/toplevel.cpp
src/mac/toplevel.cpp

index 3eb3b4787fc2e7151a7446e2293c69c50b51bdc2..cc6cea4a30314f4bbf0c524a4015e67c97cf1a88 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "wx/mac/uma.h"
 #include "wx/mac/aga.h"
+#include "wx/app.h"
 #include "wx/tooltip.h"
 #include "wx/dnd.h"
 
@@ -110,6 +111,7 @@ void wxTopLevelWindowMac::Init()
     m_macNoEraseUpdateRgn = NewRgn() ;
     m_macNeedsErasing = false ;
     m_macWindow = NULL ;
+    m_macEventHandler = NULL ;
 }
 
 class wxMacDeferredWindowDeleter : public wxObject
@@ -159,7 +161,14 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac()
         wxToolTip::NotifyWindowDelete(m_macWindow) ;
         wxPendingDelete.Append( new wxMacDeferredWindowDeleter( (WindowRef) m_macWindow ) ) ;
     }
-    
+ #if TARGET_CARBON
+    if ( m_macEventHandler )
+    {
+        ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
+        m_macEventHandler = NULL ;
+    }
+#endif   
     wxRemoveMacWindowAssociation( this ) ;
 
     wxTopLevelWindows.DeleteObject(this);
@@ -221,6 +230,52 @@ void wxTopLevelWindowMac::SetIcon(const wxIcon& icon)
     wxTopLevelWindowBase::SetIcon(icon);
 }
 
+#if TARGET_CARBON
+
+EventHandlerUPP wxMacWindowEventHandlerUPP = NULL ;
+
+pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+{
+    OSStatus result = eventNotHandledErr ;
+    EventRecord rec ;
+    switch ( GetEventClass( event ) )
+    {
+        case kEventClassTextInput :
+            if ( wxMacConvertEventToRecord( event , &rec ) )
+            {
+                wxTheApp->MacHandleOneEvent( &rec ) ;
+                result = noErr ;
+            }
+            break ;
+        default :
+            break ;
+    }
+    return result ;
+}
+
+#endif
+
+void wxTopLevelWindowMac::MacInstallEventHandler()
+{
+#if TARGET_CARBON
+       if ( wxMacWindowEventHandlerUPP == NULL )
+       {
+           wxMacWindowEventHandlerUPP = NewEventHandlerUPP( wxMacWindowEventHandler ) ;
+       }
+           
+       static const EventTypeSpec eventList[] = 
+       {
+           { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent }
+       } ;
+       if ( m_macEventHandler )
+       {
+        ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
+        m_macEventHandler = NULL ;
+    }
+       InstallWindowEventHandler(MAC_WXHWND(m_macWindow), wxMacWindowEventHandlerUPP, WXSIZEOF(eventList), eventList, this, &((EventHandlerRef)m_macEventHandler));    
+#endif
+}
+
 void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
            const wxPoint& pos,
            const wxSize& size,
@@ -322,6 +377,7 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
         label = title ;
     UMASetWTitleC( (WindowRef)m_macWindow , label ) ;
     ::CreateRootControl( (WindowRef)m_macWindow , (ControlHandle*)&m_macRootControl ) ;
+    MacInstallEventHandler() ;
 
     m_macFocus = NULL ;
 }
index 3eb3b4787fc2e7151a7446e2293c69c50b51bdc2..cc6cea4a30314f4bbf0c524a4015e67c97cf1a88 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "wx/mac/uma.h"
 #include "wx/mac/aga.h"
+#include "wx/app.h"
 #include "wx/tooltip.h"
 #include "wx/dnd.h"
 
@@ -110,6 +111,7 @@ void wxTopLevelWindowMac::Init()
     m_macNoEraseUpdateRgn = NewRgn() ;
     m_macNeedsErasing = false ;
     m_macWindow = NULL ;
+    m_macEventHandler = NULL ;
 }
 
 class wxMacDeferredWindowDeleter : public wxObject
@@ -159,7 +161,14 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac()
         wxToolTip::NotifyWindowDelete(m_macWindow) ;
         wxPendingDelete.Append( new wxMacDeferredWindowDeleter( (WindowRef) m_macWindow ) ) ;
     }
-    
+ #if TARGET_CARBON
+    if ( m_macEventHandler )
+    {
+        ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
+        m_macEventHandler = NULL ;
+    }
+#endif   
     wxRemoveMacWindowAssociation( this ) ;
 
     wxTopLevelWindows.DeleteObject(this);
@@ -221,6 +230,52 @@ void wxTopLevelWindowMac::SetIcon(const wxIcon& icon)
     wxTopLevelWindowBase::SetIcon(icon);
 }
 
+#if TARGET_CARBON
+
+EventHandlerUPP wxMacWindowEventHandlerUPP = NULL ;
+
+pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+{
+    OSStatus result = eventNotHandledErr ;
+    EventRecord rec ;
+    switch ( GetEventClass( event ) )
+    {
+        case kEventClassTextInput :
+            if ( wxMacConvertEventToRecord( event , &rec ) )
+            {
+                wxTheApp->MacHandleOneEvent( &rec ) ;
+                result = noErr ;
+            }
+            break ;
+        default :
+            break ;
+    }
+    return result ;
+}
+
+#endif
+
+void wxTopLevelWindowMac::MacInstallEventHandler()
+{
+#if TARGET_CARBON
+       if ( wxMacWindowEventHandlerUPP == NULL )
+       {
+           wxMacWindowEventHandlerUPP = NewEventHandlerUPP( wxMacWindowEventHandler ) ;
+       }
+           
+       static const EventTypeSpec eventList[] = 
+       {
+           { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent }
+       } ;
+       if ( m_macEventHandler )
+       {
+        ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
+        m_macEventHandler = NULL ;
+    }
+       InstallWindowEventHandler(MAC_WXHWND(m_macWindow), wxMacWindowEventHandlerUPP, WXSIZEOF(eventList), eventList, this, &((EventHandlerRef)m_macEventHandler));    
+#endif
+}
+
 void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
            const wxPoint& pos,
            const wxSize& size,
@@ -322,6 +377,7 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
         label = title ;
     UMASetWTitleC( (WindowRef)m_macWindow , label ) ;
     ::CreateRootControl( (WindowRef)m_macWindow , (ControlHandle*)&m_macRootControl ) ;
+    MacInstallEventHandler() ;
 
     m_macFocus = NULL ;
 }