summaryrefslogtreecommitdiffstats
path: root/KDE3PORTING.html
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /KDE3PORTING.html
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'KDE3PORTING.html')
-rw-r--r--KDE3PORTING.html672
1 files changed, 672 insertions, 0 deletions
diff --git a/KDE3PORTING.html b/KDE3PORTING.html
new file mode 100644
index 00000000..416b6024
--- /dev/null
+++ b/KDE3PORTING.html
@@ -0,0 +1,672 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML Level 2//EN//2.0">
+<HTML>
+<HEAD>
+ <TITLE>Guide to Porting Applications to KDE 3.0</TITLE>
+</HEAD>
+<BODY>
+
+<H2>Porting Applications to KDE 3.0</H2>
+This document contains the changes you have to apply to programs written for
+KDE 2.x when you want to port them to KDE 3.0.<P>
+
+As a start you should have a look at doc/porting.doc in the Qt package,
+or <a href="http://doc.trolltech.com/3.0/porting.html">this page online</a>.<P>
+
+<H3><A NAME="TOC">Table of Contents</A></H3>
+
+<UL>
+<LI><A HREF="#gettingstarted">Getting Started</A></LI>
+<LI><A HREF="#kab">Changes in kab</A></LI>
+<LI><A HREF="#kdecore">Changes in kdecore</A></LI>
+<LI><A HREF="#kdeui">Changes in kdeui</A></LI>
+<LI><A HREF="#kio">Changes in kio</A></LI>
+<LI><A HREF="#kparts">Changes in kparts</A></LI>
+<LI><A HREF="#kspell">Changes in kspell</A></LI>
+<LI><A HREF="#khtmlpart">API-cleanup in KHTML</A></LI>
+<LI><A HREF="#kfile">Changes in kfile</A></LI>
+<LI><A HREF="#kcontrol">KDE Control Center</A></LI>
+<LI><A HREF="#kicker">Panel Applets and Extensions</A></LI>
+</UL>
+
+<H3><A NAME="gettingstarted">Getting started</A></H3>
+
+ The first step to get your KDE application to compile under KDE 3.0,
+ is to detect KDE 3.0 and Qt 3.x at configure time. The easiest way to
+ get a working autoconf/automake framework, is to either use
+ <a href="http://www.kdevelop.org">KDevelop</a> or
+ <a href="http://home.earthlink.net/~granroth/kapptemplate/index.html">kapptemplate</a>
+ (available in CVS under the module "kdesdk"), to generate a new
+ application template. Replace the generated source files by yours
+ and adapt Makefile.am accordingly.
+<p>
+ Please note that we tried to be mostly source-compatible where it
+ was possible. To accomplish that, we added commonly used but still
+ deprecated / removed API parts in a #ifndef KDE_NO_COMPAT-block.
+ That means you can "test" and adjust your application by #defining
+ KDE_NO_COMPAT for compiling and see where it breaks. This is
+ recommended, as those backward compatibility "hacks" are not kept for
+ long.
+</p>
+<p>
+ <b>WARNING:</b>In some cases the names or signatures of signals or slots
+ have changed. Check your source carefully for this since these changes will
+ not be discovered by your compiler but will result in incorrect runtime
+ behavior if left uncorrected in your application.
+</p>
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kab">Changes in kab</A></H3>
+
+<H4>AddressBook</H4>
+The <i>getStandardFilename()</i> method has been renamed to <i>getStandardFileName()</i>.
+The old name will still work unless KDE_NO_COMPAT is defined.
+
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kdecore">Changes in kdecore</A></H3>
+
+<H4>KDesktopWidget</H4>
+KDesktopWidget is obsolete. Include &lt;qdesktopwidget.h&gt; and use QDesktopWidget
+instead, everything else is source compatible.
+
+<H4>Header file names</H4>
+<UL>
+<LI>kapp.h is now kapplication.h</LI>
+<LI>kuniqueapp.h is now kuniqueapplication.h</LI>
+<LI>kstddirs.h is now kstandarddirs.h</LI>
+<LI>kcolorbtn.h is now kcolorbutton.h</LI>
+<LI>kxmlgui.h is now kxmlguifactory.h</LI>
+<LI>kdatepik.h is now kdatepicker.h</LI>
+<LI>kdualcolorbtn.h is now kdualcolorbutton.h</LI>
+
+</UL>
+This is to help finding out header files from class names and the other
+way round. Compatibility headers have been created. You can use them as
+long as you don't compile with KDE_NO_COMPAT.
+
+<H4>DCOP</H4>
+The file with the DCOP connection information has been renamed. The new
+name is $HOME/.DCOPserver_<hostname>_<display>. The screen part has been
+stripped from <display> and the ':' character that separates host and
+display-number has been replaced with a '_'. If you access DCOP via
+DCOPClient you do not need to change anything.
+<p>
+It is no longer possible to make calls to an application registered as
+"<appid>-<pid>" with "<appid>" only. The full name can be obtained by using
+either KApplication::startServiceBy...() or DCOPClient::findObject() or
+their command line equivalents "dcopstart" and "dcopfind".
+
+<H4>KLibFactory</H4>
+KLibFactory's create method is no more virtual and the createObject method
+is now pure virtual. The former was marked as deprecated since KDE 2.0.
+All it takes in your component is to rename your existing create implementation
+to createObject and remove the 'emit objectCreated( yourObject );' line.
+
+<H4>KDesktopFile</H4>
+The <i>filename()</i> method has been renamed to <i>fileName()</i>.
+The old name will still work unless KDE_NO_COMPAT is defined.
+
+<H4>KPixmapSplitter</H4>
+KPixmapSplitter has now been moved to the new kdefx library.
+
+<H4>KStringHandler</H4>
+The <i>matchFilename( const QString& filename, const QString& pattern )</i> method has been
+renamed to <br><i>matchFileName( const QString& filename, const QString& pattern )</i>.
+The old name will still work unless KDE_NO_COMPAT is defined.
+
+<H4>KStyle</H4>
+Due to the major changes in the QStyle API in Qt3, KStyle has been completely
+re-written. KStyle is now a thin wrapper around QCommonStyle with a few extra
+primitive elements and a simple popupMenu transparency engine. All KStyles can
+now style Qt apps like designer and assistant automatically. KStyle is no longer
+present in kdecore. It is now in a new library called kdefx to allow Qt apps to
+use KDE's styles without having the styles linked to kdecore/kdeui.
+
+<H4>KURL</H4>
+The <i>filename( bool _ignore_trailing_slash_in_path = true )</i> method has been
+renamed to <br><i>fileName( bool _ignore_trailing_slash_in_path = true )</i>.
+The old name will still work unless KDE_NO_COMPAT is defined.
+
+<H4>KMD5</H4>
+HASHHEX and HASH has been removed to make this class namespace clean.
+They have been replaced by QCString and KMD5::Digest. <br>
+The API has been cleaned up, it is no longer necessary to call finalize().
+Simply remove any calls to it.
+
+<H4>KLocale</H4>
+<li>charset() has been removed. You might want to use encoding() instead.
+<li>setCharset(const QString &amp;) has been removed. You might want to use
+setEncoding(int) instead.
+<li>formatMoney(const QString &amp;) has been removed.
+<li>formatNumber(const QString &amp;) has been removed.
+<li>languages() has been removed. Use languageList() instead.
+<li>All references to monthName(), monthNamePossessive(), and weekDayName()
+should be replaced with methods from KLocale::calendar().
+<li>Hard coded date handling or date handling with QDate should in most
+cases be replaced by methods in KLocale::calendar().
+
+<H4>Accelerators Keys</H4>
+<h5>KAccel</h5>
+The following methods of been deprecated, and if KDE_NO_COMPAT is defined they will
+not be available.
+<ul>
+ <li> KAccel::insertItem() and KAccel::connectItem().
+<pre>
+ - kaccel-&gt;insertItem( i18n("Scroll Up"), "Scroll Up", "Up" );
+ - kaccel-&gt;connectItem( "Scroll Up", this, SLOT(scrollUp()) );
+ + kaccel-&gt;insert( "Scroll Up", i18n("Scroll Up"), QString::null,
+ Key_Up, this, SLOT(scrollUp()) );
+</pre>
+ Note that a What's This parameter is now a part of the insert function.
+ You might replace the QString::null parameter with
+ <pre> i18n("Scroll the current document's contents up by one line.") </pre>
+ for example.</li>
+ <li> KAccel::changeMenuAccel() has been deprecated because it was
+ never used in cvs. If you've used it in your application, the following
+ can replace it. Note, however, that this would be handled automatically
+ by using KAction instead.
+<pre>
+ - kaccel-&gt;changeMenuAccel( menu, id, "file_open" );
+ + menu-&gt;setAccel( kaccel-&gt;shortcut( "file_open" ).keyCodeQt(), id );
+</pre>
+ </li>
+</ul>
+The preferred means of defining a shortcut, however, is to use <b>KAction</b>.
+<pre>
+ new KAction( i18n("Scroll Up"), Key_Up,
+ this, SLOT(scrollUp()), actionCollection(), "Scroll Up" );
+</pre>
+
+<h5>KGlobalAccel</h5>
+<ul>
+ <li>Call <i>updateConnections()</i> after all <i>insert()</i> or
+ <i>insertItem()</i> (deprecated) calls have been made. This function then performs the
+ actually key grabbing. In order to improve program startup speed,
+ grabbing is no longer done automatically: usually <i>readSettings()</i>
+ is called after the actions have been defined, and this may cause
+ shortcut reassignments, which in turn used to make an expensive ungrab
+ of the old key and second grab of the new key necessary.</li>
+</ul>
+<h5>KStdAccel</h5>
+<ul>
+ <li><i>StdAccel::WhatThis</i> has been renamed to <i>StdAccel::WhatsThis</i>.
+ <li><i>StdAccel::Insert</i> and the corresponding <i>insert()</i>
+ have been removed. (Nobody on the list knew what its function was
+ supposed to be.) Calls to <i>insert()</i> and the equivalent
+ <i>key(KStdAccel::Insert)</i> can be replaced with the former default
+ of <i>Qt::CTRL+Qt::Key_Insert</i>.</li>
+ <li>The following functions have been deprecated and will need to be changed if KDE_NO_COMPAT is defined:
+ <table border=1>
+ <tr><th>Old</th><th>New</th></tr>
+ <tr><td>QString action(StdAccel id)</td><td>QString name(StdAccel id)</td></tr>
+ <tr><td>int defaultKey(StdAccel accel)</td><td>KShortcut shortcutDefault(StdAccel id)</td></tr>
+ <tr><td>QString description(StdAccel id)</td><td>QString label(StdAccel id)</td></tr>
+ <tr><td>bool isEqual(const QKeyEvent* pEvent, int keyQt)</td>
+ <td>The best method for replacing this varies. One possibility is to use
+ <i>KKey(const QKeyEvent*) == KKey(int)</i>. Another is to use
+ <i>KShortcut::contains( const KKey&/KKeySequence& )</i>.</td></tr>
+ <tr><td>int key(StdAccel)</td><td>const KShortcut& shortcut(StdAccel)</td></tr>
+ </table></li-->
+</ul>
+
+<H4>KIconLoader, KIconTheme</H4>
+Methods now use KIcon::Group and KIcon::Context instead of int as types for group and context arguments.
+The change should affect only code using hardcoded numeric values instead of using the proper enum constants.
+This applies to classes KIconLoader, KIconTheme and (in kio and kfile) KMimeType, KService, KIconDialog, KIconButton,
+KURLBar and KURLBarItem.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kdeui">Changes in kdeui</A></H3>
+
+<H4>KAccelMenu</H4>
+This class has been removed, Qt offers the same functionality.
+Use QPopupMenu/KPopupMenu or the XML-UI method for building menus.
+
+<H4>KAction</H4>
+<ul>
+ <li>The following methods have been deprecated and will need to be
+ replaced if KDE_NO_COMPAT is defined.
+ <table border=1>
+ <tr><th>Old</th><th>New</th></tr>
+ <tr><td>int accel()</td><td>const KShortcut&amp; shortcut()</td></tr>
+ <tr><td>int menuId()</td><td>int itemId()</td></tr>
+ <tr><td>void setAccel(int)</td><td>void setShortcut(const KShortcut&amp;)</td></tr>
+ </table></li>
+</ul>
+
+<h4>KActionCollection</h4>
+<ul>
+ <li>When constructing a KActionCollection object, a pointer to the focus widget should be passed.</li>
+ <li>The insert(), remove(), and take() methods have been deprecated.
+ If you wish to keep a list of actions, use the KActionPtrList container instead.
+ If you want to configure the shortcuts from multiple actions collections,
+ pass each collection to KKeyChooser or KKeyDialog via their insert() methods.</li>
+</ul>
+
+<H4>KAlphaPainter</H4>
+KAlphaPainter has been dropped, since Qt 3 has native support for
+hardware accelerated alpha blending.
+
+<H4>KAnimWidget</H4>
+This class no longer supports reading a list of images, instead it uses a
+single image-file that has been prepared with the kimage_concat tool.
+See kdelibs/pics/hicolor/kde for an example of its use.
+
+<H4>KContainerLayout</H4>
+This class has been removed, use Qt layouts instead.
+
+<H4>KCommand</H4>
+This class has been made lighter: the name isn't stored into the command anymore,
+but must be provided by the inherited class, as the result of the virtual name() function.
+This saves storing a QString into each command in memory.
+The former behavior is available in the class KNamedCommand, so for a quick port
+simply replace KCommand with KNamedCommand.
+
+<H4>KDialogBase</H4>
+The deprecated getMainWidget() method has been removed. Use mainWidget() instead.
+
+<H4>KDirectionButton</H4>
+...is gone. Use KArrowButton instead, it offers about the same
+functionality.
+
+<H4>KDockWidget</H4>
+The WidgetList parameter has been renamed to QWidgetList. Behaviour
+is identical.
+
+<H4>KEdit</H4>
+KEdit is now deprecated. You should use use KTextEditor::Editor or
+KTextEdit instead.
+
+<H4>KImageEffect</H4>
+KImageEffect has now been moved to the new kdefx library.
+
+<H4>KMessageBox</H4>
+KMessageBox now does automatic line-breaking. When using plain-text, you should
+remove any mid-sentence linebreaks. Only use line-breaks to indicate the end of
+a paragraph.
+
+<H4>KPanelApplet</H4>
+A new protected member method 'void reportBug()' was added. It gets called by
+Kicker if the 'Report Bug' entry in the context menu gets selected and should
+be overridden by applets which support the KPanelApplet::ReportBug action. This
+means that you don't have to extend KPanelApplet's generic action dispatcher
+void KPanelApplet::action() anymore.
+
+<H4>KPanelMenu</H4>
+The old KPanelMenu class has been renamed to KPanelAppMenu. The KPanelMenu
+class now corresponds to a new Kicker menu extension that is handled
+by the panel in a way similar to other applets (shared library loaded
+at run-time). See KDE 3.0 documentation
+for more informations on this new extension.
+
+<H4>KPixmapEffect</H4>
+PixmapEffect has now been moved to the new kdefx library.
+
+<H4>KProgress</H4>
+KProgress is now based on QProgressBar.
+This has led to a few API changes. In particular the constructors have been
+simplified, you simply need to pass the total number of steps instead of
+min / max / initialvalue / orientation. See documentation of both KProgress
+and QProgressBar.
+
+<H4>KRootPixmap</H4>
+The KRootPixmap class has been extended to make it more flexible, and the
+<i>checkAvailable(bool ignored)</i> method has been renamed to <i>isAvailable()</i>.
+The old name will still work unless KDE_NO_COMPAT is defined.
+
+<H4>KThemeBase, KThemeStyle</H4>
+KThemeBase and KThemeStyle have been ported over to the new QStyle/KStyle API
+present in Qt3/KDE3. KThemeBase is no longer in kdeui, but in kstyles/kthemestyle
+as its use is basically limited to KThemeStyle.
+
+<H4>KAction, KToolBar, KToolBarButton and icons</H4>
+The preferred way for specifying icons is passing the icon names (and the icons will be loaded by KIconLoader),
+instead of using QIconSet or QPixmap. This results in always using the correct icon size and allows delayed
+on-demand icon loading.
+<p>
+Method KAction::hasIconSet() has been renamed to KAction::hasIcon(), the old name will still work unless KDE_NO_COMPAT is defined.
+KAction::iconSet() now has an argument specifying icon group, the old KAction::iconSet() is still available unless KDE_NO_COMPAT
+is defined and returns KIcon::Small iconset, just like in KDE2.
+<p>
+KToolBarButton methods setPixmap(), setDefaultPixmap(), setDisabledPixmap(), setDefaultIcon() and setDisabledIcon() are deprecated.
+Use KToolBarButton::setIcon() (preferred) or KToolBarButton::setIconSet() instead.
+
+<H4>KAction and derived classes</H4>
+The protected set* methods have been renamed to update* and they now take only one argument (i.e. setText(int, const QString&)
+is now updateText(int) ). Because the former second argument was always the value of the a corresponding data member, you
+can simply call the accessor method (i.e. in updateText() call text() to get the text).
+
+<H4>KToggleAction</H4>
+exclusiveGroup() is no more virtual. setExclusiveGroup(const
+QString&) is not a slot anymore.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kio">Changes in kio</A></H3>
+
+<H4>KPropertiesDialog</H4>
+<ul>
+ <li>The header file has been renamed from kpropsdlg.h to kpropertiesdialog.h.</li>
+ <li>KPropertiesDialog::KPropertiesDialog(const KURL&, mode_t, QWidget*,
+ const char*, bool, bool ) has been removed since mode_t was no longer
+ used. Simply omit the mode_t parameter.</li>
+</ul>
+
+<H4>KTarGz/KTarBase/KTarData</H4>
+<ul>
+ <li>The KTarBase and KTarData classes have been removed.</li>
+ <li>KTarGz is now KTar (#define for source compatibility)</li>
+ <li>A base class KArchive has been written, to support other archive formats in the future</li>
+ <li>KTarEntry is now KArchiveEntry, KTarDirectory is now KArchiveDirectory, and KTarFile is now KArchiveFile.</li>
+ <li>The classes ProgressBase, StatusbarProgress and DefaultProgress have been moved to the KIO namespace.</li>
+ <li>The signal KDirLister::started(const QString &amp;url) has changed to KDirLister::started(const KURL &amp;url).<li>
+ <li>KServiceTypeProfile::preferredService( const QString &amp; serviceType, bool needApp ) has been removed, use
+ KServiceTypeProfile::preferredService( ..., "Application") if needApp was true, or
+ KServiceTypeProfile::preferredService( ..., QString::null) if needApp was false.
+ <li>The following functions in KProtocolManager have been replaced:
+ <ul>
+<li>ftpProxy(), use proxyFor("ftp") instead.
+<li>httpProxy(), use proxyFor("http") instead.
+<li>slaveProtocol(const QString&amp;), use slaveProtocol(const KURL &amp;url, QString &amp;proxy) instead.
+<li>defaultReadTimeout(), use DEFAULT_READ_TIMEOUT instead. (See ioslave_defaults.h)
+<li>defaultProxyConnectTimeout(), use DEFAULT_PROXY_CONNECT_TIMEOUT instead. (See ioslave_defaults.h)
+<li>defaultResponseTimeout(), use DEFAULT_RESPONSE_TIMEOUT instead. (See ioslave_defaults.h)
+<li>minimumTimeoutThreshold(), use MIN_TIMEOUT_VALUE instead. (See ioslave_defaults.h)
+ </ul>
+ <li>The following functions in KProtocolManager have been removed:
+ <ul>
+<li>setUserAgentList( const QStringList&amp; )
+<li>userAgentList();
+<li>setReadTimeout()
+<li>setConnectTimeout( int )
+<li>setProxyConnectTimeout( int )
+<li>setResponseTimeout( int )
+<li>setMarkPartial( bool )
+<li>setMinimumKeepSize( int )
+<li>setAutoResume( bool )
+<li>setPersistentConnections( bool )
+<li>setMaxCacheAge( int )
+<li>setUseCache( bool )
+<li>setMaxCacheSize( int )
+<li>setCacheControl( KIO::CacheControl )
+<li>setUseProxy( bool )
+<li>setUseReverseProxy( bool )
+<li>setProxyType( ProxyType )
+<li>setProxyAuthMode( ProxyAuthMode )
+<li>setFtpProxy( const QString&amp; )
+<li>setHttpProxy( const QString&amp; )
+<li>setProxyFor( const QString&amp;, const QString&amp; )
+<li>setNoProxyFor( const QString&amp; )
+<li>setProxyConfigScript( const QString&amp; )
+ </ul>
+ </li>
+ <li>In order to support files &gt; 4Gb, the file size / file-offset argument
+ in the signals totalSize, processedSize and canResume, which are used
+ by the io-slaves and passed along to jobs, has been changed from
+ <b>unsigned long</b> to <b>KIO::filesize_t</b>.
+ Make sure to check if you use these signals since your compiler
+ will typically not generate a compile-time error for these changes,
+ instead you might get a run-time error when you try to connect to
+ one of these signals using the old signature.
+ </li>
+</ul>
+
+<H4>KOpenWithHandler / KFileOpenWithHandler</H4>
+Those two classes are deprecated, no need to create a KFileOpenWithHandler anymore.
+The merging of libkio, libksycoca, libkfile and libkssl into a single libkio has
+allowed to fix this dependency problem: KRun can now use the OpenWith dialog directly.
+
+<H4>KMimeType, KService</H4>
+Methods now use KIcon::Group and KIcon::Context instead of int as types for group and context arguments.
+The change should affect only code using hardcoded numeric values instead of using the proper enum constants.
+
+<H4>KFilterDev</H4>
+The createFilterDevice method is deprecated. Use deviceForFile instead.
+
+<H4>KDirWatch</H4>
+<ul>
+ <li>The signal fileDirty( const QString&amp; ) has been removed</li>
+ <li>The signal created( const QString&amp; ) has been added</li>
+ <li>The signal deleted( const QString&amp; ) has been added</li>
+ <li>The signal dirty( const QString&amp; ) may be emitted with a file name, not only
+ a directory name. This depends on which backend is used but will probably always be
+ the case in KDE 3.1. You should prepare to receive dirty( dirname ) or dirty( filename )
+ when a file has changed.
+ </li>
+</ul>
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kparts">Changes in kparts</A></H3>
+
+<H4>KParts::Factory</H4>
+The createPart method is no more virtual and the createPartObject method
+is now pure virtual. The former was marked as deprecated since KDE 2.0.
+All it takes in your component is to rename your existing createPart implementation
+to createPartObject and remove the 'emit objectCreated( yourObject );' line.
+
+<H4>KParts::Part</H4>
+The <code>bool isSelectable() const</code> is no more virtual. So when you want to
+change the behavior of the selectable property you don't need to re-implement
+both virtual functions, setSelectable and isSelectable, but instead just
+re-implementing setSelectable does the job. The very same applies for
+the <code>KURL url() const</code> and ReadWritePart's <code>bool isReadWrite const</code>
+and <code>bool isModified() const</code> methods.
+<p>
+The <code>void showProgressInfo(bool)</code>
+method has been renamed to <code>bool setProgressInfoEnabled(bool)</code>. The old name will
+still work unless KDE_NO_COMPAT is defined.
+
+<H4>KParts::BrowserExtension</H4>
+The <code>URLArgs urlArgs()</code> method is no more virtual. So when you want to
+change the behavior of the urlArgs property you don't need to re-implement
+both virtual functions, setURLArgs and urlArgs, but instead just re-implementing
+setURLArgs does the job.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kspell">Changes in kspell</A></H3>
+
+<H4>KSpell</H4>
+The API has been cleaned up to be in line with the rest of kdelibs, in particular:
+<ul>
+<li>suggestions() now returns a QStringList instead of a pointer to a QStringList
+<li>intermediateBuffer() now returns a QString instead of a pointer to a QString
+<li>The signal <b>misspelling(QString, QStringList *, unsigned)</b> has changed to
+ misspelling(const QString &amp;, const QStringList &amp;, unsigned int)
+<li>The signal <b>corrected(QString, QString, unsigned)</b> has changed to
+ corrected(const QString &amp;, const QString &amp;, unsigned int)
+<li>The signal <b>ignoreall(QString)</b> has changed to
+ ignoreall(const QString &amp;)
+<li>The signal <b>ignoreword(QString)</b> has changed to
+ ignoreword(const QString &amp;)
+<li>The signal <b>addword(QString)</b> has changed to
+ addword(const QString &amp;)
+</ul>
+
+ Make sure to check if you use the above signals since your compiler
+ will typically not generate a compile-time error for these changes,
+ instead you might get a run-time error when you try to connect to
+ one of these signals using the old signature.
+
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="khtmlpart">API-cleanups in KHTML</A></H3>
+
+There were a few relatively minor API-adjustements in KHTMLPart. In particular:
+<ul><li>enableJScript(bool) has been replaced by setJScriptEnabled(bool)
+<li>enableJava(bool) has been replaced by setJavaEnabled(bool)
+<li>enablePlugins(bool) has been replaced by setPluginsEnabled(bool)
+<li>autoloadImages(bool) has been replaced by setAutoloadImages(bool)
+<li>enableMetaRefresh(bool) has been replaced by setMetaRefreshEnabled(bool)
+<li>setBaseURL and setBaseTarget have been removed. baseURL(), baseTarget() and
+completeURL() are remained for compatibility reasons, but they're deprecated now. use the variants in DOM::HTMLDocument() instead.
+<li>the second parameter of KHTMLPart::completeURL is removed. it didn't have
+ any effect before either.
+</ul>
+Besides that, all methods previously marked as deprecated or were internal
+but accidentally part of the public API are now private or removed.
+As they were marked as becoming private already you should not experience
+any problems. Backward compatibility exists for the common methods, to
+disable this use a #define KDE_NO_COMPAT.
+<p>In KHTMLView, the following changes were done:
+<ul>
+<li>gotoNextLink has been replaced by gotoLink(true);
+<li>gotoPrevLink has been replaced by gotoLink(false);
+</ul>
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+
+<H3><A NAME="kfile">Changes in kfile</A></H3>
+The kfile-library, as used by the KFileDialog provides classes for directory browsing widgets.
+Those classes gained some new features, some parts were merged with other existing classes
+and in some cases the API was cleaned up/fixed. The library is now built as part of libkio
+library (there's no need to modify Makefiles which use $LIB_KFILE instead of hardcoding -lkfile).
+<p>
+Even if the list of changes is long, the affected code base should be relatively small, as most
+parts are rarely used outside of kfile.
+<p>
+The changes are:
+<H4>KFileItem</H4>
+The KFileViewItem class is completely replaced with KFileItem from kio. All its functionality has
+been merged with its former base class KFileItem. Additionally, some of its methods have been
+modified:
+<table>
+<tr><th>Old:</th><th>New:</th></tr>
+<tr><td>access()</td><td>permissionsString()</td></tr>
+<tr><td>date()</td><td>timeString()</td></tr>
+<tr><td>setViewItem( const KFileView *view, const void *item )</td><td>setExtraData( const void *key, void *value )</td></tr>
+<tr><td>pixmap()</td><td>The parameterless method has been removed, use pixmap( int size, int state = 0 ) instead.</td></tr>
+</table>
+
+<H4>KFileReader</H4>
+This class has been merged with KDirLister from kio.
+
+<H4>KDirOperator</H4>
+<table>
+<tr><th>Old:</th><th>New:</th></tr>
+<tr><td>saveConfig()</td><td>writeConfig()</td></tr>
+<tr><td>setFileReader()</td><td>setDirLister()</td></tr>
+<tr><td>fileReader()</td><td>dirLister()</td></tr>
+<tr><td>activatedMenu( const KFileViewItem * )</td><td>activatedMenu( const KFileItem *, const QPoint& pos )</td></tr>
+</table>
+
+<H4>KFileDetailView</H4>
+The protected method setSortIndicator() has been removed, it's not needed anymore.
+
+<H4>KFileView</H4>
+This is the baseclass for all the views. It changed in many respects to allow for greater
+flexibility and efficiency.
+<br><br>
+Sorting has changed radically. Previously, KFileView had protected methods QuickSort,
+compareItems() and mergeLists() to sort directory entries for displaying in the views. Now,
+KFileView does not do any sorting anymore. Instead, the view's (i.e. KIconView, KListView)
+sorting is utilized by letting its view-items provide a QString key() method. Therefore,
+KFileView offers the two methods
+<ul>
+<li>QString sortingKey( const QString&amp; value, bool isDir, int sortSpec )</li>
+<li>QString sortingKey( KIO::filesize_t value, bool isDir, int sortSpec )</li>
+</ul>
+which the view-classes can use to generate the string for the key() method. The KFile::SortMode
+enum has been removed, as QDir::SortSpec is used entirely.
+
+<br><br>
+Further changes:
+<table>
+<tr><th>Old:</th><th>New:</th></tr>
+<tr><td>not existant</td><td>virtual void readConfig( KConfig *, const QString&amp; group = QString::null )</td></tr>
+<tr><td>not existant</td><td>void writeConfig( KConfig *, const QString&amp; group = QString::null)</td></tr>
+<tr><td>virtual void setCurrentItem( const QString&amp; filename, KFileViewItem * )</td><td>Replaced with the two methods below.</td></tr>
+<tr><td>&nbsp;</td><td>void setCurrentItem( const QString&amp; filename );</td></tr>
+<tr><td>&nbsp;</td><td>virtual void setCurrentItem( const KFileViewItem * ) = 0;</td></tr>
+<tr><td>setOperator( QObject * )</td><td>setParentView( KFileView * )</td></tr>
+<tr><td>virtual void insertSorted( KFileViewItem *, uint count )</td><td>virtual void insertItem( KFileItem * )</td></tr>
+<tr><td>virtual void addItemList( const KFileViewItemList &amp;list )</td><td>not virtual anymore. Sufficient to reimplement insertItem()</td></tr>
+</table>
+<br><br>
+Three more pure virtual methods have been added:
+<ul>
+<li>virtual KFileItem * firstFileItem() const = 0</li>
+<li>virtual KFileItem * nextItem( const KFileItem * ) const = 0</li>
+<li>virtual KFileItem * prevItem( const KFileItem * ) const = 0</li>
+</ul>
+
+<p>
+State-changes are now signaled solely via the KFileViewSignaler object, that every KFileView
+has a protected member of ("sig"). The methods activateMenu(), highlight() and select() have
+been removed. If you implemented a KFileView, change your code in the following way:
+<table>
+<tr><th>Old:</th><th>New:</th></tr>
+<tr><td>activateMenu( item )</td><td>sig->activateMenu( item, pos )</td></tr>
+<tr><td>highlight( item )</td><td>sig->highlightFile( item )</td></tr>
+<tr><td>select( item )</td><td>sig->select( item )</td></tr>
+</table>
+
+
+<H4>KFileViewSignaler</H4>
+The methods activateDir( const KFileViewItem * ) and activateFile( const KFileViewItem * )
+have been merged into the new method activate( const KFileItem * ).
+
+<br><br>
+Carsten Pfeiffer <A HREF="mailto:pfeiffer@kde.org">pfeiffer@kde.org</A>
+
+<H4>KIconDialog, KIconButton, KURLBar, KURLBarItem</H4>
+Methods now use KIcon::Group and KIcon::Context instead of int as types for group and context arguments.
+The change should affect only code using hardcoded numeric values instead of using the proper enum constants.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+<p>
+
+
+<H3><A NAME="kcontrol">Changes in KControl</A></H3>
+
+<H4>Modules that require root permission</H4>
+The meaning of the <i>X-KDE-RootOnly</i> flag in the .desktop files has changed.
+In KControl 2.0 a message was shown if the user did not press the &quot;modify&quot;
+button. With the additional flag <i>X-KDE-HasReadOnlyMode</i> it was possible to show
+a disabled version of the module instead of the message. The behavior was inconsistent
+and has been changed:
+
+<ul>
+<li><i>X-KDE-HasReadOnlyMode</i> is not used anymore and is ignored by KControl &gt; 2.0.
+<li><i>X-KDE-RootOnly</i> does now show a disabled preview of the widget and a notification box.
+<li>If you want the old behavior back set <i>X-KDE-IsHiddenByDefault</i> along with
+<i>X-KDE-RootOnly</i>. Please note that this behavior is deprecated the sake of
+usability.
+</ul>
+
+For more details please consult the HOWTO file in the kcontrol directory.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+<p>
+
+<H3><A NAME="kicker">Panel Applets and Extensions</A></H3>
+
+<p>The API for Kicker panel applets and extensions has changed. Panels can now be
+left/top, center, or right/bottom aligned, and applets and extensions may receive
+notification about a change in alignment.
+
+<H4>KPanelApplet</H4>
+
+<p>The virtual methods orientationChange() and popupDirectionChange() are deprecated.
+Instead you should reimplement positionChange() and alignmentChange() to be
+notified of changes in the position and alignment of the panel on which your applet
+resides. In addition, the popupDirection() method and the Direction enum are
+deprecated. Instead you should use the position() method and Position enum. Applets that use
+the deprecated methods will still work with KDE 3, but may not compile or work with
+a future version.
+
+<H4>KPanelExtension</H4>
+
+<p>There is a new method alignmentChange() that your extension should reimplement if
+it needs to know about changes in alignment.
+
+<H4><P ALIGN="RIGHT"><A HREF="#TOC">Return to the Table of Contents</A></P></H4>
+<p>
+
+Dirk Mueller <A HREF="mailto:mueller@kde.org">mueller@kde.org</A>
+</BODY>
+</HTML>