[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    [PATCH] final fix for textview probs
From:       Michael Brade <Michael.Brade () informatik ! uni-muenchen ! de>
Date:       2001-08-01 8:14:53
[Download RAW message or body]

Hi!

This night I thought about the problem again and came to the following 
conclusion:

The current behaviour of the textview to only change the current item if      
the focus change happens between the parts in one specific Konqywindow is     
inconsistent. Furthermore this led to the problems described in #29530 and 
would result in a workaround (aka evil hacks) for mouseselections.

To fix those bugs and make AleXXX happy at the same time ;) I just changed 
the paintFocus method for the textview items. Like this we have now the 
visible focus change without the need to really select an item and can even 
save some code-duplication in the textviewwidget. The behaviour of all 
listviews is now exactly the same and consistent all over the place, only the 
look&feel is different.
 
If nobody (especially Alex) objects I'll commit at about 15:00 CEST because 
I'll have to leave for about 6 days then. And then I can only pray that this 
change still makes it into KDE 2.2....

Ciao,
  Michael

-- 

       Some operating systems are called `user friendly',
             Linux however is `expert friendly'.

["diff.listview" (text/x-diff)]

? diff.listview
Index: konq_listviewwidget.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/listview/konq_listviewwidget.cc,v
retrieving revision 1.166
diff -u -p -r1.166 konq_listviewwidget.cc
--- konq_listviewwidget.cc	2001/07/31 08:33:22	1.166
+++ konq_listviewwidget.cc	2001/08/01 07:57:26
@@ -925,7 +925,7 @@ void KonqBaseListViewWidget::setComplete
           kdDebug() << "going to first item" << endl;
           setCurrentItem(firstChild());
           ensureItemVisible(firstChild());
-          //selectCurrentItemAndEnableSelectedBySimpleMoveMode();
+          selectCurrentItemAndEnableSelectedBySimpleMoveMode();
       } else
           setContentsPos( m_xOffset, m_yOffset );
 
@@ -992,7 +992,7 @@ void KonqBaseListViewWidget::slotNewItem
                setCurrentItem(tmp);
                ensureItemVisible(tmp);
                emit selectionChanged();
-               //selectCurrentItemAndEnableSelectedBySimpleMoveMode();
+               selectCurrentItemAndEnableSelectedBySimpleMoveMode();
                m_itemFound=true;
             };
       if ( !(*kit)->isMimeTypeKnown() )
Index: konq_textviewitem.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/listview/konq_textviewitem.cc,v
retrieving revision 1.20
diff -u -p -r1.20 konq_textviewitem.cc
--- konq_textviewitem.cc	2001/06/11 02:53:31	1.20
+++ konq_textviewitem.cc	2001/08/01 07:57:26
@@ -22,6 +22,9 @@
 #include "konq_listview.h"
 #include "konq_settings.h"
 
+#include <qpixmap.h>
+#include <qimage.h>
+#include <kimageeffect.h>
 #include <kio/global.h>
 #include <assert.h>
 #include <stdio.h>
@@ -201,6 +204,18 @@ void KonqTextViewItem::paintCell( QPaint
    cg.setColor(QColorGroup::Highlight, Qt::darkGray);
 
    KListViewItem::paintCell( _painter, cg, _column, _width, _alignment );
+}
+
+void KonqTextViewItem::paintFocus( QPainter *_p, const QColorGroup &_cg, const QRect \
&_r ) +{
+   listView()->style().drawFocusRect( _p, _r, _cg,
+           isSelected() ? &_cg.highlight() : &_cg.base(), isSelected() );
+
+   QPixmap pix( _r.width(), _r.height() );
+   bitBlt( &pix, 0, 0, _p->device(), _r.left(), _r.top(), _r.width(), _r.height() );
+   QImage im = pix.convertToImage();
+   im = KImageEffect::fade( im, 0.25, Qt::black );
+   _p->drawImage( _r.topLeft(), im );
 }
 
 void KonqTextViewItem::setup()
Index: konq_textviewitem.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/listview/konq_textviewitem.h,v
retrieving revision 1.5
diff -u -p -r1.5 konq_textviewitem.h
--- konq_textviewitem.h	2000/12/04 14:51:08	1.5
+++ konq_textviewitem.h	2001/08/01 07:57:26
@@ -57,6 +57,7 @@ class KonqTextViewItem : public KonqBase
       /** Call this before destroying the text view (decreases reference count
        * on the view)*/
       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();  
    protected:
Index: konq_textviewwidget.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/listview/konq_textviewwidget.cc,v
retrieving revision 1.31
diff -u -p -r1.31 konq_textviewwidget.cc
--- konq_textviewwidget.cc	2001/05/20 12:38:58	1.31
+++ konq_textviewwidget.cc	2001/08/01 07:57:27
@@ -177,45 +177,6 @@ void KonqTextViewWidget::slotNewItems( c
    }
 }
 
