Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
kdepim4
r905628.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File r905628.diff of Package kdepim4
Subject: an attempt at fixing the dreaded crash in paintEvent(). From: wstephenson@suse.de Bug: Patch-upstream: 905628 --- korganizer/koagendaitem.h (revision 905627) +++ korganizer/koagendaitem.h (revision 905628) @@ -143,7 +143,7 @@ class KOAgendaItem : public QWidget, pub bool dissociateFromMultiItem(); - bool setIncidence( Incidence *i ); + void setIncidence( Incidence *incidence ); Incidence *incidence() const { return mIncidence; } QDate itemDate() { return mDate; } @@ -175,6 +175,7 @@ class KOAgendaItem : public QWidget, pub void addAttendee( const QString & ); protected: + bool eventFilter( QObject *obj, QEvent *event ); bool event( QEvent *event ); void dragEnterEvent( QDragEnterEvent *e ); void dropEvent( QDropEvent *e ); @@ -221,6 +222,7 @@ class KOAgendaItem : public QWidget, pub QColor mResourceColor; private: + bool mValid; bool mSelected; QList<KOAgendaItem*> mConflictItems; --- korganizer/koagenda.cpp (revision 905627) +++ korganizer/koagenda.cpp (revision 905628) @@ -1609,8 +1609,8 @@ void KOAgenda::setStartTime( const QTime /* Insert KOAgendaItem into agenda. */ -KOAgendaItem *KOAgenda::insertItem( Incidence *incidence, const QDate &qd, int X, - int YTop, int YBottom ) +KOAgendaItem *KOAgenda::insertItem( Incidence *incidence, const QDate &qd, + int X, int YTop, int YBottom ) { if ( mAllDayMode ) { kDebug() << "using this in all-day mode is illegal."; --- korganizer/koagendaitem.cpp (revision 905627) +++ korganizer/koagendaitem.cpp (revision 905628) @@ -76,13 +76,23 @@ QPixmap *KOAgendaItem::completedPxmp = 0 //----------------------------------------------------------------------------- KOAgendaItem::KOAgendaItem( Incidence *incidence, const QDate &qd, QWidget *parent ) - : QWidget( parent ), mIncidence( incidence ), mDate( qd ), - mLabelText( mIncidence->summary() ), mIconAlarm( false ), - mIconRecur( false ), mIconReadonly( false ), mIconReply( false ), - mIconGroup( false ), mIconGroupTent( false ), mIconOrganizer( false ), - mMultiItemInfo( 0 ), mStartMoveInfo( 0 ) + : QWidget( parent ), mIncidence( incidence ), mDate( qd ), mValid( true ) { - kDebug() << "Incidence Type is " << mIncidence->type(); + if ( !mIncidence ) { + mValid = false; + return; + } + mLabelText = mIncidence->summary(); + mIconAlarm = false; + mIconRecur = false; + mIconReadonly = false; + mIconReply = false; + mIconGroup = false; + mIconGroupTent = false; + mIconOrganizer = false; + mMultiItemInfo = 0; + mStartMoveInfo = 0; + QPalette pal = palette(); pal.setColor( QPalette::Window, Qt::transparent ); setPalette( pal ); @@ -103,7 +113,7 @@ KOAgendaItem::KOAgendaItem( Incidence *i void KOAgendaItem::updateIcons() { - if ( !mIncidence ) { + if ( !mValid ) { return; } mIconReadonly = mIncidence->isReadOnly(); @@ -185,11 +195,14 @@ bool KOAgendaItem::dissociateFromMultiIt return true; } -bool KOAgendaItem::setIncidence( Incidence *i ) +void KOAgendaItem::setIncidence( Incidence *incidence ) { - mIncidence = i; - updateIcons(); - return true; + mValid = false; + if ( incidence ) { + mValid = true; + mIncidence = incidence; + updateIcons(); + } } /* @@ -601,6 +614,10 @@ void KOAgendaItem::dragEnterEvent( QDrag void KOAgendaItem::addAttendee( const QString &newAttendee ) { + if ( !mValid ) { + return; + } + QString name, email; KPIMUtils::extractEmailAddressAndName( newAttendee, email, name ); if ( !( name.isEmpty() && email.isEmpty() ) ) { @@ -620,11 +637,15 @@ void KOAgendaItem::dropEvent( QDropEvent // otherwise check for attendees, then if the data is binary, // add a binary attachment. #ifndef KORG_NODND + if ( !mValid ) { + return; + } + const QMimeData *md = e->mimeData(); bool decoded = md->hasText(); QString text = md->text(); - if ( decoded && text.startsWith( "file:" ) ) { + if ( decoded && text.startsWith( QLatin1String( "file:" ) ) ) { mIncidence->addAttachment( new Attachment( text ) ); return; } @@ -706,7 +727,7 @@ static void conditionalPaint( QPainter * void KOAgendaItem::paintEventIcon( QPainter *p, int &x, int y, int ft ) { - if ( !mIncidence ) { + if ( !mValid ) { return; } conditionalPaint( p, mIncidence->type() == "Event", x, y, ft, *eventPxmp ); @@ -714,7 +735,7 @@ void KOAgendaItem::paintEventIcon( QPain void KOAgendaItem::paintTodoIcon( QPainter *p, int &x, int y, int ft ) { - if ( !mIncidence || mIncidence->type() != "Todo" ) { + if ( !mValid || mIncidence->type() != "Todo" ) { return; } @@ -725,7 +746,7 @@ void KOAgendaItem::paintTodoIcon( QPaint void KOAgendaItem::paintJournalIcon( QPainter *p, int &x, int y, int ft ) { - if ( !mIncidence ) { + if ( !mValid ) { return; } conditionalPaint( p, mIncidence->type() == "Journal", x, y, ft, *journalPxmp ); @@ -751,7 +772,7 @@ void KOAgendaItem::paintIcons( QPainter void KOAgendaItem::paintEvent( QPaintEvent * ) { - if ( !mIncidence ) { + if ( !mValid ) { return; } @@ -1068,8 +1089,14 @@ void KOAgendaItem::paintEvent( QPaintEve void KOAgendaItem::drawRoundedRect( QPainter *p, const QRect &rect, bool selected, const QColor &bgColor, - bool frame, int/*ft*/, bool roundTop, bool roundBottom ) + bool frame, int ft, bool roundTop, + bool roundBottom ) { + Q_UNUSED( ft ); + if ( !mValid ) { + return; + } + QRect r = rect; r.adjust( 0, 0, 1, 1 ); @@ -1277,6 +1304,16 @@ void KOAgendaItem::drawRoundedRect( QPai p->restore(); } +bool KOAgendaItem::eventFilter( QObject *obj, QEvent *event ) +{ + if ( event->type() == QEvent::Paint ) { + return mValid; + } else { + // standard event processing + return QObject::eventFilter( obj, event ); + } +} + bool KOAgendaItem::event( QEvent *event ) { if ( event->type() == QEvent::ToolTip ) { Index: korganizer/koagendaitem.h =================================================================== Index: korganizer/koagenda.cpp =================================================================== Index: korganizer/koagendaitem.cpp ===================================================================
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor