Browse Source

Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.


git-svn-id: svn:// 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
toma 10 years ago
100 changed files with 16725 additions and 0 deletions
  1. +9
  2. +45
  3. +94
  4. +50
  5. +16
  6. +84
  7. +82
  8. +4
  9. +44
  10. +340
  11. +430
  12. +251
  13. +167
  14. +5
  15. +3
  16. +27
  17. +23
  18. +14
  19. +166
  20. +6
  21. +20
  22. +66
  23. BIN
  24. +58
  25. +46
  26. +55
  27. +62
  28. +443
  29. +97
  30. +123
  31. +74
  32. +145
  33. +111
  34. +218
  35. +28
  36. +45
  37. +1035
  38. +13
  39. +223
  40. +175
  41. +49
  42. +86
  43. +72
  44. +70
  45. +55
  46. +1533
  47. +343
  48. +8
  49. +479
  50. +147
  51. +715
  52. +301
  53. +52
  54. +46
  55. +812
  56. +137
  57. +797
  58. +154
  59. +30
  60. +77
  61. +58
  62. BIN
  63. +119
  64. +72
  65. +219
  66. +857
  67. +292
  68. +12
  69. +157
  70. +86
  71. +119
  72. +63
  73. +268
  74. +102
  75. +1023
  76. +206
  77. +146
  78. +469
  79. +106
  80. +160
  81. +90
  82. +347
  83. +179
  84. +86
  85. +61
  86. +213
  87. +100
  88. BIN
  89. BIN
  90. BIN
  91. BIN
  92. BIN
  93. BIN
  94. BIN
  95. +67
  96. +60
  97. +80
  98. +20
  99. +22
  100. +6

+ 9
- 0
.emacs-dirvars View File

@@ -0,0 +1,9 @@
;; -*- emacs-lisp -*-
;; This file is processed by the dirvars emacs package. Each variable
;; setting below is performed when this dirvars file is loaded.
indent-tabs-mode: nil
tab-width: 8
c-basic-offset: 2
evaluate: (c-set-offset 'innamespace '0)

+ 45
- 0

@@ -0,0 +1,45 @@
certmanager Steffen Hansen <>
kaddressbook Tobias Koenig <>
Cornelius Schumacher <>
kalarm David Jarvie <>
kalarmd Cornelius Schumacher <>
kandy Cornelius Schumacher <>
karm Mark Bucciarelli <>
kdgantt Kalle Dalheimer <>
Lutz Rogowski <>
kfile-plugins ?
kgantt ? Jochen Hanff <>
kioslaves ? Marc Mutz <>
kitchensync Cornelius Schumacher <>
Holger Freyther <>
kmail Ingo Kloecker <>
Don Sanders <>
kmailcvt Danny Kukawka <>
kmobile Helge Deller <>
knode Roberto Selbach Teixeira <>
knotes Michael Brade <>
konsolekalendar Tuukka Pasanen <>
Allen Winter <>
kontact Daniel Molkentin <>
korganizer Reinhold Kainhofer <>
Cornelius Schumacher <>
korn Mart Kelder <>
kpilot Adriaan de Groot <>
Reinhold Kainhofer <>
ktnef Michael Goffioul <>
libical Cornelius Schumacher <>
Reinhold Kainhofer <>
libkcal Cornelius Schumacher <>
Reinhold Kainhofer <>
libkdenetwork Marc Mutz <>
Mathias Waack <> (Scoring)
Ingo Klöcker <> (kpgp)
Carsten Burghardt <> (kfoldertree, ksubscription, kaccount)
Karl-Heinz Zimmer <> (cryptplugwrapper*)
libkdepim Cornelius Schumacher <>
Tobias Koenig <> (addresseeview, kvcarddrag)
Zack Rusin <> (addressesdialog, komposer)
Don Sanders <> (maillistdrag)
libkpimexchange Jan-Pascal van Best <>
libksieve ? Marc Mutz <>
mimelib ?

+ 94
- 0
Mainpage.dox View File

@@ -0,0 +1,94 @@
* @mainpage KDE PIM API Reference
* This section contains the KDE online class reference for the current
* development version of KDE-PIM. Additionally, you can subscribe
* or read the mailing lists for any additions and/or modifications
* to the API.
* <table width="100%">
* <tr><th>Applications</th><th>Libraries</th></tr>
* <tr><td valign="top">
* - <a href="certmanager/html/index.html"><b>certmanager</b></a>
* (<a href="certmanager/html/classes.html">classes</a>)\n
* <i>KDE Key Manager.</i>
* - <a href="kaddressbook/html/index.html"><b>kaddressbook</b></a>
* (<a href="kaddressbook/html/classes.html">classes</a>)\n
* <i>Keeps your addresses on file.</i>
* - <a href="kalarm/html/index.html"><b>kalarm</b></a>
* (<a href="kalarm/html/classes.html">classes</a>)\n
* <i>A personal alarm message, command and email scheduler.</i>
* - <a href="kalarm/kalarmd/html/index.html"><b>kalarmd</b></a>
* (<a href="kalarm/kalarmd/html/classes.html">classes</a>)\n
* <i>Alarm daemon.</i>
* - <a href="kandy/html/index.html"><b>kandy</b></a>
* (<a href="kandy/html/classes.html">classes</a>)\n
* <i>Synchronises data with your mobile phone.</i>
* - <a href="karm/html/index.html"><b>karm</b></a>
* (<a href="karm/html/classes.html">classes</a>)\n
* <i>A time tracker.</i>
* - <a href="kfile-plugins/html/index.html"><b>kfile-plugins</b></a>
* <i></i>
* - <a href="kgantt/html/index.html"><b>kgantt</b></a>
* (<a href="kgantt/html/classes.html">classes</a>)\n
* <i></i>
* - <a href="kitchensync/html/index.html"><b>kitchensync</b></a>
* (<a href="kitchensync/html/classes.html">classes</a>)\n
* <i>Generic Syncing.</i>
* - <a href="kmail/html/index.html"><b>kmail</b></a>
* (<a href="kmail/html/classes.html">classes</a>)\n
* <i>A fully-featured email client.</i>
* - <a href="knotes/html/index.html"><b>knotes</b></a>
* (<a href="knotes/html/classes.html">classes</a>)\n
* <i>A small tool to scribble down notes.</i>
* - <a href="konsolekalendar/html/index.html"><b>konsolekalendar</b></a>
* (<a href="konsolekalendar/html/classes.html">classes</a>)\n
* <i>A command line interface to KDE calendars.</i>
* - <a href="kontact/html/index.html"><b>kontact</b></a>
* (<a href="kontact/html/classes.html">classes</a>)\n
* <i>Brings together all the KDE PIM applications under one roof.</i>
* - <a href="korganizer/html/index.html"><b>korganizer</b></a>
* (<a href="korganizer/html/classes.html">classes</a>)\n
* <i>The calendar and scheduling program for KDE.</i>
* - <a href="korganizer/korgac/html/index.html"><b>korgac</b></a>
* (<a href="korganizer/korgac/html/classes.html">classes</a>)\n
* <i>An alarm client for KOrganizer.</i>
* - <a href="kpilot/kpilot/html/index.html"><b>kpilot</b></a>
* (<a href="kpilot/kpilot/html/classes.html">classes</a>)\n
* <i>Synchronizes data with your PalmOS-based handheld.</i>
* </td>
* <td valign="top">
* - <a href="libemailfunctions/html/index.html"><b>libemailfunctions</b></a>
* <i>A library for general purpose email handling.</i>
* - <a href="libkcal/html/index.html"><b>libkcal</b></a>
* (<a href="libkcal/html/classes.html">classes</a>)\n
* <i>A library of calendaring classes.</i>
* - <a href="libkdenetwork/html/index.html"><b>libkdenetwork</b></a>
* <i>A library of networkworking classes.</i>
* - <a href="libkdepim/html/index.html"><b>libkdepim</b></a>
* (<a href="libkdepim/html/classes.html">classes</a>)\n
* <i>A library of widgets and other goodies for pim.</i>
* - <a href="libkholidays/html/index.html"><b>libkholidays</b></a>
* (<a href="libkholidays/html/classes.html">classes</a>)\n
* <i>A library for handling holidays.</i>
* - <a href="libkmime/html/index.html"><b>libkmime</b></a>
* (<a href="libkmime/html/classes.html">classes</a>)\n
* <i>A library for MIME handling.</i>
* - <a href="libkpgp/html/index.html"><b>libkpgp</b></a>
* (<a href="libkpgp/html/classes.html">classes</a>)\n
* <i>A PGP abstraction layer.</i>
* - <a href="libkpimexchange/html/index.html"><b>libkpimexchange</b></a>
* <i></i>
* - <a href="libkpimidentities/html/index.html"><b>libkpimidentities</b></a>
* (<a href="libkpimidentities/html/classes.html">classes</a>)\n
* <i>A library for managing identities.</i>
* - <a href="kpilot/lib/html/index.html"><b>kpilot library</b></a>
* (<a href="kpilot/lib/html/classes.html">classes</a>)\n
* <i>KPilot Library.</i>
* </td>
* </tr></table>

