+ if (sr->old_display_order != n) {
+ changed = true;
+ }
+ }
+
+ if (changed) {
+ Unwinder<bool> uw (_ignore_reorder, true);
+ /* prevent traverse_cells: assertion 'row_path != NULL'
+ * in case of DnD re-order: row-removed + row-inserted.
+ *
+ * The rows (stripables) are not actually removed from the model,
+ * but only from the display in the DnDTreeView.
+ * ->reorder() will fail to find the row_path.
+ * (re-order drag -> remove row -> sync PI from TV -> notify -> sync TV from PI -> crash)
+ */
+ Unwinder<bool> uw2 (_ignore_selection_change, true);
+
+ _display.unset_model();
+ _model->reorder (neworder);
+ _display.set_model (_model);