Blob Blame History Raw
diff -Nur kdesdk-3.96.2-orig/CMakeLists.txt kdesdk-3.96.2-fix-kompare/CMakeLists.txt
--- kdesdk-3.96.2-orig/CMakeLists.txt	2007-11-27 18:20:14.000000000 +0100
+++ kdesdk-3.96.2-fix-kompare/CMakeLists.txt	2007-12-05 04:10:12.000000000 +0100
@@ -43,9 +43,9 @@
 macro_optional_add_subdirectory(strigi-analyzer)
 macro_optional_add_subdirectory(kioslave)
 macro_optional_add_subdirectory(kmtrace)
-#message(STATUS "remember to port kompare to editinterface")
-MESSAGE(STATUS "Kompare from the branches/work/kompare/3-way-kompare will replace this version, so do not spend too much time on getting this version to work as it will be replaced.")
-#add_subdirectory(kompare)
+if( UNIX )
+macro_optional_add_subdirectory(kompare)
+endif( UNIX )
 macro_optional_add_subdirectory(kprofilemethod)
 message(STATUS "remember to port kspy to Qt4's metaobjects")
 #add_subdirectory(kspy)
diff -Nur kdesdk-3.96.2-orig/kompare/CMakeLists.txt kdesdk-3.96.2-fix-kompare/kompare/CMakeLists.txt
--- kdesdk-3.96.2-orig/kompare/CMakeLists.txt	2007-07-26 12:38:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/CMakeLists.txt	2007-12-04 21:35:31.000000000 +0100
@@ -43,7 +43,7 @@
 
 kde4_add_executable(kompare ${kompare_SRCS})
 
-target_link_libraries(kompare  kompareinterface dialogpages ${KDE4_KTEXTEDITOR_LIBS} )
+target_link_libraries(kompare  kompareinterface dialogpages ${KDE4_KTEXTEDITOR_LIBS} ${KDE4_KDE3SUPPORT_LIBS} )
 
 install(TARGETS kompare  DESTINATION ${BIN_INSTALL_DIR} )
 
diff -Nur kdesdk-3.96.2-orig/kompare/komparenavtreepart/CMakeLists.txt kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/CMakeLists.txt
--- kdesdk-3.96.2-orig/kompare/komparenavtreepart/CMakeLists.txt	2007-07-26 12:38:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/CMakeLists.txt	2007-12-04 21:36:02.000000000 +0100
@@ -11,7 +11,7 @@
 
 
 
-target_link_libraries(komparenavtreepart  ${KDE4_KPARTS_LIBS} diff2 )
+target_link_libraries(komparenavtreepart  ${KDE4_KPARTS_LIBS} diff2 ${KDE4_KDE3SUPPORT_LIBS} )
 
 install(TARGETS komparenavtreepart  DESTINATION ${PLUGIN_INSTALL_DIR} )
 
diff -Nur kdesdk-3.96.2-orig/kompare/komparenavtreepart/komparenavtreepart.cpp kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/komparenavtreepart.cpp
--- kdesdk-3.96.2-orig/kompare/komparenavtreepart/komparenavtreepart.cpp	2007-07-26 12:38:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/komparenavtreepart.cpp	2007-12-05 01:59:41.000000000 +0100
@@ -677,12 +677,12 @@
 	s_instance = 0L;
 }
 
-KParts::Part* KompareNavTreePartFactory::createPartObject( QWidget* parentWidget, const char* widgetName,
-                                                  QObject* /*parent*/, const char* /*name*/,
+KParts::Part* KompareNavTreePartFactory::createPartObject( QWidget* parentWidget,
+                                                  QObject* /*parent*/,
                                                   const char* /*classname*/, const QStringList & /*args*/ )
 {
 	// Create an instance of our Part
-	KompareNavTreePart* obj = new KompareNavTreePart( parentWidget, widgetName );
+	KompareNavTreePart* obj = new KompareNavTreePart( parentWidget, 0 );
 
 	KGlobal::locale()->insertCatalog("kompare");
 
@@ -701,20 +701,7 @@
 	return *s_instance;
 }
 
-extern "C"
-{
-	KDE_EXPORT void* init_libkomparenavtreepart()
-	{
-/* TODO:
-/home/kde4dev/kde/src/kdesdk/kompare/komparenavtreepart/komparenavtreepart.cpp:708: error: cannot allocate an object of type `KompareNavTreePartFactory'
-/home/kde4dev/kde/src/kdesdk/kompare/komparenavtreepart/komparenavtreepart.cpp:708: error:   because the following virtual functions are abstract:
-/home/kde4dev/kde/include/kparts/factory.h:118: error:  virtual KParts::Part* KParts::Factory::createPartObject(QWidget*, QObject*, const char*, const QStringList&)
-make[2]: *** [kompare/komparenavtreepart/CMakeFiles/komparenavtreepart.dir/komparenavtreepart.o] Error 1
-
-
-		return new KompareNavTreePartFactory;
-*/
-	}
-}
+K_EXPORT_COMPONENT_FACTORY( libkomparenavtreepart, KompareNavTreePartFactory )
+K_EXPORT_PLUGIN( KompareNavTreePartFactory )
 
 #include "komparenavtreepart.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/komparenavtreepart/komparenavtreepart.h kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/komparenavtreepart.h
--- kdesdk-3.96.2-orig/kompare/komparenavtreepart/komparenavtreepart.h	2007-02-19 11:01:32.000000000 +0100
+++ kdesdk-3.96.2-fix-kompare/kompare/komparenavtreepart/komparenavtreepart.h	2007-12-05 01:50:39.000000000 +0100
@@ -181,8 +181,7 @@
 public:
 	KompareNavTreePartFactory();
 	virtual ~KompareNavTreePartFactory();
-	virtual KParts::Part* createPartObject( QWidget *parentWidget, const char *widgetName,
-	                                        QObject *parent, const char *name,
+	virtual KParts::Part* createPartObject( QWidget *parentWidget, QObject *parent,
 	                                        const char *classname, const QStringList &args );
 	static const KComponentData &componentData();
 
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/CMakeLists.txt kdesdk-3.96.2-fix-kompare/kompare/komparepart/CMakeLists.txt
--- kdesdk-3.96.2-orig/kompare/komparepart/CMakeLists.txt	2007-07-26 12:38:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/CMakeLists.txt	2007-12-10 11:01:58.000000000 +0100
@@ -10,6 +10,7 @@
    komparesplitter.cpp 
    komparelistview.cpp 
    kompareprefdlg.cpp 
+   komparesaveoptionsbase.cpp 
    komparesaveoptionswidget.cpp )
 
 
@@ -19,7 +20,7 @@
 
 
 
-target_link_libraries(komparepart  ${KDE4_KPARTS_LIBS} dialogpages diff2 kompareinterface )
+target_link_libraries(komparepart  ${KDE4_KPARTS_LIBS} dialogpages diff2 kompareinterface ${KDE4_KDE3SUPPORT_LIBS} )
 
 install(TARGETS komparepart  DESTINATION ${PLUGIN_INSTALL_DIR} )
 
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompareconnectwidget.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareconnectwidget.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/kompareconnectwidget.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareconnectwidget.cpp	2007-12-10 12:27:29.000000000 +0100
@@ -20,10 +20,15 @@
  ***************************************************************************/
 
 #include <qapplication.h>
-#include <qpainter.h>
+#include <Q3Painter>
 #include <qpixmap.h>
 #include <qstyle.h>
 #include <qtimer.h>
+//Added by qt3to4:
+#include <Q3PointArray>
+#include <QPaintEvent>
+#include <Q3Frame>
+#include <QMouseEvent>
 
 #include <kdebug.h>
 
@@ -36,23 +41,22 @@
 
 using namespace Diff2;
 
-KompareConnectWidgetFrame::KompareConnectWidgetFrame( KompareListView* left,
-                                                      KompareListView* right,
-                                                      ViewSettings* settings,
+KompareConnectWidgetFrame::KompareConnectWidgetFrame( ViewSettings* settings,
                                                       KompareSplitter* parent,
                                                       const char* name ) :
-	QSplitterHandle(Horizontal, (QSplitter *)parent, name),
-	m_wid ( left, right, settings, this, name ),
+	QSplitterHandle(Qt::Horizontal, (QSplitter *)parent),
+	m_wid ( settings, this, name ),
 	m_label ( "", this ),
 	m_layout ( this )
 {
+	setObjectName( name );
 	setSizePolicy ( QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Ignored) );
 	m_wid.setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored) );
 	m_label.setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
 	m_label.setMargin(3);
-	QFrame* bottomLine = new QFrame(this);
-	bottomLine->setFrameShape(QFrame::HLine);
-	bottomLine->setFrameShadow ( QFrame::Plain );
+	Q3Frame* bottomLine = new Q3Frame(this);
+	bottomLine->setFrameShape(Q3Frame::HLine);
+	bottomLine->setFrameShadow ( Q3Frame::Plain );
 	bottomLine->setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
 	bottomLine->setFixedHeight(1);
 	m_layout.setSpacing(0);
@@ -68,14 +72,16 @@
 
 QSize KompareConnectWidgetFrame::sizeHint() const
 {
-	return QSize(50, style().pixelMetric( QStyle::PM_ScrollBarExtent ) );
+	return QSize(50, style()->pixelMetric( QStyle::PM_ScrollBarExtent ) );
 }
 
 static int kMouseOffset;
 
+#if 0
 void KompareConnectWidgetFrame::mouseMoveEvent( QMouseEvent *e )
 {
-	if ( !(e->state()&LeftButton) )
+
+	if ( !(e->state()&Qt::LeftButton) )
 		return;
 
 	QCOORD pos = s->pick( parentWidget()->mapFromGlobal(e->globalPos()) )
@@ -86,31 +92,29 @@
 
 void KompareConnectWidgetFrame::mousePressEvent( QMouseEvent *e )
 {
-	if ( e->button() == LeftButton )
+	if ( e->button() == Qt::LeftButton )
 		kMouseOffset = s->pick( e->pos() );
 	QSplitterHandle::mousePressEvent(e);
 }
 
 void KompareConnectWidgetFrame::mouseReleaseEvent( QMouseEvent *e )
 {
-	if ( !opaque() && e->button() == LeftButton ) {
+	if ( !opaque() && e->button() == Qt::LeftButton ) {
 		QCOORD pos = s->pick( parentWidget()->mapFromGlobal(e->globalPos()) )
 			- kMouseOffset;
 		((KompareSplitter*)s)->moveSplitter( pos, id() );
     }
 }
+#endif
 
-KompareConnectWidget::KompareConnectWidget( KompareListView* left, KompareListView* right,
-      ViewSettings* settings, QWidget* parent, const char* name )
+KompareConnectWidget::KompareConnectWidget( ViewSettings* settings, QWidget* parent, const char* name )
 	: QWidget(parent, name),
 	m_settings( settings ),
-	m_leftView( left ),
-	m_rightView( right ),
 	m_selectedModel( 0 ),
 	m_selectedDifference( 0 )
 {
 //	connect( m_settings, SIGNAL( settingsChanged() ), this, SLOT( slotDelayedRepaint() ) );
-	setBackgroundMode( NoBackground );
+	setBackgroundMode( Qt::NoBackground );
 	setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Minimum ) );
 	setFocusProxy( parent->parentWidget() );
 }
@@ -157,17 +161,22 @@
 //	kDebug(8106) << "KompareConnectWidget::paintEvent()" << endl;
 
 	QPixmap pixbuf(size());
-	QPainter paint(&pixbuf, this);
-	QPainter* p = &paint;
+	Q3Painter paint(&pixbuf);
+	Q3Painter* p = &paint;
+
+	p->fillRect( 0, 0, pixbuf.width(), pixbuf.height(), QColor(Qt::white).dark(110) );
 
-	p->fillRect( 0, 0, pixbuf.width(), pixbuf.height(), white.dark(110) );
+	KompareSplitter* splitter = static_cast<KompareSplitter*>( parent()->parent() );
+	int count = splitter->count();
+	KompareListView *leftView = count >= 2 ? static_cast<KompareListViewFrame*>( splitter->widget(0) )->view() : 0;
+	KompareListView *rightView = count >= 2 ? static_cast<KompareListViewFrame*>( splitter->widget(1) )->view() : 0;
 
-	if ( m_selectedModel )
+	if ( m_selectedModel && leftView && rightView )
 	{
-		int firstL = m_leftView->firstVisibleDifference();
-		int firstR = m_rightView->firstVisibleDifference();
-		int lastL = m_leftView->lastVisibleDifference();
-		int lastR = m_rightView->lastVisibleDifference();
+		int firstL = leftView->firstVisibleDifference();
+		int firstR = rightView->firstVisibleDifference();
+		int lastL = leftView->lastVisibleDifference();
+		int lastR = rightView->lastVisibleDifference();
 
 		int first = firstL < 0 ? firstR : qMin( firstL, firstR );
 		int last = lastL < 0 ? lastR : qMax( lastL, lastR );
@@ -179,7 +188,7 @@
 		{
 			const DifferenceList* differences  = const_cast<DiffModel*>(m_selectedModel)->differences();
 			DifferenceListConstIterator diffIt = differences->at( first );
-			DifferenceListConstIterator dEnd   = differences->at( last + 1 );
+			DifferenceListConstIterator dEnd   = last + 1 < differences->size() ? differences->at( last + 1 ) : differences->end();
 
 			QRect leftRect, rightRect;
 
@@ -190,13 +199,13 @@
 
 				if ( QApplication::reverseLayout() )
 				{
-					leftRect = m_rightView->itemRect( i );
-					rightRect = m_leftView->itemRect( i );
+					leftRect = rightView->itemRect( i );
+					rightRect = leftView->itemRect( i );
 				}
 				else
 				{
-					leftRect = m_leftView->itemRect( i );
-					rightRect = m_rightView->itemRect( i );
+					leftRect = leftView->itemRect( i );
+					rightRect = rightView->itemRect( i );
 				}
 
 				int tl = leftRect.top();
@@ -211,8 +220,8 @@
 				br = br <=  32767 ? br :  32767;
 
 //				kDebug(8106) << "drawing: " << tl << " " << tr << " " << bl << " " << br << endl;
-				QPointArray topBezier = makeTopBezier( tl, tr );
-				QPointArray bottomBezier = makeBottomBezier( bl, br );
+				Q3PointArray topBezier = makeTopBezier( tl, tr );
+				Q3PointArray bottomBezier = makeBottomBezier( bl, br );
 
 				QColor color = m_settings->colorForDifferenceType( diff->type(), selected, diff->applied() ).dark(110);
 				p->setPen( color );
@@ -229,16 +238,16 @@
 		}
 	}
 
-	p->flush();
+//	p->flush();
 	bitBlt(this, 0, 0, &pixbuf);
 }
 
-QPointArray KompareConnectWidget::makeTopBezier( int tl, int tr )
+Q3PointArray KompareConnectWidget::makeTopBezier( int tl, int tr )
 {
 	int l = 0;
 	int r = width();
 	int o = (int)((double)r*0.4); // 40% of width
-	QPointArray controlPoints;
+	Q3PointArray controlPoints;
 
 	if ( tl != tr )
 	{
@@ -252,12 +261,12 @@
 	}
 }
 
-QPointArray KompareConnectWidget::makeBottomBezier( int bl, int br )
+Q3PointArray KompareConnectWidget::makeBottomBezier( int bl, int br )
 {
 	int l = 0;
 	int r = width();
 	int o = (int)((double)r*0.4); // 40% of width
-	QPointArray controlPoints;
+	Q3PointArray controlPoints;
 
 	if ( bl != br )
 	{
@@ -271,9 +280,9 @@
 	}
 }
 
-QPointArray KompareConnectWidget::makeConnectPoly( const QPointArray& topBezier, const QPointArray& bottomBezier )
+Q3PointArray KompareConnectWidget::makeConnectPoly( const Q3PointArray& topBezier, const Q3PointArray& bottomBezier )
 {
-	QPointArray poly( topBezier.size() + bottomBezier.size() );
+	Q3PointArray poly( topBezier.size() + bottomBezier.size() );
 	for( uint i = 0; i < topBezier.size(); i++ )
 		poly.setPoint( i, topBezier.point( i ) );
 	for( uint i = 0; i < bottomBezier.size(); i++ )
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompareconnectwidget.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareconnectwidget.h
--- kdesdk-3.96.2-orig/kompare/komparepart/kompareconnectwidget.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareconnectwidget.h	2007-12-10 11:35:05.000000000 +0100
@@ -22,8 +22,14 @@
 #ifndef KOMPARECONNECTWIDGET_H
 #define KOMPARECONNECTWIDGET_H
 
-#include "kompare_qsplitter.h"
-#include <qwidget.h>
+#include <QWidget>
+#include <QSplitter>
+#include <Q3PointArray>
+//Added by qt3to4:
+#include <QPaintEvent>
+#include <QMouseEvent>
+#include <Q3VBoxLayout>
+#include <QLabel>
 
 namespace Diff2 {
 class DiffModel;
@@ -37,8 +43,7 @@
 	Q_OBJECT
 
 public:
-	KompareConnectWidget( KompareListView* left, KompareListView* right,
-	      ViewSettings* settings, QWidget* parent, const char* name = 0 );
+	KompareConnectWidget( ViewSettings* settings, QWidget* parent, const char* name = 0 );
 	~KompareConnectWidget();
 
 public slots:
@@ -52,16 +57,13 @@
 
 protected:
 	void paintEvent( QPaintEvent* e );
-	QPointArray makeTopBezier( int tl, int tr );
-	QPointArray makeBottomBezier( int bl, int br );
-	QPointArray makeConnectPoly( const QPointArray& topBezier, const QPointArray& bottomBezier );
+	Q3PointArray makeTopBezier( int tl, int tr );
+	Q3PointArray makeBottomBezier( int bl, int br );
+	Q3PointArray makeConnectPoly( const Q3PointArray& topBezier, const Q3PointArray& bottomBezier );
 
 private:
 	ViewSettings*             m_settings;
 
-	KompareListView*          m_leftView;
-	KompareListView*          m_rightView;
-
 	const Diff2::DiffModel*   m_selectedModel;
 	const Diff2::Difference*  m_selectedDifference;
 };
@@ -70,8 +72,7 @@
 {
 	Q_OBJECT
 public:
-	KompareConnectWidgetFrame( KompareListView* left, KompareListView* right,
-	      ViewSettings* settings, KompareSplitter* parent, const char* name = 0 );
+	KompareConnectWidgetFrame( ViewSettings* settings, KompareSplitter* parent, const char* name = 0 );
 	~KompareConnectWidgetFrame();
 	
 	QSize sizeHint() const;
@@ -82,14 +83,16 @@
 	// stop the parent QSplitterHandle painting
 	void paintEvent( QPaintEvent* /* e */ ) { }
 
+#if 0
 	void mouseMoveEvent( QMouseEvent * );
 	void mousePressEvent( QMouseEvent * );
 	void mouseReleaseEvent( QMouseEvent * );
+#endif
 
 private:
 	KompareConnectWidget      m_wid;
 	QLabel                    m_label;
-	QVBoxLayout               m_layout;
+	Q3VBoxLayout               m_layout;
 };
 
 #endif
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparelistview.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparelistview.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/komparelistview.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparelistview.cpp	2007-12-05 00:31:52.000000000 +0100
@@ -19,10 +19,15 @@
 **
 ***************************************************************************/
 
-#include <qheader.h>
+#include <q3header.h>
 #include <qpainter.h>
 #include <qregexp.h>
 #include <qtimer.h>
+//Added by qt3to4:
+#include <Q3Frame>
+#include <QResizeEvent>
+#include <QMouseEvent>
+#include <QWheelEvent>
 
 #include <kdebug.h>
 #include <kglobal.h>
@@ -49,16 +54,16 @@
                                             ViewSettings* settings,
                                             KompareSplitter* parent,
                                             const char* name ):
