+#endif // WXWIN_COMPATIBILITY
+ {
+ return GetEventHandler()->ProcessEvent(event);
+ }
+}
+
+// ------------------------
+wxList *wxWinMacControlList = NULL;
+wxControl *wxFindControlFromMacControl(ControlHandle inControl )
+{
+ wxNode *node = wxWinMacControlList->Find((long)inControl);
+ if (!node)
+ return NULL;
+ return (wxControl *)node->Data();
+}
+
+void wxAssociateControlWithMacControl(ControlHandle inControl, wxControl *control)
+{
+ // adding NULL WindowRef is (first) surely a result of an error and
+ // (secondly) breaks menu command processing
+ wxCHECK_RET( inControl != (ControlHandle) NULL, "attempt to add a NULL WindowRef to window list" );
+
+ if ( !wxWinMacControlList->Find((long)inControl) )
+ wxWinMacControlList->Append((long)inControl, control);
+}
+
+void wxRemoveMacControlAssociation(wxControl *control)
+{
+ wxWinMacControlList->DeleteObject(control);
+}
+
+void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString label ,
+ const wxPoint& pos,
+ const wxSize& size, long style,
+ const wxValidator& validator,
+ const wxString& name , WXRECTPTR outBounds , unsigned char* maclabel )
+{
+ m_label = label ;
+ SetName(name);
+ if ( &validator )
+ SetValidator(validator);
+
+ m_windowStyle = style;
+ parent->AddChild(this);
+
+ m_backgroundColour = parent->GetBackgroundColour() ;
+ m_foregroundColour = parent->GetForegroundColour() ;
+
+ if (id == -1)
+ m_windowId = NewControlId();
+ else
+ m_windowId = id;
+
+ // These sizes will be adjusted in MacPostControlCreate
+
+ m_width = size.x ;
+ m_height = size.y ;
+ m_x = pos.x ;
+ m_y = pos.y ;
+
+ ((Rect*)outBounds)->top = -10;
+ ((Rect*)outBounds)->left = -10;
+ ((Rect*)outBounds)->bottom = 0;
+ ((Rect*)outBounds)->right = 0;
+
+ char c_text[255];
+ strcpy( c_text , label ) ;
+ if( wxApp::s_macDefaultEncodingIsPC )
+ {
+ wxMacConvertFromPCForControls( c_text ) ;
+ }
+
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) maclabel , c_text ) ;
+#else
+ strcpy( (char *) maclabel , c_text ) ;
+ c2pstr( (char *) maclabel ) ;
+#endif
+}
+
+void wxControl::MacPostControlCreate()
+{
+ wxASSERT_MSG( (ControlHandle) m_macControl != NULL , "No valid mac control" ) ;
+
+ if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
+ {
+ // no font
+ }
+ else if ( IsKindOf( CLASSINFO( wxStaticBox ) ) || IsKindOf( CLASSINFO( wxRadioBox ) ) || IsKindOf( CLASSINFO( wxButton ) ) )
+ {
+ ControlFontStyleRec controlstyle ;
+ controlstyle.flags = kControlUseFontMask ;
+ controlstyle.font = kControlFontSmallBoldSystemFont ;
+
+ ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ;
+ }
+ else
+ {
+ ControlFontStyleRec controlstyle ;
+ controlstyle.flags = kControlUseFontMask ;
+ controlstyle.font = kControlFontSmallSystemFont ;
+
+ ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ;
+ }
+ ControlHandle container = (ControlHandle) GetParent()->MacGetContainerForEmbedding() ;
+ wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
+ ::EmbedControl( (ControlHandle) m_macControl , container ) ;
+ m_macControlIsShown = true ;
+
+ wxAssociateControlWithMacControl( (ControlHandle) m_macControl , this ) ;
+
+
+ // Adjust the controls size and position
+ wxPoint pos(m_x, m_y);
+ wxSize best_size( DoGetBestSize() );
+ wxSize new_size( m_width, m_height );
+
+ m_x = m_y = m_width = m_height = -1; // Forces SetSize to move/size the control
+
+ if (new_size.x == -1) {
+ new_size.x = best_size.x;
+ }
+ if (new_size.y == -1) {
+ new_size.y = best_size.y;
+ }
+
+ SetSize(pos.x, pos.y, new_size.x, new_size.y);
+
+ UMAShowControl( (ControlHandle) m_macControl ) ;
+ Refresh() ;
+}
+
+void wxControl::MacAdjustControlRect()
+{
+ wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ;
+ if ( m_width == -1 || m_height == -1 )