From c6638d30e9bc3fd1e32642d009c66dfd9b88c336 Mon Sep 17 00:00:00 2001 From: Sergey Udaltsov Date: Tue, 23 Jun 2009 21:32:59 +0000 Subject: Load exotic config registry materials optionally --- ChangeLog | 10 ++++++++++ configure.in | 5 +++-- libxklavier/xkl_config_registry.h | 6 +++++- libxklavier/xklavier_config.c | 30 +++++++++++++++++++----------- libxklavier/xklavier_config_xkb.c | 9 ++++++--- libxklavier/xklavier_config_xmm.c | 6 ++++-- libxklavier/xklavier_private.h | 7 +++++-- libxklavier/xklavier_private_xkb.h | 3 ++- libxklavier/xklavier_private_xmm.h | 3 ++- tests/test_config.c | 2 +- 10 files changed, 57 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index b4a5d90..31f282f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-06-23 svu + + * configure.in, libxklavier/xkl_config_registry.h, + libxklavier/xklavier_config.c, libxklavier/xklavier_config_xkb.c, + libxklavier/xklavier_config_xmm.c, libxklavier/xklavier_private.h, + libxklavier/xklavier_private_xkb.h, + libxklavier/xklavier_private_xmm.h, tests/test_config.c: use exotic + materials optionally. Breaking API/ABI (incrementing version_info) + * tests/test_monitor.c: eliminating unneeded code + 2009-06-19 svu * libxklavier/xklavier_config.c, libxklavier/xklavier_config_iso.c, diff --git a/configure.in b/configure.in index f44b712..9472121 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ AC_PREREQ(2.59) -AC_INIT([libxklavier], [3.9]) +AC_INIT([libxklavier], [4.0]) AC_CONFIG_SRCDIR([libxklavier/xklavier.c]) AM_INIT_AUTOMAKE([1.10 dist-bzip2]) @@ -8,7 +8,8 @@ AM_CONFIG_HEADER(config.h) AC_CONFIG_MACRO_DIR(m4) dnl for DLL -VERSION_INFO=14:0:2 +dnl http://sources.redhat.com/autobook/autobook/autobook_91.html +VERSION_INFO=15:0:0 AC_SUBST(VERSION_INFO) AM_MAINTAINER_MODE diff --git a/libxklavier/xkl_config_registry.h b/libxklavier/xkl_config_registry.h index f461b9e..75356b9 100644 --- a/libxklavier/xkl_config_registry.h +++ b/libxklavier/xkl_config_registry.h @@ -87,6 +87,8 @@ extern "C" { /** * xkl_config_registry_load: * @config: the config registry + * @if_extras_needed: whether exotic materials (layouts, options) + * should be loaded as well * * Loads XML configuration registry. The name is taken from X server * (for XKB/libxkbfile, from the root window property) @@ -94,7 +96,9 @@ extern "C" { * Returns: TRUE on success */ extern gboolean xkl_config_registry_load(XklConfigRegistry * - config); + config, + gboolean + if_extras_needed); /** * ConfigItemProcessFunc: diff --git a/libxklavier/xklavier_config.c b/libxklavier/xklavier_config.c index 5d95b79..5e16cc5 100644 --- a/libxklavier/xklavier_config.c +++ b/libxklavier/xklavier_config.c @@ -136,8 +136,8 @@ xkl_item_populate_optional_array(XklConfigItem * item, xmlNodePtr ptr, (element_ptr, element_tag)); element_ptr = element_ptr->next, idx++) { elements[idx] = - g_strdup((const char *) element_ptr->children-> - content); + g_strdup((const char *) element_ptr-> + children->content); } g_object_set_data_full(G_OBJECT(item), @@ -240,8 +240,8 @@ xkl_read_config_item(XklConfigRegistry * config, xmlNodePtr iptr, if (vendor_element != NULL && vendor_element->children != NULL) { vendor = - g_strdup((const char *) vendor_element-> - children->content); + g_strdup((const char *) vendor_element->children-> + content); g_object_set_data_full(G_OBJECT(item), XCI_PROP_VENDOR, vendor, g_free); } @@ -300,8 +300,9 @@ xkl_config_registry_foreach_in_xpath(XklConfigRegistry * config, continue; xkl_config_registry_foreach_in_nodeset(config, - xpath_obj->nodesetval, - func, data); + xpath_obj-> + nodesetval, func, + data); xmlXPathFreeObject(xpath_obj); } } @@ -336,8 +337,9 @@ xkl_config_registry_foreach_in_xpath_with_param(XklConfigRegistry continue; xkl_config_registry_foreach_in_nodeset(config, - xpath_obj->nodesetval, - func, data); + xpath_obj-> + nodesetval, func, + data); xmlXPathFreeObject(xpath_obj); } } @@ -578,7 +580,8 @@ xkl_config_registry_load_from_file(XklConfigRegistry * config, gboolean xkl_config_registry_load_helper(XklConfigRegistry * config, const char default_ruleset[], - const char base_dir[]) + const char base_dir[], + gboolean if_extras_needed) { struct stat stat_buf; gchar file_name[MAXPATHLEN] = ""; @@ -599,6 +602,9 @@ xkl_config_registry_load_helper(XklConfigRegistry * config, if (!xkl_config_registry_load_from_file(config, file_name, 0)) return FALSE; + if (!if_extras_needed) + return TRUE; + g_snprintf(file_name, sizeof file_name, "%s/%s.extras.xml", base_dir, rf); @@ -825,14 +831,16 @@ xkl_config_rec_activate(const XklConfigRec * data, XklEngine * engine) } gboolean -xkl_config_registry_load(XklConfigRegistry * config) +xkl_config_registry_load(XklConfigRegistry * config, + gboolean if_extras_needed) { XklEngine *engine; xkl_config_registry_free(config); engine = xkl_config_registry_get_engine(config); xkl_engine_ensure_vtable_inited(engine); - return xkl_engine_vcall(engine, load_config_registry) (config); + return xkl_engine_vcall(engine, load_config_registry) (config, + if_extras_needed); } gboolean diff --git a/libxklavier/xklavier_config_xkb.c b/libxklavier/xklavier_config_xkb.c index 0b3e9ed..0fd5b2d 100644 --- a/libxklavier/xklavier_config_xkb.c +++ b/libxklavier/xklavier_config_xkb.c @@ -95,11 +95,13 @@ xkl_xkb_init_config_registry(XklConfigRegistry * config) } gboolean -xkl_xkb_load_config_registry(XklConfigRegistry * config) +xkl_xkb_load_config_registry(XklConfigRegistry * config, + gboolean if_extras_needed) { return xkl_config_registry_load_helper(config, XKB_DEFAULT_RULESET, - XKB_BASE "/rules"); + XKB_BASE "/rules", + if_extras_needed); } #ifdef LIBXKBFILE_PRESENT @@ -301,7 +303,8 @@ xkl_config_get_keyboard(XklEngine * engine, } } else /* no activate, just load */ xkb = - result.xkb; + result. + xkb; } else { /* could not load properly */ xkl_debug(0, diff --git a/libxklavier/xklavier_config_xmm.c b/libxklavier/xklavier_config_xmm.c index a629082..7d623eb 100644 --- a/libxklavier/xklavier_config_xmm.c +++ b/libxklavier/xklavier_config_xmm.c @@ -44,11 +44,13 @@ xkl_xmm_init_config_registry(XklConfigRegistry * config) } gboolean -xkl_xmm_load_config_registry(XklConfigRegistry * config) +xkl_xmm_load_config_registry(XklConfigRegistry * config, + gboolean if_extras_needed) { return xkl_config_registry_load_helper(config, XMODMAP_DEFAULT_RULESET, - XMODMAP_BASE); + XMODMAP_BASE, + if_extras_needed); } gboolean diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h index 5bcd24b..ddf5b38 100644 --- a/libxklavier/xklavier_private.h +++ b/libxklavier/xklavier_private.h @@ -99,7 +99,8 @@ struct _XklEnginePrivate { * xkb: loads xml from XKB_BASE+"/rules/"+ruleset+".xml" * xmodmap: loads xml from XMODMAP_BASE+"/"+ruleset+".xml" */ - gboolean(*load_config_registry) (XklConfigRegistry * config); + gboolean(*load_config_registry) (XklConfigRegistry * config, + gboolean if_extras_needed); /* * Write the configuration into the file (binary/textual) @@ -399,7 +400,8 @@ extern gchar *xkl_locale_from_utf8(XklConfigRegistry * config, extern gboolean xkl_config_registry_load_helper(XklConfigRegistry * config, const char default_ruleset[], - const char base_dir[]); + const char base_dir[], + gboolean if_extras_needed); #define XKLAVIER_STATE_PROP_LENGTH 2 @@ -435,6 +437,7 @@ extern gboolean xkl_config_registry_load_helper(XklConfigRegistry * config, cons extern void + xkl_config_registry_foreach_in_xpath_with_param(XklConfigRegistry * config, const gchar * format, const gchar * value, diff --git a/libxklavier/xklavier_private_xkb.h b/libxklavier/xklavier_private_xkb.h index 920aeeb..3332012 100644 --- a/libxklavier/xklavier_private_xkb.h +++ b/libxklavier/xklavier_private_xkb.h @@ -78,7 +78,8 @@ extern gboolean xkl_xkb_activate_config_rec(XklEngine * engine, extern void xkl_xkb_init_config_registry(XklConfigRegistry * config); -extern gboolean xkl_xkb_load_config_registry(XklConfigRegistry * config); +extern gboolean xkl_xkb_load_config_registry(XklConfigRegistry * config, + gboolean if_extras_needed); extern gboolean xkl_xkb_write_config_rec_to_file(XklEngine * engine, const char *file_name, diff --git a/libxklavier/xklavier_private_xmm.h b/libxklavier/xklavier_private_xmm.h index 5df6edd..456e99f 100644 --- a/libxklavier/xklavier_private_xmm.h +++ b/libxklavier/xklavier_private_xmm.h @@ -77,7 +77,8 @@ extern gboolean xkl_xmm_activate_config_rec(XklEngine * engine, extern void xkl_xmm_init_config_registry(XklConfigRegistry * config); -extern gboolean xkl_xmm_load_config_registry(XklConfigRegistry * config); +extern gboolean xkl_xmm_load_config_registry(XklConfigRegistry * config, + gboolean if_extras_needed); extern gint xkl_xmm_process_x_event(XklEngine * engine, XEvent * kev); diff --git a/tests/test_config.c b/tests/test_config.c index c6a6e38..8072dda 100644 --- a/tests/test_config.c +++ b/tests/test_config.c @@ -248,7 +248,7 @@ main(int argc, char *const argv[]) xkl_debug(0, "Xklavier initialized\n"); config = xkl_config_registry_get_instance(engine); - xkl_config_registry_load(config); + xkl_config_registry_load(config, TRUE); xkl_debug(0, "Xklavier registry loaded\n"); xkl_debug(0, "Backend: [%s]\n", -- cgit v1.2.1