-	QFrame ( parent, name ),
+	Q3Frame ( parent, name ),
 	m_view ( isSource, settings, this, name ),
 	m_label ( isSource?"Source":"Dest", this ),
 	m_layout ( this )
 {
 	setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored) );
 	m_label.setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
-	QFrame *bottomLine = new QFrame(this);
-	bottomLine->setFrameShape(QFrame::HLine);
-	bottomLine->setFrameShadow ( QFrame::Plain );
+	Q3Frame *bottomLine = new Q3Frame(this);
+	bottomLine->setFrameShape(Q3Frame::HLine);
+	bottomLine->setFrameShadow ( Q3Frame::Plain );
 	bottomLine->setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) );
 	bottomLine->setFixedHeight(1);
 	m_label.setMargin(3);
@@ -99,18 +104,19 @@
 KompareListView::KompareListView( bool isSource,
                                   ViewSettings* settings,
                                   QWidget* parent, const char* name ) :
-	K3ListView( parent, name ),
+	K3ListView( parent ),
 	m_isSource( isSource ),
 	m_settings( settings ),
 	m_scrollId( -1 ),
 	m_selectedModel( 0 ),
 	m_selectedDifference( 0 )
 {
+	setObjectName( name );
 	header()->hide();
 	addColumn( "Line Number", 0 );
 	addColumn( "Main" );
 	addColumn( "Blank" );
-	setColumnAlignment( COL_LINE_NO, AlignRight );
+	setColumnAlignment( COL_LINE_NO, Qt::AlignRight );
 	setAllColumnsShowFocus( true );
 	setRootIsDecorated( false );
 	setSorting( -1 );
@@ -119,10 +125,10 @@
 	setColumnWidthMode( COL_LINE_NO, Maximum );
 	setColumnWidthMode( COL_MAIN, Maximum );
 	setResizeMode( LastColumn );
-	setFrameStyle( QFrame::NoFrame );
-	setVScrollBarMode( QScrollView::AlwaysOff );
-	setHScrollBarMode( QScrollView::AlwaysOff );
-	setFocusPolicy( QWidget::NoFocus );
+	setFrameStyle( Q3Frame::NoFrame );
+	setVScrollBarMode( Q3ScrollView::AlwaysOff );
+	setHScrollBarMode( Q3ScrollView::AlwaysOff );
+	setFocusPolicy( Qt::NoFocus );
 	setFont( m_settings->m_font );
 	setSpaces( m_settings->m_tabToNumberOfSpaces );
 	setFocusProxy( parent->parentWidget() );
@@ -139,7 +145,7 @@
 
 int KompareListView::firstVisibleDifference()
 {
-	QListViewItem* item = itemAt( QPoint( 0, 0 ) );
+	Q3ListViewItem* item = itemAt( QPoint( 0, 0 ) );
 
 	if( item == 0 )
 	{
@@ -161,7 +167,7 @@
 
 int KompareListView::lastVisibleDifference()
 {
-	QListViewItem* item = itemAt( QPoint( 0, visibleHeight() - 1 ) );
+	Q3ListViewItem* item = itemAt( QPoint( 0, visibleHeight() - 1 ) );
 
 	if( item == 0 )
 	{
@@ -184,7 +190,7 @@
 
 QRect KompareListView::itemRect( int i )
 {
-	QListViewItem* item = itemAtIndex( i );
+	Q3ListViewItem* item = itemAtIndex( i );
 	int x = 0;
 	int y = itemPos( item );
 	int vx, vy;
@@ -387,7 +393,7 @@
 
 void KompareListView::slotApplyAllDifferences( bool apply )
 {
-	QPtrDictIterator<KompareListViewDiffItem> it ( m_itemDict );
+	Q3PtrDictIterator<KompareListViewDiffItem> it ( m_itemDict );
 	for( ; it.current(); ++it )
 		it.current()->applyDifference( apply );
 	repaint();
@@ -421,27 +427,27 @@
 }
 
 KompareListViewItem::KompareListViewItem( KompareListView* parent )
-	: QListViewItem( parent ),
+	: Q3ListViewItem( parent ),
 	m_scrollId( 0 )
 {
 //	kDebug(8104) << "Created KompareListViewItem with scroll id " << m_scrollId << endl;
 }
 
 KompareListViewItem::KompareListViewItem( KompareListView* parent, KompareListViewItem* after )
-	: QListViewItem( parent, after ),
+	: Q3ListViewItem( parent, after ),
 	m_scrollId( after->scrollId() + after->maxHeight() )
 {
 //	kDebug(8104) << "Created KompareListViewItem with scroll id " << m_scrollId << endl;
 }
 
 KompareListViewItem::KompareListViewItem( KompareListViewItem* parent )
-	: QListViewItem( parent ),
+	: Q3ListViewItem( parent ),
 	m_scrollId( 0 )
 {
 }
 
 KompareListViewItem::KompareListViewItem( KompareListViewItem* parent, KompareListViewItem* /*after*/ )
-	: QListViewItem( parent ),
+	: Q3ListViewItem( parent ),
 	m_scrollId( 0 )
 {
 }
@@ -516,7 +522,7 @@
 {
 	kDebug(8104) << "KompareListViewDiffItem::setSelected( " << b << " )" << endl;
 	KompareListViewItem::setSelected( b );
-	QListViewItem* item = m_sourceItem->isVisible() ?
+	Q3ListViewItem* item = m_sourceItem->isVisible() ?
 	                      m_sourceItem->firstChild() :
 	                      m_destItem->firstChild();
 	while( item && item->isVisible() ) {
@@ -633,8 +639,8 @@
 		int offset = listView()->itemMargin();
 		unsigned int prevValue = 0;
 		int chunkWidth;
-		QBrush changeBrush( bg, Dense3Pattern );
-		QBrush normalBrush( bg, SolidPattern );
+		QBrush changeBrush( bg, Qt::Dense3Pattern );
+		QBrush normalBrush( bg, Qt::SolidPattern );
 		QBrush brush;
 
 		if ( m_text->string().isEmpty() )
@@ -732,7 +738,7 @@
 {
 	if ( column == COL_MAIN )
 	{
-		QBrush normalBrush( bg, SolidPattern );
+		QBrush normalBrush( bg, Qt::SolidPattern );
 		p->fillRect( 0, 0, width, height(), normalBrush );
 	}
 }
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparelistview.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparelistview.h
--- kdesdk-3.96.2-orig/kompare/komparepart/komparelistview.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparelistview.h	2007-12-04 22:01:53.000000000 +0100
@@ -22,10 +22,17 @@
 #ifndef KOMPARELISTVIEW_H
 #define KOMPARELISTVIEW_H
 
-#include <qptrlist.h>
-#include <qptrdict.h>
+#include <Q3PtrList>
+#include <Q3ValueList>
+#include <Q3PtrDict>
 #include <qlabel.h>
 #include <qlayout.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QWheelEvent>
+#include <Q3VBoxLayout>
+#include <QMouseEvent>
+#include <Q3Frame>
 
 #include <k3listview.h>
 
@@ -91,8 +98,8 @@
 	void contentsMouseMoveEvent ( QMouseEvent * ) {};
 
 private:
-	QValueList<KompareListViewDiffItem*> m_items;
-	QPtrDict<KompareListViewDiffItem> m_itemDict;
+	Q3ValueList<KompareListViewDiffItem*> m_items;
+	Q3PtrDict<KompareListViewDiffItem> m_itemDict;
 	bool                              m_isSource;
 	ViewSettings*                     m_settings;
 	int                               m_scrollId;
@@ -102,7 +109,7 @@
 	QString                           m_spaces;
 };
 
-class KompareListViewFrame : public QFrame
+class KompareListViewFrame : public Q3Frame
 {
 	Q_OBJECT
 	
@@ -117,10 +124,10 @@
 private:
 	KompareListView      m_view;
 	QLabel               m_label;
-	QVBoxLayout          m_layout;
+	Q3VBoxLayout          m_layout;
 };
 
-class KompareListViewItem : public QListViewItem
+class KompareListViewItem : public Q3ListViewItem
 {
 public:
 	KompareListViewItem( KompareListView* parent );
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompare_part.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_part.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/kompare_part.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_part.cpp	2007-12-05 03:32:59.000000000 +0100
@@ -19,21 +19,20 @@
 **
 ***************************************************************************/
 
-#include "kompare_qsplitter.h" // make sure we get there first
-
 #include <qlayout.h>
 #include <qwidget.h>
 
 #include <kaction.h>
+#include <kactioncollection.h>
 #include <kapplication.h>
 #include <kdebug.h>
-#include <kfiletreeview.h>
+#include <k3filetreeview.h>
 #include <kfiledialog.h>
 #include <klocale.h>
 #include <kmessagebox.h>
 #include <kstandardaction.h>
 #include <kcomponentdata.h>
-#include <ktempfile.h>
+#include <ktemporaryfile.h>
 #include <kparts/genericfactory.h>
 //#include <ktempdir.h>
 
@@ -57,9 +56,8 @@
 ViewSettings* KomparePart::m_viewSettings = 0L;
 DiffSettings* KomparePart::m_diffSettings = 0L;
 
-KomparePart::KomparePart( QWidget *parentWidget, const char *widgetName,
-                          QObject *parent, const char *name, const QStringList & /*args*/ ) :
-	KParts::ReadWritePart(parent, name),
+KomparePart::KomparePart( QWidget *parentWidget, QObject *parent, const QStringList & /*args*/ ) :
+	KParts::ReadWritePart(parent),
 	m_tempDiff( 0 ),
 	m_info()
 {
@@ -73,7 +71,7 @@
 		m_diffSettings = new DiffSettings( 0 );
 	}
 
-	readProperties( KGlobal::config() );
+	readProperties( KGlobal::config().data() );
 
 	// This creates the "Model creator" and connects the signals and slots
 	m_modelList = new Diff2::KompareModelList( m_diffSettings, m_info, this, "komparemodellist" );
@@ -115,9 +113,11 @@
 	         this, SIGNAL(applyAllDifferences(bool)) );
 	connect( m_modelList, SIGNAL(applyDifference(const Diff2::Difference*, bool)),
 	         this, SIGNAL(applyDifference(const Diff2::Difference*, bool)) );
+	connect( m_modelList, SIGNAL(diffString(const QString&)),
+	         this, SIGNAL(diffString(const QString&)) );
 
 	// This creates the splitterwidget and connects the signals and slots
-	m_splitter = new KompareSplitter ( m_viewSettings, parentWidget, widgetName );
+	m_splitter = new KompareSplitter ( m_viewSettings, parentWidget );
 
 	connect( m_modelList, SIGNAL(setSelection(const Diff2::DiffModel*, const Diff2::Difference*)),
 	         m_splitter,  SLOT(slotSetSelection(const Diff2::DiffModel*, const Diff2::Difference*)) );
@@ -163,18 +163,15 @@
 {
 	// create our actions
 
-	m_saveAll         = new KAction( i18n("Save &All"), "save_all", 0,
-	                                 this, SLOT(saveAll()),
-	                                 actionCollection(), "file_save_all" );
-	m_saveDiff        = new KAction( i18n("Save .&diff..."), 0,
-	                                 this, SLOT(saveDiff()),
-	                                 actionCollection(), "file_save_diff" );
-	m_swap            = new KAction( i18n( "Swap Source with Destination" ), 0,
-	                                 this, SLOT(slotSwap()),
-	                                 actionCollection(), "file_swap" );
-	m_diffStats       = new KAction( i18n( "Show Statistics" ), 0,
-	                                 this, SLOT(slotShowDiffstats()),
-	                                 actionCollection(), "file_diffstats" );
+	m_saveAll = actionCollection()->addAction("file_save_all", this, SLOT(saveAll()));
+	m_saveAll->setIcon(KIcon("save_all"));
+	m_saveAll->setText(i18n("Save &All"));
+	m_saveDiff = actionCollection()->addAction("file_save_diff", this, SLOT(saveDiff()));
+	m_saveDiff->setText(i18n("Save .&diff..."));
+	m_swap = actionCollection()->addAction("file_swap", this, SLOT(slotSwap()));
+	m_swap->setText(i18n("Swap Source with Destination"));
+	m_diffStats = actionCollection()->addAction("file_diffstats", this, SLOT(slotShowDiffstats()));
+	m_diffStats->setText(i18n("Show Statistics"));
 
 	KStandardAction::preferences(this, SLOT(optionsPreferences()), actionCollection());
 }
@@ -407,7 +404,7 @@
 {
 	// This is called from openURL
 	// This is a little inefficient but i will do it anyway
-	openDiff( m_url );
+	openDiff( url() );
 	return true;
 }
 
@@ -422,29 +419,31 @@
 
 void KomparePart::saveDiff()
 {
-	KDialogBase* dlg = new KDialogBase( widget(), "save_options",
-	                                    true /* modal */, i18n("Diff Options"),
-	                                    KDialogBase::Ok|KDialogBase::Cancel );
+	KDialog* dlg = new KDialog( widget() );
+	dlg->setName( "save_options" );
+	dlg->setModal( true );
+	dlg->setWindowTitle( i18n("Diff Options") );
+	dlg->setButtons( KDialog::Ok|KDialog::Cancel );
 	KompareSaveOptionsWidget* w = new KompareSaveOptionsWidget(
 	                                             m_info.localSource,
 	                                             m_info.localDestination,
 	                                             m_diffSettings, dlg );
 	dlg->setMainWidget( w );
-	dlg->setButtonOK( KStandardGuiItem::save() );
+	dlg->setButtonGuiItem( KDialog::Ok, KStandardGuiItem::save() );
 
 	if( dlg->exec() ) {
 		w->saveOptions();
 		KSharedConfig::Ptr config = componentData().config();
-		saveProperties( config );
+		saveProperties( config.data() );
 		config->sync();
 
 		while ( 1 )
 		{
-			KUrl url = KFileDialog::getSaveURL( m_info.destination.url(),
+			KUrl url = KFileDialog::getSaveUrl( m_info.destination.url(),
 			              i18n("*.diff *.dif *.patch|Patch Files"), widget(), i18n( "Save .diff" ) );
 			if ( KIO::NetAccess::exists( url, KIO::NetAccess::DestinationSide, widget() ) )
 			{
-				int result = KMessageBox::warningYesNoCancel( widget(), i18n("The file exists or is write-protected; do you want to overwrite it?"), i18n("File Exists"), i18n("Overwrite"), i18n("Do Not Overwrite") );
+				int result = KMessageBox::warningYesNoCancel( widget(), i18n("The file exists or is write-protected; do you want to overwrite it?"), i18n("File Exists"), KGuiItem(i18n("Overwrite")), KGuiItem(i18n("Do Not Overwrite")) );
 				if ( result == KMessageBox::Cancel )
 				{
 					break;
@@ -759,3 +758,5 @@
 }
 
 #include "kompare_part.moc"
+
+K_EXPORT_PLUGIN( KomparePartFactory )
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompare_part.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_part.h
--- kdesdk-3.96.2-orig/kompare/komparepart/kompare_part.h	2007-05-03 10:40:14.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_part.h	2007-12-05 03:37:23.000000000 +0100
@@ -31,10 +31,11 @@
 
 class QWidget;
 
-class KTempFile;
+class KTemporaryFile;
 class KToggleAction;
 class KUrl;
 class KAboutData;
+class KAction;
 
 namespace Diff2 {
 class Difference;
@@ -64,8 +65,7 @@
 	/**
 	* Default constructor
 	*/
-	KomparePart( QWidget *parentWidget, const char *widgetName,
-	             QObject *parent, const char *name, const QStringList & /*args*/);
+	KomparePart( QWidget *parentWidget, QObject *parent, const QStringList & /*args*/);
 
 	/**
 	* Destructor
@@ -167,6 +167,7 @@
 	void kompareInfo( Kompare::Info* info );
 	void setStatusBarModelInfo( int modelIndex, int differenceIndex, int modelCount, int differenceCount, int appliedCount );
 //	void setStatusBarText( const QString& text );
+	void diffString(const QString&);
 
 protected:
 	/**
@@ -215,7 +216,7 @@
 	KAction*                 m_swap;
 	KAction*                 m_diffStats;
 
-	KTempFile*               m_tempDiff;
+	KTemporaryFile*               m_tempDiff;
 
 	struct Kompare::Info     m_info;
 };
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompareprefdlg.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareprefdlg.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/kompareprefdlg.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareprefdlg.cpp	2007-12-06 03:00:39.000000000 +0100
@@ -17,8 +17,6 @@
 **
 ***************************************************************************/
 
-#include <qvbox.h>
-
 #include <kdebug.h>
 #include <kiconloader.h>
 #include <klocale.h>
@@ -30,22 +28,36 @@
 
 // implementation
 
-KomparePrefDlg::KomparePrefDlg( ViewSettings* viewSets, DiffSettings* diffSets ) : KDialogBase( IconList, i18n( "Preferences" ), Help|Default|Ok|Apply|Cancel, Ok, 0, 0, true, true )
+KomparePrefDlg::KomparePrefDlg( ViewSettings* viewSets, DiffSettings* diffSets ) : KPageDialog( 0 )
 {
+	setFaceType( KPageDialog::List );
+	setWindowTitle( i18n( "Preferences" ) );
+	setButtons( Help|Default|Ok|Apply|Cancel );
+	setDefaultButton( Ok );
+	setModal( true );
+	showButtonSeparator( true );
+
 	// ok i need some stuff in that pref dlg...
-	setIconListAllVisible(true);
+	//setIconListAllVisible(true);
 
-	QVBox* frame;
-	frame = addVBoxPage( i18n( "View" ), i18n( "View Settings" ), UserIcon( "diff_view" ) );
-	m_viewPage = new ViewPage( frame );
+	m_viewPage = new ViewPage();
+	KPageWidgetItem *item = addPage( m_viewPage, i18n( "View" ) );
+	item->setHeader( i18n( "View Settings" ) );
 	m_viewPage->setSettings( viewSets );
 
-	frame = addVBoxPage( i18n( "Diff" ), i18n( "Diff Settings" ), UserIcon( "diff_specific" ) );
-	m_diffPage = new DiffPage( frame );
+	m_diffPage = new DiffPage();
+	item = addPage( m_diffPage, i18n( "Diff" ) );
+	item->setHeader( i18n( "Diff Settings" ) );
 	m_diffPage->setSettings( diffSets );
 
 //	frame = addVBoxPage( i18n( "" ), i18n( "" ), UserIcon( "" ) );
 
+	connect( this, SIGNAL(defaultClicked()), SLOT(slotDefault()) );
+	connect( this, SIGNAL(helpClicked()), SLOT(slotHelp()) );
+	connect( this, SIGNAL(applyClicked()), SLOT(slotApply()) );
+	connect( this, SIGNAL(okClicked()), SLOT(slotOk()) );
+	connect( this, SIGNAL(cancelClicked()), SLOT(slotCancel()) );
+
 	adjustSize();
 }
 
@@ -90,7 +102,7 @@
 	m_viewPage->apply();
 	m_diffPage->apply();
 
-	KDialogBase::slotOk();
+	//accept();
 }
 
 /** No descriptions */
@@ -100,7 +112,7 @@
 	m_viewPage->restore();
 	m_diffPage->restore();
 
-	KDialogBase::slotCancel();
+	//reject();
 }
 
 #include "kompareprefdlg.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompareprefdlg.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareprefdlg.h
--- kdesdk-3.96.2-orig/kompare/komparepart/kompareprefdlg.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompareprefdlg.h	2007-12-04 21:53:23.000000000 +0100
@@ -20,14 +20,14 @@
 #ifndef KOMPAREPREFDLG_H
 #define KOMPAREPREFDLG_H
 
-#include <kdialogbase.h>
+#include <kpagedialog.h>
 
 class DiffPage;
 class DiffSettings;
 class ViewPage;
 class ViewSettings;
 
-class KomparePrefDlg : public KDialogBase
+class KomparePrefDlg : public KPageDialog
 {
 Q_OBJECT
 public:
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/kompare_qsplitter.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_qsplitter.h
--- kdesdk-3.96.2-orig/kompare/komparepart/kompare_qsplitter.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/kompare_qsplitter.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-**
-** Definition of QSplitter class
-**
-**  Created : 980105
-**
-** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
-**
-** This file is part of the widgets module of the Qt GUI Toolkit.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-**********************************************************************/
-
-#ifndef QSPLITTER_H
-#define QSPLITTER_H
-
-#ifndef QT_H
-#include "qframe.h"
-#include "qvaluelist.h"
-#endif // QT_H
-
-#ifndef QT_NO_SPLITTER
-
-
-//class QSplitterHandle;
-class QSplitterLayoutStruct;
-class QTextStream;
-
-class QSplitterPrivate
-{
-public:
-    QSplitterPrivate()
-	: opaque( FALSE ), firstShow( TRUE ), childrenCollapsible( TRUE ),
-	  handleWidth( 0 ) { }
-
-    QPtrList<QSplitterLayoutStruct> list;
-    bool opaque : 8;
-    bool firstShow : 8;
-    bool childrenCollapsible : 8;
-    int handleWidth;
-};
-
-class Q_EXPORT QSplitter : public QFrame
-{
-    Q_OBJECT
-    Q_PROPERTY( Orientation orientation READ orientation WRITE setOrientation )
-    Q_PROPERTY( bool opaqueResize READ opaqueResize WRITE setOpaqueResize )
-    Q_PROPERTY( int handleWidth READ handleWidth WRITE setHandleWidth )
-    Q_PROPERTY( bool childrenCollapsible READ childrenCollapsible WRITE setChildrenCollapsible )
-
-public:
-    // ### Qt 4.0: remove Auto from public API
-    enum ResizeMode { Stretch, KeepSize, FollowSizeHint, Auto };
-
-    QSplitter( QWidget* parent = 0, const char* name = 0 );
-    QSplitter( Orientation, QWidget* parent = 0, const char* name = 0 );
-    ~QSplitter();
-
-    virtual void setOrientation( Orientation );
-    Orientation orientation() const { return orient; }
-
-    // ### Qt 4.0: make setChildrenCollapsible() and setCollapsible() virtual
-
-    void setChildrenCollapsible( bool );
-    bool childrenCollapsible() const;
-
-    void setCollapsible( QWidget *w, bool );
-    virtual void setResizeMode( QWidget *w, ResizeMode );
-    virtual void setOpaqueResize( bool = TRUE );
-    bool opaqueResize() const;
-
-    void moveToFirst( QWidget * );
-    void moveToLast( QWidget * );
-
-    void refresh() { recalc( TRUE ); }
-    QSize sizeHint() const;
-    QSize minimumSizeHint() const;
-
-    QValueList<int> sizes() const;
-    void setSizes( QValueList<int> );
-
-    int handleWidth() const;
-    void setHandleWidth( int );
-
-protected:
-    void childEvent( QChildEvent * );
-
-    bool event( QEvent * );
-    void resizeEvent( QResizeEvent * );
-
-    int idAfter( QWidget* ) const;
-
-    void moveSplitter( QCOORD pos, int id );
-    virtual void drawSplitter( QPainter*, QCOORD x, QCOORD y,
-			       QCOORD w, QCOORD h );
-    void styleChange( QStyle& );
-    int adjustPos( int, int );
-    virtual void setRubberband( int );
-    void getRange( int id, int *, int * );
-
-public: // private (:
-    enum { DefaultResizeMode = 3 };
-
-    void init();
-    void recalc( bool update = FALSE );
-    void doResize();
-    void storeSizes();
-    void getRange( int id, int *, int *, int *, int * );
-    void addContribution( int, int *, int *, bool );
-    int adjustPos( int, int, int *, int *, int *, int * );
-    bool collapsible( QSplitterLayoutStruct * );
-    void processChildEvents();
-    QSplitterLayoutStruct *findWidget( QWidget * );
-    QSplitterLayoutStruct *addWidget( QWidget *, bool prepend = FALSE );
-    void recalcId();
-    void doMove( bool backwards, int pos, int id, int delta, bool upLeft,
-		 bool mayCollapse );
-    void setGeo( QWidget *w, int pos, int size, bool splitterMoved );
-    int findWidgetJustBeforeOrJustAfter( int id, int delta, int &collapsibleSize );
-    void updateHandles();
-
-    inline QCOORD pick( const QPoint &p ) const
-    { return orient == Horizontal ? p.x() : p.y(); }
-    inline QCOORD pick( const QSize &s ) const
-    { return orient == Horizontal ? s.width() : s.height(); }
-
-    inline QCOORD trans( const QPoint &p ) const
-    { return orient == Vertical ? p.x() : p.y(); }
-    inline QCOORD trans( const QSize &s ) const
-    { return orient == Vertical ? s.width() : s.height(); }
-
-    QSplitterPrivate *d;
-
-    Orientation orient;
-    friend class QSplitterHandle;
-
-#ifndef QT_NO_TEXTSTREAM
-// moc doesn't like these.
-//    friend Q_EXPORT QTextStream& operator<<( QTextStream&, const QSplitter& );
-//    friend Q_EXPORT QTextStream& operator>>( QTextStream&, QSplitter& );
-#endif
-
-public:
-#if defined(Q_DISABLE_COPY)
-    QSplitter( const QSplitter & );
-    QSplitter& operator=( const QSplitter & );
-#endif
-};
-
-#ifndef QT_NO_TEXTSTREAM
-Q_EXPORT QTextStream& operator<<( QTextStream&, const QSplitter& );
-Q_EXPORT QTextStream& operator>>( QTextStream&, QSplitter& );
-#endif
-
-class QSplitterHandle : public QWidget
-{
-    Q_OBJECT
-public:
-    QSplitterHandle( Orientation o,
-		     QSplitter *parent, const char* name=0 );
-    void setOrientation( Orientation o );
-    Orientation orientation() const { return orient; }
-
-    bool opaque() const { return s->opaqueResize(); }
-
-    QSize sizeHint() const;
-
-    int id() const { return myId; } // d->list.at(id())->wid == this
-    void setId( int i ) { myId = i; }
-
-protected:
-    void paintEvent( QPaintEvent * );
-    void mouseMoveEvent( QMouseEvent * );
-    void mousePressEvent( QMouseEvent * );
-    void mouseReleaseEvent( QMouseEvent * );
-
-public: // private (:
-    Orientation orient;
-    bool opaq;
-    int myId;
-
-    QSplitter *s;
-};
-
-const uint Default = 2;
-
-class QSplitterLayoutStruct : public Qt
-{
-public:
-    QCOORD sizer;
-    uint isHandle : 1;
-    uint collapsible : 2;
-    uint resizeMode : 2;
-    QWidget *wid;
-
-    QSplitterLayoutStruct()
-	: sizer( -1 ), collapsible( Default ) { }
-    QCOORD getSizer( Orientation orient );
-};
-
-#endif // QT_NO_SPLITTER
-
-#endif // QSPLITTER_H
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.cpp	2007-12-04 22:20:07.000000000 +0100
@@ -0,0 +1,31 @@
+#include "komparesaveoptionsbase.h"
+
+#include <qvariant.h>
+/*
+ *  Constructs a KompareSaveOptionsBase as a child of 'parent', with the
+ *  name 'name' and widget flags set to 'f'.
+ */
+KompareSaveOptionsBase::KompareSaveOptionsBase(QWidget* parent, const char* name, Qt::WindowFlags fl)
+    : QWidget(parent, name, fl)
+{
+    setupUi(this);
+
+}
+
+/*
+ *  Destroys the object and frees any allocated resources
+ */
+KompareSaveOptionsBase::~KompareSaveOptionsBase()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ *  Sets the strings of the subwidgets using the current
+ *  language.
+ */
+void KompareSaveOptionsBase::languageChange()
+{
+    retranslateUi(this);
+}
+
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.h
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.h	1970-01-01 01:00:00.000000000 +0100
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.h	2007-12-04 22:24:35.000000000 +0100
@@ -0,0 +1,21 @@
+#ifndef KOMPARESAVEOPTIONSBASE_H
+#define KOMPARESAVEOPTIONSBASE_H
+
+#include <qvariant.h>
+
+#include "ui_komparesaveoptionsbase.h"
+
+class KompareSaveOptionsBase : public QWidget, public Ui::KompareSaveOptionsBase
+{
+    Q_OBJECT
+
+public:
+    KompareSaveOptionsBase(QWidget* parent = 0, const char* name = 0, Qt::WindowFlags fl = 0);
+    ~KompareSaveOptionsBase();
+
+protected slots:
+    virtual void languageChange();
+
+};
+
+#endif // KOMPARESAVEOPTIONSBASE_H
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.ui kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.ui
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionsbase.ui	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionsbase.ui	2007-12-04 22:20:31.000000000 +0100
@@ -1,336 +1,295 @@
-<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
-<class>KompareSaveOptionsBase</class>
-<widget class="QWidget">
-    <property name="name">
-        <cstring>KompareSaveOptionsBase</cstring>
+<ui version="4.0" stdsetdef="1" >
+  <author></author>
+  <comment></comment>
+  <exportmacro></exportmacro>
+  <class>KompareSaveOptionsBase</class>
+  <widget class="QWidget" name="KompareSaveOptionsBase" >
+    <property name="geometry" >
+      <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>558</width>
+        <height>399</height>
+      </rect>
     </property>
-    <property name="geometry">
-        <rect>
-            <x>0</x>
-            <y>0</y>
-            <width>558</width>
-            <height>399</height>
-        </rect>
-    </property>
-    <grid>
-        <property name="name">
-            <cstring>unnamed</cstring>
-        </property>
-        <property name="margin">
-            <number>0</number>
-        </property>
-        <property name="spacing">
-            <number>6</number>
-        </property>
-        <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2">
-            <property name="name">
-                <cstring>GroupBox2</cstring>
-            </property>
-            <property name="sizePolicy">
-                <sizepolicy>
-                    <hsizetype>1</hsizetype>
-                    <vsizetype>1</vsizetype>
+    <layout class="QGridLayout" >
+      <property name="margin" >
+        <number>0</number>
+      </property>
+      <property name="spacing" >
+        <number>6</number>
+      </property>
+      <item rowspan="1" row="1" column="0" colspan="2" >
+        <widget class="Q3GroupBox" name="GroupBox2" >
+          <property name="sizePolicy" >
+            <sizepolicy>
+              <hsizetype>1</hsizetype>
+              <vsizetype>1</vsizetype>
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+            </sizepolicy>
+          </property>
+          <property name="frameShape" >
+            <enum>Q3GroupBox::Panel</enum>
+          </property>
+          <property name="title" >
+            <string>Run Diff In</string>
+          </property>
+          <layout class="QHBoxLayout" >
+            <property name="margin" >
+              <number>11</number>
+            </property>
+            <property name="spacing" >
+              <number>6</number>
+            </property>
+            <item>
+              <widget class="KUrlRequester" name="m_directoryRequester" >
+                <property name="sizePolicy" >
+                  <sizepolicy>
+                    <hsizetype>7</hsizetype>
+                    <vsizetype>5</vsizetype>
                     <horstretch>0</horstretch>
                     <verstretch>0</verstretch>
-                </sizepolicy>
-            </property>
-            <property name="frameShape">
-                <enum>Panel</enum>
-            </property>
-            <property name="title">
-                <string>Run Diff In</string>
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>11</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="KUrlRequester">
-                    <property name="name">
-                        <cstring>m_directoryRequester</cstring>
-                    </property>
-                    <property name="sizePolicy">
-                        <sizepolicy>
-                            <hsizetype>7</hsizetype>
-                            <vsizetype>5</vsizetype>
-                            <horstretch>0</horstretch>
-                            <verstretch>0</verstretch>
-                        </sizepolicy>
-                    </property>
-                </widget>
-            </hbox>
+                  </sizepolicy>
+                </property>
+              </widget>
+            </item>
+          </layout>
         </widget>
-        <widget class="QGroupBox" row="2" column="0" rowspan="1" colspan="2">
-            <property name="name">
-                <cstring>m_CommandLineGB</cstring>
-            </property>
-            <property name="sizePolicy">
-                <sizepolicy>
-                    <hsizetype>3</hsizetype>
-                    <vsizetype>3</vsizetype>
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                </sizepolicy>
-            </property>
-            <property name="frameShape">
-                <enum>Panel</enum>
-            </property>
-            <property name="title">
-                <string>Command Line</string>
-            </property>
-            <property name="alignment">
-                <set>AlignVCenter|AlignLeft</set>
-            </property>
-            <property name="hAlign" stdset="0">
-            </property>
-            <property name="vAlign" stdset="0">
-            </property>
-            <hbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>11</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QLabel">
-                    <property name="name">
-                        <cstring>m_CommandLineLabel</cstring>
-                    </property>
-                    <property name="text">
-                        <string>cd dir &amp;&amp; diff -udHprNa -- source destination</string>
-                    </property>
-                </widget>
-            </hbox>
+      </item>
+      <item rowspan="1" row="2" column="0" colspan="2" >
+        <widget class="Q3GroupBox" name="m_CommandLineGB" >
+          <property name="sizePolicy" >
+            <sizepolicy>
+              <hsizetype>3</hsizetype>
+              <vsizetype>3</vsizetype>
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+            </sizepolicy>
+          </property>
+          <property name="frameShape" >
+            <enum>Q3GroupBox::Panel</enum>
+          </property>
+          <property name="title" >
+            <string>Command Line</string>
+          </property>
+          <property name="alignment" >
+            <set>Qt::AlignVCenter|Qt::AlignLeft</set>
+          </property>
+          <layout class="QHBoxLayout" >
+            <property name="margin" >
+              <number>11</number>
+            </property>
+            <property name="spacing" >
+              <number>6</number>
+            </property>
+            <item>
+              <widget class="QLabel" name="m_CommandLineLabel" >
+                <property name="text" >
+                  <string>cd dir &amp;&amp; diff -udHprNa -- source destination</string>
+                </property>
+                <property name="wordWrap" >
+                  <bool>false</bool>
+                </property>
+              </widget>
+            </item>
+          </layout>
         </widget>
-        <widget class="QButtonGroup" row="0" column="1">
-            <property name="name">
-                <cstring>m_OptionsGB</cstring>
-            </property>
-            <property name="title">
-                <string>Options</string>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>11</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_SmallerChangesCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Look for smaller changes</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_LargeFilesCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Optimize for large files</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_IgnoreCaseCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Ignore changes in case</string>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_ExpandTabsCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Expand tabs to spaces</string>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_IgnoreEmptyLinesCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Ignore added or removed empty lines</string>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_IgnoreWhiteSpaceCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Ignore changes in whitespace</string>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_FunctionNamesCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Show function names</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_RecursiveCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Compare folders recursively</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QCheckBox">
-                    <property name="name">
-                        <cstring>m_NewFilesCB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Treat new files as empty</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                    <property name="tristate">
-                        <bool>false</bool>
-                    </property>
-                </widget>
-            </vbox>
+      </item>
+      <item row="0" column="1" >
+        <widget class="Q3ButtonGroup" name="m_OptionsGB" >
+          <property name="title" >
+            <string>Options</string>
+          </property>
+          <layout class="QVBoxLayout" >
+            <property name="margin" >
+              <number>11</number>
+            </property>
+            <property name="spacing" >
+              <number>6</number>
+            </property>
+            <item>
+              <widget class="QCheckBox" name="m_SmallerChangesCB" >
+                <property name="text" >
+                  <string>Look for smaller changes</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_LargeFilesCB" >
+                <property name="text" >
+                  <string>Optimize for large files</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_IgnoreCaseCB" >
+                <property name="text" >
+                  <string>Ignore changes in case</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_ExpandTabsCB" >
+                <property name="text" >
+                  <string>Expand tabs to spaces</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_IgnoreEmptyLinesCB" >
+                <property name="text" >
+                  <string>Ignore added or removed empty lines</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_IgnoreWhiteSpaceCB" >
+                <property name="text" >
+                  <string>Ignore changes in whitespace</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_FunctionNamesCB" >
+                <property name="text" >
+                  <string>Show function names</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_RecursiveCB" >
+                <property name="text" >
+                  <string>Compare folders recursively</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QCheckBox" name="m_NewFilesCB" >
+                <property name="text" >
+                  <string>Treat new files as empty</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+                <property name="tristate" >
+                  <bool>false</bool>
+                </property>
+              </widget>
+            </item>
+          </layout>
         </widget>
-        <widget class="QButtonGroup" row="0" column="0">
-            <property name="name">
-                <cstring>m_FormatBG</cstring>
-            </property>
-            <property name="title">
-                <string>Format</string>
-            </property>
-            <vbox>
-                <property name="name">
-                    <cstring>unnamed</cstring>
-                </property>
-                <property name="margin">
-                    <number>11</number>
-                </property>
-                <property name="spacing">
-                    <number>6</number>
-                </property>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_ContextRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Context</string>
-                    </property>
-                </widget>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_EdRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Ed</string>
-                    </property>
-                </widget>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_NormalRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Normal</string>
-                    </property>
-                </widget>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_RCSRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>RCS</string>
-                    </property>
-                </widget>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_UnifiedRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Unified</string>
-                    </property>
-                    <property name="checked">
-                        <bool>true</bool>
-                    </property>
-                </widget>
-                <widget class="QRadioButton">
-                    <property name="name">
-                        <cstring>m_SideBySideRB</cstring>
-                    </property>
-                    <property name="text">
-                        <string>Side-by-side</string>
-                    </property>
-                    <property name="checked">
-                        <bool>false</bool>
-                    </property>
-                </widget>
-                <widget class="QLayoutWidget">
-                    <property name="name">
-                        <cstring>m_ContextLinesLayout</cstring>
-                    </property>
-                    <hbox>
-                        <property name="name">
-                            <cstring>unnamed</cstring>
-                        </property>
-                        <property name="margin">
-                            <number>0</number>
-                        </property>
-                        <property name="spacing">
-                            <number>6</number>
-                        </property>
-                        <widget class="QLabel">
-                            <property name="name">
-                                <cstring>m_ContextLinesLabel</cstring>
-                            </property>
-                            <property name="text">
-                                <string>Number of context lines:</string>
-                            </property>
-                        </widget>
-                        <widget class="QSpinBox">
-                            <property name="name">
-                                <cstring>m_ContextLinesSB</cstring>
-                            </property>
-                            <property name="enabled">
-                                <bool>true</bool>
-                            </property>
-                            <property name="maxValue">
-                                <number>65535</number>
-                            </property>
-                            <property name="value">
-                                <number>3</number>
-                            </property>
-                        </widget>
-                    </hbox>
-                </widget>
-            </vbox>
+      </item>
+      <item row="0" column="0" >
+        <widget class="Q3ButtonGroup" name="m_FormatBG" >
+          <property name="title" >
+            <string>Format</string>
+          </property>
+          <layout class="QVBoxLayout" >
+            <property name="margin" >
+              <number>11</number>
+            </property>
+            <property name="spacing" >
+              <number>6</number>
+            </property>
+            <item>
+              <widget class="QRadioButton" name="m_ContextRB" >
+                <property name="text" >
+                  <string>Context</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QRadioButton" name="m_EdRB" >
+                <property name="text" >
+                  <string>Ed</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QRadioButton" name="m_NormalRB" >
+                <property name="text" >
+                  <string>Normal</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QRadioButton" name="m_RCSRB" >
+                <property name="text" >
+                  <string>RCS</string>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QRadioButton" name="m_UnifiedRB" >
+                <property name="text" >
+                  <string>Unified</string>
+                </property>
+                <property name="checked" >
+                  <bool>true</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <widget class="QRadioButton" name="m_SideBySideRB" >
+                <property name="text" >
+                  <string>Side-by-side</string>
+                </property>
+                <property name="checked" >
+                  <bool>false</bool>
+                </property>
+              </widget>
+            </item>
+            <item>
+              <layout class="QHBoxLayout" >
+                <property name="margin" >
+                  <number>0</number>
+                </property>
+                <property name="spacing" >
+                  <number>6</number>
+                </property>
+                <item>
+                  <widget class="QLabel" name="m_ContextLinesLabel" >
+                    <property name="text" >
+                      <string>Number of context lines:</string>
+                    </property>
+                    <property name="wordWrap" >
+                      <bool>false</bool>
+                    </property>
+                  </widget>
+                </item>
+                <item>
+                  <widget class="QSpinBox" name="m_ContextLinesSB" >
+                    <property name="enabled" >
+                      <bool>true</bool>
+                    </property>
+                    <property name="maximum" >
+                      <number>65535</number>
+                    </property>
+                    <property name="value" >
+                      <number>3</number>
+                    </property>
+                  </widget>
+                </item>
+              </layout>
+            </item>
+          </layout>
         </widget>
-    </grid>
-</widget>
-<layoutdefaults spacing="6" margin="11"/>
-</UI>
+      </item>
+    </layout>
+  </widget>
+  <layoutdefault spacing="6" margin="11" />
+  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+</ui>
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionswidget.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionswidget.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesaveoptionswidget.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesaveoptionswidget.cpp	2007-12-05 00:43:36.000000000 +0100
@@ -17,7 +17,7 @@
 **
 ***************************************************************************/
 
-#include <qbuttongroup.h>
+#include <q3buttongroup.h>
 #include <qcheckbox.h>
 #include <qlabel.h>
 #include <qradiobutton.h>
@@ -38,8 +38,8 @@
 {
 	m_settings = settings;
 
-	m_directoryRequester->setMode( static_cast<KFile::Mode>(
-	    KFile::ExistingOnly | KFile::Directory | KFile::LocalOnly ) );
+	m_directoryRequester->setMode(
+	    KFile::ExistingOnly | KFile::Directory | KFile::LocalOnly );
 
 	KUrl sourceURL;
 	KUrl destinationURL;
@@ -55,7 +55,7 @@
 	// If we found a common root, change to that directory and
 	// strip the common part from source and destination.
 	if( root.isValid() ) {
-		m_directoryRequester->setURL( root.url() );
+		m_directoryRequester->setUrl( root.url() );
 	}
 
 	connect( m_SmallerChangesCB,   SIGNAL(toggled(bool)), SLOT(updateCommandLine()) );
@@ -166,9 +166,9 @@
 	}
 
 	cmdLine += " -- ";
-	cmdLine += constructRelativePath( m_directoryRequester->url(), m_source );
+	cmdLine += constructRelativePath( m_directoryRequester->url().pathOrUrl(), m_source );
 	cmdLine += " ";
-	cmdLine += constructRelativePath( m_directoryRequester->url(), m_destination );
+	cmdLine += constructRelativePath( m_directoryRequester->url().pathOrUrl(), m_destination );
 
 	m_CommandLineLabel->setText( cmdLine );
 }
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesplitter.cpp kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesplitter.cpp
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesplitter.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesplitter.cpp	2007-12-10 12:39:02.000000000 +0100
@@ -1,12 +1,12 @@
-/***************************************************************************
-                                komparesplitter.cpp  -  description
-                                -------------------
-        begin                   : Wed Jan 14 2004
-        copyright               : (C) 2004 by Jeff Snyder
-        email                   : jeff@caffeinated.me.uk
-****************************************************************************/
+/**************************************************************************
+**                              komparesplitter.cpp
+**                              -------------------
+**      begin                   : Wed Jan 14 2004
+**      copyright               : (c) 2004-2005 by Jeff Snyder
+**      email                   : jeff-webcvsspam@caffeinated.me.uk
+***************************************************************************/
 
-/***************************************************************************
+/**************************************************************************
 **
 **   This program is free software; you can redistribute it and/or modify
 **   it under the terms of the GNU General Public License as published by
@@ -15,41 +15,56 @@
 **
 ***************************************************************************/
 
+// associated header
 #include "komparesplitter.h"
 
+// qt
 #include <qstyle.h>
 #include <qstring.h>
 #include <qtimer.h>
+#include <qscrollbar.h>
+#include <qmap.h>
+#include <qsplitter.h>
+#include <qapplication.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <QKeyEvent>
+#include <QGridLayout>
+#include <QResizeEvent>
+#include <QChildEvent>
+#include <QEvent>
+#include <QWheelEvent>
 
+// kde
 #include <kdebug.h>
 #include <kapplication.h>
 #include <kglobalsettings.h>
 
-#include "diffmodel.h"
-#include "difference.h"
-#include "viewsettings.h"
-#include "kompare_part.h"
+// kompare
 #include "komparelistview.h"
+#include "viewsettings.h"
 #include "kompareconnectwidget.h"
+#include "diffmodel.h"
+#include "difference.h"
 
 using namespace Diff2;
 
-KompareSplitter::KompareSplitter( ViewSettings *settings, QWidget * parent,
+KompareSplitter::KompareSplitter( ViewSettings *settings, QWidget *parent,
                                   const char *name) :
-	QSplitter( Horizontal, parent, name ),
+	QSplitter( Qt::Horizontal, parent, name ),
 	m_settings( settings )
 {
 	QFrame *scrollFrame = new QFrame( parent, "scrollFrame" );
-	reparent( scrollFrame, *(new QPoint()), false );
+	reparent( scrollFrame, QPoint(), false );
 
 	// Set up the scrollFrame
 	scrollFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
-	scrollFrame->setLineWidth(scrollFrame->style().pixelMetric(QStyle::PM_DefaultFrameWidth));
+	scrollFrame->setLineWidth(scrollFrame->style()->pixelMetric(QStyle::PM_DefaultFrameWidth));
 	QGridLayout *pairlayout = new QGridLayout(scrollFrame);
 	pairlayout->setSpacing(0);
-	m_vScroll = new QScrollBar( QScrollBar::Vertical, scrollFrame );
+	m_vScroll = new QScrollBar( Qt::Vertical, scrollFrame );
 	pairlayout->addWidget( m_vScroll, 0, 1 );
-	m_hScroll = new QScrollBar( QScrollBar::Horizontal, scrollFrame );
+	m_hScroll = new QScrollBar( Qt::Horizontal, scrollFrame );
 	pairlayout->addWidget( m_hScroll, 1, 0 );
 
 	new KompareListViewFrame(true, m_settings, this, "source");
@@ -57,28 +72,27 @@
 	pairlayout->addWidget( this, 0, 0 );
 
 	// set up our looks
-	setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
-	setLineWidth( style().pixelMetric( QStyle::PM_DefaultFrameWidth ) );
+	setLineWidth( style()->pixelMetric( QStyle::PM_DefaultFrameWidth ) );
 
 	setHandleWidth(50);
 	setChildrenCollapsible( false );
 	setFrameStyle( QFrame::NoFrame );
 	setSizePolicy( QSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored ));
 	setOpaqueResize( true );
-	setFocusPolicy( QWidget::WheelFocus );
+	setFocusPolicy( Qt::WheelFocus );
 
 	connect( this, SIGNAL(configChanged()), SLOT(slotConfigChanged()) );
 	connect( this, SIGNAL(configChanged()), SLOT(slotDelayedRepaintHandles()) );
 	connect( this, SIGNAL(configChanged()), SLOT(slotDelayedUpdateScrollBars()) );
 	
 	// scrolling
-	connect( m_vScroll, SIGNAL(valueChanged(int)), SLOT(scrollToId(int)) );
-	connect( m_vScroll, SIGNAL(sliderMoved(int)),  SLOT(scrollToId(int)) );
+	connect( m_vScroll, SIGNAL(valueChanged(int)), SLOT(slotScrollToId(int)) );
+	connect( m_vScroll, SIGNAL(sliderMoved(int)),  SLOT(slotScrollToId(int)) );
 	connect( m_hScroll, SIGNAL(valueChanged(int)), SIGNAL(setXOffset(int)) );
 	connect( m_hScroll, SIGNAL(sliderMoved(int)),  SIGNAL(setXOffset(int)) );
 
 	m_scrollTimer=new QTimer();
-	restartTimer = false;
+	m_restartTimer = false;
 	connect (m_scrollTimer, SIGNAL(timeout()), SLOT(timerTimeout()) );
 
 	// we need to receive childEvents now so that d->list is ready for when
@@ -89,414 +103,57 @@
 	slotUpdateScrollBars();
 }
 
-KompareSplitter::~KompareSplitter(){}
-
-/*
-    Inserts the widget \a w at the end (or at the beginning if \a
-    prepend is TRUE) of the splitter's list of widgets.
-
-    It is the responsibility of the caller to make sure that \a w is
-    not already in the splitter and to call recalcId() if needed. (If
-    \a prepend is TRUE, then recalcId() is very probably needed.)
-*/
-
-QSplitterLayoutStruct *KompareSplitter::addWidget( KompareListViewFrame *w, bool prepend )
-{
-	/* This function is *not* a good place to make connections to and from
-	 * the KompareListView. Make them in the KompareListViewFrame constructor
-	 * instad - that way the connections get made upon creation, not upon the
-	 * next processing of the event queue. */
-
-	QSplitterLayoutStruct *s;
-	KompareConnectWidgetFrame *newHandle = 0;
-	if ( d->list.count() > 0 ) {
-		s = new QSplitterLayoutStruct;
-		s->resizeMode = KeepSize;
-		QString tmp = "qt_splithandle_";
-		tmp += w->name();
-		KompareListView *lw = 
-			((KompareListViewFrame*)(prepend?w:d->list.last()->wid))->view();
-		KompareListView *rw = 
-			((KompareListViewFrame*)(prepend?d->list.first()->wid:w))->view();
-		newHandle = new KompareConnectWidgetFrame(lw, rw, m_settings, this, tmp.latin1());
-		s->wid = newHandle;
-		newHandle->setId( d->list.count() );
-		s->isHandle = TRUE;
-		s->sizer = pick( newHandle->sizeHint() );
-		if ( prepend )
-		    d->list.prepend( s );
-		else
-		    d->list.append( s );
-	}
-	s = new QSplitterLayoutStruct;
-	s->resizeMode = DefaultResizeMode;
-	s->wid = w;
-	s->isHandle = FALSE;
-	if ( prepend ) d->list.prepend( s );
-	else d->list.append( s );
-	if ( newHandle && isVisible() )
-		newHandle->show(); // will trigger sending of post events
-	return s;
-}
-
-
-/*!
-    Tells the splitter that the child widget described by \a c has
-    been inserted or removed.
-*/
-
-void KompareSplitter::childEvent( QChildEvent *c )
-{
-    if ( c->type() == QEvent::ChildInserted ) {
-		if ( !c->child()->isWidgetType() )
-			return;
-
-		if ( ((QWidget*)c->child())->testWFlags( WType_TopLevel ) )
-			return;
-
-		QSplitterLayoutStruct *s = d->list.first();
-		while ( s ) {
-			if ( s->wid == c->child() )
-				return;
-			s = d->list.next();
-		}
-		addWidget( (KompareListViewFrame*)c->child() );
-		recalc( isVisible() );
-    } else if ( c->type() == QEvent::ChildRemoved ) {
-		QSplitterLayoutStruct *prev = 0;
-		if ( d->list.count() > 1 )
-			prev = d->list.at( 1 );  // yes, this is correct
-		QSplitterLayoutStruct *curr = d->list.first();
-		while ( curr ) {
-			if ( curr->wid == c->child() ) {
-			d->list.removeRef( curr );
-			if ( prev && prev->isHandle ) {
-				QWidget *w = prev->wid;
-				d->list.removeRef( prev );
-				delete w; // will call childEvent()
-			}
-			recalcId();
-			doResize();
-			return;
-			}
-			prev = curr;
-			curr = d->list.next();
-		}
-	}
-}
-
-// This is from a private qt header (kernel/qlayoutengine_p.h). sorry.
-QSize qSmartMinSize( QWidget *w );
-
-static QPoint toggle( QWidget *w, QPoint pos )
+KompareSplitter::~KompareSplitter()
 {
-    QSize minS = qSmartMinSize( w );
-    return -pos - QPoint( minS.width(), minS.height() );
 }
 
-static bool isCollapsed( QWidget *w )
-{
-    return w->x() < 0 || w->y() < 0;
-}
-
-static QPoint topLeft( QWidget *w )
-{
-    if ( isCollapsed(w) ) {
-        return toggle( w, w->pos() );
-    } else {
-        return w->pos();
-    }
-}
-
-static QPoint bottomRight( QWidget *w )
-{
-    if ( isCollapsed(w) ) {
-        return toggle( w, w->pos() ) - QPoint( 1, 1 );
-    } else {
-        return w->geometry().bottomRight();
-    }
-}
-
-void KompareSplitter::moveSplitter( QCOORD p, int id )
-{
-	QSplitterLayoutStruct *s = d->list.at( id );
-	int farMin;
-	int min;
-	int max;
-	int farMax;
-	p = adjustPos( p, id, &farMin, &min, &max, &farMax );
-	int oldP = pick( s->wid->pos() );
-	int* poss = new int[d->list.count()];
-	int* ws = new int[d->list.count()];
-	QWidget *w = 0;
-	bool upLeft;
-	if ( QApplication::reverseLayout() && orient == Horizontal ) {
-		int q = p + s->wid->width();
-		doMove( FALSE, q, id - 1, -1, (p > max), poss, ws );
-		doMove( TRUE, q, id, -1, (p < min), poss, ws );
-		upLeft = (q > oldP);
-	} else {
-		doMove( FALSE, p, id, +1, (p > max), poss, ws );
-		doMove( TRUE, p, id - 1, +1, (p < min), poss, ws );
-		upLeft = (p < oldP);
-	}
-	if ( upLeft ) {
-		int count = d->list.count();
-		for ( int id = 0; id < count; ++id ) {
-			w = d->list.at( id )->wid;
-			if( !w->isHidden() )
-				setGeo( w, poss[id], ws[id], TRUE );
-		}
-	} else {
-		for ( int id = d->list.count() - 1; id >= 0; --id ) {
-			w = d->list.at( id )->wid;
-			if( !w->isHidden() )
-				setGeo( w, poss[id], ws[id], TRUE );
-		}
-	}
-	storeSizes();
-}
-
-void KompareSplitter::doMove( bool backwards, int pos, int id, int delta,
-                        bool mayCollapse, int* positions, int* widths )
-{
-	QSplitterLayoutStruct *s;
-	QWidget *w;
-	for ( ; id >= 0 && id < (int)d->list.count();
-			id = backwards ? id - delta : id + delta ) {
-		s = d->list.at( id );
-		w = s->wid;
-		if ( w->isHidden() ) {
-			mayCollapse = TRUE;
-		} else {
-			if ( s->isHandle ) {
-				int dd = s->getSizer( orient );
-				int nextPos = backwards ? pos - dd : pos + dd;
-				positions[id] = pos;
-				widths[id] = dd;
-				pos = nextPos;
-			} else {
-				int dd = backwards ? pos - pick( topLeft(w) )
-				                   : pick( bottomRight(w) ) - pos + 1;
-				if ( dd > 0 || (!isCollapsed(w) && !mayCollapse) ) {
-					dd = qMax( pick(qSmartMinSize(w)),
-					           qMin(dd, pick(w->maximumSize())) );
-				} else {
-					dd = 0;
-				}
-				positions[id] = backwards ? pos - dd : pos;
-				widths[id] = dd;
-				pos = backwards ? pos - dd : pos + dd;
-				mayCollapse = TRUE;
-			}
-		}
-	}
-}
-
-void KompareSplitter::slotSetSelection( const DiffModel* model, const Difference* diff )
+QSplitterHandle* KompareSplitter::createHandle()
 {
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if ( curr->isHandle )
-			((KompareConnectWidgetFrame*)
-				curr->wid)->wid()->slotSetSelection( model, diff );
-		else
-		{
-			((KompareListViewFrame*)
-				curr->wid)->view()->slotSetSelection( model, diff );
-			((KompareListViewFrame*)
-				curr->wid)->slotSetModel( model );
-		}
-	}
-	slotDelayedRepaintHandles();
-	slotDelayedUpdateScrollBars();
-}
-
-void KompareSplitter::slotSetSelection( const Difference* diff )
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( curr->isHandle )
-			((KompareConnectWidgetFrame*)
-				curr->wid)->wid()->slotSetSelection( diff );
-		else
-			((KompareListViewFrame*)
-				curr->wid)->view()->slotSetSelection( diff );
-	slotDelayedRepaintHandles();
-	slotDelayedUpdateScrollBars();
-}
-
-void KompareSplitter::slotApplyDifference( bool apply )
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			((KompareListViewFrame*)
-				curr->wid)->view()->slotApplyDifference( apply );
-	slotDelayedRepaintHandles();
-}
-
-void KompareSplitter::slotApplyAllDifferences( bool apply )
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			((KompareListViewFrame*)
-				curr->wid)->view()->slotApplyAllDifferences( apply );
-	slotDelayedRepaintHandles();
-	scrollToId( scrollTo ); // FIXME!
-}
-
-void KompareSplitter::slotApplyDifference( const Difference* diff, bool apply )
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			((KompareListViewFrame*)
-				curr->wid)->view()->slotApplyDifference( diff, apply );
-	slotDelayedRepaintHandles();
-}
-
-void KompareSplitter::slotDifferenceClicked( const Difference* diff )
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			((KompareListViewFrame*)
-				curr->wid)->view()->setSelectedDifference( diff, false );
-	emit selectionChanged( diff );
-}
-
-void KompareSplitter::slotConfigChanged()
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() ) {
-		if ( !curr->isHandle )
-		{
-			((KompareListViewFrame*)
-				curr->wid)->view()->setSpaces( m_settings->m_tabToNumberOfSpaces );
-			((KompareListViewFrame*)
-				curr->wid)->view()->setFont( m_settings->m_font );
-			((KompareListViewFrame*)
-				curr->wid)->view()->update();
-		}
-	}
+	return new KompareConnectWidgetFrame(m_settings, this);
 }
 
 void KompareSplitter::slotDelayedRepaintHandles()
 {
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		 if ( curr->isHandle )
-			((KompareConnectWidgetFrame*)curr->wid)->wid()->slotDelayedRepaint();
-}
-
-void KompareSplitter::repaintHandles()
-{
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( curr->isHandle )
-			((KompareConnectWidgetFrame*)curr->wid)->wid()->repaint();
-}
-
-// Scrolling stuff
-/*
- * limit updating to once every 50 msec with a qtimer
- * FIXME: i'm a nasty hack
- */
-
-void KompareSplitter::wheelEvent( QWheelEvent* e )
-{
-	// scroll lines...
-	if ( e->orientation() == Qt::Vertical )
-	{
-		if ( e->state() & Qt::ControlModifier )
-			if ( e->delta() < 0 ) // scroll down one page
-				m_vScroll->addPage();
-			else // scroll up one page
-				m_vScroll->subtractPage();
-		else
-			if ( e->delta() < 0 ) // scroll down
-				m_vScroll->addLine();
-			else // scroll up
-				m_vScroll->subtractLine();
-	}
-	else
-	{
-		if ( e->state() & Qt::ControlModifier )
-			if ( e->delta() < 0 ) // scroll right one page
-				m_hScroll->addPage();
-			else // scroll left one page
-				m_hScroll->subtractPage();
-		else
-			if ( e->delta() < 0 ) // scroll to the right
-				m_hScroll->addLine();
-			else // scroll to the left
-				m_hScroll->subtractLine();
-	}
-	e->accept();
-	repaintHandles();
+	QTimer::singleShot(0, this, SLOT(slotRepaintHandles()));
 }
 
-void KompareSplitter::keyPressEvent( QKeyEvent* e )
+void KompareSplitter::slotRepaintHandles()
 {
-	//keyboard scrolling
-	switch ( e->key() ) {
-	case Key_Right:
-	case Key_L:
-		m_hScroll->addLine();
-		break;
-	case Key_Left:
-	case Key_H:
-		m_hScroll->subtractLine();
-		break;
-	case Key_Up:
-	case Key_K:
-		m_vScroll->subtractLine();
-		break;
-	case Key_Down:
-	case Key_J:
-		m_vScroll->addLine();
-		break;
-	case Key_PageDown:
-		m_vScroll->addPage();
-		break;
-	case Key_PageUp:
-		m_vScroll->subtractPage();
-		break;
-	}
-	e->accept();
-	repaintHandles();
+	const int end = count();
+	for ( int i = 1; i < end; ++i )
+		handle(i)->update();
 }
 
 void KompareSplitter::timerTimeout()
 {
-	if ( restartTimer )
-		restartTimer = false;
+	if ( m_restartTimer )
+		m_restartTimer = false;
 	else
 		m_scrollTimer->stop();
 
-	slotDelayedRepaintHandles();	
+	slotDelayedRepaintHandles();
 
-	emit scrollViewsToId( scrollTo );
+	emit scrollViewsToId( m_scrollTo );
+	slotRepaintHandles();
+	m_vScroll->setValue( m_scrollTo );
 }
 
-void KompareSplitter::scrollToId( int id )
+void KompareSplitter::slotScrollToId( int id )
 {
-	scrollTo = id;
+	m_scrollTo = id;
 
-	if( restartTimer )
+	if( m_restartTimer )
 		return;
 
 	if( m_scrollTimer->isActive() )
 	{
-		restartTimer = true;
+		m_restartTimer = true;
 	}
 	else
 	{
 		emit scrollViewsToId( id );
-		slotDelayedRepaintHandles();
+		slotRepaintHandles();
+		m_vScroll->setValue( id );
 		m_scrollTimer->start(30, false);
 	}
 }
@@ -552,55 +209,106 @@
 	m_vScroll->setValue( scrollId() );
 }
 
-/* FIXME: this should return the scrollId() from the listview containing the
+void KompareSplitter::keyPressEvent( QKeyEvent* e )
+{
+	//keyboard scrolling
+	switch ( e->key() ) {
+	case Qt::Key_Right:
+	case Qt::Key_L:
+		m_hScroll->addLine();
+		break;
+	case Qt::Key_Left:
+	case Qt::Key_H:
+		m_hScroll->subtractLine();
+		break;
+	case Qt::Key_Up:
+	case Qt::Key_K:
+		m_vScroll->subtractLine();
+		break;
+	case Qt::Key_Down:
+	case Qt::Key_J:
+		m_vScroll->addLine();
+		break;
+	case Qt::Key_PageDown:
+		m_vScroll->addPage();
+		break;
+	case Qt::Key_PageUp:
+		m_vScroll->subtractPage();
+		break;
+	}
+	e->accept();
+	slotRepaintHandles();
+}
+
+void KompareSplitter::slotScroll( QWheelEvent* e )
+{
+	if ( e->orientation() == Qt::Vertical )
+	{
+		if ( e->state() & Qt::ControlButton ) {
+			if ( e->delta() < 0 ) // scroll down one page
+				m_vScroll->addPage();
+			else // scroll up one page
+				m_vScroll->subtractPage();
+		} else {
+			if ( e->delta() < 0 ) // scroll down
+				m_vScroll->addLine();
+			else // scroll up
+				m_vScroll->subtractLine();
+		}
+	}
+	else
+	{
+		if ( e->state() & Qt::ControlButton ) {
+			if ( e->delta() < 0 ) // scroll right one page
+				m_hScroll->addPage();
+			else // scroll left one page
+				m_hScroll->subtractPage();
+		} else {
+			if ( e->delta() < 0 ) // scroll to the right
+				m_hScroll->addLine();
+			else // scroll to the left
+				m_hScroll->subtractLine();
+		}
+	}
+	e->accept();
+	slotDelayedRepaintHandles();
+}
+
+/* FIXME: this should return/the scrollId() from the listview containing the
  * /base/ of the diff. but there's bigger issues with that atm.
  */
  
 int KompareSplitter::scrollId()
 {
-	QSplitterLayoutStruct *curr = d->list.first();
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			return ((KompareListViewFrame*) curr->wid)->view()->scrollId();
+	if(widget(0))
+		return listView(0)->scrollId();
 	return minVScrollId();
 }
 
 int KompareSplitter::lineSpacing()
 {
-	QSplitterLayoutStruct *curr = d->list.first();
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-		if ( !curr->isHandle )
-			return ((KompareListViewFrame*)
-				curr->wid)->view()->fontMetrics().lineSpacing();
+	if(widget(0))
+		return listView(0)->fontMetrics().lineSpacing();
 	return 1;
 }
 
 int KompareSplitter::pageSize()
 {
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if ( !curr->isHandle )
-		{
-			KompareListView *view = ((KompareListViewFrame*) curr->wid)->view();
-			return view->visibleHeight() - QStyle::PM_ScrollBarExtent;
-		}
+	if(widget(0)) {
+		KompareListView *view = listView(0);
+		return view->visibleHeight() - QStyle::PM_ScrollBarExtent;
 	}
 	return 1;
 }
 
 bool KompareSplitter::needVScrollBar()
 {
-	QSplitterLayoutStruct *curr;
 	int pagesize = pageSize();
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if( !curr->isHandle )
-		{
-			KompareListView *view = ((KompareListViewFrame*) curr->wid)->view();
-			if( view ->contentsHeight() > pagesize)
-				return true;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		KompareListView *view = listView(i);
+		if( view ->contentsHeight() > pagesize)
+			return true;
 	}
 	return false;
 }
@@ -608,83 +316,64 @@
 int KompareSplitter::minVScrollId()
 {
 
-	QSplitterLayoutStruct *curr;
 	int min = -1;
 	int mSId;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if(!curr->isHandle) {
-			KompareListView* view = ((KompareListViewFrame*)curr->wid)->view();
-			mSId = view->minScrollId();
-			if (mSId < min || min == -1) min = mSId;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		mSId = listView(i)->minScrollId();
+		if (mSId < min || min == -1)
+			min = mSId;
 	}
 	return ( min == -1 ) ? 0 : min;
 }
 
 int KompareSplitter::maxVScrollId()
 {
-	QSplitterLayoutStruct *curr;
 	int max = 0;
 	int mSId;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if ( !curr->isHandle )
-		{
-			mSId = ((KompareListViewFrame*)curr->wid)->view()->maxScrollId();
-			if ( mSId > max )
-				max = mSId;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		mSId = listView(i)->maxScrollId();
+		if ( mSId > max )
+			max = mSId;
 	}
 	return max;
 }
 
 bool KompareSplitter::needHScrollBar()
 {
-	QSplitterLayoutStruct *curr;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if( !curr->isHandle )
-		{
-			KompareListView *view = ((KompareListViewFrame*) curr->wid)->view();
-			if ( view->contentsWidth() > view->visibleWidth() )
-				return true;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		KompareListView *view = listView(i);
+		if ( view->contentsWidth() > view->visibleWidth() )
+			return true;
 	}
 	return false;
 }
 
 int KompareSplitter::maxHScrollId()
 {
-	QSplitterLayoutStruct *curr;
 	int max = 0;
 	int mHSId;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if( !curr->isHandle )
-		{
-			KompareListView *view = ((KompareListViewFrame*) curr->wid)->view();
-			mHSId = view->contentsWidth() - view->visibleWidth();
-			if ( mHSId > max )
-				max = mHSId;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		KompareListView *view = listView(i);
+		mHSId = view->contentsWidth() - view->visibleWidth();
+		if ( mHSId > max )
+			max = mHSId;
 	}
 	return max;
 }
 
 int KompareSplitter::maxContentsX()
 {
-	QSplitterLayoutStruct *curr;
 	int max = 0;
 	int mCX;
-	for ( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if ( !curr->isHandle )
-		{
-			mCX = ((KompareListViewFrame*) curr->wid)->view()->contentsX();
-			if ( mCX > max )
-				max = mCX;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		mCX = listView(i)->contentsX();
+		if ( mCX > max )
+			max = mCX;
 	}
 	return max;
 }
@@ -696,18 +385,93 @@
 	// despite the fact that *noone* has a pgright and pgleft key :P
 	// But we do have mousewheels with horizontal scrolling functionality,
 	// pressing shift and scrolling then goes left and right one page at the time
-	QSplitterLayoutStruct *curr;
 	int min = -1;
 	int vW;
-	for( curr = d->list.first(); curr; curr = d->list.next() )
-	{
-		if ( !curr->isHandle ) {
-			vW = ((KompareListViewFrame*)curr->wid)->view()->visibleWidth();
-			if ( vW < min || min == -1 )
-				min = vW;
-		}
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		vW = listView(i)->visibleWidth();
+		if ( vW < min || min == -1 )
+			min = vW;
 	}
 	return ( min == -1 ) ? 0 : min;
 }
 
+KompareListView* KompareSplitter::listView( int index )
+{
+	return static_cast<KompareListViewFrame*>(widget(index))->view();
+}
+
+KompareConnectWidget* KompareSplitter::connectWidget( int index )
+{
+	return static_cast<KompareConnectWidgetFrame*>(handle(index))->wid();
+}
+
+void KompareSplitter::slotSetSelection( const DiffModel* model, const Difference* diff )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		connectWidget(i)->slotSetSelection( model, diff );
+		listView(i)->slotSetSelection( model, diff );
+		static_cast<KompareListViewFrame*>(widget(i))->slotSetModel( model );
+	}
+
+	slotDelayedRepaintHandles();
+	slotDelayedUpdateScrollBars();
+}
+
+void KompareSplitter::slotSetSelection( const Difference* diff )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		connectWidget(i)->slotSetSelection( diff );
+		listView(i)->slotSetSelection( diff );
+	}
+
+	slotDelayedRepaintHandles();
+	slotDelayedUpdateScrollBars();
+}
+
+void KompareSplitter::slotApplyDifference( bool apply )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i )
+		listView(i)->slotApplyDifference( apply );
+	slotDelayedRepaintHandles();
+}
+
+void KompareSplitter::slotApplyAllDifferences( bool apply )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i )
+		listView(i)->slotApplyAllDifferences( apply );
+	slotDelayedRepaintHandles();
+	slotScrollToId( m_scrollTo ); // FIXME!
+}
+
+void KompareSplitter::slotApplyDifference( const Difference* diff, bool apply )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i )
+		listView(i)->slotApplyDifference( diff, apply );
+	slotDelayedRepaintHandles();
+}
+
+void KompareSplitter::slotDifferenceClicked( const Difference* diff )
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i )
+		listView(i)->setSelectedDifference( diff, false );
+	emit selectionChanged( diff );
+}
+
+void KompareSplitter::slotConfigChanged()
+{
+	const int end = count();
+	for ( int i = 0; i < end; ++i ) {
+		KompareListView *view = listView(i);
+		view->setSpaces( m_settings->m_tabToNumberOfSpaces );
+		view->setFont( m_settings->m_font );
+		view->update();
+	}
+}
 #include "komparesplitter.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/komparepart/komparesplitter.h kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesplitter.h
