On Sun, Nov 21, 2010 at 12:21:08AM +1100, Mattias Johnsson wrote: > Hello all, > > I've been trying to fix a bug in the search and replace code, and > after a bit of hacking have discovered that in findattr.cxx there's a > function > > int CmpAttr( const SfxPoolItem& rItem1, const SfxPoolItem& rItem2 ) > { > ... > return rItem1 == rItem2; > } > > In the bugged case this returns true, and in the correctly functioning > case it returns false. I'm trying to figure out exactly how rItem1 and > rItem2 differ in the correct case to help me find out what's wrong in > the bugged case. > > If I'm understanding things correctly, and I may not be, since the > search and replace code is quite convoluted, in this case these > SfxPoolItems are lists of attributes that one can search and replace > for; in this case I'm searching for a specific font size and replacing > it with another. > > The overloaded comparison operator is defined as > > int SfxPoolItem::operator==( const SfxPoolItem& rCmp ) const > { > DBG_CHKTHIS(SfxPoolItem, 0); > return rCmp.Type() == Type(); > } > > but for the life of me I can't find out where the Type() method is defined. > > Does anyone have any pointers? >
The SfxPoolItem::operator== is virtual, so you may actually need to look at the definition in some derived class. set print object on p rItem1 p rItem2 in gdb in the CmpAttr func will tell you the real classes of the items. Or, alternatively, you can step into the operator. D. _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice