[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bugs-dist
Subject: Bug#4320: PATCH: kword dies when double-clicking outside a frame
From: Wolfgang Oertl <wolfgang.oertl () gmx ! at>
Date: 2000-05-31 14:20:09
[Download RAW message or body]
Package: kword
Version: 0.1 (KDE 1.90 Beta >= 20000517)
Severity: grave
Problem description
-------------------
- start kword with an empty document
- mode "Edit Frames" (second icon on the "tools_toolbar")
- now double-click somewhere outside all frames --> SEGV.
Relevant code from koffice/kword/kword_page.cc:
void KWPage::vmdEditFrame( int mx, int my )
{
int frameset = doc->getFrameSet( mx, my );
if ( doc->getFrameSet( frameset )->getFrameType() == FT_PART ) {
KWPartFrameSet *fs = dynamic_cast<KWPartFrameSet*>( doc->getFrameSet( fr
This function is called by void KWPage::viewportMouseDoubleClickEvent
(QMouseEvent*). If the call to doc->getFrameSet(mx,my) returns -1 (as can be
seen on the debug messages to stdout), the next call to
doc->getFrameSet(frameset) returns NULL...
Fix: check return value of getFrameset(int,int), and maybe others.
Patch - tested and works (on my system at least :-)
Linux/i386 2.3.99-pre8
glibc-2.1
XFree86 3.3.6
gcc 2.95.2
Apply in kde src dir with "patch -p0".
HTH,
Wolfgang Oertl
--- koffice/kword/kword_page.cc Fri May 12 00:43:41 2000
+++ /usr/src/kde1/koffice/kword/kword_page.cc Wed May 31 16:07:09 2000
@@ -1256,13 +1256,23 @@
void KWPage::vmdEditFrame( int mx, int my )
{
int frameset = doc->getFrameSet( mx, my );
- if ( doc->getFrameSet( frameset )->getFrameType() == FT_PART ) {
- KWPartFrameSet *fs = dynamic_cast<KWPartFrameSet*>( doc->getFrameSet( frameset ) );
+ if( frameset == -1 )
+ return;
+
+ KWFrameSet *fset = doc->getFrameSet( frameset );
+ if( !fset )
+ return;
+
+ switch( fset->getFrameType() ) {
+ case FT_PART: {
+ KWPartFrameSet *fs = dynamic_cast<KWPartFrameSet*>( fset );
fs->activate( gui->getView() );
editNum = frameset;
- } else if ( doc->getFrameSet( frameset )->getFrameType() == FT_FORMULA ) {
+ break;
+ }
+ case FT_FORMULA: {
gui->getView()->showFormulaToolbar( TRUE );
- KWFormulaFrameSet *fs = dynamic_cast<KWFormulaFrameSet*>( doc->getFrameSet( frameset ) );
+ KWFormulaFrameSet *fs = dynamic_cast<KWFormulaFrameSet*>( fset );
fs->activate( this );
editNum = frameset;
KWFormat *f = fs->getFormat();
@@ -1270,6 +1280,10 @@
//formatChanged( *f, FALSE );
gui->getView()->setFormat( *f, TRUE, FALSE );
delete f;
+ break;
+ }
+ default: /* not handled: FT_BASE FT_TEXT FT_PICTURE */
+ break;
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic