]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/topluniv.cpp
Smooth Aqua buttons in wxTreeCtrl.
[wxWidgets.git] / src / univ / topluniv.cpp
index fff2e484cde6b9e27d07cefeaeeef686122288d8..f9bfbeaa8683ede62ee26f40caa42f9b21b13e16 100644 (file)
@@ -55,6 +55,7 @@ WX_FORWARD_TO_INPUT_CONSUMER(wxTopLevelWindow)
 // ============================================================================
 
 int wxTopLevelWindow::ms_drawDecorations = -1;
+int wxTopLevelWindow::ms_canIconize = -1;
 
 void wxTopLevelWindow::Init()
 {
@@ -75,9 +76,19 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
     long styleOrig = 0,
          exstyleOrig = 0;
 
-    // FIXME -- wxUniv should provide a way to force non-native decorations!
     if ( ms_drawDecorations == -1 )
-        ms_drawDecorations = !wxSystemSettings::HasFrameDecorations();
+    {
+        ms_drawDecorations = 
+            !wxSystemSettings::GetCapability(wxSYS_CAN_DRAW_FRAME_DECORATIONS) 
+            || wxGetEnv(wxT("WXDECOR"), NULL);
+        // FIXME -- wxUniv should provide a way to force non-native decorations!
+        //          $WXDECOR is just a hack in absence of better wxUniv solution
+    }
+
+    if ( ms_canIconize == -1 )
+    {
+        ms_canIconize = wxSystemSettings::GetCapability(wxSYS_CAN_ICONIZE_FRAME);
+    }
 
     if ( ms_drawDecorations )
     {
@@ -136,7 +147,7 @@ long wxTopLevelWindow::GetDecorationsStyle() const
     if ( m_windowStyle & wxCAPTION )
     {
         style |= wxTOPLEVEL_TITLEBAR | wxTOPLEVEL_BUTTON_CLOSE;
-        if ( m_windowStyle & wxMINIMIZE_BOX )
+        if ( (m_windowStyle & wxMINIMIZE_BOX) && ms_canIconize )
             style |= wxTOPLEVEL_BUTTON_ICONIZE;
         if ( m_windowStyle & wxMAXIMIZE_BOX )
         {
@@ -254,7 +265,7 @@ long wxTopLevelWindow::HitTest(const wxPoint& pt) const
     wxTopLevelWindowNative::DoGetClientSize(&w, &h);
     wxRect rect(wxTopLevelWindowNative::GetClientAreaOrigin(), wxSize(w, h));
 
-    return m_renderer->HitTestFrame(rect, pt, GetDecorationsStyle());
+    return m_renderer->HitTestFrame(rect, pt+GetClientAreaOrigin(), GetDecorationsStyle());
 }
 
 // ----------------------------------------------------------------------------
@@ -363,13 +374,13 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action,
         ClickTitleBarButton(numArg);
         return TRUE;
     }
-    
+
     else if ( action == wxACTION_TOPLEVEL_MOVE )
     {
         InteractiveMove(wxINTERACTIVE_MOVE);
         return TRUE;
     }
-    
+
     else if ( action == wxACTION_TOPLEVEL_RESIZE )
     {
         int flags = wxINTERACTIVE_RESIZE;
@@ -384,7 +395,7 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action,
         InteractiveMove(flags);
         return TRUE;
     }
-    
+
     else
         return FALSE;
 }
@@ -484,25 +495,25 @@ bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer,
     }
     else if ( consumer->GetInputWindow()->GetWindowStyle() & wxRESIZE_BORDER )
     {
-        wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(), 
+        wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(),
                                              wxTopLevelWindow);
         long hit = win->HitTest(event.GetPosition());
-        
+
         if ( hit != m_winHitTest )
         {
             m_winHitTest = hit;
-            
+
             if ( m_borderCursorOn )
             {
                 m_borderCursorOn = FALSE;
                 win->SetCursor(m_origCursor);
             }
-            
+
             if ( hit & wxHT_TOPLEVEL_ANY_BORDER )
             {
                 m_borderCursorOn = TRUE;
                 wxCursor cur;
-            
+
                 switch (hit)
                 {
                     case wxHT_TOPLEVEL_BORDER_N: