fix(color): rotary encoder may not work in setup menus (#6801)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user