--- kdesdk-3.96.2-orig/kompare/komparepart/komparesplitter.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/komparepart/komparesplitter.h	2007-12-10 11:58:39.000000000 +0100
@@ -18,16 +18,15 @@
 #ifndef _KOMPARESPLITTER_H_
 #define _KOMPARESPLITTER_H_
 
-#include "kompare_qsplitter.h"
+#include <QSplitter>
 
-#include <qtimer.h>
-
-#include "komparelistview.h"
 #include "komparemodellist.h"
 
-class QSplitterLayoutStruct;
-class QTextStream;
 class QSplitterHandle;
+class QTimer;
+class QScrollBar;
+class QWheelEvent;
+class QKeyEvent;
 
 namespace Diff2 {
 class DiffModel;
@@ -35,28 +34,38 @@
 }
 class ViewSettings;
 
+class KompareListView;
+class KompareConnectWidget;
+
 class KompareSplitter : public QSplitter
 {
 	Q_OBJECT
 
 public:
-	KompareSplitter(ViewSettings *settings, QWidget *parent=0, const char *name = 0);
+	KompareSplitter(ViewSettings *settings, QWidget *parent, const char *name = 0);
 	~KompareSplitter();
 
 signals:
-	void selectionChanged( const Diff2::Difference* diff );
-
 	void configChanged();
 
 	void scrollViewsToId( int id );
 	void setXOffset( int x );
 
+	void selectionChanged( const Diff2::Difference* diff );
+
 public slots:
+	void slotScrollToId( int id );
+	void slotDelayedUpdateScrollBars();
+	void slotUpdateScrollBars();
+	void slotDelayedUpdateVScrollValue();
+	void slotUpdateVScrollValue();
+	void slotScroll( QWheelEvent* e );
+	void keyPressEvent( QKeyEvent* e );
+
 	void slotApplyDifference( bool apply );
 	void slotApplyAllDifferences( bool apply );
 	void slotApplyDifference( const Diff2::Difference* diff, bool apply );
 
-	// to update the list views
 	void slotSetSelection( const Diff2::DiffModel* model, const Diff2::Difference* diff );
 	void slotSetSelection( const Diff2::Difference* diff );
 
@@ -64,35 +73,28 @@
 
 	void slotConfigChanged();
 
-	void scrollToId( int id );
-	void slotDelayedUpdateScrollBars();
-	void slotUpdateScrollBars();
-	void slotDelayedUpdateVScrollValue();
-	void slotUpdateVScrollValue();
-
 protected:
-	void childEvent( QChildEvent * );
-	void wheelEvent( QWheelEvent* e );
-	void keyPressEvent( QKeyEvent* e );
-
 	void moveSplitter( QCOORD pos, int id );
 
-private slots:
+	ViewSettings* settings() const { return m_settings; }
+
+protected slots:
 	void slotDelayedRepaintHandles();
+	void slotRepaintHandles();
 	void timerTimeout();
 
 private:
-	QSplitterLayoutStruct *addWidget(KompareListViewFrame *w,
-		bool prepend = FALSE );
+	// override from QSplitter
+	QSplitterHandle* createHandle();
 
-	void doMove( bool backwards, int pos, int id, int delta,
-		bool mayCollapse, int* positions, int* widths );
+	void               setCursor( int id, const QCursor& cursor );
+	void               unsetCursor( int id );
 
-	void repaintHandles();
+protected:
+	KompareListView* listView( int index );
+	KompareConnectWidget* connectWidget( int index );
 
-	QTimer*            m_scrollTimer;
-	bool               restartTimer;
-	int                scrollTo;
+private:
 
 	// Scrollbars. all this just for the goddamn scrollbars. i hate them.
 	int  scrollId();
@@ -106,6 +108,10 @@
 	int  maxContentsX();
 	int  minVisibleWidth();
 
+	QTimer*            m_scrollTimer;
+	bool               m_restartTimer;
+	int                m_scrollTo;
+
 	ViewSettings*      m_settings;
 	QScrollBar*        m_vScroll;
 	QScrollBar*        m_hScroll;
diff -Nur kdesdk-3.96.2-orig/kompare/kompare_shell.cpp kdesdk-3.96.2-fix-kompare/kompare/kompare_shell.cpp
--- kdesdk-3.96.2-orig/kompare/kompare_shell.cpp	2007-10-03 13:46:58.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/kompare_shell.cpp	2007-12-05 08:06:28.000000000 +0100
@@ -21,13 +21,12 @@
 #include <QTextStream>
 
 #include <ktexteditor/document.h>
-// #include <ktexteditor/editinterface.h>
 #include <ktexteditor/view.h>
 #include <kdebug.h>
 #include <kedittoolbar.h>
 #include <kencodingfiledialog.h>
 #include <kiconloader.h>
-#include <kkeydialog.h>
+#include <kshortcutsdialog.h>
 #include <klibloader.h>
 #include <klocale.h>
 #include <kmessagebox.h>
@@ -39,6 +38,7 @@
 #include <kservicetypetrader.h>
 #include <ktoggleaction.h>
 // #include <kuserprofile.h>
+#include <kactioncollection.h>
 
 #include "kompare_part.h"
 #include "komparenavtreepart.h"
@@ -89,17 +89,18 @@
 	KLibFactory *mainViewFactory = KLibLoader::self()->factory( ptr->library().ascii() );
 	if (mainViewFactory)
 	{
-		m_mainViewDock = new QDockWidget( i18n( "View" ), this );
-		m_mainViewDock->setObjectName( "View" );
+//		m_mainViewDock = new QDockWidget( i18n( "View" ), this );
+//		m_mainViewDock->setObjectName( "View" );
 // 		m_mainViewDock = createDockWidget( "View", qApp->windowIcon().pixmap(IconSize(KIconLoader::Desktop),IconSize(KIconLoader::Desktop)) );
 		// now that the Part is loaded, we cast it to a KomparePart to get
 		// our hands on it
-		m_viewPart = static_cast<KomparePart*>(mainViewFactory->create(m_mainViewDock,
-		              "kompare_part", QStringList("KParts::ReadWritePart" )));
+		m_viewPart = static_cast<KomparePart*>(mainViewFactory->create(this,
+		              "KomparePart", QStringList("KParts::ReadWritePart" )));
 
 		if ( m_viewPart )
 		{
-			m_mainViewDock->setWidget( m_viewPart->widget() );
+			setCentralWidget( m_viewPart->widget() );
+//			m_mainViewDock->setWidget( m_viewPart->widget() );
 // 			setView( m_mainViewDock );
 // 			setMainDockWidget( m_mainViewDock );
 
@@ -133,11 +134,12 @@
 // 		m_navTreeDock = createDockWidget( "Navigation", qApp->windowIcon().pixmap(IconSize(KIconLoader::Desktop),IconSize(KIconLoader::Desktop)) );
 
 		m_navTreePart = static_cast<KompareNavTreePart*>(navTreeFactory->create(m_navTreeDock,
-		                 "komparenavtreepart", QStringList("KParts::ReadOnlyPart" )));
+		                 "KompareNavTreePart", QStringList("KParts::ReadOnlyPart" )));
 
 		if ( m_navTreePart )
 		{
 			m_navTreeDock->setWidget( m_navTreePart->widget() );
+			addDockWidget( Qt::TopDockWidgetArea, m_navTreeDock );
 // 			m_navTreeDock->manualDock( m_mainViewDock, KDockWidget::DockTop, 20 );
 		}
 	}
