Martin Vermeer wrote:
On Fri, Nov 02, 2007 at 12:45:49PM +0100, Helge Hafting wrote:
 Start lyx, open a "recent document" - assert.

 Case one (A11.lyx, beamer presentation)

...
 Program received signal SIGSEGV, Segmentation fault.
 [Switching to Thread 0xa62949b0 (LWP 10363)]
 0x0832ec16 in lyx::InsetCollapsable::dimensionCollapsed (this=0x8c5a5e8)
    at ../../lyx-devel/src/insets/InsetCollapsable.cpp:178
 178                     layout_.labelstring, dim.wid, dim.asc, dim.des);
 (gdb) bt
 #0  0x0832ec16 in lyx::InsetCollapsable::dimensionCollapsed (this=0x8c5a5e8)
    at ../../lyx-devel/src/insets/InsetCollapsable.cpp:178
 #1  0x083301ef in lyx::InsetCollapsable::metrics (this=0x8c5a5e8,
    [EMAIL PROTECTED], [EMAIL PROTECTED])
    at ../../lyx-devel/src/insets/InsetCollapsable.cpp:218
#2 0x0834eca8 in lyx::InsetFootlike::metrics (this=0x8c5a5e8, [EMAIL PROTECTED],

This is similar to the earlier reported bug for ERT.

From memory (I am travelling) the fix is to replace the call
in the constructor to InsetCollapse(bp) or ...(bp, status)
by ...(bp, collapse). In ERT, Footlike, perhaps more.

There is something fishy here that needs fixing at a more
fundamental level, but please try this first as I cannot do
much from here now.

OK, I've done some cleanup an the crashes are gone but the inset layouts are broken!

Martin, Richard, do you have an idea here? I don't know if we shall we fix Inset::getLayout() or if we shall assume that each inset hard-code its own layout.

Help please,
Abdel.


Author: younes
Date: Fri Nov  2 18:47:51 2007
New Revision: 21382

URL: http://www.lyx.org/trac/changeset/21382
Log:
* InsetCollapsable:
- InsetCollapsable(): Move labelfont initialisation to InsetCollapsable::setLayout().
- read(): reset the inset layout.

All other insets: get rid of redundant setLayout() calls.

This commit fixes the multiple crashes in trunk but the color used for text and background are completely wrong...

Modified:
    lyx-devel/trunk/src/insets/InsetBox.cpp
    lyx-devel/trunk/src/insets/InsetBranch.cpp
    lyx-devel/trunk/src/insets/InsetCollapsable.cpp
    lyx-devel/trunk/src/insets/InsetERT.cpp
    lyx-devel/trunk/src/insets/InsetFoot.cpp
    lyx-devel/trunk/src/insets/InsetIndex.cpp
    lyx-devel/trunk/src/insets/InsetListings.cpp
    lyx-devel/trunk/src/insets/InsetMarginal.cpp
    lyx-devel/trunk/src/insets/InsetNote.cpp

Modified: lyx-devel/trunk/src/insets/InsetBox.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetBox.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetBox.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetBox.cpp Fri Nov  2 18:47:51 2007
@@ -94,7 +94,6 @@
 InsetBox::InsetBox(BufferParams const & bp, string const & label)
        : InsetCollapsable(bp), params_(label)
 {
-       setLayout(bp);
        init();
 }

@@ -135,7 +134,6 @@
 {
        params_.read(lex);
        InsetCollapsable::read(buf, lex);
-       setLayout(buf.params());
        setButtonLabel();
 }


Modified: lyx-devel/trunk/src/insets/InsetBranch.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetBranch.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetBranch.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetBranch.cpp Fri Nov  2 18:47:51 2007
@@ -45,7 +45,6 @@
                         InsetBranchParams const & params)
        : InsetCollapsable(bp), params_(params)
 {
-       setLayout(bp);
        init();
 }

@@ -86,8 +85,6 @@
 {
        params_.read(lex);
        InsetCollapsable::read(buf, lex);
-       setLayout(buf.params());
-       setButtonLabel();
 }


@@ -137,7 +134,6 @@
                InsetBranchMailer::string2params(to_utf8(cmd.argument()), 
params);
                params_.branch = params.branch;
                setLayout(cur.buffer().params());
-               setButtonLabel();
                break;
        }


Modified: lyx-devel/trunk/src/insets/InsetCollapsable.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetCollapsable.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetCollapsable.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetCollapsable.cpp Fri Nov  2 18:47:51 2007
@@ -82,14 +82,7 @@
        setDrawFrame(true);
        setFrameColor(Color_collapsableframe);
        setButtonLabel();