-void KonqTextViewWidget::setComplete()
-{
-   m_bTopLevelComplete = true;
-
-   // Alex: this flag is set when we are just finishing a voluntary listing,
-   // so do the go-to-item thing only under here. When we update the
-   // current directory automatically (e.g. after a file has been deleted),
-   // we don't want to go to the first item ! (David)
-   if ( m_bUpdateContentsPosAfterListing )
-   {
-      kdDebug() << "KonqTextViewWidget::setComplete \
                m_bUpdateContentsPosAfterListing=true" << endl;
-      m_bUpdateContentsPosAfterListing = false;
-
-      setContentsPos( m_pBrowserView->extension()->urlArgs().xOffset,
-                      m_pBrowserView->extension()->urlArgs().yOffset );
-
-      if ((m_goToFirstItem==true) || (m_itemFound==false))
-      {
-          kdDebug() << "going to first item" << endl;
-          setCurrentItem(firstChild());
-          selectCurrentItemAndEnableSelectedBySimpleMoveMode();
-      }
-      ensureItemVisible(currentItem());
-   }
-   // Show "cut" icons as such
-   m_pBrowserView->slotClipboardDataChanged();
-   // Show totals
-   slotOnViewport();
-
-   if ( !isUpdatesEnabled() || !viewport()->isUpdatesEnabled() )
-   {
-      viewport()->setUpdatesEnabled( true );
-      setUpdatesEnabled( true );
-      triggerUpdate();
-   }
-}
-
-
-
 bool KonqTextViewWidget::isNameColumn(const QPoint& point )
 {
    if (!itemAt( point ) )
@@ -266,9 +227,11 @@ void KonqTextViewWidget::viewportDragMov
 
 void KonqTextViewWidget::viewportDropEvent( QDropEvent *ev  )
 {
-    kdDebug() << "KonqBaseListViewWidget::viewportDropEvent" << endl;
-    if ( m_dragOverItem != 0L )
-     setSelected( m_dragOverItem, false );
+   if ( m_dirLister->url().isEmpty() )
+      return;
+   kdDebug() << "KonqTextViewWidget::viewportDropEvent" << endl;
+   if ( m_dragOverItem != 0L )
+      setSelected( m_dragOverItem, false );
    m_dragOverItem = 0L;
 
    ev->accept();
Index: konq_textviewwidget.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/listview/konq_textviewwidget.h,v
retrieving revision 1.11
diff -u -p -r1.11 konq_textviewwidget.h
--- konq_textviewwidget.h	2001/03/27 16:02:22	1.11
+++ konq_textviewwidget.h	2001/08/01 07:57:27
@@ -41,7 +41,6 @@ class KonqTextViewWidget : public KonqBa
 
    protected slots:
       // slots connected to the directory lister
-      virtual void setComplete();
       virtual void slotNewItems( const KFileItemList & );
    protected:
       bool isNameColumn(const QPoint& point );


["diff.kdeui" (text/x-diff)]

? diff
? xmlgui.diff2
? xmlgui.diff
? diff.kdeui
Index: klistview.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/klistview.cpp,v
retrieving revision 1.149
diff -u -p -r1.149 klistview.cpp
--- klistview.cpp	2001/07/31 23:58:56	1.149
+++ klistview.cpp	2001/08/01 07:54:33
@@ -496,21 +496,11 @@ void KListView::emitExecute( QListViewIt
     }
 }
 
+//### KDE 3: remove
 void KListView::focusInEvent( QFocusEvent *fe )
 {
  //   kdDebug()<<"KListView::focusInEvent()"<<endl;
   QListView::focusInEvent( fe );
-
-  if ((d->selectedBySimpleMove)
-      && (d->selectionMode == Konqueror)
-      && (fe->reason()!=QFocusEvent::Popup)
-      && (fe->reason()!=QFocusEvent::ActiveWindow)
-      && (currentItem()!=0))
-  {
-      currentItem()->setSelected(true);
-      currentItem()->repaint();
-      emit selectionChanged();
-  };
 }
 
 void KListView::focusOutEvent( QFocusEvent *fe )
@@ -518,19 +508,6 @@ void KListView::focusOutEvent( QFocusEve
   cleanDropVisualizer();
   cleanItemHighlighter();
 
-  d->autoSelect.stop();
-
-  if ((d->selectedBySimpleMove)
-      && (d->selectionMode == Konqueror)
-      && (fe->reason()!=QFocusEvent::Popup)
-      && (fe->reason()!=QFocusEvent::ActiveWindow)
-      && (currentItem()!=0))
-  {
-      currentItem()->setSelected(false);
-      currentItem()->repaint();
-      emit selectionChanged();
-  };
-
   QListView::focusOutEvent( fe );
 }
 
@@ -1170,16 +1147,11 @@ void KListView::keyPressEvent (QKeyEvent
 }
 
 //this one is only called in konq_listviewwidget, aleXXX
+//### KDE 3: rename this as it doesn't select the current item anymore
 void KListView::selectCurrentItemAndEnableSelectedBySimpleMoveMode()
 {
    d->selectedBySimpleMove=true;
-   if (currentItem()!=0)
-   {
-      currentItem()->setSelected(true);
-      currentItem()->repaint();
-      emit selectionChanged();
-   };
-};
+}
 
 void KListView::konquerorKeyPressEvent (QKeyEvent* e)
 {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic