From 6540132fa1ee1b36c155ea39c84899e6beb2664e Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Sun, 28 May 2006 13:51:34 +0000
Subject: [PATCH] wxFontEnumerator::GetFacenames/Encodings() now return arrays
 and not pointers to them (patch 1483341)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39371 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 Makefile.in                | 20 +++++++++++
 build/bakefiles/files.bkl  |  1 +
 build/msw/makefile.bcc     | 28 +++++++++++++++
 build/msw/makefile.gcc     | 28 +++++++++++++++
 build/msw/makefile.vc      | 28 +++++++++++++++
 build/msw/makefile.wat     | 28 +++++++++++++++
 build/msw/wx_core.dsp      |  4 +++
 docs/changes.txt           |  2 ++
 docs/latex/wx/fontenum.tex | 24 ++++++-------
 include/wx/fontenum.h      | 48 +++++++++----------------
 src/common/fontenumcmn.cpp | 74 ++++++++++++++++++++++++++++++++++++++
 src/html/helpwnd.cpp       | 12 +++----
 src/html/m_fonts.cpp       |  9 ++---
 src/wxWindows.dsp          |  4 +++
 src/xrc/xmlres.cpp         |  7 ++--
 15 files changed, 254 insertions(+), 63 deletions(-)
 create mode 100644 src/common/fontenumcmn.cpp

diff --git a/Makefile.in b/Makefile.in
index 25f6c14e5c..b1d7648ed6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -3174,6 +3174,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS =  \
 	monodll_fddlgcmn.o \
 	monodll_fldlgcmn.o \
 	monodll_fontcmn.o \
+	monodll_fontenumcmn.o \
 	monodll_fontmap.o \
 	monodll_framecmn.o \
 	monodll_gaugecmn.o \
@@ -3330,6 +3331,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS =  \
 	monodll_fddlgcmn.o \
 	monodll_fldlgcmn.o \
 	monodll_fontcmn.o \
+	monodll_fontenumcmn.o \
 	monodll_fontmap.o \
 	monodll_framecmn.o \
 	monodll_gaugecmn.o \
@@ -4810,6 +4812,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 =  \
 	monolib_fddlgcmn.o \
 	monolib_fldlgcmn.o \
 	monolib_fontcmn.o \
+	monolib_fontenumcmn.o \
 	monolib_fontmap.o \
 	monolib_framecmn.o \
 	monolib_gaugecmn.o \
@@ -4966,6 +4969,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 =  \
 	monolib_fddlgcmn.o \
 	monolib_fldlgcmn.o \
 	monolib_fontcmn.o \
+	monolib_fontenumcmn.o \
 	monolib_fontmap.o \
 	monolib_framecmn.o \
 	monolib_gaugecmn.o \
@@ -6681,6 +6685,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 =  \
 	coredll_fddlgcmn.o \
 	coredll_fldlgcmn.o \
 	coredll_fontcmn.o \
+	coredll_fontenumcmn.o \
 	coredll_fontmap.o \
 	coredll_framecmn.o \
 	coredll_gaugecmn.o \
@@ -6837,6 +6842,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 =  \
 	coredll_fddlgcmn.o \
 	coredll_fldlgcmn.o \
 	coredll_fontcmn.o \
+	coredll_fontenumcmn.o \
 	coredll_fontmap.o \
 	coredll_framecmn.o \
 	coredll_gaugecmn.o \
@@ -8022,6 +8028,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 =  \
 	corelib_fddlgcmn.o \
 	corelib_fldlgcmn.o \
 	corelib_fontcmn.o \
+	corelib_fontenumcmn.o \
 	corelib_fontmap.o \
 	corelib_framecmn.o \
 	corelib_gaugecmn.o \
@@ -8178,6 +8185,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 =  \
 	corelib_fddlgcmn.o \
 	corelib_fldlgcmn.o \
 	corelib_fontcmn.o \
+	corelib_fontenumcmn.o \
 	corelib_fontmap.o \
 	corelib_framecmn.o \
 	corelib_gaugecmn.o \
