diff --git a/src/luaengineapp/edit.lua b/src/luaengineapp/edit.lua index e1f24bf..126a386 100644 --- a/src/luaengineapp/edit.lua +++ b/src/luaengineapp/edit.lua @@ -129,5 +129,5 @@ end function closeDialog(pushButton) disconnect(pushButton, "clicked()") - closeWidget(getParent(pushButton)) + closeWidget(getWindow(pushButton)) end diff --git a/src/luaenginegui/luaengine/LuaEngineGui.cpp b/src/luaenginegui/luaengine/LuaEngineGui.cpp index 0fa5775..b853371 100644 --- a/src/luaenginegui/luaengine/LuaEngineGui.cpp +++ b/src/luaenginegui/luaengine/LuaEngineGui.cpp @@ -131,6 +131,9 @@ void LuaEngineGui::pushClass(lua_State *L_p) pushVariant(L_p, "SizePolicyPreferred", (int)QSizePolicy::Preferred); pushVariant(L_p, "SizePolicyExpanding", (int)QSizePolicy::Expanding); pushVariant(L_p, "SizePolicyIgnored", (int)QSizePolicy::Ignored); + + // Object + pushFunction(L_p, "getWindow", getWindow); } void LuaEngineGui::pushClass(LuaEngine *luaEngine) @@ -796,6 +799,36 @@ int LuaEngineGui::createTextEdit(lua_State *L_p) return 1; } +int LuaEngineGui::getWindow(lua_State *L_p) +{ + if (getArgumentCount(L_p) >= 1) { + void *pointer = getPointer(L_p, 1); + if (pointer != NULL) { + bool isWindow = false; + QObject *object = ((QObject*)pointer); + while (!isWindow) { + if (object->inherits("QDialog") || object->inherits("QMainWindow")) { + isWindow = true; + } + else { + QObject *parent = object->parent(); + if (parent != NULL) { + object = parent; + } + else { + break; + } + } + } + if (isWindow) { + pushPointer(L_p, object); + return 1; + } + } + } + return 0; +} + int LuaEngineGui::getWidgetText(lua_State *L_p) { if (getArgumentCount(L_p) >= 1) { diff --git a/src/luaenginegui/luaengine/LuaEngineGui.h b/src/luaenginegui/luaengine/LuaEngineGui.h index d69019d..c690ec0 100644 --- a/src/luaenginegui/luaengine/LuaEngineGui.h +++ b/src/luaenginegui/luaengine/LuaEngineGui.h @@ -59,6 +59,7 @@ public: static int createSpacerItem(lua_State *L_p); static int createTextEdit(lua_State *L_p); static int getWidgetText(lua_State *L_p); + static int getWindow(lua_State *L_p); private: lua_State *L;