-       // Fallback for lacking inset layout item
-       layout_.bgcolor = Color_background;
-
-       // FIXME: it seems some insets don't properly initialise that!
-       layout_.labelfont = sane_font;
-       layout_.labelfont.decSize();
-       layout_.labelfont.decSize();
-       layout_.labelfont.setColor(Color_collapsable);
+       setLayout(bp);
 }


@@ -110,7 +103,25 @@

 void  InsetCollapsable::setLayout(BufferParams const & bp)
 {
+       // Fallback for lacking inset layout item
+       layout_.bgcolor = Color_background;
+
+       // FIXME: it seems the default background is red!
        layout_ = getLayout(bp);
+
+
+       // FIXME: it seems the provided font is partly realized... so we
+       // re-initialize the label font in any case.
+       /*
+       if (layout_.labelfont != inherit_font)
+               return;
+       */
+
+       // FIXME: it seems some insets don't properly initialise that...
+       layout_.labelfont = sane_font;
+       layout_.labelfont.decSize();
+       layout_.labelfont.decSize();
+       layout_.labelfont.setColor(Color_collapsable);
 }


@@ -165,6 +176,7 @@
                status_ = isOpen() ? Open : Collapsed;

        setButtonLabel();
+       setLayout(buf.params());

        // Force default font, if so requested
        // This avoids paragraphs in buffer language that would have a

Modified: lyx-devel/trunk/src/insets/InsetERT.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetERT.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetERT.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetERT.cpp Fri Nov  2 18:47:51 2007
@@ -61,7 +61,6 @@
 InsetERT::InsetERT(BufferParams const & bp, CollapseStatus status)
        : InsetCollapsable(bp, status)
 {
-       setLayout(bp);
        init();
 }


Modified: lyx-devel/trunk/src/insets/InsetFoot.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetFoot.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetFoot.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetFoot.cpp Fri Nov  2 18:47:51 2007
@@ -36,9 +36,7 @@

 InsetFoot::InsetFoot(BufferParams const & bp)
        : InsetFootlike(bp)
-{
-       setLayout(bp);
-}
+{}


 InsetFoot::InsetFoot(InsetFoot const & in)

Modified: lyx-devel/trunk/src/insets/InsetIndex.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetIndex.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetIndex.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetIndex.cpp Fri Nov  2 18:47:51 2007
@@ -30,9 +30,7 @@

 InsetIndex::InsetIndex(BufferParams const & bp)
        : InsetCollapsable(bp)
-{
-       setLayout(bp);
-}
+{}


 InsetIndex::InsetIndex(InsetIndex const & in)

Modified: lyx-devel/trunk/src/insets/InsetListings.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetListings.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetListings.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetListings.cpp Fri Nov  2 18:47:51 2007
@@ -59,7 +59,6 @@
InsetListings::InsetListings(BufferParams const & bp, InsetListingsParams const & par)
        : InsetCollapsable(bp, par.status())
 {
-       setLayout(bp);
        init();
 }


Modified: lyx-devel/trunk/src/insets/InsetMarginal.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetMarginal.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetMarginal.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetMarginal.cpp Fri Nov  2 18:47:51 2007
@@ -25,9 +25,7 @@

 InsetMarginal::InsetMarginal(BufferParams const & bp)
        : InsetFootlike(bp)
-{
-       setLayout(bp);
-}
+{}


 InsetMarginal::InsetMarginal(InsetMarginal const & in)

Modified: lyx-devel/trunk/src/insets/InsetNote.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetNote.cpp?rev=21382
==============================================================================
--- lyx-devel/trunk/src/insets/InsetNote.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetNote.cpp Fri Nov  2 18:47:51 2007
@@ -116,7 +116,6 @@
        : InsetCollapsable(bp)
 {
        params_.type = notetranslator().find(label);
-       setLayout(bp);
        setButtonLabel();
 }

@@ -175,8 +174,6 @@
 {
        params_.read(lex);
        InsetCollapsable::read(buf, lex);
-       setLayout(buf.params());
-       setButtonLabel();
 }


@@ -202,7 +199,6 @@
                InsetNoteMailer::string2params(to_utf8(cmd.argument()), 
params_);
                // get a bp from cur:
                setLayout(cur.buffer().params());
-               setButtonLabel();
                break;

        case LFUN_INSET_DIALOG_UPDATE:



Reply via email to