@@ -14611,6 +14619,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_USE_GUI_1@monodll_fontcmn.o: $(srcdir)/src/common/fontcmn.cpp $(MONODLL_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/fontcmn.cpp
 
+@COND_USE_GUI_1@monodll_fontenumcmn.o: $(srcdir)/src/common/fontenumcmn.cpp $(MONODLL_ODEP)
+@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/fontenumcmn.cpp
+
 @COND_USE_GUI_1@monodll_fontmap.o: $(srcdir)/src/common/fontmap.cpp $(MONODLL_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/fontmap.cpp
 
@@ -18427,6 +18438,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_USE_GUI_1@monolib_fontcmn.o: $(srcdir)/src/common/fontcmn.cpp $(MONOLIB_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/fontcmn.cpp
 
+@COND_USE_GUI_1@monolib_fontenumcmn.o: $(srcdir)/src/common/fontenumcmn.cpp $(MONOLIB_ODEP)
+@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/fontenumcmn.cpp
+
 @COND_USE_GUI_1@monolib_fontmap.o: $(srcdir)/src/common/fontmap.cpp $(MONOLIB_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/fontmap.cpp
 
@@ -22636,6 +22650,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
 @COND_USE_GUI_1@coredll_fontcmn.o: $(srcdir)/src/common/fontcmn.cpp $(COREDLL_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/fontcmn.cpp
 
+@COND_USE_GUI_1@coredll_fontenumcmn.o: $(srcdir)/src/common/fontenumcmn.cpp $(COREDLL_ODEP)
+@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/fontenumcmn.cpp
+
 @COND_USE_GUI_1@coredll_fontmap.o: $(srcdir)/src/common/fontmap.cpp $(COREDLL_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/fontmap.cpp
 
@@ -25426,6 +25443,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 @COND_USE_GUI_1@corelib_fontcmn.o: $(srcdir)/src/common/fontcmn.cpp $(CORELIB_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/fontcmn.cpp
 
+@COND_USE_GUI_1@corelib_fontenumcmn.o: $(srcdir)/src/common/fontenumcmn.cpp $(CORELIB_ODEP)
+@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/fontenumcmn.cpp
+
 @COND_USE_GUI_1@corelib_fontmap.o: $(srcdir)/src/common/fontmap.cpp $(CORELIB_ODEP)
 @COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/fontmap.cpp
 
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index 8a727c9eb5..7e551233f9 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -577,6 +577,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/common/fddlgcmn.cpp
     src/common/fldlgcmn.cpp
     src/common/fontcmn.cpp
+    src/common/fontenumcmn.cpp
     src/common/fontmap.cpp
     src/common/framecmn.cpp
     src/common/gaugecmn.cpp
diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc
index 33fecbd5ec..e66ec7fd51 100644
--- a/build/msw/makefile.bcc
+++ b/build/msw/makefile.bcc
@@ -1282,6 +1282,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.obj \
 	$(OBJS)\monodll_fldlgcmn.obj \
 	$(OBJS)\monodll_fontcmn.obj \
+	$(OBJS)\monodll_fontenumcmn.obj \
 	$(OBJS)\monodll_fontmap.obj \
 	$(OBJS)\monodll_framecmn.obj \
 	$(OBJS)\monodll_gaugecmn.obj \
@@ -1486,6 +1487,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.obj \
 	$(OBJS)\monodll_fldlgcmn.obj \
 	$(OBJS)\monodll_fontcmn.obj \
+	$(OBJS)\monodll_fontenumcmn.obj \
 	$(OBJS)\monodll_fontmap.obj \
 	$(OBJS)\monodll_framecmn.obj \
 	$(OBJS)\monodll_gaugecmn.obj \
@@ -1831,6 +1833,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.obj \
 	$(OBJS)\monolib_fldlgcmn.obj \
 	$(OBJS)\monolib_fontcmn.obj \
+	$(OBJS)\monolib_fontenumcmn.obj \
 	$(OBJS)\monolib_fontmap.obj \
 	$(OBJS)\monolib_framecmn.obj \
 	$(OBJS)\monolib_gaugecmn.obj \
@@ -2035,6 +2038,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.obj \
 	$(OBJS)\monolib_fldlgcmn.obj \
 	$(OBJS)\monolib_fontcmn.obj \
+	$(OBJS)\monolib_fontenumcmn.obj \
 	$(OBJS)\monolib_fontmap.obj \
 	$(OBJS)\monolib_framecmn.obj \
 	$(OBJS)\monolib_gaugecmn.obj \
@@ -2313,6 +2317,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.obj \
 	$(OBJS)\coredll_fldlgcmn.obj \
 	$(OBJS)\coredll_fontcmn.obj \
+	$(OBJS)\coredll_fontenumcmn.obj \
 	$(OBJS)\coredll_fontmap.obj \
 	$(OBJS)\coredll_framecmn.obj \
 	$(OBJS)\coredll_gaugecmn.obj \
@@ -2517,6 +2522,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.obj \
 	$(OBJS)\coredll_fldlgcmn.obj \
 	$(OBJS)\coredll_fontcmn.obj \
+	$(OBJS)\coredll_fontenumcmn.obj \
 	$(OBJS)\coredll_fontmap.obj \
 	$(OBJS)\coredll_framecmn.obj \
 	$(OBJS)\coredll_gaugecmn.obj \
@@ -2724,6 +2730,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.obj \
 	$(OBJS)\corelib_fldlgcmn.obj \
 	$(OBJS)\corelib_fontcmn.obj \
+	$(OBJS)\corelib_fontenumcmn.obj \
 	$(OBJS)\corelib_fontmap.obj \
 	$(OBJS)\corelib_framecmn.obj \
 	$(OBJS)\corelib_gaugecmn.obj \
@@ -2928,6 +2935,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.obj \
 	$(OBJS)\corelib_fldlgcmn.obj \
 	$(OBJS)\corelib_fontcmn.obj \
+	$(OBJS)\corelib_fontenumcmn.obj \
 	$(OBJS)\corelib_fontmap.obj \
 	$(OBJS)\corelib_framecmn.obj \
 	$(OBJS)\corelib_gaugecmn.obj \
@@ -5410,6 +5418,11 @@ $(OBJS)\monodll_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monodll_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
@@ -7207,6 +7220,11 @@ $(OBJS)\monolib_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monolib_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
@@ -9079,6 +9097,11 @@ $(OBJS)\coredll_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\coredll_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\coredll_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $**
@@ -10258,6 +10281,11 @@ $(OBJS)\corelib_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\corelib_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\corelib_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $**
diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc
index a04df06964..f2f3d94f86 100644
--- a/build/msw/makefile.gcc
+++ b/build/msw/makefile.gcc
@@ -1293,6 +1293,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.o \
 	$(OBJS)\monodll_fldlgcmn.o \
 	$(OBJS)\monodll_fontcmn.o \
+	$(OBJS)\monodll_fontenumcmn.o \
 	$(OBJS)\monodll_fontmap.o \
 	$(OBJS)\monodll_framecmn.o \
 	$(OBJS)\monodll_gaugecmn.o \
@@ -1499,6 +1500,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.o \
 	$(OBJS)\monodll_fldlgcmn.o \
 	$(OBJS)\monodll_fontcmn.o \
+	$(OBJS)\monodll_fontenumcmn.o \
 	$(OBJS)\monodll_fontmap.o \
 	$(OBJS)\monodll_framecmn.o \
 	$(OBJS)\monodll_gaugecmn.o \
@@ -1848,6 +1850,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.o \
 	$(OBJS)\monolib_fldlgcmn.o \
 	$(OBJS)\monolib_fontcmn.o \
+	$(OBJS)\monolib_fontenumcmn.o \
 	$(OBJS)\monolib_fontmap.o \
 	$(OBJS)\monolib_framecmn.o \
 	$(OBJS)\monolib_gaugecmn.o \
@@ -2054,6 +2057,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.o \
 	$(OBJS)\monolib_fldlgcmn.o \
 	$(OBJS)\monolib_fontcmn.o \
+	$(OBJS)\monolib_fontenumcmn.o \
 	$(OBJS)\monolib_fontmap.o \
 	$(OBJS)\monolib_framecmn.o \
 	$(OBJS)\monolib_gaugecmn.o \
@@ -2346,6 +2350,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.o \
 	$(OBJS)\coredll_fldlgcmn.o \
 	$(OBJS)\coredll_fontcmn.o \
+	$(OBJS)\coredll_fontenumcmn.o \
 	$(OBJS)\coredll_fontmap.o \
 	$(OBJS)\coredll_framecmn.o \
 	$(OBJS)\coredll_gaugecmn.o \
@@ -2552,6 +2557,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.o \
 	$(OBJS)\coredll_fldlgcmn.o \
 	$(OBJS)\coredll_fontcmn.o \
+	$(OBJS)\coredll_fontenumcmn.o \
 	$(OBJS)\coredll_fontmap.o \
 	$(OBJS)\coredll_framecmn.o \
 	$(OBJS)\coredll_gaugecmn.o \
@@ -2765,6 +2771,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.o \
 	$(OBJS)\corelib_fldlgcmn.o \
 	$(OBJS)\corelib_fontcmn.o \
+	$(OBJS)\corelib_fontenumcmn.o \
 	$(OBJS)\corelib_fontmap.o \
 	$(OBJS)\corelib_framecmn.o \
 	$(OBJS)\corelib_gaugecmn.o \
@@ -2971,6 +2978,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.o \
 	$(OBJS)\corelib_fldlgcmn.o \
 	$(OBJS)\corelib_fontcmn.o \
+	$(OBJS)\corelib_fontenumcmn.o \
 	$(OBJS)\corelib_fontmap.o \
 	$(OBJS)\corelib_framecmn.o \
 	$(OBJS)\corelib_gaugecmn.o \
@@ -5618,6 +5626,11 @@ $(OBJS)\monodll_fontcmn.o: ../../src/common/fontcmn.cpp
 	$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\monodll_fontenumcmn.o: ../../src/common/fontenumcmn.cpp
+	$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\monodll_fontmap.o: ../../src/common/fontmap.cpp
 	$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -7519,6 +7532,11 @@ $(OBJS)\monolib_fontcmn.o: ../../src/common/fontcmn.cpp
 	$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\monolib_fontenumcmn.o: ../../src/common/fontenumcmn.cpp
+	$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\monolib_fontmap.o: ../../src/common/fontmap.cpp
 	$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -9495,6 +9513,11 @@ $(OBJS)\coredll_fontcmn.o: ../../src/common/fontcmn.cpp
 	$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\coredll_fontenumcmn.o: ../../src/common/fontenumcmn.cpp
+	$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\coredll_fontmap.o: ../../src/common/fontmap.cpp
 	$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10778,6 +10801,11 @@ $(OBJS)\corelib_fontcmn.o: ../../src/common/fontcmn.cpp
 	$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\corelib_fontenumcmn.o: ../../src/common/fontenumcmn.cpp
+	$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\corelib_fontmap.o: ../../src/common/fontmap.cpp
 	$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc
index 563782f3bf..77b4458cfd 100644
--- a/build/msw/makefile.vc
+++ b/build/msw/makefile.vc
@@ -1441,6 +1441,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.obj \
 	$(OBJS)\monodll_fldlgcmn.obj \
 	$(OBJS)\monodll_fontcmn.obj \
+	$(OBJS)\monodll_fontenumcmn.obj \
 	$(OBJS)\monodll_fontmap.obj \
 	$(OBJS)\monodll_framecmn.obj \
 	$(OBJS)\monodll_gaugecmn.obj \
@@ -1645,6 +1646,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 	$(OBJS)\monodll_fddlgcmn.obj \
 	$(OBJS)\monodll_fldlgcmn.obj \
 	$(OBJS)\monodll_fontcmn.obj \
+	$(OBJS)\monodll_fontenumcmn.obj \
 	$(OBJS)\monodll_fontmap.obj \
 	$(OBJS)\monodll_framecmn.obj \
 	$(OBJS)\monodll_gaugecmn.obj \
@@ -1996,6 +1998,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.obj \
 	$(OBJS)\monolib_fldlgcmn.obj \
 	$(OBJS)\monolib_fontcmn.obj \
+	$(OBJS)\monolib_fontenumcmn.obj \
 	$(OBJS)\monolib_fontmap.obj \
 	$(OBJS)\monolib_framecmn.obj \
 	$(OBJS)\monolib_gaugecmn.obj \
@@ -2200,6 +2203,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 	$(OBJS)\monolib_fddlgcmn.obj \
 	$(OBJS)\monolib_fldlgcmn.obj \
 	$(OBJS)\monolib_fontcmn.obj \
+	$(OBJS)\monolib_fontenumcmn.obj \
 	$(OBJS)\monolib_fontmap.obj \
 	$(OBJS)\monolib_framecmn.obj \
 	$(OBJS)\monolib_gaugecmn.obj \
@@ -2508,6 +2512,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.obj \
 	$(OBJS)\coredll_fldlgcmn.obj \
 	$(OBJS)\coredll_fontcmn.obj \
+	$(OBJS)\coredll_fontenumcmn.obj \
 	$(OBJS)\coredll_fontmap.obj \
 	$(OBJS)\coredll_framecmn.obj \
 	$(OBJS)\coredll_gaugecmn.obj \
@@ -2712,6 +2717,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 	$(OBJS)\coredll_fddlgcmn.obj \
 	$(OBJS)\coredll_fldlgcmn.obj \
 	$(OBJS)\coredll_fontcmn.obj \
+	$(OBJS)\coredll_fontenumcmn.obj \
 	$(OBJS)\coredll_fontmap.obj \
 	$(OBJS)\coredll_framecmn.obj \
 	$(OBJS)\coredll_gaugecmn.obj \
@@ -2925,6 +2931,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.obj \
 	$(OBJS)\corelib_fldlgcmn.obj \
 	$(OBJS)\corelib_fontcmn.obj \
+	$(OBJS)\corelib_fontenumcmn.obj \
 	$(OBJS)\corelib_fontmap.obj \
 	$(OBJS)\corelib_framecmn.obj \
 	$(OBJS)\corelib_gaugecmn.obj \
@@ -3129,6 +3136,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 	$(OBJS)\corelib_fddlgcmn.obj \
 	$(OBJS)\corelib_fldlgcmn.obj \
 	$(OBJS)\corelib_fontcmn.obj \
+	$(OBJS)\corelib_fontenumcmn.obj \
 	$(OBJS)\corelib_fontmap.obj \
 	$(OBJS)\corelib_framecmn.obj \
 	$(OBJS)\corelib_gaugecmn.obj \
@@ -5719,6 +5727,11 @@ $(OBJS)\monodll_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monodll_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
@@ -7516,6 +7529,11 @@ $(OBJS)\monolib_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monolib_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
@@ -9388,6 +9406,11 @@ $(OBJS)\coredll_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\coredll_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\coredll_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $**
@@ -10567,6 +10590,11 @@ $(OBJS)\corelib_fontcmn.obj: ..\..\src\common\fontcmn.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\corelib_fontenumcmn.obj: ..\..\src\common\fontenumcmn.cpp
+	$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\corelib_fontmap.obj: ..\..\src\common\fontmap.cpp
 	$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $**
diff --git a/build/msw/makefile.wat b/build/msw/makefile.wat
index edd3525c19..b87242d7ba 100644
--- a/build/msw/makefile.wat
+++ b/build/msw/makefile.wat
@@ -310,6 +310,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  &
 	$(OBJS)\monodll_fddlgcmn.obj &
 	$(OBJS)\monodll_fldlgcmn.obj &
 	$(OBJS)\monodll_fontcmn.obj &
+	$(OBJS)\monodll_fontenumcmn.obj &
 	$(OBJS)\monodll_fontmap.obj &
 	$(OBJS)\monodll_framecmn.obj &
 	$(OBJS)\monodll_gaugecmn.obj &
@@ -516,6 +517,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  &
 	$(OBJS)\monodll_fddlgcmn.obj &
 	$(OBJS)\monodll_fldlgcmn.obj &
 	$(OBJS)\monodll_fontcmn.obj &
+	$(OBJS)\monodll_fontenumcmn.obj &
 	$(OBJS)\monodll_fontmap.obj &
 	$(OBJS)\monodll_framecmn.obj &
 	$(OBJS)\monodll_gaugecmn.obj &
@@ -869,6 +871,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  &
 	$(OBJS)\monolib_fddlgcmn.obj &
 	$(OBJS)\monolib_fldlgcmn.obj &
 	$(OBJS)\monolib_fontcmn.obj &
+	$(OBJS)\monolib_fontenumcmn.obj &
 	$(OBJS)\monolib_fontmap.obj &
 	$(OBJS)\monolib_framecmn.obj &
 	$(OBJS)\monolib_gaugecmn.obj &
@@ -1075,6 +1078,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  &
 	$(OBJS)\monolib_fddlgcmn.obj &
 	$(OBJS)\monolib_fldlgcmn.obj &
 	$(OBJS)\monolib_fontcmn.obj &
+	$(OBJS)\monolib_fontenumcmn.obj &
 	$(OBJS)\monolib_fontmap.obj &
 	$(OBJS)\monolib_framecmn.obj &
 	$(OBJS)\monolib_gaugecmn.obj &
@@ -1374,6 +1378,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  &
 	$(OBJS)\coredll_fddlgcmn.obj &
 	$(OBJS)\coredll_fldlgcmn.obj &
 	$(OBJS)\coredll_fontcmn.obj &
+	$(OBJS)\coredll_fontenumcmn.obj &
 	$(OBJS)\coredll_fontmap.obj &
 	$(OBJS)\coredll_framecmn.obj &
 	$(OBJS)\coredll_gaugecmn.obj &
@@ -1580,6 +1585,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  &
 	$(OBJS)\coredll_fddlgcmn.obj &
 	$(OBJS)\coredll_fldlgcmn.obj &
 	$(OBJS)\coredll_fontcmn.obj &
+	$(OBJS)\coredll_fontenumcmn.obj &
 	$(OBJS)\coredll_fontmap.obj &
 	$(OBJS)\coredll_framecmn.obj &
 	$(OBJS)\coredll_gaugecmn.obj &
@@ -1795,6 +1801,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  &
 	$(OBJS)\corelib_fddlgcmn.obj &
 	$(OBJS)\corelib_fldlgcmn.obj &
 	$(OBJS)\corelib_fontcmn.obj &
+	$(OBJS)\corelib_fontenumcmn.obj &
 	$(OBJS)\corelib_fontmap.obj &
 	$(OBJS)\corelib_framecmn.obj &
 	$(OBJS)\corelib_gaugecmn.obj &
@@ -2001,6 +2008,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  &
 	$(OBJS)\corelib_fddlgcmn.obj &
 	$(OBJS)\corelib_fldlgcmn.obj &
 	$(OBJS)\corelib_fontcmn.obj &
+	$(OBJS)\corelib_fontenumcmn.obj &
 	$(OBJS)\corelib_fontmap.obj &
 	$(OBJS)\corelib_framecmn.obj &
 	$(OBJS)\corelib_gaugecmn.obj &
@@ -5818,6 +5826,11 @@ $(OBJS)\monodll_fontcmn.obj :  .AUTODEPEND ..\..\src\common\fontcmn.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\monodll_fontenumcmn.obj :  .AUTODEPEND ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\monodll_fontmap.obj :  .AUTODEPEND ..\..\src\common\fontmap.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
@@ -7719,6 +7732,11 @@ $(OBJS)\monolib_fontcmn.obj :  .AUTODEPEND ..\..\src\common\fontcmn.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\monolib_fontenumcmn.obj :  .AUTODEPEND ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\monolib_fontmap.obj :  .AUTODEPEND ..\..\src\common\fontmap.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
@@ -9695,6 +9713,11 @@ $(OBJS)\coredll_fontcmn.obj :  .AUTODEPEND ..\..\src\common\fontcmn.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\coredll_fontenumcmn.obj :  .AUTODEPEND ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\coredll_fontmap.obj :  .AUTODEPEND ..\..\src\common\fontmap.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
@@ -10978,6 +11001,11 @@ $(OBJS)\corelib_fontcmn.obj :  .AUTODEPEND ..\..\src\common\fontcmn.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\corelib_fontenumcmn.obj :  .AUTODEPEND ..\..\src\common\fontenumcmn.cpp
+	$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\corelib_fontmap.obj :  .AUTODEPEND ..\..\src\common\fontmap.cpp
 	$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
diff --git a/build/msw/wx_core.dsp b/build/msw/wx_core.dsp
index 11dc418ff0..79fb5d2521 100644
--- a/build/msw/wx_core.dsp
+++ b/build/msw/wx_core.dsp
@@ -576,6 +576,10 @@ SOURCE=..\..\src\common\fontcmn.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\src\common\fontenumcmn.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\src\common\fontmap.cpp
 # End Source File
 # Begin Source File
diff --git a/docs/changes.txt b/docs/changes.txt
index eba4000562..33f810ad2c 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -22,6 +22,8 @@ INCOMPATIBLE CHANGES SINCE 2.6.x
   wxHtmlCell::GetMouseCursor(); old code overriding GetCursor() will
   continue to work with WXWIN_COMPATIBILITY_2_6, but should be rewritten to
   use GetMouseCursor().
+- wxFontEnumerator::GetFacenames() and GetEncodings() now return arrays and
+  not pointers to arrays
 
 
 Deprecated methods since 2.6.x and their replacements
diff --git a/docs/latex/wx/fontenum.tex b/docs/latex/wx/fontenum.tex
index b697b74ec9..749f1d77b9 100644
--- a/docs/latex/wx/fontenum.tex
+++ b/docs/latex/wx/fontenum.tex
@@ -48,6 +48,8 @@ None
 \helpref{wxFont}{wxfont}, 
 \helpref{wxFontMapper}{wxfontmapper}
 
+
+
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 \membersection{wxFontEnumerator::EnumerateFacenames}\label{wxfontenumeratorenumeratefacenames}
@@ -58,11 +60,12 @@ None
 
 Call \helpref{OnFacename}{wxfontenumeratoronfacename} for each font which
 supports given encoding (only if it is not wxFONTENCODING\_SYSTEM) and is of
-fixed width (if {\it fixedWidthOnly} is true).
+fixed width (if \arg{fixedWidthOnly} is true).
 
 Calling this function with default arguments will result in enumerating all
 fonts available on the system.
 
+
 \membersection{wxFontEnumerator::EnumerateEncodings}\label{wxfontenumeratorenumerateencodings}
 
 \func{virtual bool}{EnumerateEncodings}{\param{const wxString\& }{font = ""}}
@@ -74,21 +77,18 @@ least some font if {\it font} is not specified.
 
 \membersection{wxFontEnumerator::GetEncodings}\label{wxfontenumeratorgetencodings}
 
-\func{wxArrayString*}{GetEncodings}{\void}
+\func{static wxArrayString}{GetEncodings}{\param{const wxString\&}{ facename = ""}}
 
 Return array of strings containing all encodings found by 
-\helpref{EnumerateEncodings}{wxfontenumeratorenumerateencodings}. This is convenience function. It is 
-based on default implementation of \helpref{OnFontEncoding}{wxfontenumeratoronfontencoding} so don't expect
-it to work if you overwrite that method.
+\helpref{EnumerateEncodings}{wxfontenumeratorenumerateencodings}.
+
 
 \membersection{wxFontEnumerator::GetFacenames}\label{wxfontenumeratorgetfacenames}
 
-\func{wxArrayString*}{GetFacenames}{\void}
+\func{static wxArrayString}{GetFacenames}{\param{wxFontEncoding }{encoding = wxFONTENCODING\_SYSTEM}, \param{bool }{fixedWidthOnly = false}}
 
 Return array of strings containing all facenames found by 
-\helpref{EnumerateFacenames}{wxfontenumeratorenumeratefacenames}. This is convenience function. It is 
-based on default implementation of \helpref{OnFacename}{wxfontenumeratoronfacename} so don't expect
-it to work if you overwrite that method.
+\helpref{EnumerateFacenames}{wxfontenumeratorenumeratefacenames}.
 
 
 \membersection{wxFontEnumerator::OnFacename}\label{wxfontenumeratoronfacename}
@@ -98,12 +98,10 @@ it to work if you overwrite that method.
 Called by \helpref{EnumerateFacenames}{wxfontenumeratorenumeratefacenames} for
 each match. Return true to continue enumeration or false to stop it.
 
+
 \membersection{wxFontEnumerator::OnFontEncoding}\label{wxfontenumeratoronfontencoding}
 
-\func{virtual bool}{OnFontEncoding}{
- \param{const wxString\& }{font},
- \param{const wxString\& }{encoding}
-}
+\func{virtual bool}{OnFontEncoding}{\param{const wxString\& }{font}, \param{const wxString\& }{encoding}}
 
 Called by \helpref{EnumerateEncodings}{wxfontenumeratorenumerateencodings} for
 each match. Return true to continue enumeration or false to stop it.
diff --git a/include/wx/fontenum.h b/include/wx/fontenum.h
index 6229a3db25..58218c892d 100644
--- a/include/wx/fontenum.h
+++ b/include/wx/fontenum.h
@@ -24,7 +24,10 @@
 class WXDLLEXPORT wxFontEnumerator
 {
 public:
-    wxFontEnumerator() : m_Facenames(NULL), m_Encodings(NULL) { }
+    wxFontEnumerator() {}
+
+    // virtual dtor for the base class
+    virtual ~wxFontEnumerator() {}
 
     // start enumerating font facenames (either all of them or those which
     // support the given encoding) - will result in OnFacename() being
@@ -46,42 +49,25 @@ public:
     // true to continue with it
 
     // called by EnumerateFacenames
-    virtual bool OnFacename(const wxString& facename)
-        {
-            if (m_Facenames == NULL) m_Facenames = new wxArrayString;
-            m_Facenames -> Add(facename);
-            return true;
-        }
+    virtual bool OnFacename(const wxString& WXUNUSED(facename))
+        { return true; }
 
     // called by EnumerateEncodings
     virtual bool OnFontEncoding(const wxString& WXUNUSED(facename),
-                                const wxString& encoding)
-        {
-            if (m_Encodings == NULL) m_Encodings = new wxArrayString;
-            m_Encodings -> Add(encoding);
-            return true;
-        }
-
-    // convenience function that returns array of facenames. Cannot be called
-    // before EnumerateFacenames.
-    wxArrayString *GetFacenames()
-        { return m_Facenames; }
-
-    // convenience function that returns array of encodings.
-    // Cannot be called before EnumerateEncodings.
-    wxArrayString *GetEncodings()
-        { return m_Encodings; }
+                                const wxString& WXUNUSED(encoding))
+        { return true; }
 
-    // virtual dtor for the base class
-    virtual ~wxFontEnumerator()
-        {
-            if (m_Facenames) delete m_Facenames;
-            if (m_Encodings) delete m_Encodings;
-        }
 
-private:
-    wxArrayString *m_Facenames, *m_Encodings;
 
+    // convenience function that returns array of facenames.
+    static wxArrayString
+    GetFacenames(wxFontEncoding encoding = wxFONTENCODING_SYSTEM, // all
+                 bool fixedWidthOnly = false);
+
+    // convenience function that returns array of all available encodings.
+    static wxArrayString GetEncodings(const wxString& facename = wxEmptyString);
+
+private:
     DECLARE_NO_COPY_CLASS(wxFontEnumerator)
 };
 
diff --git a/src/common/fontenumcmn.cpp b/src/common/fontenumcmn.cpp
new file mode 100644
index 0000000000..f06fcf1269
--- /dev/null
+++ b/src/common/fontenumcmn.cpp
@@ -0,0 +1,74 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/common/fontenumcmn.cpp
+// Purpose:     wxFontEnumerator class
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     7/5/2006
+// RCS-ID:      $Id$
+// Copyright:   (c) 1999-2003 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/fontenum.h"
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// A simple wxFontEnumerator which doesn't perform any filtering and
+// just returns all facenames and encodings found in the system
+class WXDLLEXPORT wxSimpleFontEnumerator : public wxFontEnumerator
+{
+public:
+    wxSimpleFontEnumerator() { }
+
+    // called by EnumerateFacenames
+    virtual bool OnFacename(const wxString& facename)
+    {
+        m_arrFacenames.Add(facename);
+        return true;
+    }
+
+    // called by EnumerateEncodings
+    virtual bool OnFontEncoding(const wxString& WXUNUSED(facename),
+                                const wxString& encoding)
+    {
+        m_arrEncodings.Add(encoding);
+        return true;
+    }
+
+public:
+    wxArrayString m_arrFacenames, m_arrEncodings;
+};
+
+
+/* static */
+wxArrayString wxFontEnumerator::GetFacenames(wxFontEncoding encoding, bool fixedWidthOnly)
+{
+    wxSimpleFontEnumerator temp;
+    temp.EnumerateFacenames(encoding, fixedWidthOnly);
+    return temp.m_arrFacenames;
+}
+
+/* static */
+wxArrayString wxFontEnumerator::GetEncodings(const wxString& facename)
+{
+    wxSimpleFontEnumerator temp;
+    temp.EnumerateEncodings(facename);
+    return temp.m_arrEncodings;
+}
diff --git a/src/html/helpwnd.cpp b/src/html/helpwnd.cpp
index 2c60c696ac..ca22611722 100644
--- a/src/html/helpwnd.cpp
+++ b/src/html/helpwnd.cpp
@@ -1281,18 +1281,14 @@ void wxHtmlHelpWindow::OptionsDialog()
 
     if (m_NormalFonts == NULL)
     {
-        wxFontEnumerator enu;
-        enu.EnumerateFacenames();
-        m_NormalFonts = new wxArrayString;
-        *m_NormalFonts = *enu.GetFacenames();
+        m_NormalFonts = new wxArrayString(wxFontEnumerator::GetFacenames());
         m_NormalFonts->Sort(); // ascending sort
     }
     if (m_FixedFonts == NULL)
     {
-        wxFontEnumerator enu;
-        enu.EnumerateFacenames(wxFONTENCODING_SYSTEM, true /*enum fixed width only*/);
-        m_FixedFonts = new wxArrayString;
-        *m_FixedFonts = *enu.GetFacenames();
+        m_FixedFonts = new wxArrayString(
+                    wxFontEnumerator::GetFacenames(wxFONTENCODING_SYSTEM,
+                    true /*enum fixed width only*/));
         m_FixedFonts->Sort(); // ascending sort
     }
 
diff --git a/src/html/m_fonts.cpp b/src/html/m_fonts.cpp
index 917a2f0eec..cd33cd2119 100644
--- a/src/html/m_fonts.cpp
+++ b/src/html/m_fonts.cpp
@@ -67,13 +67,8 @@ TAG_HANDLER_BEGIN(FONT, "FONT" )
         if (tag.HasParam(wxT("FACE")))
         {
             if (m_Faces.GetCount() == 0)
-            {
-                wxFontEnumerator enu;
-                enu.EnumerateFacenames();
-                const wxArrayString *faces = enu.GetFacenames();
-                if ( faces )
-                    m_Faces = *faces;
-            }
+                m_Faces = wxFontEnumerator::GetFacenames();
+
             wxStringTokenizer tk(tag.GetParam(wxT("FACE")), wxT(","));
             int index;
 
diff --git a/src/wxWindows.dsp b/src/wxWindows.dsp
index 8d1e857e9c..fc5492f24a 100644
--- a/src/wxWindows.dsp
+++ b/src/wxWindows.dsp
@@ -526,6 +526,10 @@ SOURCE=.\common\fontcmn.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\common\fontenumcmn.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\common\fontmap.cpp
 # End Source File
 # Begin Source File
diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp
index d85ca8d459..18c84d6664 100644
--- a/src/xrc/xmlres.cpp
+++ b/src/xrc/xmlres.cpp
@@ -1351,15 +1351,14 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
     if (hasFacename)
     {
         wxString faces = GetParamValue(wxT("face"));
-        wxFontEnumerator enu;
-        enu.EnumerateFacenames();
+        wxArrayString facenames(wxFontEnumerator::GetFacenames());
         wxStringTokenizer tk(faces, wxT(","));
         while (tk.HasMoreTokens())
         {
-            int index = enu.GetFacenames()->Index(tk.GetNextToken(), false);
+            int index = facenames.Index(tk.GetNextToken(), false);
             if (index != wxNOT_FOUND)
             {
-                facename = (*enu.GetFacenames())[index];
+                facename = facenames[index];
                 break;
             }
         }
-- 
2.50.0

