]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/window_osx.cpp
avoiding reshow of hidden windows when app is brought forward #12402
[wxWidgets.git] / src / osx / window_osx.cpp
index 990547c781e53b2bccf4037cbee9d40e703507be..14203e39787829921c1889ea53e0234925b1046e 100644 (file)
@@ -301,6 +301,11 @@ wxOSXWidgetImpl* wxWindowMac::GetPeer() const
     return m_peer == kOSXNoWidgetImpl ? NULL : m_peer ; 
 }
 
+bool wxWindowMac::ShouldCreatePeer() const
+{
+    return m_peer != kOSXNoWidgetImpl;
+}
+
 void wxWindowMac::DontCreatePeer()
 {
     m_peer = kOSXNoWidgetImpl;
@@ -345,7 +350,11 @@ void wxWindowMac::SetPeer(wxOSXWidgetImpl* peer)
         GetParent()->MacChildAdded() ;
         
         // adjust font, controlsize etc
-        DoSetWindowVariant( m_windowVariant ) ;
+        GetPeer()->SetControlSize( m_windowVariant );
+        InheritAttributes();
+        // in case nothing has been set, use the variant default fonts
+        if ( !m_hasFont )
+            DoSetWindowVariant( m_windowVariant );
         
         GetPeer()->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ;
         
@@ -378,7 +387,7 @@ bool wxWindowMac::MacIsUserPane() const
 /*
  * Right now we have the following setup :
  * a border that is not part of the native control is always outside the
- * control's border (otherwise we loose all native intelligence, future ways
+ * control's border (otherwise we lose all native intelligence, future ways
  * may be to have a second embedding control responsible for drawing borders
  * and backgrounds eventually)
  * so all this border calculations have to be taken into account when calling
@@ -484,39 +493,6 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
         return;
 
     GetPeer()->SetControlSize( variant );
-#if wxOSX_USE_CARBON
-    ControlSize size ;
-
-    // we will get that from the settings later
-    // and make this NORMAL later, but first
-    // we have a few calculations that we must fix
-
-    switch ( variant )
-    {
-        case wxWINDOW_VARIANT_NORMAL :
-            size = kControlSizeNormal;
-            break ;
-
-        case wxWINDOW_VARIANT_SMALL :
-            size = kControlSizeSmall;
-            break ;
-
-        case wxWINDOW_VARIANT_MINI :
-            // not always defined in the headers
-            size = 3 ;
-            break ;
-
-        case wxWINDOW_VARIANT_LARGE :
-            size = kControlSizeLarge;
-            break ;
-
-        default:
-            wxFAIL_MSG(wxT("unexpected window variant"));
-            break ;
-    }
-    GetPeer()->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
-#endif
-
 
     switch ( variant )
     {
@@ -630,6 +606,25 @@ void wxWindowMac::SetFocus()
     GetPeer()->SetFocus() ;
 }
 
+void wxWindowMac::OSXSimulateFocusEvents()
+{
+    wxWindow* former = FindFocus() ;
+    if ( former != NULL && former != this )
+    {
+        {
+            wxFocusEvent event( wxEVT_KILL_FOCUS, former->GetId());
+            event.SetEventObject(former);
+            former->HandleWindowEvent(event) ;
+        }
+
+        {
+            wxFocusEvent event(wxEVT_SET_FOCUS, former->GetId());
+            event.SetEventObject(former);
+            former->HandleWindowEvent(event);
+        }
+    }
+}
+
 void wxWindowMac::DoCaptureMouse()
 {
     wxApp::s_captureWindow = (wxWindow*) this ;
@@ -1309,7 +1304,6 @@ void wxWindowMac::MacHiliteChanged()
 
 void wxWindowMac::MacEnabledStateChanged()
 {
-    OnEnabled( GetPeer()->IsEnabled() );
 }
 
 //
@@ -1390,27 +1384,23 @@ void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect)
 
     if ( !IsShownOnScreen() )
         return ;
+    
+    if ( IsFrozen() )
+        return;
 
     GetPeer()->SetNeedsDisplay( rect ) ;
 }
 
 void wxWindowMac::DoFreeze()
 {
-#if wxOSX_USE_CARBON
     if ( GetPeer() && GetPeer()->IsOk() )
         GetPeer()->SetDrawingEnabled( false ) ;
-#endif
 }
 
 void wxWindowMac::DoThaw()
 {
-#if wxOSX_USE_CARBON
     if ( GetPeer() && GetPeer()->IsOk() )
-    {
         GetPeer()->SetDrawingEnabled( true ) ;
-        GetPeer()->InvalidateWithChildren() ;
-    }
-#endif
 }
 
 wxWindow *wxGetActiveWindow()
@@ -1823,6 +1813,8 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt )
     if ( wxRect2DInt( clientorigin.x , clientorigin.y , clientsize.x , clientsize.y ).Contains( wxPoint2DInt( pt ) ) )
     {
         wxSetCursorEvent event( pt.x , pt.y );
+        event.SetId(GetId());
+        event.SetEventObject(this);
 
         bool processedEvtSetCursor = HandleWindowEvent(event);
         if ( processedEvtSetCursor && event.HasCursor() )
@@ -2630,7 +2622,7 @@ wxHotKeyHandler(EventHandlerCallRef WXUNUSED(nextHandler),
             UInt32 modifiers ;
             UInt32 when = EventTimeToTicks( GetEventTime( event ) ) ;
 
-            GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &charCode );
+            GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, 1, NULL, &charCode );
             GetEventParameter( event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode );
             GetEventParameter( event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers );
             
@@ -2748,13 +2740,13 @@ bool wxWindowMac::OSXHandleKeyEvent( wxKeyEvent& event )
             {
                 wxEvtHandler * const handler = ancestor->GetEventHandler();
 
-                wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command );
+                wxCommandEvent command_event( wxEVT_MENU, command );
                 handled = handler->ProcessEvent( command_event );
 
                 if ( !handled )
                 {
                     // accelerators can also be used with buttons, try them too
-                    command_event.SetEventType(wxEVT_COMMAND_BUTTON_CLICKED);
+                    command_event.SetEventType(wxEVT_BUTTON);
                     handled = handler->ProcessEvent( command_event );
                 }
 
@@ -2882,3 +2874,7 @@ bool wxWidgetImpl::NeedsFrame() const
 {
     return m_needsFrame;
 }
+
+void wxWidgetImpl::SetDrawingEnabled(bool WXUNUSED(enabled))
+{
+}