File r893453.diff of Package kdepim4
Subject: korganizer: potential setNoActionCursor crash fix
From: wstephenson@suse.de
Bug:
Patch-upstream: 893453
--- korganizer/koagenda.cpp (revision 893452)
+++ korganizer/koagenda.cpp (revision 893453)
@@ -364,8 +364,6 @@ void KOAgenda::changeColumns( int column
*/
bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
{
-// kDebug() << int( event->type() );
-
switch( event->type() ) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonDblClick:
@@ -590,32 +588,31 @@ bool KOAgenda::eventFilter_wheel ( QObje
bool KOAgenda::eventFilter_mouse( QObject *object, QMouseEvent *me )
{
QPoint viewportPos;
- if ( object != viewport() ) {
- viewportPos = ( (QWidget *)object )->mapToParent( me->pos() );
+ if ( object != viewport() && object != this ) {
+ viewportPos = static_cast<QWidget *>( object )->mapToParent( me->pos() );
} else {
viewportPos = me->pos();
}
switch ( me->type() ) {
case QEvent::MouseButtonPress:
-// kDebug() << "filtered button press";
if ( object != viewport() ) {
if ( me->button() == Qt::RightButton ) {
mClickedItem = dynamic_cast<KOAgendaItem *>( object );
if ( mClickedItem ) {
- selectItem(mClickedItem);
+ selectItem( mClickedItem );
emit showIncidencePopupSignal( mClickedItem->incidence(),
mClickedItem->itemDate() );
}
} else {
- KOAgendaItem* item = dynamic_cast<KOAgendaItem *>(object);
+ KOAgendaItem *item = dynamic_cast<KOAgendaItem *>(object);
if (item) {
Incidence *incidence = item->incidence();
if ( incidence->isReadOnly() ) {
mActionItem = 0;
} else {
mActionItem = item;
- startItemAction(viewportPos);
+ startItemAction( viewportPos );
}
// Warning: do selectItem() as late as possible, since all
// sorts of things happen during this call. Some can lead to
@@ -668,7 +665,7 @@ bool KOAgenda::eventFilter_mouse( QObjec
QPoint indicatorPos = gridToContents( contentsToGrid( viewportToContents( viewportPos ) ) );
if ( object != viewport() ) {
KOAgendaItem *moveItem = dynamic_cast<KOAgendaItem *>( object );
- if ( moveItem && !moveItem->incidence()->isReadOnly() ) {
+ if ( moveItem && moveItem->incidence() && !moveItem->incidence()->isReadOnly() ) {
if ( !mActionItem ) {
setNoActionCursor( moveItem, viewportPos );
} else {
--- korganizer/koagenda.h (revision 893452)
+++ korganizer/koagenda.h (revision 893453)
@@ -92,7 +92,7 @@ class KOAgenda : public Q3ScrollView
* reappears, it can be reselected. */
const QString lastSelectedUid() const;
- virtual bool eventFilter ( QObject *, QEvent * );
+ bool eventFilter ( QObject *, QEvent * );
QPoint contentsToGrid ( const QPoint &pos ) const;
QPoint gridToContents ( const QPoint &gpos ) const;
Index: korganizer/koagenda.cpp
===================================================================
Index: korganizer/koagenda.h
===================================================================