File: KDE3PORTING.html

package info (click to toggle)
kdelibs 4:3.5.5a.dfsg.1-8
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 86,260 kB
  • ctags: 72,369
  • sloc: cpp: 575,111; xml: 116,385; ansic: 27,951; sh: 10,565; perl: 6,241; java: 4,066; makefile: 3,775; yacc: 2,432; lex: 643; ruby: 329; asm: 166; jsp: 128; haskell: 116; f90: 99; ml: 75; awk: 71; tcl: 29; lisp: 24; php: 9
file content (672 lines) | stat: -rw-r--r-- 31,462 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
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>