+ 50
- 0 View File

@@ -0,0 +1,50 @@
## kdepim/
## (C) 1997 Stephan Kulow

# these are here to control the compilation order, but are only textual
# hints for the script. If you change something here, you have
# to call Makefile.cvs again.
# WARNING: The is auto-generated from, so
# don't change these in, but rather in!
# Libraries and their upwards dependencies
COMPILE_AFTER_libkmime = libemailfunctions
COMPILE_AFTER_libemailfunctions = libkcal libkpimidentities kmail korganizer
COMPILE_AFTER_libkholidays = korganizer kontact
COMPILE_AFTER_libkcal = kalarm kitchensync konsolekalendar korganizer libkpimexchange kpilot libkdepim karm knotes kresources kfile-plugins
COMPILE_AFTER_mimelib = korn kmail
COMPILE_AFTER_libkdenetwork = kmail knode
COMPILE_AFTER_libksieve = kmail
# Applications and their downward dependencies (ie. the libs they use)
COMPILE_BEFORE_libkpimidentities = libkdepim certmanager
COMPILE_BEFORE_certmanager = libkdenetwork libkpgp
COMPILE_BEFORE_korganizer = libkdepim libkpimidentities libkpimexchange kgantt
COMPILE_BEFORE_kaddressbook = libkdepim certmanager akregator
COMPILE_BEFORE_kandy = libkdepim
COMPILE_BEFORE_kmail= libkdepim libkpimidentities certmanager libkpgp libkmime indexlib
COMPILE_BEFORE_knode= libkdepim libkpgp libkmime
COMPILE_BEFORE_karm = libkdepim kresources
COMPILE_BEFORE_plugins = kmail libkdepim libkcal
COMPILE_BEFORE_kontact = kaddressbook knotes korganizer akregator karm
COMPILE_BEFORE_kioslaves = libkmime libkdepim
COMPILE_BEFORE_libkpimexchange = libkdepim
COMPILE_BEFORE_kalarm = libkdepim libkmime
COMPILE_BEFORE_kresources = libkpimexchange knotes kaddressbook kode
COMPILE_BEFORE_wizards = libkdepim kresources korganizer kaddressbook kmail
COMPILE_BEFORE_korn = libkdenetwork
COMPILE_BEFORE_kitchensync = libkdepim
COMPILE_BEFORE_akregator = libkdepim
COMPILE_BEFORE_knotes = libkdepim
COMPILE_BEFORE_konsolekalendar = libkdepim
COMPILE_BEFORE_kabc = libkdepim

AUTOMAKE_OPTIONS = foreign 1.6.1


include $(top_srcdir)/admin/
include admin/

+ 16
- 0
Makefile.cvs View File

@@ -0,0 +1,16 @@

@echo "This Makefile is only for the CVS repository"
@echo "This will be deleted before making the distribution"
@echo ""
@if test ! -d admin; then \
echo "Please recheckout this module!" ;\
echo "for cvs: use checkout once and after that update again" ;\
echo "for cvsup: checkout kde-common from cvsup and" ;\
echo " link kde-common/admin to ./admin" ;\
exit 1 ;\
$(MAKE) -f admin/Makefile.common cvs


+ 84
- 0
README View File

@@ -0,0 +1,84 @@
In this file:

* What you find here
* What it is
* Mailing List, Getting involved

What you find here

Anything relating to the KDE-PIM project. See also

The KDE-PIM project aims to bring together those who wish to help design,
implement, test, etc. anything that's to do with personal information

This rather broad scope encompasses mail clients, addressbooks, usenet news,
scheduling and even sticky notes.

What it is

* kaddressbook: The KDE addressbook application.
* kandy: sync phone book entries between your cell phone and computer
("kandy" comes from "Handy", the german word used for a cellular)
* kmail: the KDE mail client
* kmailcvt: tool for importing mail related data from other programs
* knode: news client
* korganizer: a calendar-of-events and todo-list manager
* kpilot: to sync with your PalmPilot
* kalarm: gui for setting up personal alarm messages, emails and commands
* kalarmd: alarm monitoring daemon, shared by korganizer and kalarm.
* kontact: Integrated PIM application
* karm: Time tracker.
* kitchensync: Synchronization framework, still under heavy development.
* kfile-plugins: vCard KFIleItem plugin.
* knotes: yellow notes application
* konsolecalendar: Command line tool for accessing calendar files.
* korn: mail checker
* akregator: Feed reader

