]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/settings.cpp
Swap client data pointers in wxRearrangeList too.
[wxWidgets.git] / src / gtk / settings.cpp
index 26951dcfd9d9909fb2ee5e101a1f4ecfb5d859ab..7de06c56e34fdf9535462bc6bb9776eff7adec82 100644 (file)
 #endif
 
 #include "wx/fontutil.h"
+#include "wx/fontenum.h"
 
 #include <gtk/gtk.h>
+#include "wx/gtk/private/win_gtk.h"
 
 bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom);
 
@@ -184,6 +186,10 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index )
             color = wxColor(ListStyle()->base[GTK_STATE_NORMAL]);
             break;
 
+        case wxSYS_COLOUR_LISTBOXTEXT:
+            color = wxColor(ListStyle()->text[GTK_STATE_NORMAL]);
+            break;
+
         case wxSYS_COLOUR_MENUTEXT:
         case wxSYS_COLOUR_WINDOWTEXT:
         case wxSYS_COLOUR_CAPTIONTEXT:
@@ -222,11 +228,12 @@ wxColour wxSystemSettingsNative::GetColour( wxSystemColour index )
 
         case wxSYS_COLOUR_MAX:
         default:
-            wxFAIL_MSG( _T("unknown system colour index") );
+            wxFAIL_MSG( wxT("unknown system colour index") );
             color = *wxWHITE;
             break;
     }
 
+    wxASSERT(color.IsOk());
     return color;
 }
 
@@ -250,6 +257,13 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index )
                 wxNativeFontInfo info;
                 info.description = ButtonStyle()->font_desc;
                 gs_fontSystem = wxFont(info);
+
+                // (try to) heal the default font (on some common systems e.g. Ubuntu
+                // it's "Sans Serif" but the real font is called "Sans"):
+                if (!wxFontEnumerator::IsValidFacename(gs_fontSystem.GetFaceName()) &&
+                    gs_fontSystem.GetFaceName() == "Sans Serif")
+                    gs_fontSystem.SetFaceName("Sans");
+
                 info.description = NULL;
             }
             font = gs_fontSystem;
@@ -258,6 +272,9 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index )
         default:
             break;
     }
+
+    wxASSERT(font.IsOk() && wxFontEnumerator::IsValidFacename(font.GetFaceName()));
+
     return font;
 }
 
@@ -269,6 +286,26 @@ static GtkSettings *GetSettingsForWindowScreen(GdkWindow *window)
                   : gtk_settings_get_default();
 }
 
+static int GetBorderWidth(wxSystemMetric index, wxWindow* win)
+{
+    if (win->m_wxwindow)
+    {
+        wxPizza* pizza = WX_PIZZA(win->m_wxwindow);
+        int x, y;
+        pizza->get_border_widths(x, y);
+        switch (index)
+        {
+            case wxSYS_BORDER_X:
+            case wxSYS_EDGE_X:
+            case wxSYS_FRAMESIZE_X:
+                return x;
+            default:
+                return y;
+        }
+    }
+    return -1;
+}
+
 int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win )
 {
     GdkWindow *window = NULL;
@@ -283,14 +320,12 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win )
         case wxSYS_EDGE_Y:
         case wxSYS_FRAMESIZE_X:
         case wxSYS_FRAMESIZE_Y:
-            // If a window is specified/realized, and it is a toplevel window, we can query from wm.
-            // The returned border thickness is outside the client area in that case.
-            if (window)
+            if (win)
             {
                 wxTopLevelWindow *tlw = wxDynamicCast(win, wxTopLevelWindow);
                 if (!tlw)
-                    return -1; // not a tlw, not sure how to approach
-                else
+                    return GetBorderWidth(index, win);
+                else if (window)
                 {
                     // Get the frame extents from the windowmanager.
                     // In most cases the top extent is the titlebar, so we use the bottom extent