@@ -185,6 +187,9 @@
 	connect( m_viewPart, SIGNAL( setStatusBarText(const QString&) ),
 	         this, SLOT( slotSetStatusBarText(const QString&) ) );
 
+	connect( m_viewPart, SIGNAL(diffString(const QString&)),
+	         this, SLOT(slotSetDiffString(const QString&)) );
+
 	// Read basic main-view settings, and set to autosave
 	setAutoSaveSettings( "General Options" );
 }
@@ -242,23 +247,27 @@
 
 void KompareShell::setupActions()
 {
-	KAction* open = KStandardAction::open(this, SLOT(slotFileOpen()), actionCollection());
-	open->setText( i18n( "&Open Diff..." ) );
-	new KAction( i18n("&Compare Files..."), "fileopen", Qt::CTRL + Qt::Key_C,
-	              this, SLOT(slotFileCompareFiles()),
-	              actionCollection(), "file_compare_files" );
-	new KAction( i18n("&Blend URL with Diff..."), "fileblend", Qt::CTRL + Qt::Key_B,
-	              this, SLOT(slotFileBlendURLAndDiff()),
-	              actionCollection(), "file_blend_url" );
-	KStandardAction::quit( this, SLOT( slotFileClose() ), actionCollection() );
+	KAction *a;
+	a = actionCollection()->addAction(KStandardAction::Open, this, SLOT(slotFileOpen()));
+	a->setText( i18n( "&Open Diff..." ) );
+	a = actionCollection()->addAction("file_compare_files", this, SLOT(slotFileCompareFiles()));
+	a->setIcon(KIcon("document-open"));
+	a->setText(i18n("&Compare Files..."));
+	a->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
+	a = actionCollection()->addAction("file_blend_url", this, SLOT(slotFileBlendURLAndDiff()));
+	a->setText(i18n("&Blend URL with Diff..."));
+	a->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B));
+	actionCollection()->addAction(KStandardAction::Quit, this, SLOT( slotFileClose() ));
 
 #if KDE_VERSION >= KDE_MAKE_VERSION(3,1,90)
 	createStandardStatusBarAction();
 #endif
 	setStandardToolBarMenuEnabled(true);
