--0-1651809710-1099000253=:28945 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Content-Id: Content-Disposition: inline I have fixed another bug. 88964 - "Highlighting of files in Detailed List View does not correspond to the area of activation". What do you think about? If nobody objects i will commit. cheers Andrunko _______________________________________________________ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com/ --0-1651809710-1099000253=:28945 Content-Type: text/x-diff; name="bug88964.diff" Content-Description: bug88964.diff Content-Disposition: inline; filename="bug88964.diff" Index: konqueror/listview/konq_infolistviewitem.cc =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_infolistviewitem.cc,v retrieving revision 1.10 diff -u -p -r1.10 konq_infolistviewitem.cc --- konqueror/listview/konq_infolistviewitem.cc 3 May 2004 06:03:28 -0000 1.10 +++ konqueror/listview/konq_infolistviewitem.cc 28 Oct 2004 21:44:26 -0000 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "konq_infolistviewitem.h" #include "konq_infolistviewwidget.h" @@ -208,18 +209,59 @@ void KonqInfoListViewItem::setDisabled( void KonqInfoListViewItem::paintCell( QPainter *_painter, const QColorGroup & _cg, int _column, int _width, int _alignment ) { - QColorGroup cg( _cg ); + QColorGroup cg( _cg ); - if ( _column == 0 ) - { - _painter->setFont( static_cast(listView())->itemFont() ); - } - //else - // _painter->setPen( static_cast(listView())->color() ); + if ( _column == 0 ) + { + _painter->setFont( m_pListViewWidget->itemFont() ); + } - cg.setColor( QColorGroup::Text, static_cast(listView())->itemColor() ); + cg.setColor( QColorGroup::Text, m_pListViewWidget->itemColor() ); - KListViewItem::paintCell( _painter, cg, _column, _width, _alignment ); + KListView *lv = static_cast< KListView* >( listView() ); + const QPixmap *pm = lv->viewport()->paletteBackgroundPixmap(); + if ( _column == 0 && isSelected() && !lv->allColumnsShowFocus() ) + { + int newWidth = width( lv->fontMetrics(), lv, _column ); + if ( pm && !pm->isNull() ) + { + cg.setBrush( QColorGroup::Base, QBrush( backgroundColor(), *pm ) ); + QPoint o = _painter->brushOrigin(); + _painter->setBrushOrigin( o.x() - lv->contentsX(), o.y() - lv->contentsY() ); + const QColorGroup::ColorRole crole = + QPalette::backgroundRoleFromMode( lv->viewport()->backgroundMode() ); + _painter->fillRect( newWidth, 0, _width - newWidth, height(), cg.brush( crole ) ); + _painter->setBrushOrigin( o ); + } + else if ( isAlternate() ) + { + _painter->fillRect( newWidth, 0, _width - newWidth, height(), + lv->alternateBackground() ); + } + else + { + const QColorGroup::ColorRole crole = + QPalette::backgroundRoleFromMode( lv->viewport()->backgroundMode() ); + if ( cg.brush( crole ) != lv->colorGroup().brush( crole ) ) + _painter->fillRect( newWidth, 0, _width - newWidth, height(), cg.brush( crole ) ); + else + m_pListViewWidget->paintEmptyArea( _painter, QRect( newWidth, 0, _width - newWidth, height() ) ); + } + + _width = newWidth; + } + + KListViewItem::paintCell( _painter, cg, _column, _width, _alignment ); +} + +void KonqInfoListViewItem::paintFocus( QPainter * _painter, const QColorGroup & cg, const QRect & _r ) +{ + QRect r( _r ); + QListView *lv = static_cast< QListView * >( listView() ); + r.setWidth( width( lv->fontMetrics(), lv, 0 ) ); + if ( r.right() > lv->header()->sectionRect( 0 ).right() ) + r.setRight( lv->header()->sectionRect( 0 ).right() ); + QListViewItem::paintFocus( _painter, cg, r ); } #if 0 Index: konqueror/listview/konq_infolistviewitem.h =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_infolistviewitem.h,v retrieving revision 1.7 diff -u -p -r1.7 konq_infolistviewitem.h --- konqueror/listview/konq_infolistviewitem.h 3 May 2004 06:03:28 -0000 1.7 +++ konqueror/listview/konq_infolistviewitem.h 28 Oct 2004 21:44:26 -0000 @@ -57,6 +57,7 @@ class KonqInfoListViewItem : public Konq virtual void paintCell( QPainter *_painter, const QColorGroup & cg, int column, int width, int alignment ); + virtual void paintFocus( QPainter * _painter, const QColorGroup & cg, const QRect & r ); virtual void updateContents(); virtual void setDisabled( bool disabled ); Index: konqueror/listview/konq_listviewitems.cc =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_listviewitems.cc,v retrieving revision 1.66 diff -u -p -r1.66 konq_listviewitems.cc --- konqueror/listview/konq_listviewitems.cc 20 Aug 2004 19:08:10 -0000 1.66 +++ konqueror/listview/konq_listviewitems.cc 28 Oct 2004 21:44:26 -0000 @@ -261,16 +261,59 @@ int KonqBaseListViewItem::compare( QList void KonqListViewItem::paintCell( QPainter *_painter, const QColorGroup & _cg, int _column, int _width, int _alignment ) { - QColorGroup cg( _cg ); + QColorGroup cg( _cg ); - if ( _column == 0 ) - { - _painter->setFont( m_pListViewWidget->itemFont() ); - } + if ( _column == 0 ) + { + _painter->setFont( m_pListViewWidget->itemFont() ); + } + + cg.setColor( QColorGroup::Text, m_pListViewWidget->itemColor() ); + + KListView *lv = static_cast< KListView* >( listView() ); + const QPixmap *pm = lv->viewport()->paletteBackgroundPixmap(); + if ( _column == 0 && isSelected() && !lv->allColumnsShowFocus() ) + { + int newWidth = width( lv->fontMetrics(), lv, _column ); + if ( pm && !pm->isNull() ) + { + cg.setBrush( QColorGroup::Base, QBrush( backgroundColor(), *pm ) ); + QPoint o = _painter->brushOrigin(); + _painter->setBrushOrigin( o.x() - lv->contentsX(), o.y() - lv->contentsY() ); + const QColorGroup::ColorRole crole = + QPalette::backgroundRoleFromMode( lv->viewport()->backgroundMode() ); + _painter->fillRect( newWidth, 0, _width - newWidth, height(), cg.brush( crole ) ); + _painter->setBrushOrigin( o ); + } + else if ( isAlternate() ) + { + _painter->fillRect( newWidth, 0, _width - newWidth, height(), + lv->alternateBackground() ); + } + else + { + const QColorGroup::ColorRole crole = + QPalette::backgroundRoleFromMode( lv->viewport()->backgroundMode() ); + if ( cg.brush( crole ) != lv->colorGroup().brush( crole ) ) + _painter->fillRect( newWidth, 0, _width - newWidth, height(), cg.brush( crole ) ); + else + m_pListViewWidget->paintEmptyArea( _painter, QRect( newWidth, 0, _width - newWidth, height() ) ); + } - cg.setColor( QColorGroup::Text, m_pListViewWidget->itemColor() ); + _width = newWidth; + } + + KListViewItem::paintCell( _painter, cg, _column, _width, _alignment ); +} - KListViewItem::paintCell( _painter, cg, _column, _width, _alignment ); +void KonqListViewItem::paintFocus( QPainter * _painter, const QColorGroup & cg, const QRect & _r ) +{ + QRect r( _r ); + QListView *lv = static_cast< QListView * >( listView() ); + r.setWidth( width( lv->fontMetrics(), lv, 0 ) ); + if ( r.right() > lv->header()->sectionRect( 0 ).right() ) + r.setRight( lv->header()->sectionRect( 0 ).right() ); + QListViewItem::paintFocus( _painter, cg, r ); } const char* KonqBaseListViewItem::makeAccessString( const mode_t mode) Index: konqueror/listview/konq_listviewitems.h =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_listviewitems.h,v retrieving revision 1.29 diff -u -p -r1.29 konq_listviewitems.h --- konqueror/listview/konq_listviewitems.h 20 Aug 2004 19:08:10 -0000 1.29 +++ konqueror/listview/konq_listviewitems.h 28 Oct 2004 21:44:26 -0000 @@ -105,6 +105,7 @@ class KonqListViewItem : public KonqBase virtual void paintCell( QPainter *_painter, const QColorGroup & cg, int column, int width, int alignment ); + virtual void paintFocus( QPainter * _painter, const QColorGroup & cg, const QRect & r ); virtual void updateContents(); virtual void setDisabled( bool disabled ); virtual void setActive ( bool active ); Index: konqueror/listview/konq_listviewwidget.cc =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_listviewwidget.cc,v retrieving revision 1.249 diff -u -p -r1.249 konq_listviewwidget.cc --- konqueror/listview/konq_listviewwidget.cc 4 Sep 2004 19:20:09 -0000 1.249 +++ konqueror/listview/konq_listviewwidget.cc 28 Oct 2004 21:44:26 -0000 @@ -411,11 +411,9 @@ void KonqBaseListViewWidget::contentsMou if ( e->button() == LeftButton ) { m_rubber = new QRect( e->x(), e->y(), 0, 0 ); - if ( ! ( e->state() & ControlButton ) ) - setSelected( itemAt( vp ), false ); + clearSelection(); + emit selectionChanged(); } - if ( e->button() != RightButton ) - QListView::contentsMousePressEvent( e ); } // Store list of selected items at mouse-press time. // This is used when autoscrolling (why?) @@ -523,16 +521,20 @@ void KonqBaseListViewWidget::slotAutoScr bool block = signalsBlocked(); blockSignals( true ); + QRect nr = m_rubber->normalize(); if ( cur ) { QRect rect = itemRect( cur ); + if ( !allColumnsShowFocus() ) + rect.setWidth( executeArea( cur ) ); + rect = QRect( viewportToContents( rect.topLeft() ), viewportToContents( rect.bottomRight() ) ); if ( !allColumnsShowFocus() ) { rect.setLeft( header()->sectionPos( 0 ) ); - rect.setWidth( header()->sectionSize( 0 ) ); + rect.setWidth( rect.width() ); } else { @@ -545,7 +547,7 @@ void KonqBaseListViewWidget::slotAutoScr while ( cur && rect.top() <= oldBottom ) { - if ( rect.intersects( m_rubber->normalize() ) ) + if ( rect.intersects( nr ) ) { if ( !cur->isSelected() && cur->isSelectable() ) setSelected( cur, true ); @@ -553,6 +555,8 @@ void KonqBaseListViewWidget::slotAutoScr setSelected( cur, false ); cur = cur->itemBelow(); + if (cur && !allColumnsShowFocus()) + rect.setWidth( executeArea( cur ) ); rect.moveBy( 0, rect.height() ); } @@ -562,7 +566,7 @@ void KonqBaseListViewWidget::slotAutoScr while ( cur && rect.bottom() >= oldTop ) { - if ( rect.intersects( m_rubber->normalize() ) ) + if ( rect.intersects( nr ) ) { if ( !cur->isSelected() && cur->isSelectable() ) setSelected( cur, true ); @@ -570,6 +574,8 @@ void KonqBaseListViewWidget::slotAutoScr setSelected( cur, false ); cur = cur->itemAbove(); + if (cur && !allColumnsShowFocus()) + rect.setWidth( executeArea( cur ) ); rect.moveBy( 0, -rect.height() ); } } @@ -843,10 +849,10 @@ void KonqBaseListViewWidget::slotReturnP KMessageBox::information( 0, i18n("You must take the file out of the trash before being able to use it.") ); } -void KonqBaseListViewWidget::slotPopupMenu( QListViewItem *, const QPoint &point, int c ) +void KonqBaseListViewWidget::slotPopupMenu( QListViewItem *i, const QPoint &point, int c ) { kdDebug(1202) << "KonqBaseListViewWidget::slotPopupMenu" << endl; - popupMenu( point, c == -1 ); // c == -1 when activated by keyboard + popupMenu( point, ( i != 0 && c == -1 ) ); // i != 0 && c == -1 when activated by keyboard } void KonqBaseListViewWidget::popupMenu( const QPoint& _global, bool alwaysForSelectedFiles ) @@ -1311,4 +1317,22 @@ bool KonqBaseListViewWidget::caseInsensi return m_pBrowserView->m_pProps->isCaseInsensitiveSort(); } +// based on isExecuteArea from klistview.cpp +int KonqBaseListViewWidget::executeArea( QListViewItem *_item ) +{ + if ( !_item ) + return 0; + + int width = treeStepSize() * ( _item->depth() + ( rootIsDecorated() ? 1 : 0 ) ); + width += itemMargin(); + int ca = AlignHorizontal_Mask & columnAlignment( 0 ); + if ( ca == AlignLeft || ca == AlignAuto ) + { + width += _item->width( fontMetrics(), this, 0 ); + if ( width > columnWidth( 0 ) ) + width = columnWidth( 0 ); + } + return width; +} + #include "konq_listviewwidget.moc" Index: konqueror/listview/konq_listviewwidget.h =================================================================== RCS file: /home/kde/kdebase/konqueror/listview/konq_listviewwidget.h,v retrieving revision 1.92 diff -u -p -r1.92 konq_listviewwidget.h --- konqueror/listview/konq_listviewwidget.h 23 Aug 2004 19:30:58 -0000 1.92 +++ konqueror/listview/konq_listviewwidget.h 28 Oct 2004 21:44:26 -0000 @@ -219,6 +219,8 @@ protected: //KDirLister *dirLister() const { return m_dirLister; } protected: + int executeArea( QListViewItem *_item ); + /** The directory lister for this URL */ KDirLister *m_dirLister; --0-1651809710-1099000253=:28945--