Projects/PIM/KMail Junior Jobs

< Projects‎ | PIM
Revision as of 20:38, 6 September 2009 by TMG (Talk | contribs)

Jump to: navigation, search


KMail Junior Jobs

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:

  • KDE Techbase: Contains a lot of information about developing KDE, in particular a section on how to build KDE from source
  • KMail's HACKING file: Some KMail specific information.

The steps for your first coding contribution are roughly like this:

  1. Build KDE trunk from sources, including KDEPIM
  2. Set up your development environment, i.e. your editor or IDE
  3. Pick something to work on, like some of the things suggested below
  4. Start coding and fix the problem!
  5. Send in a patch (We prefer reviewboard)

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.

Bug 192873: Fix ambiguous shortcut in the composer

Starting point: kmcomposewin.cpp, kmreaderwin.cpp

Difficulty: Easy

Description: The bug report says it all: There is an ambiguous shortcut in the composer, Ctrl+L. You should reset the shortcut of the Strike Out action if it is the same as the shortcut of the Check Mail action.

A similar problem is already solved in the reader: There, Ctrl+C was ambiguous, which was solved in a similar way.

Bug 194979: Improve spell check context menu

Starting point: kdelibs/kdeui/widgets/ktextedit.cpp

Difficulty: Medium

Description: When right-clicking a misspellt word in KMail's composer, the context menu hides to suggestions in a sub-menu. As explained in the bug report, that is a bit cumbersome. You should move the spell check suggestions to the top level menu. See OpenOffice Writer, it is done correctly there.

Additionally, you could also add a menu entry to switch the dictionary language, as many people don't find that option in KMail.

This is not strictly KMail related, but it would be useful for KMail's composer. The two bug reports were originally reported against KMail, actually.

Clicking the HTML status bar should switch display mode

Starting point: kmreaderwin.cpp, htmlstatusbar.cpp

Difficulty: Medium

Description: Currently, the HTML status bar only displays whether the message is plain text or HTML. It would be useful if clicking the status bar would switch between HTML and plain text, if the message has both HTML and plain text. This should be a proper action, so that the user also can configure a shortcut for this.

Also, the HTML status bar could have a third state for multipart/alternative messages, so the user can see a difference between HTML-only and HTML+plain text messages.

A tooltip could explain what type the message is in more detail, and also show the instruction to click for switching the mode in case of a multipart/alternative mail.

Re-add ability to hide quick search

Starting point: messagelistview/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.

The default column sizes of the message structure viewer are too small

Starting point: kmmimeparttree.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.

Better handling of empty column titles in the message list

Starting point: messagelistview/core/themeeditor.cpp, messagelistview/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.

Bug 59576: Add zoom buttons for the reader

Starting point: kmreaderwin.cpp, kmreadermainwin.cpp

Difficulty: Medium

Description: Currently, zooming in or out in KMail is only possible by holding the control key and then moving the mouse wheel. It would be nice to have those as real actions as well, so that they can be added in the toolbar and so that one can assign keyboard shortcuts to them.

This probably only involves making a simple call to the KHTML part.

This would also solve the bug below in this list, since the font settings in the toolbar should be removed in favor of the zoom buttons.

Bug 156653: Changing the font size has no effect on the separate reader window

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.

Preserve the image format for HTML inline images

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.

Bug 89446: Convert more settings to KConfigXT

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).

Convert more dialogs and layouts to UI files

Starting point: UI files in the ui/ subdirectory and the files where those UI files are used

Difficulty: Easy (but possibly boring)

Description: In many places in KMail, the layout is hardcoded in the application. That code usually involves setting up layout, creating widgets, setting labels and so on. A typical example can be found in the constructor MailingListFolderPropertiesDialog::MailingListFolderPropertiesDialog() in the file kdepim/kmail/mailinglistpropertiesdialog.cpp.

Using UI files for this boring code has several advantages, for example it is much easier to change the layout later, even for non-programmers, and the code is less cluttered, as the UI parts are now separate from it.

Your task would be to pick some hardcoded layout in KMail and convert that to a UI file.

As some widgets are going to be removed or replaced during the Akonadi port of KMail, please ask on IRC or by mail first if separating the layout of the particular widget you have chosen makes sense, or if it will replaced by something else soon, in which case the work wouldn't make much sense.

Update the tips of the day

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:

  • The folder selection dialog that comes up when pressing J or M
  • Theme and aggregations can be changed, and that those settings can even be done per folder.
  • The dictionary can be changed in the composer with View->Dictionary. Same for the identity.
  • Transports can be tied to identities in the identities dialog
  • The up and down arrow keys can be used to switch between the fields in the composer
  • ... Think of your own!

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal