[PATCH] Switch to the libXfont2 API (v2)

Keith Packard keithp at keithp.com
Wed Sep 2 14:32:10 PDT 2015


This new libXfont API eliminates exposing internal X server symbols to
the font library, replacing those with a struct full of the entire API
needed to use that library.

v2: Use libXfont2 instead of libXfont_2

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 configure.ac   |  2 +-
 dix/dixfonts.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 2 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/configure.ac b/configure.ac
index 1f39331..08fef10 100644
--- a/configure.ac
+++ b/configure.ac
@@ -794,7 +794,7 @@ LIBEGL="egl"
 LIBGBM="gbm >= 10.2.0"
 LIBGL="gl >= 7.1.0"
 LIBXEXT="xext >= 1.0.99.4"
-LIBXFONT="xfont >= 1.4.2"
+LIBXFONT="xfont2 >= 2.0.0"
 LIBXI="xi >= 1.2.99.1"
 LIBXTST="xtst >= 1.0.99.2"
 LIBPCIACCESS="pciaccess >= 0.12.901"
diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 300bf04..3ed88ac 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -65,6 +65,7 @@ Equipment Corporation.
 #include "closestr.h"
 #include "dixfont.h"
 #include "xace.h"
+#include <X11/fonts/libxfont2.h>
 
 #ifdef XF86BIGFONT
 #include "xf86bigfontsrv.h"
@@ -1804,22 +1805,76 @@ DeleteClientFontStuff(ClientPtr client)
     }
 }
 
+static int
+register_fpe_funcs(const font_fpe_funcs_rec *funcs)
+{
+    return RegisterFPEFunctions(funcs->name_func,
+                                funcs->init_func,
+                                funcs->free_func,
+                                funcs->reset_func,
+                                funcs->open_func,
+                                funcs->close_func,
+                                funcs->list_func,
+                                funcs->start_lfwi_func,
+                                funcs->next_lfwi_func,
+                                funcs->wakeup_func,
+                                funcs->client_died,
+                                funcs->load_glyphs,
+                                funcs->start_list_alias_func,
+                                funcs->next_list_alias_func,
+                                funcs->set_path_func);
+}
+
+static unsigned long
+get_server_generation(void)
+{
+    return serverGeneration;
+}
+
+static void *
+get_server_client(void)
+{
+    return serverClient;
+}
+
+static const font_client_funcs_rec font_client_funcs = {
+    .version = FONT_CLIENT_FUNCS_VERSION,
+    .client_auth_generation = client_auth_generation,
+    .client_signal = ClientSignal,
+    .delete_font_client_id = DeleteFontClientID,
+    .verrorf = VErrorF,
+    .find_old_font = find_old_font,
+    .get_client_resolutions = GetClientResolutions,
+    .get_default_point_size = GetDefaultPointSize,
+    .get_new_font_client_id = GetNewFontClientID,
+    .get_time_in_millis = GetTimeInMillis,
+    .init_fs_handlers = init_fs_handlers,
+    .register_fpe_funcs = register_fpe_funcs,
+    .remove_fs_handlers = remove_fs_handlers,
+    .get_server_client = get_server_client,
+    .set_font_authorizations = set_font_authorizations,
+    .store_font_client_font = StoreFontClientFont,
+    .make_atom = MakeAtom,
+    .valid_atom = ValidAtom,
+    .name_for_atom = NameForAtom,
+    .get_server_generation = get_server_generation,
+};
+
 void
 InitFonts(void)
 {
     patternCache = MakeFontPatternCache();
 
+    font_register_client_funcs(&font_client_funcs);
     register_fpe_functions();
 }
 
-_X_EXPORT
 int
 GetDefaultPointSize(void)
 {
     return 120;
 }
 
-_X_EXPORT
 FontResolutionPtr
 GetClientResolutions(int *num)
 {
@@ -1852,7 +1907,6 @@ GetClientResolutions(int *num)
  * should be called (only once!) by each type of fpe when initialized
  */
 
-_X_EXPORT
 int
 RegisterFPEFunctions(NameCheckFunc name_func,
                      InitFpeFunc init_func,
@@ -1923,28 +1977,24 @@ find_old_font(XID id)
     return (FontPtr) pFont;
 }
 
-_X_EXPORT
 Font
 GetNewFontClientID(void)
 {
     return FakeClientID(0);
 }
 
-_X_EXPORT
 int
 StoreFontClientFont(FontPtr pfont, Font id)
 {
     return AddResource(id, RT_NONE, (void *) pfont);
 }
 
-_X_EXPORT
 void
 DeleteFontClientID(Font id)
 {
     FreeResource(id, RT_NONE);
 }
 
-_X_EXPORT
 int
 client_auth_generation(ClientPtr client)
 {
@@ -1954,7 +2004,6 @@ client_auth_generation(ClientPtr client)
 static int fs_handlers_installed = 0;
 static unsigned int last_server_gen;
 
-_X_EXPORT
 int
 init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
 {
@@ -1973,7 +2022,6 @@ init_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler)
     return Successful;
 }
 
-_X_EXPORT
 void
 remove_fs_handlers(FontPathElementPtr fpe, BlockHandlerProcPtr block_handler,
                    Bool all)
-- 
2.5.0



More information about the xorg-devel mailing list