diff --git a/src/app/script/dialog_class.cpp b/src/app/script/dialog_class.cpp index 30f712a24c..2b070d6bee 100644 --- a/src/app/script/dialog_class.cpp +++ b/src/app/script/dialog_class.cpp @@ -413,6 +413,7 @@ int Dialog_show(lua_State* L) if (!rc.isEmpty()) { conn = dlg->window.Open.connect([dlg, rc]{ dlg->setWindowBounds(rc); + dlg->window.setAutoRemap(false); }); } } @@ -1836,9 +1837,10 @@ int Dialog_set_data(lua_State* L) int Dialog_get_bounds(lua_State* L) { auto dlg = get_obj(L, 1); - if (!dlg->window.isVisible()) + if (!dlg->window.isVisible() && dlg->window.bounds().isEmpty()) { dlg->window.remapWindow(); - + dlg->window.centerWindow(dlg->parentDisplay()); + } push_new(L, dlg->getWindowBounds()); return 1; } @@ -1848,8 +1850,10 @@ int Dialog_set_bounds(lua_State* L) auto dlg = get_obj(L, 1); const auto rc = get_obj(L, 2); if (rc) { - if (*rc != dlg->getWindowBounds()) + if (*rc != dlg->getWindowBounds()) { dlg->setWindowBounds(*rc); + dlg->window.setAutoRemap(false); + } } return 0; } diff --git a/tests/scripts/dialogs.lua b/tests/scripts/dialogs.lua new file mode 100644 index 0000000000..9e54e0ab04 --- /dev/null +++ b/tests/scripts/dialogs.lua @@ -0,0 +1,33 @@ +-- Copyright (C) 2023 Igara Studio S.A. +-- +-- This file is released under the terms of the MIT license. +-- Read LICENSE.txt for more information. + +if app.isUIAvailable then + dofile('./test_utils.lua') + + -- Test dialog bounds + do + local dlg = Dialog("Bounds test") + local screenSize = Size(app.window.width, app.window.height) + local bounds = dlg.bounds + assert(bounds.x == (math.floor(screenSize.width / 2) - math.floor(bounds.width / 2))) + assert(bounds.y == (math.floor(screenSize.height / 2) - math.floor(bounds.height / 2))) + local bounds2 = bounds + dlg:show { wait=false } + bounds = dlg.bounds + assert(bounds == bounds2) + print(bounds) + dlg:close() + end + + do + local rect = Rectangle(10, 20, 200, 50) + local dlg2 = Dialog("Bounds test 2") + dlg2.bounds = rect + assert(dlg2.bounds == rect) + dlg2:show { wait=false } + assert(dlg2.bounds == rect) + dlg2:close() + end +end \ No newline at end of file