On this page, you'll find small coding jobs for a beginner to work on. All these problems are relatively easy, some of them might even be one-liners. Of course, it is always a good idea to find your own thing to fix, the best motivation is scratching your own itch.
These tasks are intended for beginners with little or no experience programming with KDE. For those beginners, the biggest challenges are not actually the coding problems, but setting the development environment up, finding the correct place of code where the bug happens (in the jungle of all those source files) and interacting with the community, with the final step being sending the patch.
The knowledge prerequisite for those jobs are not that big. You should be familiar in C++, and knowing Qt a bit would help. Knowing kdelibs or KMail internals is not required, that can usually be picked up during coding.
For more general information, visit the following places:
The steps for your first coding contribution are roughly like this:
Should you need help, feel free to ask us in the #kontact IRC channel, or mail either Thomas McGuire (the KMail maintainer) or the kde-pim mailing list.
If you find some information missing, feel free to add it to this page after you learn it.
Below follows a list of junior jobs. It always includes a rough location where in the KMail sources to start.
You can also find some suggestions for Junior Jobs in the comments at Thomas' blog, especially the comment by Mark and Vide. Note however that those are not as straightforward as it seems, but certainly still doable.
| Warning |
|---|
| At this point, KMail 1 is completely frozen. Only bugfixes are still allowed, but no new features or any refactoring. If you chose to add new features, please do so in the akonadi-ports branch. In that branch, we port KMail to Akonadi and KMime, and will release that as KMail 2 once finished. Another way to contribute would be to help with the Akonadi ports, see first entry below. |
Starting point: The akonadi-ports branch
Difficulty: Easy to hard, depends on what you work on
Description: KMail is currently being ported to Akonadi and KMime. This work currently takes place in the akonadi-ports branch. Once KMail is fully ported, it will be released as KMail 2, probably together with KDE 4.5.
That porting is a huge task, comparable to the KDE3 to KDE4 port of KMail (if not even more work). Therefore, any help with porting is greatly appreciated. There are still many unported places in the code which are commented out, or places with defects, or missing features. You'll know what I mean with this when you start KMail, you'll immediately notice those things. This is where you can help: Many of those are easy to fix and quite suitable for newcomers. (Side note: the current KMail maintainer started by helping in the KDE3 to KDE4 port, having no experience with KMail code before. I think the Akonadi port is a comparable effort, with quite some low-hanging fruit you can start on.)
As said above, the work is done in a separate branch right now, the akonadi-ports branch. So instead of checking out and compiling kdepimlibs and kdepim from trunk/KDE, you need those from branches/work/akonadi-ports.
Starting point: kdepim/messagelist/core/widgetbase.cpp
Difficulty: Medium
Description: In previous versions of KMail it was possible to hide the quick search line with a keyboard shortcut. Since KDE 4.2, this is no longer possible, and it would nice to bring this back.
Starting point: kdepim/messageviewer/viewer_p.cpp
Difficulty: Easy
Description: When starting KMail for the first time (i.e. empty kmailrc configuration file), the column sizes for the message structure viewer are not good. The name column is too small, although it should be the largest. KMail should provide good default column sizes for the default window size.
Starting point: kdepim/messagelist/core/themeeditor.cpp, kdepim/messagelist/core/view.cpp
Difficulty: Medium
Description: When using the classic theme, you can select additional columns by right-clicking the header. There are many icon-only columns here, like Action Item or Signature. For those icon columns, the column header text doesn't fit into the width, and this looks bad. Your job would be to add an option to the theme editor like Don't display column header text. This would simply show nothing as the column header, but still show the column names in the context menu. Also, the default themes should be adjusted to use this.
Starting point: kmreaderwin.cpp, kmreadermainwin.cpp
Difficulty: Medium
Description: The font setting has no effect when using a fixed font, and when using the separate reader window. Your job is to fix the situation.
Starting point: kdepimlibs/kpimtextedit/textedit.cpp
Difficulty: Medium
Description: Currently, when you use embedded HTML images with KMail, those images are always converted to PNG. This is very undesirable when adding photos as inline images, as those are much bigger as PNG.
Have a look a textedit.cpp to see what KMail does: When attaching the image, it loads the image file into a QImage and adds that as a resource of the QTextDocument. It also replaces the file name suffix with ".png".
Later, when sending the message, that QImage is saved into a QByteArray, saving it into "PNG" format.
To fix this problem, KMail should not change the file name suffix of the image, and later try to use the suffix as format for saving, falling back to PNG if Qt doesn't support saving into that image format.
Also, in case of JPEG images, it would be nice to remember the quality as well. QImageReader has to be used to get the quality value.
MessageComposer::imageBodyPart() in kdepim/kmail/messagecomposer.cpp also needs to be fixed to work with other image types.
Starting point: kmail.kcfg
Difficulty: Easy (but possibly boring)
Description: KMail does many manual calls to readEntry() and writeEntry() for reading and saving configuration. These are error-prone and should be ported to the 'new' KConfigXT system, that is already used in some places (you'll notice the GlobalSettings class being used a lot).
For a hint see http://websvn.kde.org/?view=rev&revision=1021989
Starting point: kmail/tips
Difficulty: Easy
Description: KMail can show a "tip of the day" on each start, or on demand from the Help menu. Those tips are outdated, and we don't have enough tips. You should check that the tips are still correct, for example they could refer to the wrong UI elements.
Also, we need more tips, currently we have only 9 tips. Anything that is helpful to the user, like increasing productivity, and is not obvious can be added there. Some ideas for new tips: