Skip to content

Commit b2ebabd

Browse files
committed
WAbstractItemView: add dragwidget to headerContainer() once it's been created
Fixes segfault when JavaScript not enabled or using progressive bootstrap
1 parent 63e5a1c commit b2ebabd

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

src/Wt/WAbstractItemView.C

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,19 +1209,29 @@ std::unique_ptr<WWidget> WAbstractItemView::createHeaderWidget(int column)
12091209
return std::move(result);
12101210
}
12111211

1212+
void WAbstractItemView::enableAjax()
1213+
{
1214+
WCompositeWidget::enableAjax();
1215+
if (uDragWidget_) {
1216+
headerContainer()->addWidget(std::move(uDragWidget_));
1217+
configureModelDragDrop();
1218+
}
1219+
}
1220+
12121221
void WAbstractItemView::setDragEnabled(bool enable)
12131222
{
12141223
if (dragEnabled_ != enable) {
12151224
dragEnabled_ = enable;
12161225

12171226
if (enable) {
1218-
std::unique_ptr<WText> dragWidget(new WText());
1219-
dragWidget_ = dragWidget.get();
1220-
dragWidget->setId(id() + "dw");
1221-
dragWidget->setInline(false);
1222-
dragWidget->hide();
1223-
setAttributeValue("dwid", dragWidget->id());
1224-
headerContainer()->addWidget(std::move(dragWidget));
1227+
uDragWidget_ = cpp14::make_unique<WText>();
1228+
dragWidget_ = uDragWidget_.get();
1229+
dragWidget_->setId(id() + "dw");
1230+
dragWidget_->setInline(false);
1231+
dragWidget_->hide();
1232+
setAttributeValue("dwid", dragWidget_->id());
1233+
if (headerContainer())
1234+
headerContainer()->addWidget(std::move(uDragWidget_));
12251235

12261236
configureModelDragDrop();
12271237
} else {

src/Wt/WAbstractItemView.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,7 @@ class WT_API WAbstractItemView : public WCompositeWidget
946946
int currentSortColumn_;
947947

948948
bool dragEnabled_, dropsEnabled_;
949+
std::unique_ptr<WWidget> uDragWidget_;
949950
observing_ptr<WWidget> dragWidget_;
950951

951952
virtual void scheduleRerender(RenderState what);
@@ -1014,6 +1015,8 @@ class WT_API WAbstractItemView : public WCompositeWidget
10141015

10151016
virtual bool internalSelect(const WModelIndex& index, SelectionFlag option);
10161017

1018+
virtual void enableAjax() override;
1019+
10171020
void setEditState(const WModelIndex& index, const cpp17::any& editState);
10181021
cpp17::any editState(const WModelIndex& index) const;
10191022
bool hasEditFocus(const WModelIndex& index) const;

src/Wt/WTableView.C

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ void WTableView::enableAjax()
214214
setup();
215215
defineJavaScript();
216216
scheduleRerender(RenderState::NeedRerenderHeader);
217+
WAbstractItemView::enableAjax();
217218
}
218219

219220
void WTableView::resize(const WLength& width, const WLength& height)

0 commit comments

Comments
 (0)