diff options
author | Sergey Udaltsov <svu@gnome.org> | 2006-03-04 03:36:47 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2006-03-04 03:36:47 +0000 |
commit | 007ea5286a597f654fac6e3eabc70270d0d7666c (patch) | |
tree | 48d5927d2063698078b5f23a5ef563dcc6efa0c9 | |
parent | 96f7f1fc9c3401f77db12058e4e55a11d5df7ae6 (diff) | |
download | libxklavier-007ea5286a597f654fac6e3eabc70270d0d7666c.tar.gz |
now, signals are really emmitted (checked)
-rw-r--r-- | libxklavier/Makefile.am | 6 | ||||
-rw-r--r-- | libxklavier/marshal.list | 3 | ||||
-rw-r--r-- | libxklavier/xkl_engine_marshal.c | 131 | ||||
-rw-r--r-- | libxklavier/xkl_engine_marshal.h | 31 | ||||
-rw-r--r-- | libxklavier/xklavier.c | 14 |
5 files changed, 178 insertions, 7 deletions
diff --git a/libxklavier/Makefile.am b/libxklavier/Makefile.am index 68bd7cd..64378e4 100644 --- a/libxklavier/Makefile.am +++ b/libxklavier/Makefile.am @@ -14,6 +14,8 @@ else ENABLE_XMM_SUPPORT_CFLAG = -DDISABLE_XMM_SUPPORT=1 endif +EXTRA_DIST=marshal.list + AM_CFLAGS=-Wall -Werror -DDATA_DIR=\"$(datadir)/$(PACKAGE)\" \ -I. -I$(includedir) -I$(x_includes) -I$(top_srcdir) \ $(XML_CFLAGS) $(GLIB_CFLAGS) \ @@ -26,12 +28,12 @@ noinst_HEADERS = xklavier_private.h xklavier_private_xkb.h xklavier_private_xmm. xklavierincdir = $(includedir)/libxklavier xklavierinc_HEADERS = xklavier.h xkl_config_registry.h xkl_engine.h \ - xkl_config_rec.h xkl_config_item.h + xkl_config_rec.h xkl_config_item.h xkl_engine_marshal.h libxklavier_la_SOURCES = xklavier.c xklavier_evt.c xklavier_config.c \ xklavier_xkb.c xklavier_evt_xkb.c xklavier_config_xkb.c xklavier_toplevel.c \ xklavier_xmm.c xklavier_xmm_opts.c xklavier_evt_xmm.c xklavier_config_xmm.c \ - xklavier_util.c xklavier_config_i18n.c xklavier_props.c xklavier_dump.c \ + xklavier_util.c xklavier_config_i18n.c xklavier_props.c xklavier_dump.c xkl_engine_marshal.c \ $(noinst_HEADERS) $(xklavierinc_HEADERS) libxklavier_la_LDFLAGS = -version-info @VERSION_INFO@ \ $(XML_LIBS) $(GLIB_LIBS) \ diff --git a/libxklavier/marshal.list b/libxklavier/marshal.list new file mode 100644 index 0000000..3fcda01 --- /dev/null +++ b/libxklavier/marshal.list @@ -0,0 +1,3 @@ +VOID:VOID +INT:LONG,LONG +VOID:FLAGS,INT,BOOLEAN diff --git a/libxklavier/xkl_engine_marshal.c b/libxklavier/xkl_engine_marshal.c new file mode 100644 index 0000000..6cd987b --- /dev/null +++ b/libxklavier/xkl_engine_marshal.c @@ -0,0 +1,131 @@ + +#include <glib-object.h> + + +#ifdef G_ENABLE_DEBUG +#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) +#define g_marshal_value_peek_char(v) g_value_get_char (v) +#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) +#define g_marshal_value_peek_int(v) g_value_get_int (v) +#define g_marshal_value_peek_uint(v) g_value_get_uint (v) +#define g_marshal_value_peek_long(v) g_value_get_long (v) +#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) +#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) +#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) +#define g_marshal_value_peek_enum(v) g_value_get_enum (v) +#define g_marshal_value_peek_flags(v) g_value_get_flags (v) +#define g_marshal_value_peek_float(v) g_value_get_float (v) +#define g_marshal_value_peek_double(v) g_value_get_double (v) +#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) +#define g_marshal_value_peek_param(v) g_value_get_param (v) +#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) +#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) +#define g_marshal_value_peek_object(v) g_value_get_object (v) +#else /* !G_ENABLE_DEBUG */ +/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. + * Do not access GValues directly in your code. Instead, use the + * g_value_get_*() functions + */ +#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int +#define g_marshal_value_peek_char(v) (v)->data[0].v_int +#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint +#define g_marshal_value_peek_int(v) (v)->data[0].v_int +#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint +#define g_marshal_value_peek_long(v) (v)->data[0].v_long +#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong +#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 +#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 +#define g_marshal_value_peek_enum(v) (v)->data[0].v_long +#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong +#define g_marshal_value_peek_float(v) (v)->data[0].v_float +#define g_marshal_value_peek_double(v) (v)->data[0].v_double +#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer +#endif /* !G_ENABLE_DEBUG */ + + +/* VOID:VOID (marshal.list:1) */ + +/* INT:LONG,LONG (marshal.list:2) */ +void +g_cclosure_user_marshal_INT__LONG_LONG (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef gint (*GMarshalFunc_INT__LONG_LONG) (gpointer data1, + glong arg_1, + glong arg_2, + gpointer data2); + register GMarshalFunc_INT__LONG_LONG callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gint v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_INT__LONG_LONG) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_long (param_values + 1), + g_marshal_value_peek_long (param_values + 2), + data2); + + g_value_set_int (return_value, v_return); +} + +/* VOID:FLAGS,INT,BOOLEAN (marshal.list:3) */ +void +g_cclosure_user_marshal_VOID__FLAGS_INT_BOOLEAN (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef void (*GMarshalFunc_VOID__FLAGS_INT_BOOLEAN) (gpointer data1, + guint arg_1, + gint arg_2, + gboolean arg_3, + gpointer data2); + register GMarshalFunc_VOID__FLAGS_INT_BOOLEAN callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + + g_return_if_fail (n_param_values == 4); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__FLAGS_INT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); + + callback (data1, + g_marshal_value_peek_flags (param_values + 1), + g_marshal_value_peek_int (param_values + 2), + g_marshal_value_peek_boolean (param_values + 3), + data2); +} + diff --git a/libxklavier/xkl_engine_marshal.h b/libxklavier/xkl_engine_marshal.h new file mode 100644 index 0000000..f0cd56d --- /dev/null +++ b/libxklavier/xkl_engine_marshal.h @@ -0,0 +1,31 @@ + +#ifndef __g_cclosure_user_marshal_MARSHAL_H__ +#define __g_cclosure_user_marshal_MARSHAL_H__ + +#include <glib-object.h> + +G_BEGIN_DECLS + +/* VOID:VOID (marshal.list:1) */ +#define g_cclosure_user_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID + +/* INT:LONG,LONG (marshal.list:2) */ +extern void g_cclosure_user_marshal_INT__LONG_LONG (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* VOID:FLAGS,INT,BOOLEAN (marshal.list:3) */ +extern void g_cclosure_user_marshal_VOID__FLAGS_INT_BOOLEAN (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +G_END_DECLS + +#endif /* __g_cclosure_user_marshal_MARSHAL_H__ */ + diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c index 4af77e8..8221d61 100644 --- a/libxklavier/xklavier.c +++ b/libxklavier/xklavier.c @@ -6,6 +6,7 @@ #include <X11/Xlibint.h> #include "xklavier_private.h" +#include "xkl_engine_marshal.h" static GObjectClass *parent_class = NULL; @@ -856,19 +857,22 @@ xkl_engine_class_init(XklEngineClass * klass) g_signal_new("X-config-changed", XKL_TYPE_ENGINE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(XklEngineClass, config_notify), - NULL, NULL, NULL, G_TYPE_NONE, 0); + NULL, NULL, g_cclosure_user_marshal_VOID__VOID, + G_TYPE_NONE, 0); g_signal_new("new-toplevel-window", XKL_TYPE_ENGINE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(XklEngineClass, new_window_notify), - NULL, NULL, NULL, G_TYPE_INT, 2, G_TYPE_LONG, - G_TYPE_LONG); + NULL, NULL, g_cclosure_user_marshal_INT__LONG_LONG, + G_TYPE_INT, 2, G_TYPE_LONG, G_TYPE_LONG); g_signal_new("X-state-changed", XKL_TYPE_ENGINE, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(XklEngineClass, state_notify), - NULL, NULL, NULL, G_TYPE_NONE, 3, state_change_type, - G_TYPE_INT, G_TYPE_BOOLEAN); + NULL, NULL, + g_cclosure_user_marshal_VOID__FLAGS_INT_BOOLEAN, + G_TYPE_NONE, 3, state_change_type, G_TYPE_INT, + G_TYPE_BOOLEAN); /* 2 Windows passed */ /* static stuff initialized */ |