-	m_showTextView = new KToggleAction( i18n("Show T&ext View"), 0, this, SLOT(slotShowTextView()),
-	                                  actionCollection(), "options_show_text_view" );
-        m_showTextView->setCheckedState(i18n("Hide T&ext View"));
+	m_showTextView = new KToggleAction(i18n("Show T&ext View"), this);
+// needs a KGuiItem, also the doc says explicitly not to do this
+//	m_showTextView->setCheckedState(i18n("Hide T&ext View"));
+	actionCollection()->addAction("options_show_text_view", m_showTextView);
+	connect(m_showTextView, SIGNAL(triggered(bool)), SLOT(slotShowTextView()));
 
 	KStandardAction::keyBindings(this, SLOT(optionsConfigureKeys()), actionCollection());
 	KStandardAction::configureToolbars(this, SLOT(optionsConfigureToolbars()), actionCollection());
@@ -308,58 +317,58 @@
 	KParts::MainWindow::setCaption( caption, m_viewPart->isModified() );
 }
 
-void KompareShell::saveProperties(KConfig* config)
+void KompareShell::saveProperties(KConfigGroup &config)
 {
 	// The 'config' object points to the session managed
 	// config file.  Anything you write here will be available
 	// later when this app is restored
 	if ( m_mode == Kompare::ComparingFiles )
 	{
-		config->writeEntry( "Mode", "ComparingFiles" );
-		config->writePathEntry( "SourceUrl", m_sourceURL.url() );
-		config->writePathEntry( "DestinationUrl", m_destinationURL.url() );
+		config.writeEntry( "Mode", "ComparingFiles" );
+		config.writePathEntry( "SourceUrl", m_sourceURL.url() );
+		config.writePathEntry( "DestinationUrl", m_destinationURL.url() );
 	}
 	else if ( m_mode == Kompare::ShowingDiff )
 	{
-		config->writeEntry( "Mode", "ShowingDiff" );
-		config->writePathEntry( "DiffUrl", m_diffURL.url() );
+		config.writeEntry( "Mode", "ShowingDiff" );
+		config.writePathEntry( "DiffUrl", m_diffURL.url() );
 	}
 
-	m_viewPart->saveProperties( config );
+	m_viewPart->saveProperties( config.config() );
 }
 
