]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/toplevel.cpp
added wxArray::SetCount()
[wxWidgets.git] / src / mac / toplevel.cpp
index 56d3c0ded67cd315e2ac89c2ad7c1df32245f4eb..b9acd02cc0d5b52ea3e93eb79e9332a6b7b780f7 100644 (file)
@@ -59,10 +59,6 @@ wxWindowList       wxModelessWindows;
 static   Point     gs_lastWhere;
 static   long      gs_lastWhen = 0;
 
-// cursor stuff
-extern   int       wxBusyCursorCount;
-
-
 // ============================================================================
 // wxTopLevelWindowMac implementation
 // ============================================================================
@@ -79,7 +75,7 @@ wxTopLevelWindowMac *wxFindWinFromMacWindow(WXWindow inWindowRef)
     wxNode *node = wxWinMacWindowList->Find((long)inWindowRef);
     if (!node)
         return NULL;
-    return (wxTopLevelWindowMac *)node->Data();
+    return (wxTopLevelWindowMac *)node->GetData();
 }
 
 void wxAssociateWinWithMacWindow(WXWindow inWindowRef, wxTopLevelWindowMac *win)
@@ -162,7 +158,7 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac()
         wxPendingDelete.Append( new wxMacDeferredWindowDeleter( (WindowRef) m_macWindow ) ) ;
     }
  
- #if TARGET_CARBON
+#if TARGET_CARBON
     if ( m_macEventHandler )
     {
         ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
@@ -171,21 +167,9 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac()
 #endif   
     wxRemoveMacWindowAssociation( this ) ;
 
-    wxTopLevelWindows.DeleteObject(this);
-
     if ( wxModelessWindows.Find(this) )
         wxModelessWindows.DeleteObject(this);
 
-    // If this is the last top-level window, exit.
-    if ( wxTheApp && (wxTopLevelWindows.Number() == 0) )
-    {
-        wxTheApp->SetTopWindow(NULL);
-
-        if ( wxTheApp->GetExitOnFrameDelete() )
-        {
-          wxTheApp->ExitMainLoop() ;        
-        }
-    }
     DisposeRgn( (RgnHandle) m_macNoEraseUpdateRgn ) ;
 }
 
@@ -245,18 +229,9 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef
         case kEventClassTextInput :
             if ( wxMacConvertEventToRecord( event , &rec ) )
             {
-                short keycode ;
-                short keychar ;
-                keychar = short(rec.message & charCodeMask);
-                keycode = short(rec.message & keyCodeMask) >> 8 ;
+                       wxTheApp->m_macCurrentEvent = &rec ;
                 wxWindow* focus = wxWindow::FindFocus() ;
-                // it is wxWindows Convention to have Ctrl Key Combinations at ASCII char value
-                if ( (rec.modifiers & controlKey) && keychar >= 0 && keychar < 0x20 )
-                {
-                    keychar += 0x40 ;
-                }
-                long keyval = wxMacTranslateKey(keychar, keycode) ;
-                if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent( focus , keyval , rec.modifiers , rec.when , rec.where.h , rec.where.v ) )
+                if ( (focus != NULL) && !UMAMenuEvent(&rec) && wxTheApp->MacSendKeyDownEvent( focus , rec.message , rec.modifiers , rec.when , rec.where.h , rec.where.v ) )
                 {
                     // was handled internally
                     result = noErr ;
@@ -343,7 +318,11 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
         }
         else
         {
+#if TARGET_CARBON
             wclass = kPlainWindowClass ;
+#else
+            wclass = kFloatingWindowClass ;
+#endif
         }
     }
     else if ( HasFlag( wxCAPTION ) )
@@ -366,7 +345,11 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
         }
         else
         {
+#if TARGET_CARBON
             wclass = kPlainWindowClass ;
+#else
+            wclass = kModalWindowClass ;
+#endif
         }
     }
     
@@ -548,7 +531,7 @@ void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr )
         if ( ev->what == mouseUp )
         {
             wxTheApp->s_captureWindow = NULL ;
-            if ( wxBusyCursorCount == 0 )
+            if ( !wxIsBusy() )
             {
                 m_cursor.MacInstall() ;
             }
@@ -598,7 +581,13 @@ void wxTopLevelWindowMac::MacActivate( WXEVENTREF ev , bool inIsActivating )
     
     UMAHighlightAndActivateWindow( (WindowRef)m_macWindow , inIsActivating ) ;
     
-    MacSuperEnabled( inIsActivating ) ;
+    // Early versions of MacOS X don't refresh backgrounds properly,
+    // so refresh the whole window on activation and deactivation.
+    long osVersion = UMAGetSystemVersion();
+    if (osVersion >= 0x1000 && osVersion < 0x1020)
+        Refresh(TRUE);
+    else
+        MacSuperEnabled( inIsActivating ) ;
 }
 
 void wxTopLevelWindowMac::MacKeyDown( WXEVENTREF ev ) 
@@ -625,8 +614,8 @@ bool wxTopLevelWindowMac::Show(bool show)
         return FALSE;
 
     if (show)
-    {
-      ::ShowWindow( (WindowRef)m_macWindow ) ;
+    { 
+      ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowShowTransitionAction,nil);
       ::SelectWindow( (WindowRef)m_macWindow ) ;
       // no need to generate events here, they will get them triggered by macos
       // actually they should be , but apparently they are not
@@ -637,7 +626,7 @@ bool wxTopLevelWindowMac::Show(bool show)
     }
     else
     {
-      ::HideWindow( (WindowRef)m_macWindow ) ;
+      ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowHideTransitionAction,nil);
     }
 
     if ( !show )
@@ -696,9 +685,13 @@ void wxTopLevelWindowMac::DoMoveWindow(int x, int y, int width, int height)
         
         if ( doResize )
             ::SizeWindow((WindowRef)m_macWindow, m_width, m_height  , true); 
+            
+        // the OS takes care of invalidating and erasing the new area so we only have to
+        // take care of refreshing for full repaints
+
+        if ( doResize && !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) )
+            Refresh() ;
         
-        // the OS takes care of invalidating and erasing the new area
-        // we have erased the old one   
         
         if ( IsKindOf( CLASSINFO( wxFrame ) ) )
         {