[Date Prev][Date Next][Thread Prev][Thread Next][Thread Index]

RE: [XaraXtreme-dev] Abort on arrow keypress



Er, that was in fact in reply to Gerry, not Alex...

Phil 

> -----Original Message-----
> From: owner-dev@xxxxxxxxxxxxxxxx 
> [mailto:owner-dev@xxxxxxxxxxxxxxxx] On Behalf Of Phil Martin
> Sent: 28 June 2006 17:01
> To: dev@xxxxxxxxxxxxxx
> Subject: RE: [XaraXtreme-dev] Abort on arrow keypress
> 
> Alex,
> 
> That flag is ancient history. I replaced it with a cleaner 
> virtual function. The transformation subclasses now say 
> whether they allow movement of nodes between spreads by 
> overriding CanChangeSpread().
> 
> During dragging that function determines whether StartSpread 
> and CurrentSpread differ and it's the comparison of 
> StartSpread and CurrentSpread that is the primary factor in 
> RecordSelectionTwice, the call to CanChangeSpread() is just a 
> belt-and-braces safety check.
> 
> Phil 
> 
> > -----Original Message-----
> > From: owner-dev@xxxxxxxxxxxxxxxx
> > [mailto:owner-dev@xxxxxxxxxxxxxxxx] On Behalf Of Gerry Iles
> > Sent: 28 June 2006 16:32
> > To: dev@xxxxxxxxxxxxxx
> > Subject: RE: [XaraXtreme-dev] Abort on arrow keypress
> > 
> > Looking at the code some more the following is missing from
> > DoWithParam:
> > 
> > // It is not possible to move between spreads in an immediate 
> > operation CanChangeToNewSpread = FALSE;
> > 
> > This is why RecordSelectionTwice is ending up as non-FALSE in 
> > CompleteTransformation...
> > 
> > I'll let you patch that one if it's your bug... :)
> > 
> > Gerry
> > 
> > -----Original Message-----
> > From: owner-dev@xxxxxxxxxxxxxxxx
> > [mailto:owner-dev@xxxxxxxxxxxxxxxx] On Behalf Of Phil Martin
> > Sent: 28 June 2006 16:26
> > To: dev@xxxxxxxxxxxxxx
> > Subject: RE: [XaraXtreme-dev] Abort on arrow keypress
> > 
> > Thanks Gerry, I was was just thinking about looking into 
> that problem 
> > myself (it's a P1 on my list).
> > 
> > The use of StartSpread and CurrentSpread in 
> CompleteTransformation is 
> > a recent change I made to handle dragging across spread 
> boundaries but 
> > obviously I upset non-drag transforms without realising it.
> > 
> > The TransOperation cosntructor has worked for years without 
> > initialising it's other variables so although it really 
> should do so, 
> > I don't think we'll find any new problems because of it.
> > 
> > Phil
> > 
> > > -----Original Message-----
> > > From: owner-dev@xxxxxxxxxxxxxxxx
> > > [mailto:owner-dev@xxxxxxxxxxxxxxxx] On Behalf Of Gerry Iles
> > > Sent: 28 June 2006 16:19
> > > To: dev@xxxxxxxxxxxxxx
> > > Subject: RE: [XaraXtreme-dev] Abort on arrow keypress
> > > 
> > > Well, logically, I don't see any reason for the code to call 
> > > Spread::FindActiveLayer when handling cursor keys as it 
> doesn't do 
> > > anything to the active layer (the active layer being the 
> layer that 
> > > newly created objects get put on).
> > > 
> > > Looking at the code in CompleteTransformation, it should only be 
> > > calling FindActiveLayer if the operation is moving the
> > selection from
> > > one spread to another.  This shouldn't happen in the text
> > cursor case
> > > (until we have flowing text stories that can span multiple
> > spreads :)
> > > and I wouldn't have thought the nudge operations would
> > allow it either
> > > (though presumably dragging with the mouse would if you
> > actually had
> > > more than one spread).
> > > 
> > > Looking at the constructor for TransOperation it doesn't
> > actually set
> > > all of its member variables sensibly.  I've just committed a fix
> > > (r1382) that sets the StartSpread and CurrentSpread to NULL
> > so that in
> > > release builds (when memory isn't auto-nulled on
> > allocation) the test
> > > in CompleteTransformation works correctly.
> > > 
> > > I haven't actually done a release build to test it but 
> this should 
> > > sort out this specific problem.  There may be other
> > problems caused by
> > > the other member variables not being initialised properly 
> and these 
> > > should really be sorted out too.
> > > 
> > > Gerry
> > > 
> > > -----Original Message-----
> > > From: owner-dev@xxxxxxxxxxxxxxxx
> > > [mailto:owner-dev@xxxxxxxxxxxxxxxx] On Behalf Of Martin Wuerthner
> > > Sent: 28 June 2006 15:30
> > > To: dev@xxxxxxxxxxxxxx
> > > Subject: [XaraXtreme-dev] Abort on arrow keypress
> > > 
> > > When I press an arrow key (either to nudge an object or 
> to move the 
> > > cursor in a text object) XaraLX aborts with a SIGSEGV. 
> This always 
> > > happens in release builds, but not in debug builds. The
> > abort happens
> > > in Spread::FindActiveLayer at
> > > node.h:1137 but also at other places inside this routine. 
> > It appears
> > > that the this pointer of the FindActiveLayer method call is
> > invalid. 
> > > The caller is TransOperation::CompleteTransformation.
> > > 
> > > Interestingly, in a debug build, Spread::FindActiveLayer is
> > not even
> > > called when handling an arrow key, neither when nudging an
> > object nor
> > > when moving the cursor.
> > > 
> > > So, something is seriously wrong with the program flow
> > earlier on, but
> > > only in release builds.
> > > 
> > > This is with the current svn version (1381), build on SUSE
> > 10.0 using
> > > gcc 4.02.
> > > 
> > > Martin
> > > 
> > 
>