-void KompareShell::readProperties(KConfig* config)
+void KompareShell::readProperties(const KConfigGroup &config)
 {
 	// The 'config' object points to the session managed
 	// config file. This function is automatically called whenever
 	// the app is being restored. Read in here whatever you wrote
 	// in 'saveProperties'
 
-	QString mode = config->readEntry( "Mode", "ComparingFiles" );
+	QString mode = config.readEntry( "Mode", "ComparingFiles" );
 	if ( mode == "ComparingFiles" )
 	{
 		m_mode  = Kompare::ComparingFiles;
-		m_sourceURL  = config->readPathEntry( "SourceUrl", "" );
-		m_destinationURL = config->readPathEntry( "DestinationFile", "" );
+		m_sourceURL  = config.readPathEntry( "SourceUrl", "" );
+		m_destinationURL = config.readPathEntry( "DestinationFile", "" );
 
-		m_viewPart->readProperties( config );
+		m_viewPart->readProperties( const_cast<KConfig *>(config.config()) );
 
 		m_viewPart->compareFiles( m_sourceURL, m_destinationURL );
 	}
 	else if ( mode == "ShowingDiff" )
 	{
 		m_mode = Kompare::ShowingDiff;
-		m_diffURL = config->readPathEntry( "DiffUrl", "" );
+		m_diffURL = config.readPathEntry( "DiffUrl", "" );
 
-		m_viewPart->readProperties( config );
+		m_viewPart->readProperties( const_cast<KConfig *>(config.config()) );
 
-		m_viewPart->openURL( m_diffURL );
+		m_viewPart->openUrl( m_diffURL );
 	}
 	else
 	{ // just in case something weird has happened, dont restore the diff then
 	  // Bruggie: or when some idiot like me changes the possible values for mode
 	  // IOW, a nice candidate for a kconf_update thingy :)
-		m_viewPart->readProperties( config );
+		m_viewPart->readProperties( const_cast<KConfig *>(config.config()) );
 	}
 }
 
@@ -460,35 +469,48 @@
 		{
 			m_textView = qobject_cast<KTextEditor::View*>( m_textViewPart->createView( this ) );
 			m_textViewWidget->setWidget( static_cast<QWidget*>(m_textView) );
-// 			m_textEditIface = editInterface( m_textViewPart );
-			connect( m_viewPart, SIGNAL(diffString(const QString&)),
-			         this, SLOT(slotSetDiffString(const QString&)) );
+	 		m_textViewPart->setHighlightingMode( "Diff" );
+	 		m_textViewPart->setText( m_diffString );
 		}
+		m_textViewWidget->show();
+		connect( m_textViewWidget, SIGNAL(visibilityChanged(bool)), SLOT(slotVisibilityChanged(bool)) );
 	}
+	else if ( m_textViewWidget->isVisible() )
+		m_textViewWidget->hide();
+	else
+		m_textViewWidget->show();
 
+	addDockWidget( Qt::BottomDockWidgetArea, m_textViewWidget );
 // 	m_textViewWidget->manualDock( m_mainViewDock, KDockWidget:: DockCenter );
 }
 
+void KompareShell::slotVisibilityChanged( bool visible )
+{
+	m_showTextView->setChecked( visible );
+}
+
 void KompareShell::slotSetDiffString( const QString& diffString )
 {
-// 	if ( m_textEditIface )
-// 		m_textEditIface->setText( diffString );
+ 	if ( m_textViewPart )
+ 		m_textViewPart->setText( diffString );
+	m_diffString = diffString;
 }
 
 void KompareShell::optionsConfigureKeys()
 {
-	KKeyDialog dlg( KKeyChooser::AllActions, KKeyChooser::LetterShortcutsAllowed, this );
+	KShortcutsDialog dlg( KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsAllowed, this );
 
-	dlg.insert( actionCollection() );
+	dlg.addCollection( actionCollection() );
 	if ( m_viewPart )
-		dlg.insert( m_viewPart->actionCollection() );
+		dlg.addCollection( m_viewPart->actionCollection() );
 
 	dlg.configure();
 }
 
 void KompareShell::optionsConfigureToolbars()
 {
-	saveMainWindowSettings( KGlobal::config(), autoSaveGroup() );
+	KConfigGroup group(KGlobal::config(), autoSaveGroup());
+	saveMainWindowSettings(group);
 	// use the standard toolbar editor
 	KEditToolBar dlg(factory());
 	connect(&dlg,SIGNAL(newToolbarConfig()),this,SLOT(newToolbarConfig()));
@@ -497,7 +519,8 @@
 
 void KompareShell::newToolbarConfig()
 {
-	applyMainWindowSettings( KGlobal::config(), autoSaveGroup() );
+	KConfigGroup group(KGlobal::config(), autoSaveGroup());
+	applyMainWindowSettings(group);
 }
 
 #include "kompare_shell.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/kompare_shell.h kdesdk-3.96.2-fix-kompare/kompare/kompare_shell.h
--- kdesdk-3.96.2-orig/kompare/kompare_shell.h	2007-05-03 10:40:14.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/kompare_shell.h	2007-12-05 03:48:54.000000000 +0100
@@ -118,6 +118,7 @@
 	void optionsConfigureToolbars();
 	void slotSetDiffString( const QString& diffString );
 	void newToolbarConfig();
+	void slotVisibilityChanged( bool visible );
 
 private:
 	void setupAccel();
@@ -136,7 +137,6 @@
 // 	KTextEditor::EditInterface* m_textEditIface;
 
 	QDockWidget*                m_textViewWidget;
-	QDockWidget*                m_mainViewDock;
 	QDockWidget*                m_navTreeDock;
 
 	KToggleAction*              m_showTextView;
@@ -144,6 +144,8 @@
 	enum Kompare::Mode          m_mode;
 	// This is the statusbarwidget for displaying the general stuff
 	KSqueezedTextLabel*         m_generalLabel;
+
+	QString                     m_diffString;
 };
 
 #endif // KOMPARE_H
diff -Nur kdesdk-3.96.2-orig/kompare/kompareurldialog.cpp kdesdk-3.96.2-fix-kompare/kompare/kompareurldialog.cpp
--- kdesdk-3.96.2-orig/kompare/kompareurldialog.cpp	2007-02-19 11:01:32.000000000 +0100
+++ kdesdk-3.96.2-fix-kompare/kompare/kompareurldialog.cpp	2007-12-06 02:58:36.000000000 +0100
@@ -36,25 +36,26 @@
     setFaceType( List );
 	KSharedConfig::Ptr cfg = KGlobal::config();
 
-// 	QVBox* filesBox = addVBoxPage( i18n( "Files" ), i18n( "Here you can enter the files you want to compare." ) );
-	m_filesPage = new FilesPage( 0 );
+	m_filesPage = new FilesPage();
+	KPageWidgetItem *filesItem = addPage( m_filesPage, i18n( "Files" ) );
+	filesItem->setHeader( i18n( "Here you can enter the files you want to compare." ) );
 	m_filesSettings = new FilesSettings( this );
-	m_filesSettings->loadSettings( cfg );
+	m_filesSettings->loadSettings( cfg.data() );
 	m_filesPage->setSettings( m_filesSettings );
-   	KPageWidgetItem *filesItem = new KPageWidgetItem( m_filesPage, i18n( "My Second Test Page" ) );
-	addPage( filesItem );
 
-// 	QVBox* diffBox = addVBoxPage( i18n( "Diff" ), i18n( "Here you can change the options for comparing the files." ) );
-// 	m_diffPage = new DiffPage( diffBox );
-// 	m_diffSettings = new DiffSettings( this );
-// 	m_diffSettings->loadSettings( cfg );
-// 	m_diffPage->setSettings( m_diffSettings );
-//
-// 	QVBox* viewBox = addVBoxPage( i18n( "Appearance" ), i18n( "Here you can change the options for the view." ) );
-// 	m_viewPage = new ViewPage( viewBox );
-// 	m_viewSettings = new ViewSettings( this );
-// 	m_viewSettings->loadSettings( cfg );
-// 	m_viewPage->setSettings( m_viewSettings );
+	m_diffPage = new DiffPage();
+	KPageWidgetItem *diffItem = addPage( m_diffPage, i18n( "Diff" ) );
+	diffItem->setHeader( i18n( "Here you can change the options for comparing the files." ) );
+	m_diffSettings = new DiffSettings( this );
+	m_diffSettings->loadSettings( cfg.data() );
+	m_diffPage->setSettings( m_diffSettings );
+
+	m_viewPage = new ViewPage();
+	KPageWidgetItem *viewItem = addPage( m_viewPage, i18n( "Appearance" ) );
+	viewItem->setHeader( i18n( "Here you can change the options for the view." ) );
+	m_viewSettings = new ViewSettings( this );
+	m_viewSettings->loadSettings( cfg.data() );
+	m_viewPage->setSettings( m_viewSettings );
 
 	adjustSize();
 
@@ -65,6 +66,8 @@
 	connect( m_filesPage->secondURLRequester(), SIGNAL( textChanged( const QString& ) ),
 	         this, SLOT( slotEnableOk() ) );
 
+	connect( this, SIGNAL(okClicked()), SLOT(slotOk()) );
+
 	slotEnableOk();
 }
 
@@ -82,13 +85,13 @@
 	m_diffPage->apply();
 	m_viewPage->apply();
 
-	m_filesSettings->saveSettings( cfg );
-	m_diffSettings->saveSettings( cfg );
-	m_viewSettings->saveSettings( cfg );
+	m_filesSettings->saveSettings( cfg.data() );
+	m_diffSettings->saveSettings( cfg.data() );
+	m_viewSettings->saveSettings( cfg.data() );
 
 	cfg->sync();
 
-/*	KDialogBase::slotOk();*/
+	//accept();
 }
 
 void KompareURLDialog::slotEnableOk()
@@ -125,7 +128,7 @@
 void KompareURLDialog::setGroup( const QString& groupName )
 {
 	m_filesSettings->setGroup( groupName );
-	m_filesSettings->loadSettings( KGlobal::config() );
+	m_filesSettings->loadSettings( KGlobal::config().data() );
 	m_filesPage->setSettings( m_filesSettings );
 }
 
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/diffpage.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffpage.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/diffpage.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffpage.cpp	2007-12-06 03:35:00.000000000 +0100
@@ -26,6 +26,7 @@
 #include <QVBoxLayout>
 #include <QHBoxLayout>
 #include <QTabWidget>
+#include <QToolTip>
 #include <kbuttongroup.h>
 #include <kapplication.h>
 #include <kcombobox.h>
@@ -45,8 +46,7 @@
 
 #include "diffpage.h"
 
-DiffPage::DiffPage( QWidget* parent ) : PageBase( parent ),
-	m_ignoreRegExpDialog( 0 )
+DiffPage::DiffPage() : PageBase(), m_ignoreRegExpDialog( 0 )
 {
 	m_tabWidget = new QTabWidget( this );
 
@@ -93,8 +93,8 @@
 
 	m_excludeFileCheckBox->setChecked( m_settings->m_excludeFilesFile );
 	slotExcludeFileToggled           ( m_settings->m_excludeFilesFile );
-	m_excludeFileURLComboBox->setURLs( m_settings->m_excludeFilesFileHistoryList );
-	m_excludeFileURLComboBox->setURL ( KUrl( m_settings->m_excludeFilesFileURL ) );
+	m_excludeFileURLComboBox->setUrls( m_settings->m_excludeFilesFileHistoryList );
+	m_excludeFileURLComboBox->setUrl ( KUrl( m_settings->m_excludeFilesFileURL ) );
 }
 
 DiffSettings* DiffPage::settings( void )
@@ -109,7 +109,7 @@
 
 void DiffPage::apply()
 {
-	m_settings->m_diffProgram                    = m_diffURLRequester->url();
+	m_settings->m_diffProgram                    = m_diffURLRequester->url().pathOrUrl();
 
 	m_settings->m_largeFiles                     = m_largerCheckBox->isChecked();
 	m_settings->m_createSmallerDiff              = m_smallerCheckBox->isChecked();
@@ -135,7 +135,7 @@
 	m_settings->m_excludeFilesFileURL            = m_excludeFileURLComboBox->currentText();
 	m_settings->m_excludeFilesFileHistoryList    = m_excludeFileURLComboBox->urls();
 
-	m_settings->saveSettings( KGlobal::config() );
+	m_settings->saveSettings( KGlobal::config().data() );
 }
 
 void DiffPage::setDefaults()
@@ -215,12 +215,14 @@
 	// add diff program selector
 	m_diffProgramGroup = new KButtonGroup( page );
 	layout->addWidget( m_diffProgramGroup );
+	QVBoxLayout* bgLayout = new QVBoxLayout( m_diffProgramGroup );
 	m_diffProgramGroup->setTitle( i18n( "Diff Program" ) );
 	//m_diffProgramGroup->setMargin( KDialog::marginHint() );
 
 	m_diffURLRequester = new KUrlRequester( m_diffProgramGroup);
 	m_diffURLRequester->setObjectName("diffURLRequester" );
 	Q3WhatsThis::add( m_diffURLRequester, i18n( "You can select a different diff program here. On Solaris the standard diff program does not support all the options that the GNU version does. This way you can select that version." ) );
+	bgLayout->addWidget( m_diffURLRequester );
 
 	layout->addStretch( 1 );
 	page->setMinimumSize( sizeHintForWidget( page ) );
@@ -239,20 +241,26 @@
 	m_modeButtonGroup = new KButtonGroup( page );
 	Q3WhatsThis::add( m_modeButtonGroup, i18n( "Select the format of the output generated by diff. Unified is the one that is used most frequently because it is very readable. The KDE developers like this format the best so use it for sending patches." ) );
 	layout->addWidget( m_modeButtonGroup );
+	QVBoxLayout* bgLayout = new QVBoxLayout( m_modeButtonGroup );
 	m_modeButtonGroup->setTitle( i18n( "Output Format" ) );
 	//m_modeButtonGroup->setMargin( KDialog::marginHint() );
 
 	QRadioButton* radioButton;
 	radioButton = new QRadioButton( i18n( "Context" ), m_modeButtonGroup );
+	bgLayout->addWidget( radioButton );
 	radioButton = new QRadioButton( i18n( "Ed" ),      m_modeButtonGroup );
 	radioButton->setEnabled( false );
+	bgLayout->addWidget( radioButton );
 	radioButton = new QRadioButton( i18n( "Normal" ),  m_modeButtonGroup );
+	bgLayout->addWidget( radioButton );
 	radioButton = new QRadioButton( i18n( "RCS" ),     m_modeButtonGroup );
 	radioButton->setEnabled( false );
