This segfault occured if you dragged and dropped an icon on a toolbar then
changed the number of toolbars visible in the frame. It occurs because the
pointers in AP_FrameData to the toolbars are stale after being
rebuilt. The solution was a simple method in

ap_UnixFrame.cpp::refillToolbarsInFrameData

to set the pointers correctly. However the toolbar rebuilding code is in
XAP_UnixFrame and xap_UnixGnomeFrame which does not have direct access to
the framedata class. This means that this method must be pure virtual in
XAP_Frame.cpp.

This in turn means that I had to implement this code in all the
ap_*Frame.h headers to keep abiword compiling on all platforms. This means
some platfroms may be broken because I haven't tested them.

Sorry in advance again. We really need src/wp/ap/xp/ap_Frame.cpp.

BTW the implementation on all platforms other than unix is

refillToolbarsInFrameData(void) {UT_ASSERT(0);}


So once platform maintainers implement icon drag and dropping you'll get a
nice assert to remind you to implement this :-)

Curtesy of Hub.

Cheers

Martin


CVS: ----------------------------------------------------------------------
CVS: Enter Log.  Lines beginning with `CVS:' are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS:    src/af/xap/unix/xap_UnixFrame.cpp
CVS:    src/af/xap/unix/xap_UnixFrame.h
CVS:    src/af/xap/unix/gnome/xap_UnixGnomeFrame.cpp
CVS:    src/af/xap/xp/xap_Frame.h src/text/fmt/xp/fl_SectionLayout.cpp
CVS:    src/text/fmt/xp/fp_Line.cpp src/text/fmt/xp/fv_View.cpp
CVS:    src/wp/ap/beos/ap_BeOSFrame.h src/wp/ap/cocoa/ap_CocoaFrame.h
CVS:    src/wp/ap/mac/ap_MacFrame.h src/wp/ap/qnx/ap_QNXFrame.h
CVS:    src/wp/ap/unix/ap_UnixFrame.cpp src/wp/ap/unix/ap_UnixFrame.h
CVS:    src/wp/ap/win/ap_Win32Frame.h
CVS: ----------------------------------------------------------------------
Fix segfault after drag/drop toolbar icon and changing the number of
toolbars i\n the view.




Reply via email to