summaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorPeng Wu <epico@dhcp-65-116.nay.redhat.com>2010-04-13 15:55:07 +0800
committerPeng Wu <alexepico@gmail.com>2010-05-19 10:09:32 +0800
commitc3bc5bd52879a85a7a6bfd4e2baefbe7cf37bc01 (patch)
tree75937643ee4b3fcba20920752ebfd98f19e1b6c2 /lua
parent604d367fc223e142617b93f550dc7aa10f859848 (diff)
downloadibus-libpinyin-c3bc5bd52879a85a7a6bfd4e2baefbe7cf37bc01.tar.gz
ibus-libpinyin-c3bc5bd52879a85a7a6bfd4e2baefbe7cf37bc01.tar.xz
ibus-libpinyin-c3bc5bd52879a85a7a6bfd4e2baefbe7cf37bc01.zip
ime register command in progress.
Diffstat (limited to 'lua')
-rw-r--r--lua/lua-plugin-init.c19
-rw-r--r--lua/lua-plugin.c2
-rw-r--r--lua/lua-plugin.h7
-rw-r--r--lua/test-lua-plugin.c2
4 files changed, 28 insertions, 2 deletions
diff --git a/lua/lua-plugin-init.c b/lua/lua-plugin-init.c
index 42c6f5c..996b314 100644
--- a/lua/lua-plugin-init.c
+++ b/lua/lua-plugin-init.c
@@ -29,6 +29,25 @@ void lua_plugin_openlibs (lua_State *L) {
}
}
+void lua_plugin_store_plugin(lua_State * L, IBusEnginePlugin * plugin){
+ luaL_newmetatable(L, LUA_IMELIBNAME);
+ lua_pushliteral(L, LUA_IMELIB_CONTEXT);
+ lua_pushlightuserdata(L, plugin);
+ lua_rawset(L, -3);
+ lua_pop(L, 1);
+}
+
+IBusEnginePlugin * lua_plugin_retrieve_plugin(lua_State * L) {
+ luaL_newmetatable(L, LUA_IMELIBNAME);
+ lua_pushliteral(L, LUA_IMELIB_CONTEXT);
+ lua_rawget(L, -2);
+ luaL_checktype(L, -1, LUA_TLIGHTUSERDATA);
+ IBusEnginePlugin * plugin = lua_touserdata(L, -1);
+ g_assert(IBUS_IS_ENGINE_PLUGIN(plugin));
+ lua_pop(L, 2);
+ return plugin;
+}
+
static int ime_get_last_commit(lua_State* L){
/*TODO: not implemented. */
fprintf(stderr, "TODO: ime_get_last_commit unimplemented.\n");
diff --git a/lua/lua-plugin.c b/lua/lua-plugin.c
index 7eb99d6..ac03e15 100644
--- a/lua/lua-plugin.c
+++ b/lua/lua-plugin.c
@@ -83,6 +83,8 @@ ibus_engine_plugin_init (IBusEnginePlugin *self)
memset(priv, 0, sizeof(IBusEnginePluginPrivate));
lua_plugin_init(priv);
+
+ lua_plugin_store_plugin(priv->L, self);
}
IBusEnginePlugin * ibus_engine_plugin_new(){
diff --git a/lua/lua-plugin.h b/lua/lua-plugin.h
index 2d50329..084fe15 100644
--- a/lua/lua-plugin.h
+++ b/lua/lua-plugin.h
@@ -5,8 +5,7 @@
#define LUA_IMELIBNAME "ime"
LUALIB_API int (luaopen_ime) (lua_State * L);
-
-void lua_plugin_openlibs (lua_State *L);
+#define LUA_IMELIB_CONTEXT "__context"
typedef struct{
const char * command_name;
@@ -31,6 +30,10 @@ typedef struct _IBusEnginePlugin IBusEnginePlugin;
typedef struct _IBusEnginePluginClass IBusEnginePluginClass;
typedef struct _IBusEnginePluginPrivate IBusEnginePluginPrivate;
+void lua_plugin_openlibs (lua_State *L);
+void lua_plugin_store_plugin(lua_State * L, IBusEnginePlugin * plugin);
+IBusEnginePlugin * lua_plugin_retrieve_plugin(lua_State * L);
+
struct _IBusEnginePlugin
{
GObject parent_instance;
diff --git a/lua/test-lua-plugin.c b/lua/test-lua-plugin.c
index 44e5586..72ec552 100644
--- a/lua/test-lua-plugin.c
+++ b/lua/test-lua-plugin.c
@@ -44,6 +44,8 @@ int main(int argc, char * argv[]){
lua_State * L = ibus_engine_plugin_get_lua_State(plugin);
run_test(L, "test.lua");
+ g_assert(lua_plugin_retrieve_plugin(L) == plugin);
+
g_object_unref(plugin);
return 0;