+	bgLayout->addWidget( radioButton );
 	radioButton = new QRadioButton( i18n( "Unified" ), m_modeButtonGroup );
+	bgLayout->addWidget( radioButton );
 
 	// #lines of context (loc)
-	QGroupBox* groupBox = new QGroupBox( page );
+	Q3HGroupBox* groupBox = new Q3HGroupBox( page );
 	layout->addWidget( groupBox );
 	groupBox->setTitle( i18n( "Lines of Context" ) );
 	//groupBox->setMargin( KDialog::marginHint() );
@@ -278,15 +286,19 @@
 	// add diff options
 	KButtonGroup* optionButtonGroup = new KButtonGroup( page );
 	layout->addWidget( optionButtonGroup );
+	QVBoxLayout* bgLayout = new QVBoxLayout( optionButtonGroup );
 	optionButtonGroup->setTitle( i18n( "General" ) );
 	//optionButtonGroup->setMargin( KDialog::marginHint() );
 
 	m_smallerCheckBox     = new QCheckBox( i18n( "&Look for smaller changes" ), optionButtonGroup );
 	QToolTip::add( m_smallerCheckBox, i18n( "This corresponds to the -d diff option." ) );
+	bgLayout->addWidget( m_smallerCheckBox );
 	m_largerCheckBox      = new QCheckBox( i18n( "O&ptimize for large files" ), optionButtonGroup );
 	QToolTip::add( m_largerCheckBox, i18n( "This corresponds to the -H diff option." ) );
+	bgLayout->addWidget( m_largerCheckBox );
 	m_caseCheckBox        = new QCheckBox( i18n( "&Ignore changes in case" ), optionButtonGroup );
 	QToolTip::add( m_caseCheckBox, i18n( "This corresponds to the -i diff option." ) );
+	bgLayout->addWidget( m_caseCheckBox );
 
 	QHBoxLayout* groupLayout = new QHBoxLayout( layout );
 	groupLayout->setObjectName( "regexp_horizontal_layout" );
@@ -312,19 +324,25 @@
 
 	KButtonGroup* moreOptionButtonGroup = new KButtonGroup( page );
 	layout->addWidget( moreOptionButtonGroup );
+	bgLayout = new QVBoxLayout( moreOptionButtonGroup );
 	moreOptionButtonGroup->setTitle( i18n( "Whitespace" ) );
 	//moreOptionButtonGroup->setMargin( KDialog::marginHint() );
 
 	m_tabsCheckBox        = new QCheckBox( i18n( "E&xpand tabs to spaces in output" ), moreOptionButtonGroup );
 	QToolTip::add( m_tabsCheckBox, i18n( "This option corresponds to the -t diff option." ) );
+	bgLayout->addWidget( m_tabsCheckBox );
 	m_linesCheckBox       = new QCheckBox( i18n( "I&gnore added or removed empty lines" ), moreOptionButtonGroup );
 	QToolTip::add( m_linesCheckBox, i18n( "This option corresponds to the -B diff option." ) );
+	bgLayout->addWidget( m_linesCheckBox );
 	m_whitespaceCheckBox  = new QCheckBox( i18n( "Ig&nore changes in the amount of whitespace" ), moreOptionButtonGroup );
 	QToolTip::add( m_whitespaceCheckBox, i18n( "This option corresponds to the -b diff option." ) );
+	bgLayout->addWidget( m_whitespaceCheckBox );
 	m_allWhitespaceCheckBox = new QCheckBox( i18n( "Ign&ore all whitespace" ), moreOptionButtonGroup );
 	QToolTip::add( m_allWhitespaceCheckBox, i18n( "This option corresponds to the -w diff option." ) );
+	bgLayout->addWidget( m_allWhitespaceCheckBox );
 	m_ignoreTabExpansionCheckBox = new QCheckBox( i18n( "Igno&re changes due to tab expansion" ), moreOptionButtonGroup );
 	QToolTip::add( m_ignoreTabExpansionCheckBox, i18n( "This option corresponds to the -E diff option." ) );
+	bgLayout->addWidget( m_ignoreTabExpansionCheckBox );
 
 	layout->addStretch( 1 );
 	page->setMinimumSize( sizeHintForWidget( page ) );
@@ -339,7 +357,7 @@
 	layout->setSpacing( KDialog::spacingHint() );
 	layout->setMargin( KDialog::marginHint() );
 
-	QGroupBox* excludeFilePatternGroupBox = new QGroupBox( page );
+	Q3HGroupBox* excludeFilePatternGroupBox = new Q3HGroupBox( page );
 	excludeFilePatternGroupBox->setTitle( i18n( "File Pattern to Exclude" ) );
 	m_excludeFilePatternCheckBox = new QCheckBox( "", excludeFilePatternGroupBox );
 	QToolTip::add( m_excludeFilePatternCheckBox, i18n( "If this is checked you can enter a shell pattern in the text box on the right or select entries from the list." ) );
@@ -350,7 +368,7 @@
 
 	connect( m_excludeFilePatternCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotExcludeFilePatternToggled(bool)));
 
-	QGroupBox* excludeFileNameGroupBox = new QGroupBox( page );
+	Q3HGroupBox* excludeFileNameGroupBox = new Q3HGroupBox( page );
 	excludeFileNameGroupBox->setTitle( i18n( "File with Filenames to Exclude" ) );
 	m_excludeFileCheckBox     = new QCheckBox( "", excludeFileNameGroupBox );
 	QToolTip::add( m_excludeFileCheckBox, i18n( "If this is checked you can enter a filename in the combo box on the right." ) );
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/diffpage.h kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffpage.h
--- kdesdk-3.96.2-orig/kompare/libdialogpages/diffpage.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffpage.h	2007-12-06 03:07:01.000000000 +0100
@@ -42,7 +42,7 @@
 {
 Q_OBJECT
 public:
-	DiffPage( QWidget* );
+	DiffPage();
 	~DiffPage();
 
 public:
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/diffsettings.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffsettings.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/diffsettings.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/diffsettings.cpp	2007-12-04 19:28:41.000000000 +0100
@@ -16,6 +16,7 @@
 ****************************************************************************/
 
 #include <kconfig.h>
+#include <kconfiggroup.h>
 
 #include "diffsettings.h"
 
@@ -48,30 +49,30 @@
 {
 	KConfigGroup group( config, "Diff Options" );
 	m_diffProgram                    = group.readEntry    ( "DiffProgram", "" );
-	m_linesOfContext                 = group.readNumEntry ( "LinesOfContext", 3 );
-	m_largeFiles                     = group.readBoolEntry( "LargeFiles", true );
-	m_ignoreWhiteSpace               = group.readBoolEntry( "IgnoreWhiteSpace", false );
-	m_ignoreAllWhiteSpace            = group.readBoolEntry( "IgnoreAllWhiteSpace", false );
-	m_ignoreEmptyLines               = group.readBoolEntry( "IgnoreEmptyLines", false );
-	m_ignoreChangesDueToTabExpansion = group.readBoolEntry( "IgnoreChangesDueToTabExpansion", false );
-	m_ignoreChangesInCase            = group.readBoolEntry( "IgnoreChangesInCase", false );
-	m_ignoreRegExp                   = group.readBoolEntry( "IgnoreRegExp", false );
+	m_linesOfContext                 = group.readEntry ( "LinesOfContext", 3 );
+	m_largeFiles                     = group.readEntry( "LargeFiles", true );
+	m_ignoreWhiteSpace               = group.readEntry( "IgnoreWhiteSpace", false );
+	m_ignoreAllWhiteSpace            = group.readEntry( "IgnoreAllWhiteSpace", false );
+	m_ignoreEmptyLines               = group.readEntry( "IgnoreEmptyLines", false );
+	m_ignoreChangesDueToTabExpansion = group.readEntry( "IgnoreChangesDueToTabExpansion", false );
+	m_ignoreChangesInCase            = group.readEntry( "IgnoreChangesInCase", false );
+	m_ignoreRegExp                   = group.readEntry( "IgnoreRegExp", false );
 	m_ignoreRegExpText               = group.readEntry    ( "IgnoreRegExpText", "" );
-	m_ignoreRegExpTextHistory        = group.readListEntry( "IgnoreRegExpTextHistory" );
-	m_createSmallerDiff              = group.readBoolEntry( "CreateSmallerDiff", true );
-	m_convertTabsToSpaces            = group.readBoolEntry( "ConvertTabsToSpaces", false );
-	m_showCFunctionChange            = group.readBoolEntry( "ShowCFunctionChange", false );
-	m_recursive                      = group.readBoolEntry( "CompareRecursively", true );
-	m_newFiles                       = group.readBoolEntry( "NewFiles", true );
+	m_ignoreRegExpTextHistory        = group.readEntry( "IgnoreRegExpTextHistory", QStringList() );
+	m_createSmallerDiff              = group.readEntry( "CreateSmallerDiff", true );
+	m_convertTabsToSpaces            = group.readEntry( "ConvertTabsToSpaces", false );
+	m_showCFunctionChange            = group.readEntry( "ShowCFunctionChange", false );
+	m_recursive                      = group.readEntry( "CompareRecursively", true );
+	m_newFiles                       = group.readEntry( "NewFiles", true );
 
-	m_format = static_cast<Kompare::Format>( group.readNumEntry( "Format", Kompare::Unified ) );
+	m_format = static_cast<Kompare::Format>( group.readEntry( "Format", (int) Kompare::Unified ) );
 
 	KConfigGroup group2 ( config, "Exclude File Options" );
-	m_excludeFilePattern             = group2.readBoolEntry( "Pattern", false );
-	m_excludeFilePatternList         = group2.readListEntry( "PatternList" );
-	m_excludeFilesFile               = group2.readBoolEntry( "File", false );
+	m_excludeFilePattern             = group2.readEntry( "Pattern", false );
+	m_excludeFilePatternList         = group2.readEntry( "PatternList", QStringList() );
+	m_excludeFilesFile               = group2.readEntry( "File", false );
 	m_excludeFilesFileURL            = group2.readEntry    ( "FileURL", "" );
-	m_excludeFilesFileHistoryList    = group2.readListEntry( "FileHistoryList" );
+	m_excludeFilesFileHistoryList    = group2.readEntry( "FileHistoryList", QStringList() );
 }
 
 void DiffSettings::saveSettings( KConfig* config )
@@ -94,7 +95,6 @@
 	group.writeEntry( "ShowCFunctionChange",            m_showCFunctionChange );
 	group.writeEntry( "CompareRecursively",             m_recursive );
 	group.writeEntry( "NewFiles",                       m_newFiles );
-	group.setDirty( true );
 
 	KConfigGroup group2( config, "Exclude File Options" );
 	group2.writeEntry( "Pattern",            m_excludeFilePattern );
@@ -102,7 +102,8 @@
 	group2.writeEntry( "File",               m_excludeFilesFile );
 	group2.writeEntry( "FileURL",            m_excludeFilesFileURL );
 	group2.writeEntry( "FileHistoryList",    m_excludeFilesFileHistoryList );
-	group2.setDirty( true );
+
+	config->sync();
 }
 
 #include "diffsettings.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/filespage.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filespage.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/filespage.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filespage.cpp	2007-12-10 12:32:42.000000000 +0100
@@ -32,7 +32,7 @@
 #include "filessettings.h"
 #include "filespage.h"
 
