src/gui/widget/menue.cpp try to fix widget segfault menu with keyboard and background restore

This commit is contained in:
Jacek Jendrzej
2016-11-24 19:21:14 +01:00
parent ee4a443c8a
commit a8ea7c60d5
2 changed files with 11 additions and 4 deletions

View File

@@ -622,6 +622,8 @@ void CMenuWidget::Init(const std::string &Icon, const int mwidth, const mn_widge
fbutton_width = 0; fbutton_width = 0;
fbutton_height = 0; fbutton_height = 0;
nextShortcut = 1; nextShortcut = 1;
saveScreen_width = 0;
saveScreen_height = 0;
} }
void CMenuWidget::move(int xoff, int yoff) void CMenuWidget::move(int xoff, int yoff)
@@ -1391,17 +1393,18 @@ void CMenuWidget::saveScreen()
return; return;
delete[] background; delete[] background;
saveScreen_height = full_height+fbutton_height;
background = new fb_pixel_t [full_width * (full_height+fbutton_height)]; saveScreen_width = full_width;
background = new fb_pixel_t [saveScreen_height * saveScreen_width];
if(background) if(background)
frameBuffer->SaveScreen(x /*-ConnectLineBox_Width*/, y, full_width, full_height + fbutton_height, background); frameBuffer->SaveScreen(x /*-ConnectLineBox_Width*/, y, full_width, saveScreen_height, background);
} }
void CMenuWidget::restoreScreen() void CMenuWidget::restoreScreen()
{ {
if(background) { if(background) {
if(savescreen) if(savescreen)
frameBuffer->RestoreScreen(x /*-ConnectLineBox_Width*/, y, full_width, full_height + fbutton_height, background); frameBuffer->RestoreScreen(x /*-ConnectLineBox_Width*/, y, saveScreen_width, saveScreen_height, background);
} }
} }
@@ -1411,6 +1414,8 @@ void CMenuWidget::enableSaveScreen(bool enable)
if (!enable && background) { if (!enable && background) {
delete[] background; delete[] background;
background = NULL; background = NULL;
saveScreen_width = 0;
saveScreen_height = 0;
} }
} }

View File

@@ -494,6 +494,8 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals
CComponentsInfoBox *info_box; CComponentsInfoBox *info_box;
int hint_height; int hint_height;
CComponentsHeader *header; CComponentsHeader *header;
unsigned int saveScreen_width ;
unsigned int saveScreen_height;
protected: protected:
std::string nameString; std::string nameString;
neutrino_locale_t name; neutrino_locale_t name;