]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/toplevel.cpp
only use tool window style for floating windows, no modal dialog class (layer problems)
[wxWidgets.git] / src / mac / carbon / toplevel.cpp
index baeb703641f2dbe95692f2e3c6f485f0e7d7be75..a9acd84e2cd0acc0de9874549c89bf909319e4bc 100644 (file)
 // ----------------------------------------------------------------------------
 
 // list of all frames and modeless dialogs
-wxWindowList wxModelessWindows;
+wxWindowList       wxModelessWindows;
+
+// double click testing
+static   Point     gs_lastWhere;
+static   long      gs_lastWhen = 0;
+
+// cursor stuff
+extern   int       wxBusyCursorCount;
+
 
 // ============================================================================
 // wxTopLevelWindowMac implementation
@@ -101,6 +109,7 @@ void wxTopLevelWindowMac::Init()
     m_maximizeOnShow = FALSE;
     m_macNoEraseUpdateRgn = NewRgn() ;
     m_macNeedsErasing = false ;
+    m_macWindow = NULL ;
 }
 
 bool wxTopLevelWindowMac::Create(wxWindow *parent,
@@ -130,9 +139,12 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent,
 
 wxTopLevelWindowMac::~wxTopLevelWindowMac()
 {
-    wxToolTip::NotifyWindowDelete(m_macWindow) ;
-    UMADisposeWindow( (WindowRef) m_macWindow ) ;
-
+    if ( m_macWindow )
+    {
+        wxToolTip::NotifyWindowDelete(m_macWindow) ;
+        UMADisposeWindow( (WindowRef) m_macWindow ) ;
+    }
+    
     wxRemoveMacWindowAssociation( this ) ;
 
     wxTopLevelWindows.DeleteObject(this);
@@ -175,7 +187,7 @@ void wxTopLevelWindowMac::Iconize(bool iconize)
 
 bool wxTopLevelWindowMac::IsIconized() const
 {
-       // mac dialogs cannot be iconized
+    // mac dialogs cannot be iconized
     return FALSE;
 }
 
@@ -229,7 +241,7 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
     WindowClass wclass = 0;
     WindowAttributes attr = kWindowNoAttributes ;
     
-    if ( HasFlag(wxTINY_CAPTION_HORIZ) ||  HasFlag(wxTINY_CAPTION_VERT) )
+    if ( HasFlag( wxFRAME_TOOL_WINDOW) /*|| HasFlag(wxTINY_CAPTION_HORIZ) ||  HasFlag(wxTINY_CAPTION_VERT)*/ )
     {
         wclass = kFloatingWindowClass ;
         if ( HasFlag(wxTINY_CAPTION_VERT) )
@@ -241,7 +253,7 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
     {
         if ( HasFlag( wxDIALOG_MODAL ) )
         {
-            wclass = kMovableModalWindowClass ;
+            wclass = kDocumentWindowClass ; // kMovableModalWindowClass ;
         }
         else 
         {
@@ -250,7 +262,7 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
     }
     else
     {
-        wclass = kModalWindowClass ;
+        wclass = kDocumentWindowClass ;
     }
     
     if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) )
@@ -343,10 +355,6 @@ void wxTopLevelWindowMac::Lower()
     ::SendBehind( (WindowRef)m_macWindow , NULL ) ;
 }
 
-Point lastWhere ;
-long lastWhen = 0 ;
-extern int wxBusyCursorCount ;
-
 void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr )
 {
     EventRecord *ev = (EventRecord*) evr ;
@@ -393,22 +401,25 @@ void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr )
 
     if ( ev->what == mouseDown )
     {
-        if ( ev->when - lastWhen <= GetDblTime() )
+        if ( ev->when - gs_lastWhen <= GetDblTime() )
         {
-            if ( abs( localwhere.h - lastWhere.h ) < 3 || abs( localwhere.v - lastWhere.v ) < 3 )
+            if ( abs( localwhere.h - gs_lastWhere.h ) < 3 && abs( localwhere.v - gs_lastWhere.v ) < 3 )
             {
+                // This is not right if the second mouse down
+                // event occured in a differen window. We
+                // correct this in MacDispatchMouseEvent.
                 if ( controlDown )
                     event.SetEventType(wxEVT_RIGHT_DCLICK ) ;
                 else
                     event.SetEventType(wxEVT_LEFT_DCLICK ) ;
             }
-            lastWhen = 0 ;
+            gs_lastWhen = 0 ;
         }
         else
         {
-            lastWhen = ev->when ;
+            gs_lastWhen = ev->when ;
         }
-        lastWhere = localwhere ;
+        gs_lastWhere = localwhere ;
     }
 
     event.m_x = localwhere.h;
@@ -416,13 +427,6 @@ void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr )
     event.m_x += m_x;
     event.m_y += m_y;
 
-/*
-    wxPoint origin = GetClientAreaOrigin() ;
-
-    event.m_x += origin.x ;
-    event.m_y += origin.y ;
-*/
-    
     event.m_timeStamp = ev->when;
     event.SetEventObject(this);
     if ( wxTheApp->s_captureWindow )
@@ -432,7 +436,9 @@ void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr )
         wxTheApp->s_captureWindow->ScreenToClient( &x , &y ) ;
         event.m_x = x ;
         event.m_y = y ;
+        event.SetEventObject( wxTheApp->s_captureWindow ) ;
         wxTheApp->s_captureWindow->GetEventHandler()->ProcessEvent( event ) ;
+        
         if ( ev->what == mouseUp )
         {
             wxTheApp->s_captureWindow = NULL ;