fix(color): rotary encoder may not work in setup menus (#6801)

This commit is contained in:
philmoz
2025-11-19 13:26:18 +10:00
committed by GitHub
parent 2f90dd9aa6
commit 003fcacad0
13 changed files with 41 additions and 33 deletions
@@ -160,8 +160,8 @@ void FullScreenDialog::deleteLater(bool detach, bool trash)
if (running) {
running = false;
} else {
Layer::pop(this);
Window::deleteLater(detach, trash);
Layer::pop(this);
}
}
+1 -1
View File
@@ -23,7 +23,7 @@ std::list<Layer> Layer::stack;
Layer::Layer(Window* w, lv_group_t* g) : window(w), group(g) {}
Layer::~Layer() { lv_group_del(group); }
static void _assign_lv_group(lv_group_t* g)
void _assign_lv_group(lv_group_t* g)
{
lv_group_set_default(g);
+1 -1
View File
@@ -86,8 +86,8 @@ void MainWindow::shutdown()
// clear layer stack first
for (Window* w = Layer::back(); w; w = Layer::back()) {
Layer::pop(w);
w->deleteLater();
Layer::pop(w);
}
children.clear();
-2
View File
@@ -70,8 +70,6 @@ class MenuBody : public TableField
{
// Allow encoder acceleration
lv_obj_add_flag(lvobj, LV_OBJ_FLAG_ENCODER_ACCEL);
// Add scroll bar if needed
etx_scrollbar(lvobj);
setColumnWidth(0, rect.w);
@@ -57,8 +57,8 @@ ModalWindow::ModalWindow(bool closeWhenClickOutside) :
void ModalWindow::deleteLater(bool detach, bool trash)
{
if (_deleted) return;
Layer::pop(this);
Window::deleteLater(detach, trash);
Layer::pop(this);
}
void ModalWindow::onClicked()
+2 -2
View File
@@ -102,10 +102,10 @@ Page::Page(EdgeTxIcon icon, PaddingSize padding, bool pauseRefresh) :
void Page::deleteLater(bool detach, bool trash)
{
NavWindow::deleteLater(detach, trash);
Layer::pop(this);
Layer::back()->show();
NavWindow::deleteLater(detach, trash);
}
void Page::openMenu()
+24 -17
View File
@@ -177,7 +177,6 @@ TableField::TableField(Window* parent, const rect_t& rect) :
{
setWindowFlag(OPAQUE);
etx_scrollbar(lvobj);
lv_table_set_col_cnt(lvobj, 1);
}
@@ -306,31 +305,39 @@ bool TableField::onLongPress()
return true;
}
extern void _assign_lv_group(lv_group_t* g);
void TableField::setAutoEdit()
{
if (autoedit) return;
autoedit = true;
lv_group_t* g = (lv_group_t*)lv_obj_get_group(lvobj);
if (g) {
setFocusHandler([=](bool focus) {
if (focus) {
lv_group_set_focus_cb(g, TableField::force_editing);
} else {
lv_group_set_focus_cb(g, nullptr);
}
});
lv_group_set_editing(g, true);
}
oldGroup = lv_group_get_default();
group = lv_group_create();
lv_group_add_obj(group, lvobj);
_assign_lv_group(group);
lv_group_set_editing(group, true);
setFocusHandler([=](bool focus) {
if (focus) {
lv_group_set_focus_cb(group, TableField::force_editing);
} else {
lv_group_set_focus_cb(group, nullptr);
}
});
}
void TableField::deleteLater(bool detach, bool trash)
{
if (!deleted()) {
if (autoedit) {
lv_group_t* g = (lv_group_t*)lv_obj_get_group(lvobj);
if (g) {
lv_group_set_focus_cb(g, nullptr);
lv_group_set_editing(g, false);
}
lv_group_del(group);
if (oldGroup)
_assign_lv_group(oldGroup);
else
lv_group_set_default(nullptr);
}
Window::deleteLater(detach, trash);
}
+2
View File
@@ -60,6 +60,8 @@ class TableField : public Window
protected:
bool autoedit = false;
std::function<void()> longPressHandler = nullptr;
lv_group_t* group = nullptr;
lv_group_t* oldGroup = nullptr;
void onEvent(event_t event) override;
bool onLongPress() override;
+2 -2
View File
@@ -66,11 +66,11 @@ void SetupTopBarWidgetsPage::onCancel() { deleteLater(); }
void SetupTopBarWidgetsPage::deleteLater(bool detach, bool trash)
{
Layer::pop(this);
// and continue async deletion...
Window::deleteLater(detach, trash);
Layer::pop(this);
// restore screen setting tab on top
(PageGroup::ScreenMenu())->setCurrentTab(1);
@@ -101,9 +101,9 @@ ViewMain::~ViewMain() { _instance = nullptr; }
void ViewMain::deleteLater(bool detach, bool trash)
{
NavWindow::deleteLater(detach, trash);
Layer::pop(this);
QuickMenu::shutdownQuickMenu();
NavWindow::deleteLater(detach, trash);
}
void ViewMain::addMainView(WidgetsContainer* view, uint32_t viewId)
@@ -160,6 +160,8 @@ void SetupWidgetsPage::onCancel()
void SetupWidgetsPage::deleteLater(bool detach, bool trash)
{
Window::deleteLater(detach, trash);
// restore screen setting tab on top
Layer::pop(this);
@@ -170,7 +172,6 @@ void SetupWidgetsPage::deleteLater(bool detach, bool trash)
viewMain->setCurrentMainView(savedView);
viewMain->showTopBarEdgeTxButton();
}
Window::deleteLater(detach, trash);
storageDirty(EE_MODEL);
}
@@ -193,10 +193,10 @@ void PageGroupBase::deleteLater(bool detach, bool trash)
{
if (_deleted) return;
NavWindow::deleteLater(detach, trash);
Layer::pop(this);
Layer::back()->show();
NavWindow::deleteLater(detach, trash);
}
void PageGroupBase::onClicked() { Keyboard::hide(false); }
+2 -2
View File
@@ -218,6 +218,8 @@ void StandaloneLuaWindow::deleteLater(bool detach, bool trash)
luaScriptManager = nullptr;
Window::deleteLater(detach, trash);
Layer::pop(this);
Layer::back()->show();
@@ -236,8 +238,6 @@ void StandaloneLuaWindow::deleteLater(bool detach, bool trash)
luaState = prevLuaState;
luaEmptyEventBuffer();
Window::deleteLater(detach, trash);
}
void StandaloneLuaWindow::checkEvents()