]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dialog.cpp
Performance optimization
[wxWidgets.git] / src / mac / carbon / dialog.cpp
index 50cbb8c5ae8c245da68b0b05b09651bb5d82fb90..bb90e3812be7a6cb83f3cdfd81eca38da74de30b 100644 (file)
@@ -53,13 +53,6 @@ bool wxDialog::Create( wxWindow *parent,
     if ( !wxTopLevelWindow::Create( parent, id, title, pos, size, style, name ) )
         return false;
 
-#if TARGET_API_MAC_OSX
-    HIViewRef growBoxRef = 0 ;
-    OSStatus err = HIViewFindByID( HIViewGetRoot( (WindowRef)m_macWindow ), kHIViewWindowGrowBoxID, &growBoxRef  );
-    if ( err == noErr && growBoxRef != 0 )
-        HIGrowBoxViewSetTransparent( growBoxRef, true ) ;
-#endif
-
     return true;
 }
 
@@ -71,9 +64,7 @@ void wxDialog::SetModal( bool flag )
 
         wxModelessWindows.DeleteObject( this );
 
-#if TARGET_CARBON
         SetWindowModality( (WindowRef)MacGetWindowRef(), kWindowModalityAppModal, NULL ) ;
-#endif
     }
     else
     {
@@ -86,6 +77,8 @@ void wxDialog::SetModal( bool flag )
 wxDialog::~wxDialog()
 {
     m_isBeingDeleted = true;
+
+    // if the dialog is modal, this will end its event loop
     Show(false);
 }
 
@@ -106,21 +99,21 @@ bool wxDialog::IsModal() const
 }
 
 
-bool wxDialog::IsModalShowing() const
-{
-    return wxModalDialogs.Find((wxDialog *)this) != NULL; // const_cast
-}
-
 bool wxDialog::Show(bool show)
 {
     if ( !wxDialogBase::Show(show) )
         // nothing to do
         return false;
 
+    if (show && CanDoLayoutAdaptation())
+        DoLayoutAdaptation();
+
     if ( show )
         // usually will result in TransferDataToWindow() being called
         InitDialog();
 
+    HiliteMenu(0);
+
     if ( m_isModalStyle )
     {
         if ( show )
@@ -138,38 +131,39 @@ bool wxDialog::Show(bool show)
     return true;
 }
 
-#if !TARGET_CARBON
-extern bool s_macIsInModalLoop ;
-#endif
-
 void wxDialog::DoShowModal()
 {
-    wxCHECK_RET( !IsModalShowing(), wxT("DoShowModal() called twice") );
+    wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
 
     wxModalDialogs.Append(this);
 
     SetFocus() ;
 
-#if TARGET_CARBON
-    BeginAppModalStateForWindow(  (WindowRef) MacGetWindowRef()) ;
-#else
-    // TODO : test whether parent gets disabled
-    bool formerModal = s_macIsInModalLoop ;
-    s_macIsInModalLoop = true ;
-#endif
+    WindowRef windowRef = (WindowRef) MacGetWindowRef();
+    WindowGroupRef windowGroup;
+    WindowGroupRef formerParentGroup;
+    bool resetGroupParent = false;
 
-    while ( IsModalShowing() )
+    if ( GetParent() == NULL )
+    {
+        windowGroup = GetWindowGroup(windowRef) ;
+        formerParentGroup = GetWindowGroupParent( windowGroup );
+        SetWindowGroupParent( windowGroup, GetWindowGroupOfClass( kMovableModalWindowClass ) );
+        resetGroupParent = true;
+    }
+    BeginAppModalStateForWindow(windowRef) ;
+
+    while ( IsModal() )
     {
         wxTheApp->MacDoOneEvent() ;
         // calls process idle itself
     }
 
-#if TARGET_CARBON
-    EndAppModalStateForWindow( (WindowRef) MacGetWindowRef() ) ;
-#else
-    // TODO probably reenable the parent window if any
-    s_macIsInModalLoop = formerModal ;
-#endif
+    EndAppModalStateForWindow(windowRef) ;
+    if ( resetGroupParent )
+    {
+        SetWindowGroupParent( windowGroup , formerParentGroup );
+    }
 }