There is also quite an amount of infrastructure in this package:

* calendarsystem: library for handling of non-gregorian calendar systems
* libkdepim: Common code for different kdepim apps
* libkdenetwork: Common code for apps previously being in the kdenetwork CVS
module (KMail, KNode). This will be merged with libkdepim.
* mimelib: MIME messages library
* libkcal: C++ api for the iCalendar and vCalendar formats
* libkcal/libical: a basic iCalendar protocol implementation, see RFCs 2245,2246
* libkpimexchange: connecting to Exchange2000 servers
* kabc/frontend: A GUI frontend for libkabc, not intended for end users.
* kgantt: lib to display and manage Gantt diagrams used by the project view
plugin of KOrganizer
* kdgantt: alternative lib for Gantt diagrams, used by the free/busy view of
KOrganizer (yes, we should decide for one of the Gantt libs)
* kioslaves/sieve: Sieve kioslave
* ktnef: handling of tnef data

The following subdirectories have been moved to kdenonbeta/kdepim:

* empath: a modular e-mail client, designed for reuse, needs a Qt
with threading support
* twister: another personal information manager, needs empath
* kab2: another design for the KDE addressbook

* ldif: a parser for LDIF, the LDAP Information Interchange Format
* libdif: dito, one of them is superfluous
* libimap: IMAP handling
* librmm: an Internet mail message parser (RFC 822 -> Class hierarchy)

Mailing List, getting involved

If you'd like to get involved with the project, subscribe to
with an email to with the subject line:
subscribe my@email.address

