From 8060a2de98c31ed8bf76cb2db1e8983ef38488bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Nusser?= Date: Tue, 11 Apr 2017 13:16:59 +0200 Subject: Fix pure virtual function calls and segfaults. --- plugingui/layout.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'plugingui/layout.cc') diff --git a/plugingui/layout.cc b/plugingui/layout.cc index 551611c..ea025bd 100644 --- a/plugingui/layout.cc +++ b/plugingui/layout.cc @@ -70,7 +70,9 @@ void Layout::addItem(LayoutItem* item) void Layout::removeItem(LayoutItem* item) { - std::remove(items.begin(), items.end(), item); + auto new_end = std::remove(items.begin(), items.end(), item); + items.erase(new_end, items.end()); + layout(); } @@ -118,6 +120,7 @@ void VBoxLayout::layout() while(i != items.end()) { LayoutItem* item = *i; + if(resizeChildren) { auto num_items = items.size(); @@ -247,11 +250,10 @@ GridLayout::GridLayout(LayoutItem* parent, std::size_t number_of_columns, void GridLayout::removeItem(LayoutItem* item) { - Layout::removeItem(item); - // manually remove from grid_ranges as remove_if doesn't work on an - // unordered_map - for(auto it = grid_ranges.begin(); it != grid_ranges.end(); ++it) + // unordered_map. + auto it = grid_ranges.begin(); + while(it != grid_ranges.end()) { if(it->first == item) { @@ -262,6 +264,8 @@ void GridLayout::removeItem(LayoutItem* item) ++it; } } + + Layout::removeItem(item); } void GridLayout::layout() -- cgit v1.2.3