~kubuntu-members/kompare/4.11

« back to all changes in this revision

Viewing changes to komparepart/komparelistview.cpp

  • Committer: Kevin Kofler
  • Date: 2011-11-06 04:31:26 UTC
  • Revision ID: git-v1:4b373dc630d0865eb43b790b3e2d0ec935fdc569
Kompare: KompareListView: Fix the mouse event handling so it also works around the 1 pixel minimum height.

svn path=/trunk/KDE/kdesdk/kompare/; revision=1262759

Show diffs side-by-side

added added

removed removed

Lines of Context:
408
408
        slotSetSelection( diff );
409
409
}
410
410
 
 
411
KompareListViewDiffItem* KompareListView::diffItemAt( const QPoint& pos )
 
412
{
 
413
        KompareListViewItem* item = static_cast<KompareListViewItem*>( itemAt( pos ) );
 
414
        if( !item )
 
415
                return 0;
 
416
        switch( item->type() ) {
 
417
                case KompareListViewItem::Hunk:
 
418
                        if( item->paintHeight() ) return 0; // no diff item here
 
419
                        // zero height (fake 1 pixel height), so a diff item shines through
 
420
                        return static_cast<KompareListViewDiffItem*>( itemBelow( item ) );
 
421
                case KompareListViewItem::Line:
 
422
                case KompareListViewItem::Blank:
 
423
                        return static_cast<KompareListViewLineItem*>( item )->diffItemParent();
 
424
                case KompareListViewItem::Container:
 
425
                        return static_cast<KompareListViewLineContainerItem*>( item )->diffItemParent();
 
426
                case KompareListViewItem::Diff:
 
427
                        return static_cast<KompareListViewDiffItem*>( item );
 
428
                default:
 
429
                        return 0;
 
430
        }
 
431
}
 
432
 
411
433
void KompareListView::mousePressEvent( QMouseEvent* e )
412
434
{
413
435
        QPoint vp = e->pos();
414
 
        KompareListViewLineItem* lineItem = dynamic_cast<KompareListViewLineItem*>( itemAt( vp ) );
415
 
        if( !lineItem )
416
 
                return;
417
 
        KompareListViewDiffItem* diffItem = lineItem->diffItemParent();
418
 
        if( diffItem->difference()->type() != Difference::Unchanged ) {
 
436
        KompareListViewDiffItem* diffItem = diffItemAt( vp );
 
437
        if( diffItem && diffItem->difference()->type() != Difference::Unchanged ) {
419
438
                emit differenceClicked( diffItem->difference() );
420
439
        }
421
440
}
423
442
void KompareListView::mouseDoubleClickEvent( QMouseEvent* e )
424
443
{
425
444
        QPoint vp = e->pos();
426
 
        KompareListViewLineItem* lineItem = dynamic_cast<KompareListViewLineItem*>( itemAt( vp ) );
427
 
        if ( !lineItem )
428
 
                return;
429
 
        KompareListViewDiffItem* diffItem = lineItem->diffItemParent();
430
 
        if ( diffItem->difference()->type() != Difference::Unchanged ) {
 
445
        KompareListViewDiffItem* diffItem = diffItemAt( vp );
 
446
        if ( diffItem && diffItem->difference()->type() != Difference::Unchanged ) {
431
447
                // FIXME: make a new signal that does both
432
448
                emit differenceClicked( diffItem->difference() );
433
449
                emit applyDifference( !diffItem->difference()->applied() );