-FilesPage::FilesPage( QWidget* parent ) : PageBase( parent ), m_URLChanged( false )
+FilesPage::FilesPage() : PageBase()
 {
 	QWidget* page = new QWidget( this );
 	QVBoxLayout* layout = new QVBoxLayout( page );
@@ -50,9 +50,6 @@
 	m_secondURLComboBox->setObjectName( "DestURLComboBox" );
 	m_secondURLRequester = new KUrlRequester( m_secondURLComboBox, m_secondGB );
 
-	connect( m_firstURLRequester, SIGNAL( urlSelected( const QString & ) ), SLOT( setSecondURL( const QString & ) ) );
-	connect( m_secondURLRequester, SIGNAL( urlSelected( const QString & ) ), SLOT( setFirstURL( const QString & ) ) );
-
 	m_thirdGB = new Q3GroupBox( 1, Qt::Vertical, i18n( "Encoding" ), page );
 	m_encodingComboBox = new QComboBox( false, m_thirdGB, "encoding_combobox" );
 	m_encodingComboBox->insertStringList( KGlobal::charsets()->availableEncodingNames() );
@@ -101,29 +98,29 @@
 {
 //	kDebug() << "first : " << m_firstURLComboBox->currentText() << endl;
 //	kDebug() << "second: " << m_secondURLComboBox->currentText() << endl;
-	m_firstURLComboBox->setURL( KUrl( m_firstURLComboBox->currentText() ) );
-	m_secondURLComboBox->setURL( KUrl( m_secondURLComboBox->currentText() ) );
+	m_firstURLComboBox->setUrl( KUrl( m_firstURLComboBox->currentText() ) );
+	m_secondURLComboBox->setUrl( KUrl( m_secondURLComboBox->currentText() ) );
 }
 
 
 void FilesPage::setFirstURLRequesterMode( unsigned int mode )
 {
-	m_firstURLRequester->setMode( mode );
+	m_firstURLRequester->setMode( (KFile::Mode) mode );
 }
 
 void FilesPage::setSecondURLRequesterMode( unsigned int mode )
 {
-	m_secondURLRequester->setMode( mode );
+	m_secondURLRequester->setMode( (KFile::Mode) mode );
 }
 
 void FilesPage::setSettings( FilesSettings* settings )
 {
 	m_settings = settings;
 
-	m_firstURLComboBox->setURLs( m_settings->m_recentSources );
-	m_firstURLComboBox->setURL( KUrl( m_settings->m_lastChosenSourceURL ) );
-	m_secondURLComboBox->setURLs( m_settings->m_recentDestinations );
-	m_secondURLComboBox->setURL( KUrl( m_settings->m_lastChosenDestinationURL ) );
+	m_firstURLComboBox->setUrls( m_settings->m_recentSources );
+	m_firstURLComboBox->setUrl( KUrl( m_settings->m_lastChosenSourceURL ) );
+	m_secondURLComboBox->setUrls( m_settings->m_recentDestinations );
+	m_secondURLComboBox->setUrl( KUrl( m_settings->m_lastChosenDestinationURL ) );
 	m_encodingComboBox->setCurrentText( m_settings->m_encoding );
 }
 
@@ -143,31 +140,11 @@
 
 void FilesPage::setDefaults()
 {
-	m_firstURLComboBox->setURLs( QStringList() );
-	m_firstURLComboBox->setURL( KUrl( "" ) );
-	m_secondURLComboBox->setURLs( QStringList() );
-	m_secondURLComboBox->setURL( KUrl( "" ) );
+	m_firstURLComboBox->setUrls( QStringList() );
+	m_firstURLComboBox->setUrl( KUrl( "" ) );
+	m_secondURLComboBox->setUrls( QStringList() );
+	m_secondURLComboBox->setUrl( KUrl( "" ) );
 	m_encodingComboBox->setCurrentText( "Default" );
 }
 
-void FilesPage::setFirstURL( const QString &url )
-{
-	QString _url = url;
-	if ( !m_URLChanged )
-	{
-		m_firstURLRequester->setUrl( _url.remove( url.section( '/', -1 ) ) );
-		m_URLChanged = true;
-	}
-}
-
-void FilesPage::setSecondURL( const QString &url )
-{
-	QString _url = url;
-	if ( !m_URLChanged )
-	{
-		m_secondURLRequester->setUrl( _url.remove( url.section( '/', -1 ) ) );
-		m_URLChanged = true;
-	}
-}
-
 #include "filespage.moc"
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/filespage.h kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filespage.h
--- kdesdk-3.96.2-orig/kompare/libdialogpages/filespage.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filespage.h	2007-12-10 12:20:22.000000000 +0100
@@ -37,7 +37,7 @@
 {
 Q_OBJECT
 public:
-	FilesPage( QWidget* parent );
+	FilesPage();
 	virtual ~FilesPage();
 
 public:
@@ -60,10 +60,6 @@
 	virtual void apply();
 	virtual void setDefaults();
 
-protected slots:
-	void setFirstURL( const QString & );
-	void setSecondURL( const QString & );
-
 private:
 	Q3GroupBox*     m_firstGB;
 	Q3GroupBox*     m_secondGB;
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/filessettings.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filessettings.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/filessettings.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/filessettings.cpp	2007-12-04 19:30:38.000000000 +0100
@@ -18,6 +18,7 @@
 
 #include <kapplication.h>
 #include <kconfig.h>
+#include <kconfiggroup.h>
 
 #include "filessettings.h"
 
@@ -32,23 +33,23 @@
 
 void FilesSettings::loadSettings( KConfig* config )
 {
-	config->setGroup( m_configGroupName );
+	KConfigGroup group( config, m_configGroupName );
 
-	m_recentSources            = config->readListEntry( "Recent Sources" );
-	m_lastChosenSourceURL      = config->readEntry    ( "LastChosenSourceListEntry", "" );
-	m_recentDestinations       = config->readListEntry( "Recent Destinations" );
-	m_lastChosenDestinationURL = config->readEntry    ( "LastChosenDestinationListEntry", "" );
-	m_encoding                 = config->readEntry    ( "Encoding", "default" );
+	m_recentSources            = group.readEntry( "Recent Sources", QStringList() );
+	m_lastChosenSourceURL      = group.readEntry    ( "LastChosenSourceListEntry", "" );
+	m_recentDestinations       = group.readEntry( "Recent Destinations", QStringList() );
+	m_lastChosenDestinationURL = group.readEntry    ( "LastChosenDestinationListEntry", "" );
+	m_encoding                 = group.readEntry    ( "Encoding", "default" );
 }
 
 void FilesSettings::saveSettings( KConfig* config )
 {
-	config->setGroup( m_configGroupName );
-	config->writeEntry( "Recent Sources", m_recentSources );
-	config->writeEntry( "Recent Destinations", m_recentDestinations );
-	config->writeEntry( "LastChosenSourceListEntry", m_lastChosenSourceURL );
-	config->writeEntry( "LastChosenDestinationListEntry", m_lastChosenDestinationURL );
-	config->writeEntry( "Encoding", m_encoding );
+	KConfigGroup group( config, m_configGroupName );
+	group.writeEntry( "Recent Sources", m_recentSources );
+	group.writeEntry( "Recent Destinations", m_recentDestinations );
+	group.writeEntry( "LastChosenSourceListEntry", m_lastChosenSourceURL );
+	group.writeEntry( "LastChosenDestinationListEntry", m_lastChosenDestinationURL );
+	group.writeEntry( "Encoding", m_encoding );
 	config->sync();
 }
 
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/pagebase.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/pagebase.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/pagebase.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/pagebase.cpp	2007-12-06 02:53:04.000000000 +0100
@@ -22,7 +22,7 @@
 
 #include "pagebase.h"
 
-PageBase::PageBase( QWidget* parent ) : QWidget( parent )
+PageBase::PageBase() : KVBox()
 {
 
 }
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/pagebase.h kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/pagebase.h
--- kdesdk-3.96.2-orig/kompare/libdialogpages/pagebase.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/pagebase.h	2007-12-06 02:53:56.000000000 +0100
@@ -21,18 +21,16 @@
 #define PAGEBASE_H
 
 #include <qsize.h>
-#include <qwidget.h>
 
-#include <kconfig.h>
-// #include <ktabctl.h>
+#include <kvbox.h>
 
 #include "kompare.h"
 
-class PageBase : public QWidget
+class PageBase : public KVBox
 {
 Q_OBJECT
 public:
-	PageBase( QWidget* );
+	PageBase();
 	~PageBase();
 
 public:
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/viewpage.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewpage.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/viewpage.cpp	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewpage.cpp	2007-12-06 03:37:21.000000000 +0100
@@ -19,10 +19,12 @@
 
 #include <qcheckbox.h>
 #include <QGroupBox>
+#include <Q3HGroupBox>
 #include <qlabel.h>
 #include <qlayout.h>
 #include <qspinbox.h>
 #include <QVBoxLayout>
+#include <QGridLayout>
 #include <QTabWidget>
 #include <QFontComboBox>
 
@@ -35,11 +37,12 @@
 #include "viewpage.h"
 #include "viewsettings.h"
 
-ViewPage::ViewPage( QWidget* parent ) : PageBase( parent )
+ViewPage::ViewPage() : PageBase()
 {
 	QWidget*     page;
 	QTabWidget*  tabWidget;
 	QVBoxLayout* layout;
+	QGridLayout* gridLayout;
 	QGroupBox*   colorGroupBox;
 	QGroupBox*   snolGroupBox;
 	QGroupBox*   tabGroupBox;
@@ -56,29 +59,38 @@
 	colorGroupBox->setTitle( i18n( "Colors" ) );
 	layout->addWidget( colorGroupBox );
 	//colorGroupBox->setMargin( KDialog::marginHint() );
+	gridLayout = new QGridLayout( colorGroupBox );
 
 	// add the removeColor
 	label = new QLabel( i18n( "Removed color:" ), colorGroupBox );
 	m_removedColorButton = new KColorButton( colorGroupBox );
 	label->setBuddy( m_removedColorButton );
+	gridLayout->addWidget( label, 0, 0 );
+	gridLayout->addWidget( m_removedColorButton, 0, 1 );
 
 	// add the changeColor
 	label = new QLabel( i18n( "Changed color:" ), colorGroupBox );
 	m_changedColorButton = new KColorButton( colorGroupBox );
 	label->setBuddy( m_changedColorButton );
+	gridLayout->addWidget( label, 1, 0 );
+	gridLayout->addWidget( m_changedColorButton, 1, 1 );
 
 	// add the addColor
 	label = new QLabel( i18n( "Added color:" ), colorGroupBox );
 	m_addedColorButton = new KColorButton( colorGroupBox );
 	label->setBuddy( m_addedColorButton );
+	gridLayout->addWidget( label, 2, 0 );
+	gridLayout->addWidget( m_addedColorButton, 2, 1 );
 
 	// add the appliedColor
 	label = new QLabel( i18n( "Applied color:" ), colorGroupBox );
 	m_appliedColorButton = new KColorButton( colorGroupBox );
 	label->setBuddy( m_appliedColorButton );
+	gridLayout->addWidget( label, 3, 0 );
+	gridLayout->addWidget( m_appliedColorButton, 3, 1 );
 
 	// scroll number of lines (snol)
-	snolGroupBox = new QGroupBox( page );
+	snolGroupBox = new Q3HGroupBox( page );
 	snolGroupBox->setTitle( i18n( "Mouse Wheel" ) );
 	layout->addWidget( snolGroupBox );
 	//snolGroupBox->setMargin( KDialog::marginHint() );
@@ -89,7 +101,7 @@
 
 	// Temporarily here for testing...
 	// number of spaces for a tab character stuff
-	tabGroupBox = new QGroupBox( page );
+	tabGroupBox = new Q3HGroupBox( page );
 	tabGroupBox->setTitle( i18n( "Tabs to Spaces" ) );
 	layout->addWidget( tabGroupBox );
 	//tabGroupBox->setMargin( KDialog::marginHint() );
@@ -108,7 +120,7 @@
 	layout->setSpacing( KDialog::spacingHint() );
 	layout->setMargin( KDialog::marginHint() );
 
-	QGroupBox* gb = new QGroupBox( page );
+	QGroupBox* gb = new Q3HGroupBox( page );
 	gb->setTitle( i18n( "Text Font" ) );
 	layout->addWidget( gb );
 	//gb->setMargin( KDialog::marginHint() );
@@ -169,7 +181,7 @@
 	m_settings->m_font                = QFont( m_fontCombo->currentFont() );
 	m_settings->m_font.setPointSize( m_fontSizeSpinBox->value() );
 
-	m_settings->saveSettings( KGlobal::config() );
+	m_settings->saveSettings( KGlobal::config().data() );
 }
 
 void ViewPage::setDefaults()
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/viewpage.h kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewpage.h
--- kdesdk-3.96.2-orig/kompare/libdialogpages/viewpage.h	2006-10-26 04:18:11.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewpage.h	2007-12-06 02:55:02.000000000 +0100
@@ -34,7 +34,7 @@
 {
 Q_OBJECT
 public:
-	ViewPage( QWidget* );
+	ViewPage();
 	~ViewPage();
 
 public:
diff -Nur kdesdk-3.96.2-orig/kompare/libdialogpages/viewsettings.cpp kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewsettings.cpp
--- kdesdk-3.96.2-orig/kompare/libdialogpages/viewsettings.cpp	2007-05-03 10:40:14.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdialogpages/viewsettings.cpp	2007-12-04 19:31:20.000000000 +0100
@@ -50,12 +50,12 @@
 void ViewSettings::loadSettings( KConfig* config )
 {
 	KConfigGroup cfg( config, "View Options" );
-	m_removeColor         = cfg.readColorEntry( "RemoveColor",         &default_removeColor );
-	m_changeColor         = cfg.readColorEntry( "ChangeColor",         &default_changeColor );
-	m_addColor            = cfg.readColorEntry( "AddColor",            &default_addColor );
-	m_appliedColor        = cfg.readColorEntry( "AppliedColor",        &default_appliedColor );
-	m_scrollNoOfLines     = cfg.readNumEntry  ( "ScrollNoOfLines",     3 );
-	m_tabToNumberOfSpaces = cfg.readNumEntry  ( "TabToNumberOfSpaces", 4 );
+	m_removeColor         = cfg.readEntry( "RemoveColor",         default_removeColor );
+	m_changeColor         = cfg.readEntry( "ChangeColor",         default_changeColor );
+	m_addColor            = cfg.readEntry( "AddColor",            default_addColor );
+	m_appliedColor        = cfg.readEntry( "AppliedColor",        default_appliedColor );
+	m_scrollNoOfLines     = cfg.readEntry  ( "ScrollNoOfLines",     3 );
+	m_tabToNumberOfSpaces = cfg.readEntry  ( "TabToNumberOfSpaces", 4 );
 
 	QFont stdFixed = KGlobalSettings::fixedFont();
 	stdFixed.setPointSize( 10 );
diff -Nur kdesdk-3.96.2-orig/kompare/libdiff2/komparemodellist.cpp kdesdk-3.96.2-fix-kompare/kompare/libdiff2/komparemodellist.cpp
--- kdesdk-3.96.2-orig/kompare/libdiff2/komparemodellist.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdiff2/komparemodellist.cpp	2007-12-05 07:44:18.000000000 +0100
@@ -23,15 +23,17 @@
 #include <qtextcodec.h>
 #include <q3valuelist.h>
 #include <QTextStream>
+#include <QLinkedList>
 
 #include <kaction.h>
+#include <kactioncollection.h>
 #include <kcharsets.h>
 #include <kdebug.h>
 #include <kdirwatch.h>
 #include <kio/netaccess.h>
 #include <klocale.h>
 #include <kmimetype.h>
-#include <ktempfile.h>
+#include <ktemporaryfile.h>
 #include <kstandardaction.h>
 
 #include "difference.h"
@@ -58,30 +60,39 @@
 	m_info( info ),
 	m_textCodec( 0 )
 {
-	m_applyDifference    = new KAction( i18n("&Apply Difference"), "1rightarrow", Qt::Key_Space,
-	                                 this, SLOT(slotActionApplyDifference()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_apply" );
-	m_unApplyDifference  = new KAction( i18n("Un&apply Difference"), "1leftarrow", Qt::Key_Backspace,
-	                                 this, SLOT(slotActionUnApplyDifference()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_unapply" );
-	m_applyAll           = new KAction( i18n("App&ly All"), "2rightarrow", Qt::CTRL + Qt::Key_A,
-	                                 this, SLOT(slotActionApplyAllDifferences()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_applyall" );
-	m_unapplyAll         = new KAction( i18n("&Unapply All"), "2leftarrow", Qt::CTRL + Qt::Key_U,
-	                                 this, SLOT(slotActionUnapplyAllDifferences()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_unapplyall" );
-	m_previousFile       = new KAction( i18n("P&revious File"), "2uparrow", Qt::CTRL + Qt::Key_PageUp,
-	                                 this, SLOT(slotPreviousModel()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_previousfile" );
-	m_nextFile           = new KAction( i18n("N&ext File"), "2downarrow", Qt::CTRL + Qt::Key_PageDown,
-	                                 this, SLOT(slotNextModel()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_nextfile" );
-	m_previousDifference = new KAction( i18n("&Previous Difference"), "1uparrow", Qt::CTRL + Qt::Key_Up,
-	                                 this, SLOT(slotPreviousDifference()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_previous" );
-	m_nextDifference     = new KAction( i18n("&Next Difference"), "1downarrow", Qt::CTRL + Qt::Key_Down,
-	                                 this, SLOT(slotNextDifference()),
-	                                 (( KomparePart* )parent)->actionCollection(), "difference_next" );
+	KActionCollection *ac = (( KomparePart* )parent)->actionCollection();
+	m_applyDifference = ac->addAction( "difference_apply", this, SLOT(slotActionApplyDifference()) );
+	m_applyDifference->setIcon( KIcon("arrow-right") );
+	m_applyDifference->setText( i18n("&Apply Difference") );
+	m_applyDifference->setShortcut( QKeySequence(Qt::Key_Space) );
+	m_unApplyDifference = ac->addAction( "difference_unapply", this, SLOT(slotActionUnApplyDifference()) );
+	m_unApplyDifference->setIcon( KIcon("arrow-left") );
+	m_unApplyDifference->setText( i18n("Un&apply Difference") );
+	m_unApplyDifference->setShortcut( QKeySequence(Qt::Key_Backspace) );
+	m_applyAll = ac->addAction( "difference_applyall", this, SLOT(slotActionApplyAllDifferences()) );
+	m_applyAll->setIcon( KIcon("arrow-right-double") );
+	m_applyAll->setText( i18n("App&ly All") );
+	m_applyAll->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_A) );
+	m_unapplyAll = ac->addAction( "difference_unapplyall", this, SLOT(slotActionUnapplyAllDifferences()) );
+	m_unapplyAll->setIcon( KIcon("arrow-left-double") );
+	m_unapplyAll->setText( i18n("&Unapply All") );
+	m_unapplyAll->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_U) );
+	m_previousFile = ac->addAction( "difference_previousfile", this, SLOT(slotPreviousModel()) );
+	m_previousFile->setIcon( KIcon("arrow-up-double") );
+	m_previousFile->setText( i18n("P&revious File") );
+	m_previousFile->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_PageUp) );
+	m_nextFile = ac->addAction( "difference_nextfile", this, SLOT(slotNextModel()) );
+	m_nextFile->setIcon( KIcon("arrow-down-double") );
+	m_nextFile->setText( i18n("N&ext File") );
+	m_nextFile->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_PageDown) );
+	m_previousDifference = ac->addAction( "difference_previous", this, SLOT(slotPreviousDifference()) );
+	m_previousDifference->setIcon( KIcon("arrow-up") );
+	m_previousDifference->setText( i18n("&Previous Difference") );
+	m_previousDifference->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_Up) );
+	m_nextDifference = ac->addAction( "difference_next", this, SLOT(slotNextDifference()) );
+	m_nextDifference->setIcon( KIcon("arrow-down") );
+	m_nextDifference->setText( i18n("&Next Difference") );
+	m_nextDifference->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_Down) );
 	m_previousDifference->setEnabled( false );
 	m_nextDifference->setEnabled( false );
 
@@ -293,16 +304,16 @@
 	if( !model->isModified() )
 		return true;
 
-	KTempFile* temp = new KTempFile();
+	KTemporaryFile* temp = new KTemporaryFile();
 
 	if( temp->status() != 0 ) {
 		emit error( i18n( "Could not open a temporary file." ) );
-		temp->unlink();
+		temp->remove();
 		delete temp;
 		return false;
 	}
 
-	QTextStream* stream = temp->textStream();
+	QTextStream stream( temp );
 	QStringList list;
 
 	DiffHunkListConstIterator hunkIt = model->hunks()->begin();
@@ -343,12 +354,12 @@
 	// kDebug( 8101 ) << "Everything: " << endl << list.join( "\n" ) << endl;
 
 	if( list.count() > 0 )
-		*stream << list.join( "" );
+		stream << list.join( "" );
 
 	temp->close();
 	if( temp->status() != 0 ) {
 		emit error( i18n( "<qt>Could not write to the temporary file <b>%1</b>, deleting it.</qt>", temp->name() ) );
-		temp->unlink();
+		temp->remove();
 		delete temp;
 		return false;
 	}
@@ -388,7 +399,7 @@
 	else
 	{
 		//model->slotSetModified( false );
-		temp->unlink();
+		temp->remove();
 		delete temp;
 	}
 
@@ -571,12 +582,12 @@
 {
 	kDebug() << "KompareModelList::saveDiff: " << endl;
 
-	m_diffTemp = new KTempFile();
+	m_diffTemp = new KTemporaryFile();
 	m_diffURL = url;
 
 	if( m_diffTemp->status() != 0 ) {
 		emit error( i18n( "Could not open a temporary file." ) );
-		m_diffTemp->unlink();
+		m_diffTemp->remove();
 		delete m_diffTemp;
 		m_diffTemp = 0;
 		return false;
@@ -598,9 +609,9 @@
 
 	if( success )
 	{
-		QTextStream* stream = m_diffTemp->textStream();
+		QTextStream stream( m_diffTemp );
 
-		*stream << m_diffProcess->diffOutput();
+		stream << m_diffProcess->diffOutput();
 
 		m_diffTemp->close();
 
@@ -615,7 +626,7 @@
 	}
 
 	m_diffURL.truncate( 0 );
-	m_diffTemp->unlink();
+	m_diffTemp->remove();
 
 	delete m_diffTemp;
 	m_diffTemp = 0;
@@ -856,6 +867,7 @@
 int KompareModelList::parseDiffOutput( const QString& diff )
 {
 	kDebug(8101) << "KompareModelList::parseDiffOutput" << endl;
+	emit diffString( diff );
 
 	QStringList diffLines = split( diff );
 
@@ -949,10 +961,14 @@
 
 	int srcLineNo = 1, destLineNo = 1;
 
-	QStringList lines = split( fileContents );
+	QStringList list = split( fileContents );
+	QLinkedList<QString> lines;
+	foreach (QString str, list) {
+		lines.append(str);
+	}
 
-	QStringList::ConstIterator linesIt = lines.begin();
-	QStringList::ConstIterator lEnd    = lines.end();
+	QLinkedList<QString>::ConstIterator linesIt = lines.begin();
+	QLinkedList<QString>::ConstIterator lEnd    = lines.end();
 
 	DiffHunkList* hunks = model->hunks();
 	kDebug(8101) << "Hunks in hunklist: " << hunks->count() << endl;
diff -Nur kdesdk-3.96.2-orig/kompare/libdiff2/komparemodellist.h kdesdk-3.96.2-fix-kompare/kompare/libdiff2/komparemodellist.h
--- kdesdk-3.96.2-orig/kompare/libdiff2/komparemodellist.h	2006-10-26 04:18:10.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdiff2/komparemodellist.h	2007-12-05 03:37:27.000000000 +0100
@@ -30,7 +30,7 @@
 
 class KAction;
 class KDirWatch;
-class KTempFile;
+class KTemporaryFile;
 
 class DiffSettings;
 class KompareProcess;
@@ -122,6 +122,7 @@
 	void applyDifference( bool apply );
 	void applyAllDifferences( bool apply );
 	void applyDifference( const Diff2::Difference* diff, bool apply );
+	void diffString( const QString& );
 
 	// Emits true when m_noOfModified > 0, false when m_noOfModified == 0
 	void setModified( bool modified );
@@ -170,7 +171,7 @@
 	QStringList split( const QString& diff );
 
 private:
-	KTempFile*            m_diffTemp;
+	KTemporaryFile*       m_diffTemp;
 	QString               m_diffURL;
 
 	KompareProcess*       m_diffProcess;
diff -Nur kdesdk-3.96.2-orig/kompare/libdiff2/levenshteintable.cpp kdesdk-3.96.2-fix-kompare/kompare/libdiff2/levenshteintable.cpp
--- kdesdk-3.96.2-orig/kompare/libdiff2/levenshteintable.cpp	2006-10-26 04:18:10.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdiff2/levenshteintable.cpp	2007-12-05 08:01:20.000000000 +0100
@@ -141,11 +141,11 @@
 	// Optimization, calculate row wise instead of column wise, wont trash the cache so much with large strings
 	for ( j = 1; j < n; ++j )
 	{
-		dj = QString(dq[ j ]).toInt();
+		dj = dq[j].unicode();
 
 		for ( i = 1; i < m; ++i )
 		{
-			si = QString(sq[ i ]).toInt();
+			si = sq[i].unicode();
 			if ( si == dj )
 				cost = 0;
 			else
diff -Nur kdesdk-3.96.2-orig/kompare/libdiff2/parserbase.cpp kdesdk-3.96.2-fix-kompare/kompare/libdiff2/parserbase.cpp
--- kdesdk-3.96.2-orig/kompare/libdiff2/parserbase.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/libdiff2/parserbase.cpp	2007-12-05 02:09:02.000000000 +0100
@@ -301,7 +301,7 @@
 {
 //	kDebug(8101) << "ParserBase::parseUnifiedHunkHeader()" << endl;
 
-	if ( m_unifiedHunkHeader.exactMatch( *m_diffIterator ) )
+	if ( m_diffIterator != m_diffLines.end() && m_unifiedHunkHeader.exactMatch( *m_diffIterator ) )
 	{
 		++m_diffIterator;
 		return true;
diff -Nur kdesdk-3.96.2-orig/kompare/main.cpp kdesdk-3.96.2-fix-kompare/kompare/main.cpp
--- kdesdk-3.96.2-orig/kompare/main.cpp	2007-08-29 11:55:07.000000000 +0200
+++ kdesdk-3.96.2-fix-kompare/kompare/main.cpp	2007-12-05 01:08:52.000000000 +0100
@@ -95,7 +95,7 @@
 				ks = new KompareShell();
 				ks->show();
 				kDebug( 8100 ) << "OpenDiff..." << endl;
-				if ( ( strlen( args->arg(0) ) == 1 ) && (  *(args->arg(0)) == '-' ) )
+				if ( args->arg(0) == QLatin1String("-") )
 					ks->openStdin();
 				else
 					ks->openDiff( args->url( 0 ) );
@@ -149,7 +149,7 @@
 			ks->show();
 
 			kDebug( 8100 ) << "Single file. so openDiff/openStdin is only possible..." << endl;
-			if ( ( strlen( args->arg(0) ) == 1 && *(args->arg(0)) == '-' ) )
+			if ( args->arg(0) == QLatin1String("-") )
 				ks->openStdin();
 			else
 				ks->openDiff( args->url( 0 ) );