If you have questions relating to development of this module please post them on
the developers mailing list ( If you have user questions,
please use

If you are interested in kmail development use the mailing list

+ 82
- 0
README.Kolab View File

@@ -0,0 +1,82 @@
These are preliminary instructions on how to set up kdepim to work
with a kolab server. It is meant to be a help for people setting
up for testing. It is also meant as a list of things to set up in the
upcoming Kolab setup wizard.

There are the steps needed to setup the Kolab server as the primary


1. Set up your identity.
2. Set up a disconnected IMAP account to the server and sync it.
Optional: Choose TLS and Clear text
3. Set up sending through the kolab server
Optional: Choose authentication and/or TLS
4. After the first sync, enable IMAP resource folder options in
Misc->Groupware and set to be subfolders of the account INBOX
5. Enable groupware functionality on the same page
6. TODO: Where is sieve setup???

Note: We might want to add a KMail profile for this in addition
to the kolab wizard.


1. Start KDE Control Center and go to KDE Components, page KDE
Resources Configuration. Choose the contact resource. Add an
IMAP resource and set it to standard.
Optional: Delete others or set them to readonly.
2. Start KAddressBook and add an LDAP server in the configuration
with these settings:
Host = "" (for example)
Port = "389"
Base DN = "dc=kolab,dc=kde,dc=org"
TODO: Are Bind DN and password the Kolab user settings?
TODO: If yes, do they make the LDAP resource writable?
The scheme for the base DN is to take the parts of the fully
qualified hostname of the kolab server and put ",dc=" between
the parts and "dc=" in front of it. Or in Qt code:
baseDN = "dc=" + hostname.replace( '.', ",dc=" );
Finally check the checkbox to activate the LDAP server. Now
you can search the Kolab LDAP server and get all users on the


1. Start KDE Control Center and go to KDE Components, page KDE
Resources Configuration. Choose the calendar resource. Add an
IMAP resource and set it to standard.
Optional: Delete others or set them to readonly.
TODO: Free-Busy setup and KMail mail scheduling.








General Notes:
Autocompletion: Works in both KMail and KOrganizer. The order of resources used for completion
is as follows:
1. All available addressbook resources as seen in "kcmshell kresources", section "kabc"

Nothing special, AFAIK

+ 4
- 0
README.libical View File

@@ -0,0 +1,4 @@
The directory libkcal/libical contains version 0.24 of libical with KDE local
modifications to fix some bugs and let it compile in the kdepim module.
You may obtain the original distribution from

+ 44
- 0
akregator/AUTHORS View File

@@ -0,0 +1,44 @@

Stanislav Karchebny (Stanislav.Karchebny AT
Sashmit Bhaduri (smt AT
Frank Osterfeld (frank.osterfeld AT
Teemu Rytilahti (teemu.rytilahti AT
Stephan Binner (binner AT
Gary Cramblitt (garycramblitt AT
Christof Musik (christof AT
George Staikos (staikos AT


Pierre Habouzit (pierre.habouzit AT

Thanks To:

Frerich Raabe (raabe AT


Breton: Thierry Vignaud <tvignaud AT>
Catalan: Albert Astals Cid <astals11 AT>
Welsh: KD wrth KGyfieithu <kyfieithu AT>
Danish: Erik Kjær Pedersen <erik AT>
British English: Andrew Coles <andrew_coles AT>
Spanish: Ignacio Bezanilla Diaz <coder AT>
Estonian: Marek Laane <bald AT>
Finnish: Teemu Rytilahti <teemu.rytilahti AT>
French: Nicolas Ternisien <nicolast AT>
Irish Gaelic: Séamus Ó Ciardhuáin <seoc AT>
Italian: Luciano Montanaro <mikelima AT>
Dutch: Rinse de Vries <rinsedevries AT>
Polish: Michał Mroczek <sagitto AT>
Portuguese: Pedro Morais <morais AT>
Brazilian Portuguese: Caio Begotti <caio1982 AT>
Romanian: Claudiu Costin <claudiuc AT>
Russian: Nickolai Shaforostoff <shafff AT>
Serbian: Chusslove Illich <caslav.ilic AT>
Swedish: Stefan Asserhäll <stefan.asserhall AT>
Tamil: I. Felix <ifelix25 AT>
Turkish: Görkem Çetin <gorkem AT>

+ 340
- 0
akregator/COPYING View File

@@ -0,0 +1,340 @@
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.


The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.




How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

+ 430
- 0
akregator/ChangeLog View File

@@ -0,0 +1,430 @@
#Akregator ChangeLog
(c) 2004-2007 the Akregator authors.

Changes after 1.2.7:

Bug fixes:

2007/10/05 Fix storage backend waking up CPU every 3 seconds (#150389) -ew
Original patch by Alan Jenkins

Changes after 1.2.6:

Bug fixes:

2007/02/24 fix crash when using "Load the full website when reading articles" and an error (e.g. 404)
is returned (2nd try) (#126812) -fo

Changes after 1.2.5:

Bug fixes:
2006/11/30 Use "firefox %u" as default for the alternative browser command (#115777)
2006/11/24 Add session management for browser tabs (#100964) Patch by Carsten Pfeiffer <pfeiffer at> -fo
2006/11/10 Fix crash in Konqueror icon plugin sometimes happening when switching parts (#134929) -fo
2006/10/31 Fix group name encoding bug when adding feeds from commandline (e.g., using the Konq plugin) (#136559)
Patch by Andrey Cherepanov.

Changes after 1.2.4:

Bug fixes:

2006/09/18 Set default font sizes, prevents use of font size 1 in article viewer on first startup -fo
2006/08/28 Do not create multiple items in the feed lists when dragging feeds to a folder
that was moved before (#124303) -fo
2006/08/26 Fix a possible crash in the internal browser when going forward -fo
2006/08/26 show error messages while browsing as HTML, not as annoying popups (#107740) -fo
2006/08/25 Show title of selected feed in window caption (#111471) -fo
2006/08/25 Konqueror plugins: correctly enable/disable icon when enabling/disabling the plugin (#132823) -fo
2006/08/21 Don't crash on very long URLs (>255 chars) used for feed logos (#130849) -fo
2006/08/20 Konqueror plugins: Fix crash when using the Akregator plugin in file manager mode (#124891) -fo
2006/08/20 Feed detection: Fix detection when relative URLs are used in the link tags (#132687) -fo
2006/08/17 Speak selected text in internal browser when using the "Speak Text" button (#132505) -fo

Changes after 1.2.3:

Bug fixes:

2006/07/07 Remove tray icon when disabling Akregator part in Kontact (#130127) -fo
2006/07/07 Fix a crash on shutdown occurring in ProgressManager (#130377) -fo
2006/06/25 Fix context menus in browser tab, show appriopriate entries when
text is selected (copy action) or the cursor is over a link
(#121957) -fo
Changes after 1.2.2:

New features:

2006/05/01 add author information to article header (in the article pane only) -fo

Bug fixes:

2006/05/20 Select oldest item instead of newest when jumping to the next feed using previous [unread]
article actions (#126316) -fo
2006/05/20 Disable Apply-Button in config dialog correctly if no changes were made (#103820) -fo
2006/05/20 Don't reset article status to New when the article changed (#101907) -fo
2006/05/10 Always show feed logos; load them on startup, not on first fetch -fo
2006/05/10 fix crash when using "Load the full website when reading articles" and an error (e.g. 404)
is returned (#126812) -fo
2006/04/29 Do not crash on startup when Combined View mode is activated (Happened only when experimental tagging is
activated) -fo
2006/03/22 Prevent "Akregator is running" messages on startup (reset PID to -1 when closing akregator) -fo

Changes after 1.2.1:

Bug fixes:

2006/03/09 Read more feed metadata for Atom feeds (title, link) (#123140) -fo
2006/03/09 Use "refresh" cache mode as default, ignoring konq settings.
("refresh" == Use cache after verifying with server)
This should make disabling the "Use browser cache" option unnecessary. -fo
2006/02/21 Set "rel" attribute default to "alternate", as requested by Atom specification (#122409) -ew
2006/02/21 Disable category and tag support (unless experimental GUI is enabled) in the metakit backend,
so it supports about 1000 feeds (500 with tags enabled) instead of 340
now with the default 1024 open files limit on most systems. -fo
2006/02/15 Combined View: Do not crash on "Next/Prev Unread Article" (#121999) -fo
2006/01/31 RSS parser: ignore unknown or invalid version attribute value in the <rss> tag and
just assume RSS 2.0. The older formats are compatible to 2.0, so this should work.
(at least better than refusing to parse the feeds) (#118793) -fo

Changes after 1.2:

Bug fixes:

2006/01/17 Do not open binary files in the HTML viewer but externally.
Fix Save Link As for binary files (regression introduced after 1.2)
(#120087 (partially)) -fo
2006/01/16 Fix article order in Combined View: sort by date (reversed) (#118055) -fo
2006/01/15 Fix parsing of Atom 1.0 feeds with escaped HTML in it: Don't show tags
as text (#112491, #117938) -fo
2006/01/10 Select next item in article list when deleting the selected article
(single selection mode only) (#119724) -fo
2006/01/10 Fix item handling in the feed list, avoid crashes as happening
after moving a folder and deleting a subitem afterwards
(#118659) -fo
2006/01/08 Fix problems with keyboard navigation getting stuck on duplicated
articles and prevent creation of new items when selecting an unread
dupe (#114997) -fo
2005/12/05 Wait 30 minutes before retrying fetching when fetching failed (host
down, parsing error) (#113358) -fo

Changes after 1.0:

Note: This section (i.e. changes between 1.0 and 1.2) is completely incomplete

New features:
- add "Save link as" to context menus -fo
- Changed prev/next unread article actions to cycle through all unread articles -fo
- The article archive is now configurable, using metakit implementation as default.
This increases startup speed and reduces memory usage significantly -fo
- Make it possible to fetch feeds while other fetches are running -fo
Bug fixes:

- Respect markImmediatelyAsRead setting when updating articles (#103502) -fo
- make "fetch feeds on startup" option work again (#102085) -fo
- Fix favicons, load them on startup (#94888) -fo
- make BrowserRun delete itself when the Viewer gets destroyed (#101413) -tpr
- tolerate leading and trailing whitespace in the Add Feed Dialog (#101988) -fo
- fixed confusion of "disable archiving" and expiry by age (#101907) -fo
- show open|save|cancel dialog for non-html links (101274) -fo
- make forms work again (regression) (#94964) -fo
- fix notification when running as kontact plugin -fo

Changes after 1.0b9:

Bug fixes:
- fixed printing of articles (no infinite number of pages anymore) -fo

Changes after 1.0b8:

New features:
- Make fonts configurable, added zoom in/out actions -fo
- Use KNotify for notification -fo
- Make caching configurable -fo
- Forms work in the internal browser -gs
- Enable sorting in article list -gs
- Add possibility to delete article -fo
- Allow bookmarking articles in global bookmarks -gs

- Added new about page, designed by Lokheed, lokheed at -fo
- Use KDEPIM's progressbar -tpr
- Update unread count when stopping fetching before it's finished -tpr
- Added "Keep flag set" to the search combobox -fo
- Added optional close buttons on browser tabs -fo
- Prevent unreachable feeds from blocking the fetching process (timeout) -fo

Bug fixes (selection):
- Disable dnd in feed tree until the feed list is loaded (prevents crash) -fo
- Decode the url before adding new feed, makes feed urls with special characters (?, =, &) to work -tpr
- Don't crash when deleting feeds which are currently fetching -fo
- Don't ignore updates in article which have a GUID -fo
- Don't set non-parsable dates to 1970/01/01 -fo
- added <xml> processing instruction to exported OPML -sk

Changes after 1.0b7:

New features:
- Add icon to konqueror to show if page has a feed -tpr
#85532 - Add feed summary -tpr
#84314 - added print command for article viewer -fo
#92330 - Added possibility to set article status (read/unread/new) manually -fo
- Added basic "keep flag" support to prevent articles from expiring -fo

- Add pageviewer actions into Go menu and print to file menu when in pageviewer mode -tpr
- improve tabbed browsing: added back/forward buttons, improved context menus - fo
- make search bar optional -fo
- Do not allow user to stop feedlist loading to avoid data loss -tpr
- Do not show feedlist url in title -tpr
- Clear the statusbar when pressing Stop button -tpr

Bug fixes:
- save and restore open/close state of feed groups -fo
- Use isNull() instead of comparing to QString::null -tpr
- Make kontact plugin work with Kontact from CVS HEAD -fo
- Don't load kontact plugin when akregator is already running -fo
- Fix expiry by age (global setting was ignored) -fo
- Make trayicon and configure dialog available in kontact -fo
- Save and restore open/closed state of feed groups -fo
- Fix interval fetching (Exclude feeds with custom settings from global fetch) -fo
#84528 - Make session management to save and load feedlist when appropriate -tpr
#88437 - Show credits on Kontact's about dialog -tpr
#91660 - Don't crash on exit when internal browser widgets are opened or the article viewer is loading -fo
#93739 - Fix Alignment of text body for right-to-left scripts -fo

Changes after 1.0b6:

New features:


#85691 - added KMail-like key bindings -fo
- Advanced archive options: Limit article number, disable archive -fo
- Add "Fetch All Feeds" into context menu of trayicon -tpr
- Show position of the tray icon with image in dialog when pressing the close button -tpr
- Display proper error message when no feed found in add feed -tpr
- make systray icon optional (Patch by Christof Musik,
christof(at) -fo
- added "Export Feeds" function to export the standard feed list -fo
- Expiry support added -fo

Bug fixes:
#85409 - Resolve entities in feed titles -fo
#90671 - Shutdown properly hopefully fixes #89172 too -tpr
- Update combined view after fetching new articles (doesn't work in group view yet)

Changes after 1.0b5:

- Improved dupe detection, using md5 now -ph
#82187 - Improved session management: save search settings, selected Feed and Article -fo
- Make it possible to switch notifications off -tpr
- Switch to a standard feed system, like most aggregators -smt
#82082 - New message notification added -smt
- Show comments URL for feeds, if available -smt
- Only allow one akregator instance (KUniqueApplication) -smt
- Autosave: Feeds are autosaved on every change now - save actions removed -smt
- Support feed protocol -smt
#85265 - Add feed column when browsing through a folder -smt

Bug Fixes:
- Make i18n work in konqueror plugin -tpr
- Fixed problems with whitespace handling -ph
- Make MMB work again in pageviewer -tpr
#83995 - Don't crash when exiting KDE -fo
#82791 - Save the toolbar position -tpr
- Don't crash when there is no part available -tpr
- Make tabs wider when there is free space available -tpr
- Make feedlist saving work in kontact -smt
- Remove all leading space between article text and headers -smt
#86633 - Make tabs appear immediatly on slow sites -smt
#85748 - Make filtering in combined mode work -smt
#86917 - Make searching in combined mode work -smt
#85451 - Open feed list properly in kontact

Changes after 1.0b4:

- Load last loaded feed list in kontact plugin (#84351) - smt
- Show regular akregator icon in tray if there are no unread articles. Based on patch from cartman. -berkus
- Implement session mangement (#82868) - smt

Bug Fixes:
#84095 - akregator article view doesn't display <pre> passages correctly -berkus
#82820 - Kontact crashes when fetching - smt
#84272 - aKregator doesn't restore feed list after logout with running application
#81995 - Don't crash when changing from/to combined view when folder selected -tpr
#82024 - Fix drag&drop regression which made it possible have multiple top level folders -sg
#84471 - Fix sorting of articles with no pubDates - smt
#83102 - Fix handling of non-HTML web pages - smt
#83187 - Reset scrollbar while switching feeds in combined view - smt

Changes after 1.0b3:

New Features:
#82023 - Added middle mouse button option to open tabs in background -tpr
#83202 - "Clear" button for search string -berkus
- Per feed interval fetching -smt
- Konqueror plugin for adding feeds to aKregator from context menu -PhantomsDad
- Command line options for adding feeds -PhantomsDad
- In case the feed doesn't provide an article <link> element, fall back to the <guid> permaLink -sg

Bug Fixes:
- Update interval spinbox should be disabled if the checkbox isn't checked -tpr
- "aKregator - 0 unread" -> "aKregator - No unread articles" -tpr
- Scroll up when changing the article in article viewer -tpr
- Various frame-switching bug fixes -smt
- Fix favicon loading crash (#82682) -smt
- Various stop-button related bug fixes -smt
- Changed "Copy Link Location" to "Copy Link Address" because of the new naming standard of KDE -tpr
- Fix archiving of article <guid> elements -sg

Changes after 1.0b2:

New Features:

- Configuration dialog added -tpr
- Kontact plugin added -smt
- Ability to mark all entries as read on exit -tpr
- Ability to change middle mouse button behaviour in browser -tpr
- Ability to specify external browser (KDE default or custom command) -PhantomsDad
- Fetch all feeds every <num> minutes -tpr
- Display unread count in the tooltip of the tray icon -tpr

Bug Fixes:

#82618 - Don't crash if there's no kpart available -tpr
#82691 - Don't minimize but close aKregator when session is shutting down -tpr
- Mark all read marks everything as read -tpr
#82752 - Mark all as read marks every entry in feed(group), mark all feeds as read marks every feed(group) as read -tpr
- Make the feed tree drop visualizer work -sg
- Make "Copy Link Location" copy into the selection clipboard as well -sg

Changes from 1.0b1 to 1.0b2:

New Features:

- Add Search bar for searching text in articles
- Clicking on a folder will show articles of all subitems
- Feed images are stored and aren't fetched every time
- Show progress while loading feed list
- Make all shortcuts configurable
- Gray out feed icons while fetching
- Add context menus to the article and page readers
- Add unread count to try icon
#81993 - Save splitter sizes on exit
#82004 - Next Unread in feed menu
#82005 - Link title in article viewer to article link
#82166 - Use ctrl-w to close tabs
#82084 - Middle click in article list opens article link in tab
#82095 - Show homepage in feed list context menu
#82189 - Option to fetch all at startup
- Middleclick on viewer opens now an external browser
#82138 - Add context menu to the tabs with close and detach entries

Bug Fixes:

- Favicon fetching works for sites that have never been viewed
- Make opening large OPML lists much faster
- Reset feed icon on fetch if it error-ed
- Fix memory leak in adding feeds
- Update unread count after deleting a feed
- Don't write article archive upon reading a read article
#81965 - "When viewing story right clicking a feed crashes"
#81966 - Fix the fact that sub-folder fetch fetched all siblings
#81968 - Import feed list not enabling save
#81978 - Fix favicon updating after fetch errors
#81993 - Make splitters more sane
#81994 - Fix duplicates articles listed in some feeds
#81998 - Crash when folder selected and clicking in list view
#81999 - Dragging in feeds view doesn't active save action
#82000 - Duplicates found in feeds when they should not be
#82002 - Save auto fetch interval
#82003 - "Initial feed properties are discarded"
#82021 - Support archiving for feeds whose encoding wasn't utf8
#82024 - Make sure that All Feeds isn't draggable
#82029 - In first time use, save action does not work
#82048 - Renaming a folder doesn't enable "Save Action"
#82049 - File/New doesn't start with an empty view
#82131 - Fix fetching with folders that have subfolders
#82050 - Allow drag and drop to empty folders
#82053 - Program closes without asking whether user saves
#82165 - "cannot delete feed via menu"
#82172 - "date is not fetched for some feeds"
#82183 - Mark all as unread empties article list
#82425 - add http:// to urls in add feed dialog if no protocol

Changes from 0.9 to 1.0b1:

#000049 FIX [x] Saving a freshly created feeds list erases "All Feeds" root entry text.
CHG [x] show current feed's title in the article list heading
#000041 FIX [x] order for dateless items (right now they show in random order) -->berkus
order should be: ordered for items with dates, order same as in rss for items without dates.
#000025 FIX [x] fix path in m_html->begin( KURL( "file:/tmp/something.html" ) ) so that local images and css can be referenced from article preview --> smt
#000043 ADD [x] download feed image specified for RSS (for #000036) --> smt
[x] if the channel image size is well-sized, show in headers -->smt
#000019 ADD [x] implement tooltips and What's This? help -->berkus (enough of those for now)
#000044 ADD [x] show an error favicon if feed could not be fetched -->smt
#000037 ADD [x] add favicon support to the FeedsTree -->smt
FIX [x] Fixed nasty bug with feed editing.
FIX [x] aKregatorPart code cleanup.
FIX [x] Zack Rusin: Fixes to Makefiles, code cleanup.
#000029 CHG [x] "Modify" should enable in-line edit for feed group items, standard dialog for feeds
#000003 ADD [x] sort ArticleList by Article::pubDate -->berkus
CHG [x] add file filters to open/save dialogs
#000013 FIX [x] list generated files in .cvsignore files
#000006 ADD [x] system tray
#000038 ADD [x] add isOpen=<bool> to feed group outline opml -->berkus
#000039 FIX [x] make real use of LiveJournal checkboxes in AddFeedDialog
#000012 FIX [x] refine aboutbox
#000034 FIX [x] parse html entities in article titles
#000035 FIX [x] non-latin1 opml doesn't restore properly
CHG [x] feeds list now stored using QDom classes
#000030 FIX [x] boolean vars are stored and retrieved improperly in opml
CHG [x] use KPasswordEdit for ljPassword input
#000001 ADD [x] allow inline editing of feeds to alter Feed[Group]::title and resetting updateTitle to false (slotItemRenamed)
#000028 FIX [x] (librss + QDom) &amp;lt;b&amp;gt;test&lt;/b&gt; from RSS is parsed wrong - because, librss tries to do unescaping on entitites that QDom already unescaped -- solution: fixed librss
#000002 FIX [x] update ArticleList when selecting another feed
#000026 CHG [x] unless someone offers me some icons, Fetch and Fetch all will be 'down' and 'bottom' respectively
#000023 FIX [x] implement fetch all
#000024 CHG [x] replace generic HTML part with strictly KHTMLPart (saves some static_cast<>s)
#000018 ADD [x] provide .desktop file
#000017 ADD [x] provide .lsm file
#000016 ADD [x] provide standard AUTHORS, ChangeLog, README, and TODO files


RELEASE Added to kdenonbeta/akregator

+ 251
- 0
akregator/HACKING View File

@@ -0,0 +1,251 @@

We use 4 spaces instead of tabs everywhere.

static void foo()
if(bar()) // <-- 4 spaces
baz() // <-- 8 spaces


Opening braces should always be on their own line.

class Foo
// stuff

if (foo == bar)
// stuff

while (foo == bar &&
baz == quux &&
flop == pop)
// stuff

static void foo()
// stuff

Exceptions include inline functions that are just returning or setting a
value. However multiple statements should not ever be combined onto one line:

class Foo
String value() const { return m_value; }

Also conditionals / loops that only contain one line in their body (but where
the conditional statement fits onto one line) should omit braces:

if (foo == bar)


if (baz == quux &&
ralf == spot)


Spaces should be used between the conditional / loop type and the
conditional statement. They should not be used after parenthesis. However
the should be to mark of mathematical or comparative operators.

if ( foo == bar )
^ ^

The marked spaces should be ommitted to produce:

if (foo == bar)

Header Organization

Member variables should always be private or protected and prefixed with "m_".
Accessors may be inline in the headers. The organization of the members in a
class should be roughly as follows:

public typedefs:
public ctors:
public methods:
public slots:
protected methods:
protected slots:
protected fields:
private methods:
private slots:
private fields:
private ctors: // if you define ctors/dtor as private, put them at end

If there are no private slots there is no need for two private sections, however
private functions and private variables should be clearly separated.

The implementations files -- .cpp files -- should follow (when possible) the
same order of function declarations as the header files.

Virtual functions should always be marked as such even in derived classes where
it is not strictly necessary.


Whitespace should be used liberally. When blocks of code are logically distinct
I tend to put a blank line between them. This is difficult to explain
systematically but after looking a bit at the current code organization this
ideally will be somewhat clear.

Also I tend to separate comments by blank lines on both sides.

Pointer and Reference Operators

This one is pretty simple. Use "Foo *f" and "Foo &f" in function signatures
and declarations. And also in signal/slot names.

Pointer and Reference Operators

An example object here:


#include "localinclude.h"
#include "anotherlocalinclude.h"
#include <kdeinclude1.h>
#include <kdeinclude2.h>
#include <qtinclude1.h>
#include <qtinclude2.h>

class QSomething;

namespace Akregator {

class Test : public QObject

typedef QValueList<Test> list;

Test(QString someString);
explicit Test(int i = 0);

virtual ~Test();

void someFunc();
void someFunc2(QSomething *foo);

static Test *instance() { return m_instance; }

public slots:
void receive(QSomething &);

void send(QSomething &);

void someProtectedFunc();

static void someProtectedStaticFunc();

protected slots:
void protectedSlot();

int m_protectedVar;

int privateMethod();

static int staticPrivateMethod();

private slots:
void privateSlotIndeed(int youWonder);

int m_privateVar;
QSomething *m_tastyThing;

static Test *m_instance;

} // no ; after namespace (borks on gcc 3.4+)


#include "test.h"
#include "localinclude.h"
#include "anotherlocalinclude.h"
#include <kdeinclude1.h>
#include <kdeinclude2.h>
#include <qtinclude1.h>
#include <qtinclude2.h>
#include <qsomething.h>

namespace Akregator {

: QObject()
, m_protectedVar(0)
, m_privateVar(0)
, m_tastyThing(0)
, m_instance(0)

Test::Test(QString someString)
: QObject()
, m_protectedVar(0)
, m_privateVar(0)
, m_tastyThing(someString)
, m_instance(0)

Test::Test(int i);
: QObject()
, m_protectedVar(0)
, m_privateVar(0)
, m_tastyThing(i)
, m_instance(0)
if(i == 0)
kdDebug() << "Zero initializer" << endl;

} // no ; after namespace (borks on gcc 3.4+)


Original document by
Scott Wheeler <>

Amendments for Akregator needs by
Stanislav Karchebny <>

+ 167
- 0
akregator/INSTALL View File

@@ -0,0 +1,167 @@
Basic Installation

These are generic installation instructions.

The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').

If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.

The file `' is used to create `configure' by a program
called `autoconf'. You only need `' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.

The simplest way to compile this package is:

1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.

Running `configure' takes a while. While running, it prints some
messages telling which features it is checking for.

2. Type `make' to compile the package.

3. Type `make install' to install the programs and any data files and

4. You can remove the program binaries and object files from the
source code directory by typing `make clean'.

Compilers and Options

Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

Compiling For Multiple Architectures

You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.

If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another

Installation Names

By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.

You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.

If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.

Optional Features

Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.

For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.

Specifying the System Type

There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:

See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.

If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.

Sharing Defaults

If you want to set default values for `configure' scripts to share,
you can create a site shell script called `' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/' if it exists, then
`PREFIX/etc/' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.

Operation Controls

`configure' recognizes the following options to control how it

Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.

Print a summary of the options to `configure', and exit.

Do not print messages saying which checks are being made.

Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.

Print the version of Autoconf used to generate the `configure'
script, and exit.

`configure' also accepts some other, not widely useful, options.

+ 5
- 0
akregator/ View File

@@ -0,0 +1,5 @@

include $(top_srcdir)/admin/

+ 3
- 0
akregator/NEWS View File

@@ -0,0 +1,3 @@
* First release (version 0.9)

+ 27
- 0
akregator/README View File

@@ -0,0 +1,27 @@

A Feed Reader for KDE.

Join developer mailing list: <>

If you wish to discuss any problems or features before posting them on
you can subscribe to <>

Please notice that we ask you to post your bugs and wishes to not only
because this is official KDE bug tracker, but because this helps us keep an eye on
demand of the community and not forget to implement needed things ;)

Also please do not abuse bug tracker functionality by submitting duplicate items.
Check the existing bugs first (for example using power user tool available at
<>). If you find something very close
to your request, just add a comment and vote for the bug (there's a little vote link on the
bug summary pane).

And enjoy your Akregator!


IRC: irc://
MAIL: <>

+ 23
- 0
akregator/TODO View File

@@ -0,0 +1,23 @@
stuff to do before akregator 1.0

- being able to share feeds through kmystuff
- customize colors, generally

page viewer:
- tab color highlights, like konqui
- customize fonts used in viewers

article list:
- being able to delete articles from cache

feed list:
- being able to keep X articles per feed, or disable keeping any in archive
- search folders 'v-folders'

- make notifications only appear in background
- use standard kpassive popup in knotifications instead of balloons

- show akregator if akregator is running and kontact feed icon is selected

+ 14
- 0
akregator/akregator.lsm View File

@@ -0,0 +1,14 @@
Title: akregator
Version: 1.0-beta5 "Pierre"
Description: Feed feader for KDE
Keywords: rss atom aggregation syndication feed articles KDE Qt
Author: Stanislav Karchebny <>
Maintained-by: Stanislav Karchebny <>
Platforms: Linux and other Unices, requires KDE.
Copying-policy: GNU Public License

+ 166
- 0
akregator/src/ View File

@@ -0,0 +1,166 @@
#set the include path for X, qt and KDE
INCLUDES = -I$(top_srcdir)/akregator/src/librss -I$(top_srcdir) $(all_includes)

# let automoc handle all of the meta source files (moc).

messages: rc.cpp
$(EXTRACTRC) `find . -name "*.rc" -o -name "*.ui" -o -name "*.kcfg"` >> rc.cpp
$(XGETTEXT) *.cpp -o $(podir)/akregator.pot


# this Makefile creates both a KPart application and a KPart
# this is the program that gets installed. it's name is used for all
# of the other variables
bin_PROGRAMS = akregator

# the application source, library search path, and link libraries
akregator_SOURCES = main.cpp mainwindow.cpp
akregator_LDFLAGS = $(KDE_RPATH) $(all_libraries)
akregator_LDADD = $(LIB_KPARTS)
#akregator_LDADD = $(LIB_KPARTS) $(top_builddir)/libkdepim/

# this is where the desktop file will go
xdg_apps_DATA = akregator.desktop

# this is where the shell's XML-GUI resource file goes
shellrcdir = $(kde_datadir)/akregator
shellrc_DATA = akregator_shell.rc

kdelnk_DATA = feed.protocol
kdelnkdir = $(kde_servicesdir)


# install headers (for storage plugins)
akregatorinclude_HEADERS = storage.h feedstorage.h storagefactory.h storagefactoryregistry.h \
plugin.h articleinterceptor.h akregator_export.h
akregatorincludedir = $(includedir)/akregator

# this is a lib shared by both the KPart and the main application
libakregatorprivate_la_SOURCES = akregatorconfig.kcfgc \
articlefilter.cpp \
aboutdata.cpp \
trayicon.cpp \
article.cpp \
feed.cpp \
treenode.cpp \
treenodevisitor.cpp \
tagnode.cpp \
folder.cpp \
tagfolder.cpp \
nodelist.cpp \
feedlist.cpp \
tagnodelist.cpp \
fetchqueue.cpp \
feediconmanager.cpp \
feediconmanager.skel \
articleinterceptor.cpp \
plugin.cpp \
pluginmanager.cpp \
storagefactoryregistry.cpp \
storage.cpp \
tag.cpp \
tagset.cpp \
storagedummyimpl.cpp \
storagefactorydummyimpl.cpp \
simplenodeselector.cpp \
feedstoragedummyimpl.cpp \
dragobjects.cpp \
libakregatorprivate_la_LDFLAGS = $(all_libraries) -avoid-version -no-undefined
libakregatorprivate_la_LIBADD = $(top_builddir)/libkdepim/ \
$(top_builddir)/akregator/src/librss/ $(LIB_KHTML)


kde_kcfg_DATA = akregator.kcfg
kde_module_LTLIBRARIES =

mainwindow.lo: akregatorconfig.h
akregator_part.lo: akregatorconfig.h
akregator_view.lo: akregatorconfig.h
akregatorconfig.lo: akregatorconfig.h
articlelistview.lo: akregatorconfig.h
articleviewer.lo: akregatorconfig.h
feed.lo: akregatorconfig.h
fetchqueue.lo: akregatorconfig.h
trayicon.lo: akregatorconfig.h
viewer.lo: akregatorconfig.h
searchbar.lo: akregatorconfig.h

kspeech_DIR = $(kde_includes)
kspeechsink_DIR = $(kde_includes)

# the Part's source, library search path, and link libraries
libakregatorpart_la_SOURCES = \
searchbar.cpp \
akregator_run.cpp \
articlelistview.cpp \
actionmanager.cpp \
actionmanagerimpl.cpp \
frame.cpp \
viewer.cpp \
articleviewer.cpp \
addfeeddialog.cpp \
addfeedwidgetbase.ui \
propertiesdialog.cpp \
propertieswidgetbase.ui \
pageviewer.cpp \
tabwidget.cpp \
feedlistview.cpp \
treenodeitem.cpp \
folderitem.cpp \
feeditem.cpp \
progressmanager.cpp \
kernel.cpp \
listtabwidget.cpp \
settings_appearance.ui \
settings_general.ui \
settings_archive.ui \
settings_browser.ui \
settings_advancedbase.ui \
tagnodeitem.cpp \
configdialog.cpp \
settings_advanced.cpp \
akregator_partiface.skel \
akregator_part.cpp \
akregator_view.cpp \
notificationmanager.cpp \
tagaction.cpp \
tagpropertieswidgetbase.ui \
tagpropertiesdialog.cpp \
tagfolderitem.cpp \
speechclient.cpp \
kspeechsink.skel \

libakregatorpart_la_LDFLAGS = $(KDE_RPATH) $(KDE_PLUGIN) $(LIB_KUTILS) -avoid-version -no-undefined $(all_libraries)
libakregatorpart_la_LIBADD =

# this is where the desktop file will go
partdesktopdir = $(kde_servicesdir)
partdesktop_DATA = akregator_part.desktop

# this is where the part's XML-GUI resource file goes
partrcdir = $(kde_datadir)/akregator
partrc_DATA = articleviewer.rc pageviewer.rc akregator_part.rc eventsrc

kde_servicetypes_DATA = akregator_plugin.desktop

SUBDIRS = librss about . mk4storage pics

include $(top_srcdir)/admin/

+ 6
- 0
akregator/src/about/ View File

@@ -0,0 +1,6 @@
about_DATA = \
top-right-akregator.png \
main.html \

aboutdir = $(kde_datadir)/akregator/about

+ 20
- 0
akregator/src/about/akregator.css View File

@@ -0,0 +1,20 @@

#headerR {
position: absolute;
right: 0px;
width: 430px;
height: 131px;
background-image: url(top-right-akregator.png);

/* .. for when we actually have a box-center-akregator.png ..
#boxCenter {
background-image: url(box-center-akregator.png);
background-repeat: no-repeat;
background-color: #dfe7f3;
background-position: bottom right;

/* vim:set sw=2 et nocindent smartindent: */

+ 66
- 0
akregator/src/about/main.html View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

<html xmlns="">
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 1st August 2004), see" />

<style type="text/css">
@import "%1"; /* kde_infopage.css */
%1 /* maybe @import "kde_infopage_rtl.css"; */
@import "akregator.css";
body {font-size: %1px;}


<div id="header">
<div id="headerL"/>
<div id="headerR"/>

<div id="title">
%2 <!-- Akregator -->

<div id="tagline">
%3 <!-- Catchphrase -->

<!-- the bar -->
<div id="bar">
<div id="barT"><div id="barTL"/><div id="barTR"/><div id="barTC"/></div>
<div id="barL">
<div id="barR">
<div id="barCenter" class="bar_text">
%4<!-- Akregator is ... -->
<div id="barB"><div id="barBL"/><div id="barBR"/><div id="barBC"/></div>

<!-- the main text box -->
<div id="box">
<div id="boxT"><div id="boxTL"/><div id="boxTR"/><div id="boxTC"/></div>
<div id="boxL">
<div id="boxR">
<div id="boxCenter">
<!--Welcome to Akregator-->
<div id="boxB"><div id="boxBL"/><div id="boxBR"/><div id="boxBC"/></div>

<div id="footer"><div id="footerL"/><div id="footerR"/></div>
<!-- vim:set sw=2 et nocindent smartindent: -->

akregator/src/about/top-right-akregator.png View File

Before After
Width: 430  |  Height: 131  |  Size: 14KB

+ 58
- 0
akregator/src/aboutdata.cpp View File

@@ -0,0 +1,58 @@
This file is part of Akregator.

Copyright (C) 2004 Teemu Rytilahti <>

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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.

#include <qstring.h>

#include "aboutdata.h"

namespace Akregator {

: KAboutData("akregator", I18N_NOOP("Akregator"), AKREGATOR_VERSION, I18N_NOOP("A KDE Feed Aggregator"),
License_GPL, I18N_NOOP("(C) 2004, 2005 Akregator developers"), 0,
addAuthor( "Frank Osterfeld", I18N_NOOP("Maintainer"), "" );
addAuthor( "Teemu Rytilahti", I18N_NOOP("Developer"), "" );
addAuthor( "Sashmit Bhaduri", I18N_NOOP("Developer"), "" );
addAuthor( "Pierre Habouzit", I18N_NOOP("Developer"), "" );
addAuthor( "Stanislav Karchebny", I18N_NOOP("Developer"), "" );
addAuthor( "Gary Cramblitt", I18N_NOOP("Contributor"), "");