From 253293c10326afa0226932eab4753d188e1e22e2 Mon Sep 17 00:00:00 2001
From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= <vslavik@fastmail.fm>
Date: Tue, 30 Oct 2001 23:30:04 +0000
Subject: [PATCH] changed wxSystemSettings::HasFrameDecorations to more general
 GetCapability(index)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12222 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 include/wx/gtk/settings.h   |  4 ++--
 include/wx/gtk1/settings.h  |  4 ++--
 include/wx/mac/settings.h   |  5 +++--
 include/wx/mgl/settings.h   |  4 ++--
 include/wx/motif/settings.h |  5 +++--
 include/wx/msw/settings.h   |  5 ++---
 include/wx/os2/settings.h   |  2 +-
 include/wx/settings.h       |  4 ++++
 src/gtk/settings.cpp        | 13 +++++++++++++
 src/gtk1/settings.cpp       | 13 +++++++++++++
 src/mac/carbon/settings.cpp | 11 +++++++++++
 src/mac/settings.cpp        | 11 +++++++++++
 src/mgl/settings.cpp        | 13 +++++++++++++
 src/motif/settings.cpp      | 11 +++++++++++
 src/msw/settings.cpp        | 11 +++++++++++
 src/os2/settings.cpp        | 11 +++++++++++
 src/univ/topluniv.cpp       | 15 ++++++++++++---
 17 files changed, 125 insertions(+), 17 deletions(-)

diff --git a/include/wx/gtk/settings.h b/include/wx/gtk/settings.h
index 901678da41..0292adb6f0 100644
--- a/include/wx/gtk/settings.h
+++ b/include/wx/gtk/settings.h
@@ -36,8 +36,8 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int         GetSystemMetric(int index);
 
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool        HasFrameDecorations() { return TRUE; }
+    // Return true if the port has certain feature
+    static bool        GetCapability(int index);
 };
 
 #endif
diff --git a/include/wx/gtk1/settings.h b/include/wx/gtk1/settings.h
index 901678da41..0292adb6f0 100644
--- a/include/wx/gtk1/settings.h
+++ b/include/wx/gtk1/settings.h
@@ -36,8 +36,8 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int         GetSystemMetric(int index);
 
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool        HasFrameDecorations() { return TRUE; }
+    // Return true if the port has certain feature
+    static bool        GetCapability(int index);
 };
 
 #endif
diff --git a/include/wx/mac/settings.h b/include/wx/mac/settings.h
index d274901abb..90aa26f794 100644
--- a/include/wx/mac/settings.h
+++ b/include/wx/mac/settings.h
@@ -128,8 +128,9 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int         GetSystemMetric(int index);
 
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool        HasFrameDecorations() { return TRUE; }
+    // Return true if the port has certain feature
+    static bool        GetCapability(int index);
+
 };
 
 #endif
diff --git a/include/wx/mgl/settings.h b/include/wx/mgl/settings.h
index ac1d270413..49ca2427b1 100644
--- a/include/wx/mgl/settings.h
+++ b/include/wx/mgl/settings.h
@@ -37,8 +37,8 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int GetSystemMetric(int index);
     
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool HasFrameDecorations() { return FALSE; }
+    // Return true if the port has certain feature
+    static bool GetCapability(int index);
 };
 
 #endif
diff --git a/include/wx/motif/settings.h b/include/wx/motif/settings.h
index 2dd0d45953..03c367e816 100644
--- a/include/wx/motif/settings.h
+++ b/include/wx/motif/settings.h
@@ -37,8 +37,9 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int         GetSystemMetric(int index);
 
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool        HasFrameDecorations() { return TRUE; }
+    // Return true if the port has certain feature
+    static bool        GetCapability(int index);
+
 };
 
 #endif
diff --git a/include/wx/msw/settings.h b/include/wx/msw/settings.h
index 4c7c1c3561..bf24eb5bc6 100644
--- a/include/wx/msw/settings.h
+++ b/include/wx/msw/settings.h
@@ -33,9 +33,8 @@ public:
     // Get a system metric, e.g. scrollbar size
     static int GetSystemMetric(int index);
 
-    // Return true if the port can draw frame titlebar (i.e. doesn't need wxUniv for it)
-    static bool HasFrameDecorations() { return TRUE; }
-
+    // Return true if the port has certain feature
+    static bool GetCapability(int index);
 };
 
 #endif
diff --git a/include/wx/os2/settings.h b/include/wx/os2/settings.h
index d3f75e0404..c9dfaabd02 100644
--- a/include/wx/os2/settings.h
+++ b/include/wx/os2/settings.h
@@ -24,7 +24,7 @@ public:
     static wxColour    GetSystemColour(int index);
     static wxFont      GetSystemFont(int index);
     static int         GetSystemMetric(int index);
