+ wxMDIParentFrame *mdiparent = wxDynamicCast(m_parent, wxMDIParentFrame);
+ wxASSERT(mdiparent);
+
+ if (activating)
+ {
+ if (s_macDeactivateWindow == m_parent)
+ {
+ wxLogTrace(TRACE_MDI, wxT("parent had been scheduled for deactivation, rehighlighting"));
+
+ UMAHighlightAndActivateWindow((WindowRef)s_macDeactivateWindow->MacGetWindowRef(), true);
+
+ wxLogTrace(TRACE_MDI, wxT("finished highliting parent"));
+
+ s_macDeactivateWindow = NULL;
+ }
+ else if ((mdiparent->m_currentChild == this) || !s_macDeactivateWindow)
+ mdiparent->wxFrame::MacActivate(timestamp, activating);
+
+ if (mdiparent->m_currentChild && mdiparent->m_currentChild != this)
+ mdiparent->m_currentChild->wxFrame::MacActivate(timestamp, false);
+ mdiparent->m_currentChild = this;
+
+ if (s_macDeactivateWindow == this)
+ {
+ wxLogTrace(TRACE_MDI, wxT("Avoided deactivation/activation of this=%p"), this);
+
+ s_macDeactivateWindow = NULL;
+ }
+ else
+ wxFrame::MacActivate(timestamp, activating);
+ }
+ else
+ {
+ // We were scheduled for deactivation, and now we do it.
+ if (s_macDeactivateWindow == this)
+ {
+ s_macDeactivateWindow = NULL;
+ wxFrame::MacActivate(timestamp, activating);
+ if (mdiparent->m_currentChild == this)
+ mdiparent->wxFrame::MacActivate(timestamp, activating);
+ }
+ else // schedule ourselves for deactivation
+ {
+ if (s_macDeactivateWindow)
+ wxLogTrace(TRACE_MDI, wxT("window=%p SHOULD have been deactivated, oh well!"), s_macDeactivateWindow);
+ wxLogTrace(TRACE_MDI, wxT("Scheduling delayed deactivation"));
+
+ s_macDeactivateWindow = this;
+ }
+ }