Merge pull request #11 from EdgeTX/virtual-keyboard-fieldcontainer

[keyboard] Fix nullptr access while searching for full screen window
This commit is contained in:
Raphael Coeffic
2021-08-18 06:30:07 +02:00
committed by GitHub
2 changed files with 14 additions and 15 deletions
+10 -13
View File
@@ -53,11 +53,15 @@ class Keyboard: public FormWindow
activeKeyboard = this;
attach(MainWindow::instance());
fieldContainer = getFieldContainer(newField);
fieldContainer->setHeight(LCD_H - height() - fieldContainer->top());
fieldContainer->scrollTo(newField);
invalidate();
newField->setEditMode(true);
field = newField;
if (fieldContainer) {
fieldContainer->setHeight(LCD_H - height() - fieldContainer->top());
fieldContainer->scrollTo(newField);
invalidate();
newField->setEditMode(true);
field = newField;
} else {
clearField();
}
}
void clearField()
@@ -75,14 +79,7 @@ class Keyboard: public FormWindow
Window * getFieldContainer(FormField * field)
{
Window * parent = field;
while (true) {
Window * tmp = parent->getParent();
if ((tmp->getWindowFlags() & OPAQUE) && tmp->width() == LCD_W && tmp->height() == LCD_H) {
return parent;
}
parent = tmp;
}
return field->getFullScreenWindow();
}
};
+4 -2
View File
@@ -107,9 +107,11 @@ class Window
return window == this || (parent && parent->isChild(window));
}
Window * getFullScreenWindow()
Window *getFullScreenWindow()
{
return (width() == LCD_W && height() == LCD_H) ? this : parent->getFullScreenWindow();
if (width() == LCD_W && height() == LCD_H) return this;
if (parent) return parent->getFullScreenWindow();
return nullptr;
}
WindowFlags getWindowFlags() const