commit 0092b523c7d3c1735b6854bcbdb4e65ec782f092
Author: Georg Baum <b...@lyx.org>
Date:   Sat Jul 5 11:44:13 2014 +0200

    Fix Tabular::CellData::operator=()
    
    Don't create an intermediate copy (found by Jean-Marc).
    I doubt that this has anything to do with the mystery crash, but it works, 
and
    following the standard patterns is better anyway.

diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp
index 1a84c8e..433fe19 100644
--- a/src/insets/InsetTabular.cpp
+++ b/src/insets/InsetTabular.cpp
@@ -602,9 +602,29 @@ Tabular::CellData::CellData(CellData const & cs)
 {
 }
 
-Tabular::CellData & Tabular::CellData::operator=(CellData cs)
-{
-       swap(cs);
+Tabular::CellData & Tabular::CellData::operator=(CellData const & cs)
+{
+       if (&cs == this)
+               return *this;
+       cellno = cs.cellno;
+       width = cs.width;
+       multicolumn = cs.multicolumn;
+       multirow = cs.multirow;
+       mroffset = cs.mroffset;
+       alignment = cs.alignment;
+       valignment = cs.valignment;
+       decimal_hoffset = cs.decimal_hoffset;
+       decimal_width = cs.decimal_width;
+       voffset = cs.voffset;
+       top_line = cs.top_line;
+       bottom_line = cs.bottom_line;
+       left_line = cs.left_line;
+       right_line = cs.right_line;
+       usebox = cs.usebox;
+       rotate = cs.rotate;
+       align_special = cs.align_special;
+       p_width = cs.p_width;
+       inset.reset(static_cast<InsetTableCell *>(cs.inset->clone()));
        return *this;
 }
 
diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h
index be1a67f..8941a83 100644
--- a/src/insets/InsetTabular.h
+++ b/src/insets/InsetTabular.h
@@ -610,7 +610,7 @@ public:
                ///
                CellData(CellData const &);
                ///
-               CellData & operator=(CellData);
+               CellData & operator=(CellData const &);
                ///
                void swap(CellData & rhs);
                ///

Reply via email to