This file is meant to be a place to track of medium to large-scale API changes
that we would like to make for the next binary incompatible release.

- Remove the smart-to-dumb-pointer conversion operator from KSharedPointer
  and replace it with a T* Get() member function. An implict conversion is
  far too dangerous.
  See: http://groups.google.com/groups?selm=4ognb0%243cd%40linda.teleport.com&oe=UTF-8&output=gplain

- Remove all KSocket, KServerSocket, KSocks and KExtendedSocket references
  throughout KDE in favour of libqt-addon's socket implementations.
  (note: if all goes well, libqt-addon will be part of Qt by then)
	thiago.macieira@kdemail.net

- Remove all methods marked 'deprecated' in KDE 3.x.

- Clean up the uses of virtual_hook, use normal virtuals instead (e.g. KZip/KArchive)

- Make it possible to create a KSystemTray without a KMainWindow and instead lazily
  create the main window on demand.

- Make KSystemTray's Quit option in the context menu call kapp->quit() instead of
  closing all windows, so apps that save their window state on exit don't need
  workarounds to detect a window close caused by the tray rather than the user.

- Make KSystemTray add its own reference to KApp, so tray apps that adhere to the
  style guide can safely close their main window without having to worry about
  the app quitting instead.

- Make some long-lasting operations threaded. There are some operations in KDE that
  take too long on at least ~500MHz hardware to be done using event loops. Examples
  are the use of KLibLoader to dlopen plugins and KRun to fire up other processes.
  Konqueror and KMail tend to stall occasionally too, but that's harder to refactor
  because the bulk of the work there is X11-related.

- Make it possible to use SSL-ed sockets outside KIO. KSSL isn't very suitable for
  reuse, and the certificate dialogs are not even available in public API at all,
  leading e.g. to Kopete IRC duplicating a lot of stuff and all KDE Jabber clients
  based on libpsi (PSI, Light Hawk and Kopete) using homebrewn solutions.

- Manually, properly clean up the includes in all of the headers.  Remove
  unnecessary ones and change pointers to use class foo; decorations and move the 
  headers into the cpp files.  When finished fixkdeincludes shouldn't find
  anything (but don't rely on fixkdeinclude, it should be done manually first!)

- Use of the C++ keyword "explicit". Make all ctors explicit which can be used
  with one parameter to minimize wrong use of the class (i.e. have a look at 
  Dirk's work on KURL). Another candidate: KService( KDesktopFile *config ).
  KGuiItem has one of these dangerous ctors, too. KUser has a whole bunch
  of them.

- Solve need for casting when using bitfield enums (e.g. KProcess::Communication),
  if Simon's solution works.

- Merge kdelibs/kdecore/kuser.h and kdeadmin/kuser/kuser.h.

- Simplify memory management with KParts. The part and the widget delete each other,
  which in fact makes it more complex to handle. The part owns the widget so it
  should delete it, but not the other way round.

- Other ideas in this thread: http://lists.kde.org/?l=kde-core-devel&m=107608067302571&w=2
  (Contributors to that thread, please add specific items here.)

- KConfigBase: For all the read*Entry methods that take a QFont *, QPoint *, QSize *, etc.
  for the default value, add overloads that use a const reference, so that one can write 
  resize( config->readSizeEntry( "Bleh", size() ); for example. Constructing a null 
  QFont/QPoint/QSize is cheap enough to justify a consistent and usable API (IMHO) .
  Keep source compatibility.

- Sort out reference counting of applications and KMainWindows: Add a setRefCountEnabled()
  function to KApplication; deref()ing the last reference should only quit the application
  if reference counts are enabled, and the reference count should be disabled by default
  so apps that don't use a KMainWindow mostly continue to work. Make the KMainWindow
  constructor call setRefCountEnabled(true), and make each KMainWindow hold its own
  reference to the application. The KMainWindow should drop its app reference on hide, and
  regain it on show.

  Make KSysTray also hold a reference to the app. Then apps that use more than one main
  window and the tray (like KSIrc and Kopete) will quit at the right time without nasty
  hacks.

- Change classes that store bool data using strings ("true"/"false") to use bool 
  calls (readBoolEntry()).  Although not technicaly a binary incompatiblity... 
  just something to bring up for possible change (for the better)

  Use KConfigXT instead! /FransE

- Is it really necessary to bother people using the KCM API:s with withFallback? I have
  never heard of it failing and when would you not like to have that fallback? I think
  a default of 'true' would be fine(and remove the argument in the APIs).

- Do we need to have factory arguments in the KCM API? (who would use it anyway?)

- KCModuleInfo should use d-pointer. Perhaps there is more classes.

- The config options in kdeglobals needs to be cleaned up a little. Perhaps I'm being picky..
	* They should be named properly, for example "enableIcons" instead of "EnableIcons". Or atleast
		settle on one thing.
	* AFAICT it would be the right thing if KWin had its own rc file instead of having its "WM" 
		section in kdeglobals.
	* Shouldn't KSpell have its own rc file instead of kdeglobals?
	* Should we allow spaces in option names?
	* Some option names are too short for being understandable. fixed->fixedFont; font->systemWideFont
	* Perhaps an own font section?

- kpassdlg.h needs to be renamed to kpassworddialog.h - consistent with other classes(it won't 
  break many apps). The class needs a facelift - see the comments in kpassdlg.{h,cpp}

- KProcess needs a major facelift. Not all of these items need to be BIC, but not needing to
  worry about legacy will certainly allow an overall cleaner solution.
  - the internals need to be encapsulated properly. many of the virtuals shouldn't be virtual;
    lots of protected members should be accessible only via accessors. the current model is
    theoretically super-flexible, but in fact it is only super-fragile.
  - clear up pipe() vs. socketpair() usage.
  - move the draining loop from commClose() to wait()
  - add additional "channels" beyond std*, with the built-in capability of passing the fd on the
    command line
  - redirections, including piping multiple kprocesses together. this should make most cases of
    reimplementing commSetupDone{P,C} superflous.
  - possibly create KForkProcess that covers most/all of the remaining commSetupDoneC
    reimplementations.
  - do something about the NoRead comm mode
  - add setComm(); remove comm arg from start(). as a side effect, this will allow for using
    writeStdin() in Block mode.
  - merge KProcIO into KProcess; add setBuffered() for separate channels.
  - use QByteArray for writeStdin(). better than the buf+len arg, as it is ref-counted.

- To discuss: Migrate the about dialog to use qhtml or khtml rather then the current
  setup of all of the widgets and sub widgets.  Might be a lot simpler, require a lot
  less code and be much more flexible for additions/enhancments.  Sidenote: currently
  the about information seems to be duplicated.

- Make API use US English, (eg. KCatalogue -> KCatalog)