-    static bool        HasFrameDecorations() { return TRUE; }
+    static bool        GetCapability(int index);
 }; // end of CLASS wxSystemSettings
 
 #endif
diff --git a/include/wx/settings.h b/include/wx/settings.h
index 14b487a92a..9018019918 100644
--- a/include/wx/settings.h
+++ b/include/wx/settings.h
@@ -106,6 +106,10 @@
 #define wxSYS_SHOW_SOUNDS             36
 #define wxSYS_SWAP_BUTTONS            37
 
+// Platform capabilities
+#define wxSYS_CAN_DRAW_FRAME_DECORATIONS  1
+#define wxSYS_CAN_ICONIZE_FRAME           2
+
 #if defined(__WXMSW__)
 #include "wx/msw/settings.h"
 #elif defined(__WXMOTIF__)
diff --git a/src/gtk/settings.cpp b/src/gtk/settings.cpp
index 36662eb0a5..85b2c7c312 100644
--- a/src/gtk/settings.cpp
+++ b/src/gtk/settings.cpp
@@ -369,3 +369,16 @@ int wxSystemSettings::GetSystemMetric( int index )
 
     return 0;
 }
+
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+            return FALSE; break;
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/gtk1/settings.cpp b/src/gtk1/settings.cpp
index 36662eb0a5..85b2c7c312 100644
--- a/src/gtk1/settings.cpp
+++ b/src/gtk1/settings.cpp
@@ -369,3 +369,16 @@ int wxSystemSettings::GetSystemMetric( int index )
 
     return 0;
 }
+
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+            return FALSE; break;
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/mac/carbon/settings.cpp b/src/mac/carbon/settings.cpp
index df2800a97b..dcfe365753 100644
--- a/src/mac/carbon/settings.cpp
+++ b/src/mac/carbon/settings.cpp
@@ -220,3 +220,14 @@ int wxSystemSettings::GetSystemMetric(int index)
 	return 0;
 }
 
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/mac/settings.cpp b/src/mac/settings.cpp
index df2800a97b..dcfe365753 100644
--- a/src/mac/settings.cpp
+++ b/src/mac/settings.cpp
@@ -220,3 +220,14 @@ int wxSystemSettings::GetSystemMetric(int index)
 	return 0;
 }
 
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/mgl/settings.cpp b/src/mgl/settings.cpp
index 735674f249..4e6b6d28f8 100644
--- a/src/mgl/settings.cpp
+++ b/src/mgl/settings.cpp
@@ -32,3 +32,16 @@ int wxSystemSettings::GetSystemMetric(int WXUNUSED(index))
     // FIXME_MGL
     return 1;
 }
+
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+            return FALSE; break;
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return FALSE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/motif/settings.cpp b/src/motif/settings.cpp
index 62e04d0be8..b75b68efc9 100644
--- a/src/motif/settings.cpp
+++ b/src/motif/settings.cpp
@@ -231,3 +231,14 @@ int wxSystemSettings::GetSystemMetric(int index)
 	}
 }
 
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp
index 360e8a2fc3..e5e54f5017 100644
--- a/src/msw/settings.cpp
+++ b/src/msw/settings.cpp
@@ -267,3 +267,14 @@ int wxSystemSettings::GetSystemMetric(int index)
     // __WXMICROWIN__
 }
 
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/os2/settings.cpp b/src/os2/settings.cpp
index 05ba3aaf80..c608065962 100644
--- a/src/os2/settings.cpp
+++ b/src/os2/settings.cpp
@@ -357,3 +357,14 @@ int wxSystemSettings::GetSystemMetric(int index)
     return 0;
 }
 
+bool wxSystemSettings::GetCapability(int index)
+{
+    switch (index)
+    {
+        case wxSYS_CAN_ICONIZE_FRAME: 
+        case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
+            return TRUE; break;
+        default:
+            return FALSE;
+    }
+}
diff --git a/src/univ/topluniv.cpp b/src/univ/topluniv.cpp
index c68373a528..27a2633365 100644
--- a/src/univ/topluniv.cpp
+++ b/src/univ/topluniv.cpp
@@ -55,6 +55,7 @@ WX_FORWARD_TO_INPUT_CONSUMER(wxTopLevelWindow)
 // ============================================================================
 
 int wxTopLevelWindow::ms_drawDecorations = -1;
+int wxTopLevelWindow::ms_canIconize = -1;
 
 void wxTopLevelWindow::Init()
 {
@@ -76,10 +77,18 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
          exstyleOrig = 0;
 
     if ( ms_drawDecorations == -1 )
-        ms_drawDecorations = !wxSystemSettings::HasFrameDecorations() ||
-                             wxGetEnv(wxT("WXDECOR"), NULL);
+    {
+        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 )
     {
@@ -138,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 )
         {
-- 
2.47.2