summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2006-03-02 00:06:41 +0000
committerSergey Udaltsov <svu@gnome.org>2006-03-02 00:06:41 +0000
commit7c13f1f1c5d34582a40cbde6d9e6f8a1e61e0637 (patch)
tree0558879f3b766c09c77b1ab86e449b85f3013869
parent4a2c685b5f471b9db8c51d24ea57a453b9b78636 (diff)
downloadlibxklavier-7c13f1f1c5d34582a40cbde6d9e6f8a1e61e0637.tar.gz
xklengine type kinda defined
-rw-r--r--libxklavier/xklavier.c47
-rw-r--r--libxklavier/xklavier_config.c24
2 files changed, 55 insertions, 16 deletions
diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c
index 7b818c8..9bbde12 100644
--- a/libxklavier/xklavier.c
+++ b/libxklavier/xklavier.c
@@ -7,6 +7,8 @@
#include "xklavier_private.h"
+static GObjectClass *g_object_class = NULL;
+
static XklEngine *the_engine = NULL;
gint xkl_debug_level = 0;
@@ -176,7 +178,6 @@ xkl_engine_get_instance(Display * display)
the_engine = XKL_ENGINE(g_object_new(xkl_engine_get_type(), NULL));
-
the_engine->priv->display = display;
const gchar *sdl = g_getenv("XKL_DEBUG");
@@ -243,17 +244,6 @@ xkl_engine_get_instance(Display * display)
return the_engine;
}
-gint
-xkl_term(XklEngine * engine)
-{
- XSetErrorHandler((XErrorHandler) engine->priv->
- default_error_handler);
-
- xkl_engine_free_all_info(engine);
-
- return 0;
-}
-
gboolean
xkl_engine_grab_key(XklEngine * engine, gint keycode, guint modifiers)
{
@@ -629,3 +619,36 @@ xkl_get_the_engine()
{
return the_engine;
}
+
+G_DEFINE_TYPE(XklEngine, xkl_engine, G_TYPE_OBJECT)
+
+static void
+xkl_engine_init(XklEngine * engine)
+{
+ engine->priv = g_new0(XklEnginePrivate, 1);
+}
+
+static void
+xkl_engine_finalize(GObject * obj)
+{
+ XklEngine *engine = (XklEngine *) obj;
+
+ XSetErrorHandler((XErrorHandler) engine->priv->
+ default_error_handler);
+
+ xkl_engine_free_all_info(engine);
+
+ g_free(engine->priv);
+
+ G_OBJECT_CLASS(g_object_class)->finalize(obj);
+}
+
+static void
+xkl_engine_class_init(XklEngineClass * klass)
+{
+ GObjectClass *object_class;
+
+ object_class = (GObjectClass *) klass;
+ g_object_class = g_type_class_peek_parent(object_class);
+ object_class->finalize = xkl_engine_finalize;
+}
diff --git a/libxklavier/xklavier_config.c b/libxklavier/xklavier_config.c
index acb6938..3850a8b 100644
--- a/libxklavier/xklavier_config.c
+++ b/libxklavier/xklavier_config.c
@@ -8,6 +8,8 @@
#include "xklavier_private.h"
+static XklConfig *the_config = NULL;
+
static xmlXPathCompExprPtr models_xpath;
static xmlXPathCompExprPtr layouts_xpath;
static xmlXPathCompExprPtr option_groups_xpath;
@@ -307,9 +309,22 @@ xkl_engine_get_ruleset_name(XklEngine * engine,
return rules_set_name;
}
-void
-xkl_config_init(XklConfig * config)
+XklConfig *
+xkl_config_get_instance(XklEngine * engine)
{
+ if (the_config != NULL) {
+ g_object_ref(G_OBJECT(the_config));
+ return the_config;
+ }
+
+ if (!engine) {
+ xkl_debug(10,
+ "xkl_config_get_instance : engine is NULL ?\n");
+ return NULL;
+ }
+
+ the_config = XKL_CONFIG(g_object_new(xkl_config_get_type(), NULL));
+
xmlXPathInit();
models_xpath = xmlXPathCompile((unsigned char *)
"/xkbConfigRegistry/modelList/model");
@@ -319,9 +334,10 @@ xkl_config_init(XklConfig * config)
"/xkbConfigRegistry/optionList/group");
xkl_i18n_init();
- XklEngine *engine = xkl_config_get_engine(config);
xkl_engine_ensure_vtable_inited(engine);
- xkl_engine_vcall(engine, init_config) (config);
+ xkl_engine_vcall(engine, init_config) (the_config);
+
+ return the_config;
}
void