From The Document Foundation Wiki
Jump to: navigation, search

Completed Easy Hacks from Bugzilla

(click link for further details)

[Bug 31005] EasyHack: Table Autoformats does not save (and of course apply) all properties (Writer and Calc)
[Bug 40607] EasyHack: call fsync when we can when writing documents to certain linux file-systems
[Bug 30550] EasyHacks: Character count without spaces
[Bug 38882] [EasyHack] Make it easier to select/deselect UI languages in the Windows installer
[Bug 82089] EasyHack: Remove lwpunoheader.hxx wrapper
[Bug 42455] EasyHack: writer - rename ANKER to ANCHOR
[Bug 47648] [EasyHack] Create VirtualBox for bibisecting
[Bug 97499] EasyHack: Clean up default arguments in uses of C++ unordered containers
[Bug 46166] EasyHack: remove obsolete MSFilterTracer ...
[Bug 46501] EasyHack: cleanup SimpleResMgr ...
[Bug 32559] EasyHack: Changing case of text made easy UI,FORMATTING
[Bug 43058] EasyHack: remove redundant double ';;' from C++ code ...
[Bug 46399] EasyHack: vcl - cleanup empty methods ...
[Bug 46446] EasyHack: add python gdb helpers for osl::FileBase ...
[Bug 45033] [EasyHack] Update pre-installed Bibliography Database with LibreOffice references
[Bug 32719] [EasyHack] Clean up some impress templates
[Bug 72598] [Easyhack] Remove SunStudio cruft from code base
[Bug 46258] EasyHack: remove obsolete 'isTestTool' from vcl ...
[Bug 31616] EasyHack: [Chart]: Allow drag and drop for Data labels
[Bug 32786] [EasyHack] "Capitalise Every Word" function doesn't work properly in Calc
[Bug 38822] [EasyHack] Support copying of a single range and pasting it to multiple ranges
[Bug 31349] [EasyHacks] make does not support the "install" target
[Bug 32621] EasyHack: More robust ExternalMailer support
[Bug 34178] [EasyHack] colorpicker: Change background/font color with one click
[Bug 34425] [EasyHack] formatting background color toolbar button
[Bug 34669] [EasyHack] When quickstart is enabled, the reboot/shutdown not work in Ubuntu.
[Bug 34786] [EasyHack]Editing: Sentence movement function broken
[Bug 35067] EasyHack: fix language fallback mechanism of untranslated list items
[Bug 35068] EasyHack: implement language fallback mechanism for the readme
[Bug 36015] EasyHack: Ability to show comments/notes that apply to text selections
[Bug 36081] EasyHack: False Text at Extension Update
[Bug 36896] [EasyHack]: Please enable "comments" toolbar also in Calc and Writer
[Bug 38807] [EasyHack] Get rid of duplicated VBA related import functiona
[Bug 38824] [EasyHack] Correct interpretation of -x^y
[Bug 38826] [EasyHack] Use gradient for document shadow
[Bug 38833] [EasyHack] get rid of useless Win9x and NT4 support
[Bug 38877] [EasyHack] Remove the distinction between basis and brand layer
[Bug 39491] [EasyHack] remove superfluous and duplicate include paths
[Bug 39621] [EasyHack] Make unit tests easier to debug
[Bug 39629] [EasyHack] improve linkoo
[Bug 39635] [EasyHack] Remove "using namespace ::rtl"
[Bug 39638] [EasyHack] Contribute old Word documents (Word 1 to 5)
[Bug 39639] [EasyHack] Fix duplicate longname IDs
[Bug 39640] [EasyHack] Simplify the download of Windows dependencies
[Bug 39642] [EasyHack] Improve README files in top-level module directories
[Bug 39643] [EasyHack] Remove --disable-strip-solver configure option and default to never strip, when copying to solver
[Bug 39672] [EasyHack] hunt and destroy obsolete macros
[Bug 39747] [EasyHack] remove cruft from perl scripts
[Bug 41474] EasyHack: obsolete rtl::O[U]StringBuffer::{charAt,setCharAt}
[Bug 42453] EasyHack: remove unused anchor icons ...
[Bug 44635] EasyHack: trivial whitespace cleanup in presenter console ...
[Bug 44833] EasyHack: remove obsolete unix floppy-disk support ...
[Bug 44988] EasyHack: tools: remove obsolete BOOTSTRAP defines ...
[Bug 44993] EasyHack: tools: remove obsolete FSysRedirector ...
[Bug 45131] EasyHack: remove gcc 2 conditionals ...
[Bug 45678] EasyHack: kill hwpfilter/source/list.hxx with fire
[Bug 46438] EasyHack: ctrl-g to re-search in the search bar ...
[Bug 46581] EasyHack: Avoid temporary rtl::OUString
[Bug 46610] EasyHack: vcl - remove un-used return values ...
[Bug 47660] [EasyHack] Implement read-only anonymous access for Litmus
[Bug 48253] [EasyHack] Replace SAL_CONST_CAST and SAL_STATIC_CAST macro uses by their expansion
[Bug 49285] EasyHack extension on TDF wiki broken again by recent changes
[Bug 65219] [EasyHack] unit tests fail to clean up temp files
[Bug 71246] [EasyHack] Run and fix include guards
[Bug 83512] [EasyHack] Make use of OUStringHash
[Bug 97703] EasyHack: Remove empty setUp/tearDown overrides from CppUnit test code
[Bug 47246] EasyHack: Remove the duplicate linked objects in gbuild
[Bug 42779] EasyHack: make life easier for artists
[Bug 36230] [EasyHack] Remove dead code aGotoCallButton and RID_IMGBTN_GOTOCALL
[Bug 34324] EasyHack: Formula icon in quickstarter menu looks inconsistent.
[Bug 31022] EasyHacks: "About dialog" wording and layout are suboptimal
[Bug 31251] [EasyHack] Make the default page look better
[Bug 36158] EasyHack: UI:Find&Replace dialog "Notes" instead of "Comments"
[Bug 34899] EasyHack: in Draw and Impress insert page behaves in unintuiteve way
[Bug 71616] [EasyHack] Elements dock: Better display of scalable braces
[Bug 82088] EasyHack: Clean up starutil namespace alias
[Bug 45747] [EasyHack] remove the limitation to 3 sort entries in calc
[Bug 39623] [EasyHack] Export/Import .src comments to .sdf/.po format
[Bug 31471] EasyHacks: iDRAW-UI: context menu for grid shows opposite of current behaviour
[Bug 46565] EasyHack: perl / should backup autogen.lastrun
[Bug 46552] UI: Preview for Bullets/Numbering Configuration incorrect
[Bug 32421] EasyHacks: Formatting of footnotes 100 and above
[Bug 34072] [EasyHack] "Protected cells can not be modified" using Replace on unprotected cells
[Bug 32598] EasyHack: [Impress] Changing Video/Sound playback options does not set document changed
[Bug 50931] EasyHack: FILEOPEN: Cannot import HTML
and <hr/> (while
and <br />, <hr> and <hr /> are imported correctly)

[Bug 36181] EasyHack: Replace with "Notes" option doesn't work with text selected
[Bug 38846] EasyHacks in our Bugzilla
[Bug 38845] [EasyHack] Make python / mail-merge debuggable
[Bug 40099] [EasyHack] don't break incremental builds on removed headers on non-gcc platforms
[Bug 39748] [EasyHack] Cleanup extensions list
[Bug 44681] EasyHack: port to CLucene from java/Lucene ...
[Bug 46538] [EasyHack] add support for more bug trackers to get-bugzilla-attachments-by-mimetype
[Bug 33293] [EasyHack] Make starting count of worksheets configurable
[Bug 32413] EasyHacks: Add an "Apply" button to formatting dialogs
[Bug 37007] EasyHack: Add Math symbol "There does not exist"
[Bug 38843] [EasyHack] Implement python gdb helpers
[Bug 44981] EasyHack: remove obsolete SWAPLONG macros
[Bug 41997] EasyHack: cleanup vcl enumeration ...
[Bug 46390] EasyHack: Move VERBOSE to OSL_DEBUG_LEVEL

Open this query in Bugzilla

Old Wiki Easy Hacks


This page was marked as inactive and is retained for historical reference.
Since we migrated Easy Hacks to bugzilla, completed Easy Hacks are just closed bugs there. This is just a historic reference from the early times, where Easy Hacks were in the Wiki only (which was then overwhelmed by our own success and did not scale to the amount of Easy Hacks we are working on in parallel.)


Add editor settings line to each source file

Background: Both vi and Emacs can read editor config from individual files. Would be cool to add that to most of the source files. Task is to write a script that does it, not actually send a patch.

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

[ ... all the file's content ... ]

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Skills: Write a Perl/Python script that adds stuff to files of a certain type.

Completed: Script by Jesse Adelman, ran by spaetz, pushed by meeks(?) (and others?), 2010-10-14T20:01:18

Pretty print the configure help options with AS_HELP_STRING

Background: The "inner" (rawbuild/ or clone/bootstrap/ has a lot of options, and sometimes tangled indentation when using ./configure --help. AS_HELP_STRING is a autoconf macro to make it easy to get nice indentation in the help output.

Skills: autoconf syntax

Completed: arranna, 2010-11-03T14:19:02

Remove ineffectual emacs modeline remnants

If you find emacs modeline comments (e.g. /* -*- Mode: C++; ... -*- */) in the middle of a file (i.e. not at the very top) - elide it.

UPDATE: patch sent by spaetz on Oct 29 2010. Committed.

Completed: spaetz, 2010-10-29T06:45:51

Simple LibreOffice Lint tool to detect silly errors

Background: There are a number of gotchas that are common in the LibreOffice source code, and it would be great (while fixing these) to ensure that they do not happen again. As an example running:

bin/g grep 'String( RTL_CONSTASCII_STRINGPARAM' | grep \.cxx

Should show you lots of cases where the 'String' constructor is broken (it is ok for ByteString) - we need to fix all of these to use the correct (RTL_CONSTASCII_USTRINGPARAM) macro instead - but it would be great to have a trivial lint tool to run the grep, and parse the output we can run forever more when merging new patches.

Caolan solved this specific issue another way in the code

Skills: perl or python, basic C++ / common-sense

Use new SAL_N_ELEMENTS macro

Background: In many places in the code a fixed array size is hard-coded. This is both buggy and unnecessary - it is easy to calculate this at compiletime with a macro: eg.

char *string_array[] = { "hello", "world" };
for (int i = 0; i < 2; i++) // broken style
for (int i = 0; i < sizeof(string_array)/sizeof(string_array[0]); i++) // old style
for (int i = 0; i < SAL_N_ELEMENTS(string_array); i++) // best style

We should grep for all uses of 'sizeof' - and replace suitable 'old style' ones with the new macro to clean them up. Please note that this may require including sal/macros.h in a file that uses this - since it is not commonly included (sadly).

Skills: grep 'sizeof.*\[' simple code editing, compilation

Remove unhelpful File.hxx macros

Background: sal/inc/osl/file.hxx includes several #defines that are not namespaced eg. #define OpenFlag_Read osl_File_OpenFlag_Read. These should be replaced with their equivalents across the codebase, and the defines removed.

Skills: grep, simple code editing

Completed: Andy Holder, 2010-12-13

Remove bogus macros that expand to empty string

Background: There are several macros defined in the solar.h file that expand to empty string. Two such examples are __EXPORT and __FAR_DATA. Both are used throughout the code base but they don't add any value. Let's remove them. Perhaps __READONLY_DATA can be replaced with plain const too. Skills: grep, simple editing


Background: In many places in the code a OUString object is created from a string literal. An optimization available is to pass in the length of the string, which can be computed at compile time with RTL_CONSTASCII_USTRINGPARAM.

rtl::OUString aFoo(rtl::OUString::createFromAscii("foo")); //suboptimal
rtl::OUString aFoo = rtl::OUString::createFromAscii("foo"); //suboptimal
rtl::OUString aFoo(RTL_CONSTASCII_USTRINGPARAM("foo")); //best style and faster.

rtl::OUString aFoo(rtl::OUString::createFromAscii(pPointer)); //not a string literal, leave it alone
rtl::OUString aFoo(RTL_CONSTASCII_USTRINGPARAM(pPointer)); //wrong, not a string literal

Skills: grep 'createFromAscii' simple code editing, compilation

Completed: Multiple People, 2011-01-04

Replace suitable equalsAscii calls with equalsAsciiL

Background: In many places in the code a OUString object is compared against a string literal. An optimization available is to pass in the length of the string, which can be computed at compile time with RTL_CONSTASCII_STRINGPARAM. As a side note, equalsAsciiL compares in reverse order.

if (sFoo.equalsAscii("XXXXX")) //suboptimal
if (sFoo.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("XXXXX"))); //optimal

if (sFoo.equalsAscii(pPointer)) //not a string literal, leave it alone
if (sFoo.equalsAscii(RTL_CONSTASCII_STRINGPARAM("XXXXX"))); //wrong, you missed a trailing 'L'

Skills: grep 'equalsAscii' simple code editing, compilation - `grep 'equalsAscii\s*(\s*".*"\s*)' * -R`

Completed: Thomas Arnhold, 2011-01-28

Remove double line spacing

Background: For unknown reasons, some modules use double line spacing (ie. every other line is a newline) - making the code hard to read, and this is simply bad practice and perhaps the result of some failed unix/windows conversion. An example is:filter/source/xmlfilteradaptor/genericfilter.cxx (Fixed). It would be great to fix this, and/or find any other instances of this problem and fix these. Clearly, it is fine to have blank lines in normal source files, this applies only to these (perhaps very few) instances of mis-conversion where the majority of the file is erroneously double line spaced.

Skills: simple editing, search for the problem.

A list of suspicious files can be found here.

Completed: several people, 2011-02-08

change make test to make check all over the place

Background: Align !LibreOffice makefile targets with FLOSS conventions.

Skills: grep, Makefile reading

Completed: 2011-02-09

remove obsolete gjc aot compilation

Background: It used to make sense to use gcj to do ahead of time compilation, however this unfortunately (given the state of gcj) introduces some bugs, and it is no longer used. It would be great to rip the --enablegcj-aot option from, the JAVAAOTCOMPILER from and from its usages in the build.

Skills: shell, autotools, make

Completed: 2011-02-12

Remove xine backend

Background: Under Unix the video/audio backend is gstreamer. There is an unused prototype xine one in avmedia/source/xine/ which can be removed. Search for xine in avmedia/prj/build.lst as well to remove the xine dir from the list of dirs to build

Skills: none

Completed: Julien Nabet, 2011-02-12

Migrate module descriptions to our wiki

Background: We need to extract and complete the module overview that was created by external volunteers, and then imported to the Oracle wiki. We should take this version before Sun edits, and migrate the module descriptions to the new code structure on this page

Skills: cut/paste of wiki markup, good taste

Completed: Christoph Herzog, 2011-02-15

Remove effectively-unused SVX_LIGHT macro

Background: There once was a conditional compile mode called SVX_LIGHT, with preprocessor macros of that name mostly in the svx module. This is long since dead and unused, and the #ifdef SVX_LIGHT / #endif pairs can be elided - please don't kill the code bracketed by this, only the #ifdef / #endif pair!

Skills: ability to identify and remove matching #ifdef / #endif pairs

Completed : Xavier Alt, 2011-03-22

Strip include guards in idl files

Background: the idl files have an include mecanism similar to the one use in C++. A lot of idl files have #ifndef's around each include... which doesn't make sense as long as there is an #ifndef for each file (as this is the case). The task is to remove all those include guards to make to idl files easier to read. TextColumns.idl is a good example of those horrible things. The strip-guards script could be used to perform the task though it will probably need to be improved.

Skills: Perl, simple C++ programming

Completed : Julien Nabet, 2011-04-02

expunge duplicate enumerations in vcl

Background: VCL used to have a separate 'psprint' module (namespace psp) to implement printing. This was merged with vcl, but lots of the enumerations duplicated between the two remain, along with mapping functions between them; see vcl/inc/vcl/fontmanager.hxx cf. font enumerations in vcl/inc/vcl/vclenum.hxx and vcl/inc/sft.hxx and duplicate mapping functions like ToFontFamily. It would be good to dung all of these out keeping the original vcl/ (ie. not psp::) enumerations.

Skills: reading, cleanup, compiling.

Completed: by Christina Rossmanith on 2011-04-11

remove all the bogus comments lying around

Background: Almost no-one believed that revision control works, so we see things like:

/* -----------------------------04.12.00 16:26--------------------------------


#include <svx/svxdlg.hxx> //CHINA001


// --> OD 2008-01-08 #newlistlevelattrs#

Skills: identifying bogus comments, and removing them.

Hints: Bash line:

git grep -nE " #[^i][0-9]+#" | ( while read f; do file=$(echo "$f" | cut -d':' -f1) ; line=$(echo "$f" | cut -d':' -f2) ; emacs "+"$line > -fh "$file"; done )


Completed: Júlio Hoffimann 2011-04-14

VBA support add support for Worksheets.Copy

Background: Libreoffice's vba compatability Worksheet object is missing ( amongst other methods/properties ) the 'Copy' method. ( see tdf#34763 for associated issue ) It should be quite easy to add support for this method. You just need to update the existing idl (oovbaapi/ooo/vba/excel/XWorksheets.idl ) and provide the associated implementation in sc/source/ui/vba/vbaworksheets.[ch]xx. Required signature and some basic info about the Copy method is available from

Skills: Building, C++, some UNO, knowledge of Libreoffice uno API, some knowledge of VBA/Excel api

Completed: Markus Mohrhard, 18/04/2011

Add visibility markup to all component_get* functions

Background: We're in transition from one build system to another. In the old one we typically filtered out symbols we didn't want to export with a mix of visibility markup and map files. In the new one we solely use visibility markup. But we keep forgetting to convert some vital functions over to the new markup mechanism, causing loads of pain and suffering. So we should just move them all over in one fell swoop.

Bottom line is that: component_getFactory and component_getImplementationEnvironment need to be annotated with SAL_DLLPUBLIC_EXPORT, e.g. see this commit for an example commit template to follow.

Skills: grep

Completed: Julien Nabet 21/04/2011

remove cruft from perl scripts

Background: Our perl installer script: solenv/bin/ has lots of legacy features that can be removed - eg. sending mails about its progress: solenv/bin/modules/installer/ needs removing - we don't want to send mail people during the build.

Skills: perl Completed: Samuel Cantrell 2011-06-13

remove non-compiled / dead code

Background: There is tons of this lying around in the code. Apparently some developers don't believe in revision control. In calc, much un-used code is just commented out like this:

//UNUSED2008-05          if (nCount==1)
//UNUSED2008-05              return 0;                               // leer

all of this needs removing.

cppcheck can help you to identify such areas.

Skills: ability to identify and remove large sections of commented out / compiled out code

Completed: Júlio Hoffimann 2011-07-18

Slightly more interesting hacks

Remove libegg fluff

Background: The systray icon: sfx2/source/appl/shutdowniconunx.cxx currently uses a cut/pasted 'libegg' that is included in the LibreOffice toplevel. Instead it should switch to using the GtkStatusIcon API, which is very similar, more capable, and reduces our library count by one. We should then remove libegg. Extra bonus points for checking that we do indeed have the required gtk+ version inside the module at run-time.

Skills: build, simple C++, GNOME

Completed: Christopher Backhouse - 2010-12-06

don't ship 150 duplicate placeholder icons

Background: Currently, we ship tons of 'broken-icon' icons - duplicated many times in each icon theme. These are just designed to show visibly in the UI if they are used in error. This is a pointless waste of memory, disk, mirror bandwidth etc. Instead - we should have a single missing icon icon. We should hack the icon loading to fall back to this, checkout: vcl/source/gdi/impimagetree.cxx - instrument the methods there, define a name for that icon, and hard-code a fallback here.

Then we need to remove all the duplicate missing icon images from the default_images tree; ace_dent can help with that piece.

Skills: build, simple C++

Completed: Joachim Trémouroux - 2010-11-23

Copy configure options

Background: There is currently configure options which is only in build/ Those options shall be also in bootstrap/ so that it would be possible to drop the build repository out of building process. See current configure options in bootstrap/

Skills: text editor, autoconf syntax, patience

Obsolete / Complete: 2011-02-07

un-screw-up accessible icon code-paths & shrink theme files

Background: Whomever added the accessibility icon theming code created a limited solution of un-necessary complexity. Then real theming was introduced. We should remove the un-necessary !BmpColorMode code paths. We should also remove the redundant high-contrast icons from all the themes (retaining the discrete high-contrast theme itself of course) - that means moving all the lch_ and sch_ variants in default_images/res/commandimagelist (and similar icons) into a new directory in ooo_custom_images - and stripping all mention of them from the .src and .hrc files. Any coding effort can be supported by ace_dent, who has experience of preparing icon themes.

Benefit analysis: Saves ~10MB from the installed size. Removes ~3,300 files per icon theme, that will translate to faster loading times. Simplifies and shrinks code and will further aid optimizing icon themes.

Done by: Joseph Powers, Sebastian Spaeth, & Caolán McNamara (who was nice enough to fix our bugs)

Completed: 2010-11-22

build with strict-aliasing

Background: GCC compiler developers believe we can get performance benefits from gcc's -fstrict-aliasing flag. Finishing the work already started on this and merging it would be useful (see i#101100). This entails identifying and fixing sites that generate related warnings.

Completed: 2010-01-17 (Note, only for gcc > 4.5.1 and non stlport)

Hacks for the new visual formula editor

Blinking caret for the new visual formula editor

Background: The caret in the visual formula editor is currently drawn as a solid line, it would be great if it could blink like a normal caret does in a textbox. You'll need to add a timer to SmGraphicsWindow and modify SmGraphicsWindow::Paint. Notice, that you should mainly touch code that runs when IsInlineEditEnabled() is true.

Skills: Building, C++

Completed: luked, 2010-11-15T18:46:22

Draw solid line under current line in the new visual formula editor

Background: The line in which the caret is placed in the editor should be underlined, to emphasize exactly where the caret is placed (kind of like MathType). For this the SmCaretDrawingVisitor should be modified. Notice that finding the topmost node if a line is not trivial, see SmCursor::FindTopMostNodeInLine.

Skills: Building, C++

Completed: luked, 2010-11-17T22:07:24

Don't draw caret when visual formula editor looses focus

Background: Currently the visual formula editor keeps drawing the caret, even when it has lost focus. This is not pretty, it should be fixable in SmGraphicsWindow, by repainting when focus is lost, and not drawing caret when the editor doesn't have focus. Notice, that you should mainly touch code that runs when IsInlineEditEnabled() is true.

Skills: Building, C++

  • Patch sent to mailing list - Luked

Completed: Luked, 2010-11-02T21:18:44

Remove VOS library

Background: The VOS library has been obsolete for many years, but still lingers on in the codebase. Patches are in patches/dev300/vosremoval-* to remove it altogether, simplifying the code and speeding start-up. These need re-applying and building and some QA doing to test them. One fewer library means less seeking / reading at startup, and less obsolete code lying around.

Skills: build, C++

Completed: Norbert Thiebaud, 2010-10-24T08:57:30

Change Sheet copy process

Background: Currently the right click select Move/Copy sheet dialog allows for coping whole sheets. On exit the "new" sheet is named with _#, where _# is a underscore and number added by LibO to the original sheet name. The dialog needs to either have, or open based on the "Copy" box, text entry boxes added based on the number of sheets highlighted for copy. The text box could be pre-populated with the suggested name as the current "Rename sheet" dialog has.

Skills: C++, building, debugging

Completed: jooste, 2010-12-15T22:07:30

Leftover data after an Undo operation

Background: There is a currently a bug that leaves unwarranted data in cells during an undo operation. The undo record is likely getting incorrectly stored during the paste, which causes the undo to do the wrong thing. See Error when trying to cancel a paste when pasting multiple columns into cells ( for more information and a simple test case.

Skills: C++, building, debugging

Completed: jooste, 2010-12-21T20:15:00

fix --help parameters

Background: The soffice binary should accept a -help argument, yet it apparently does not (code in desktop/). Possibly this is an artifact of the unix quickstarter, since soffice.bin -help does work. It would be lovely to make --help style arguments work as well.

Skills: build, C++

Completed: 2011-01-04

accelerate Perl installer builder

Background: For now we use solenv/bin/, with Perl modules in solenv/bin/modules/installer, to do handle the production of an installer or data to go into packages. Unfortunately it is slow even on a fast machine.

  • Substituted spawning of processes for find and chmod with built-in perl routines

Skills: Perl, building

Improve Autocorrect capitalize first word in sentence

Background: We have an autocorrect feature to auto-capitalize the first word in a sentence.We should add a rule that protocol strings like http: don't get capitalized. i.e http: turning into Http: is ugly.

The code for this is (I think) editeng/source/misc/svxacorr.cxx SvxAutoCorrect::FnCptlSttSntnc. A list of protocols to auto-white list could be got with looping from INET_PROT_NOT_VALID to INET_PROT_END into INetURLObject::GetScheme of tools/inc/urlobj.hxx

(beuss 2011-02-21)

Skills: C++

Improve Autocorrect TWo initial capitals

Background: We have an autocorrect feature to fix two initial capitals, i.e TWo gets autocorrected to Two. We have a whitelist per-language for word that should not be fixed, e.g. MHz. But we should have an extra test to not fix the two-initial capitals if the word is considered correctly spelled by the spellchecking dictionary. There's nothing more annoying than having a correctly spelled word auto-corrected into an incorrectly spelled word.

So, see editeng/source/misc/svxacorr.cxx SvxAutoCorrect::FnCptlSttWrd. It currently only uses the !FindInWrdSttExceptList test. Grep for SvxGetSpellChecker() and "xSpellAlt = xSpeller->spell( aWord, eLang, aEmptySeq );" for getting and using the spellchecker in editeng.

Skills: C++

Remove F_PI definition from solar.h

Background: There are two different definitions of the Pi value in the code. The one defined in solar.h needs to be removed as it leads to precision errors. The task consist in removing the definitions from and use the ones from everywhere. Other F_PI* and F_2PI constants are also defined in ftools.hxx. They could be removed.

Skills: building, simple C++ programming

Completed: Michael Lefevre, 2011/03/15

Improve git pre-commit hook

Background: When you commit a new file to the repositories, a git hook is executed that checks for various patterns we do not want to see in the repository, like tabs instead of spaces at the beginning of lines, etc. One of them is a check for trailing whitespace (see the 'bootstrap' repo, file git-hooks/pre-commit, function check_and_fix_whitespace()). This one should be limited to (c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|mk|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml) only - instead of running the diff against everything, it should go file by file, using "git diff-index --cached --name-only $against", similarly to the check for the leading tabs.

Completed: Norbert Thiebaud, 2011/06/22

Easy Programming tasks

De-Java-ise flat XML export

Background: LibreOffice provides a way to turn an ODF (.zip) file to and from a flat XML file. This of course involves base64 encoding embedded binaries like images (etc.) but is fairly trivial, and of course this makes it possible to use XSLT filters. Unfortunately, this is written in Java, and as such causes deployment and performance problems. It would be great to re-write the flat-xml export / import to be just plain C - currently they are written as almost no-op XSLT filters (in filter/source/odfflatxml/) - and the XSLT framework is in (filter/source/xsltfilter) it would be great to convert some of the latter's .java files to C++, and special case flat XML import/export.

Completed: Peter Jentsch, 2011-01-10

Count characters without whitespace in the Writer statistics

Background: It seems useful (eg. for translators) to show also the number of characters without counting whitespace (spaces, tabs, and carriage returns) in the statistics page (in addition to what is already there). More info in tdf#30550. It is quite easy to achieve, because the functionality is already there, it is just necessary to not include whitespace to the count.

Completed: cbosdo, 2010-10-27T12:40:35

List all the contributors on a web page

Background: All the contributors need to be automatically thanked on some web page. Not only developers, but also localizing, QA and helping people. The idea here is to collect some data from git repos, wiki history, mailing lists, forums (others?) and present them nicely. Extracting from git is easy, but some automated way needs to be set up for the wiki, and the exact data to show needs to be determined for the forums / mailing-lists. For git, gitdm and the configuration scripts here can be used.

Skills: scripts

Assigned: I am working on this (spaetz)

Add a contributor page

The current contributor credit list is very hard to find. In the Help menu, select About... and in the about dialog, type CTRL-S-D-T to watch the credits fly by. The code is in libs-core/sfx2/.../about.cxx. This easter egg is pretty hard to discover and the display flickers a lot. One task would be to add a "contributor" button to that dialog and have a window pop up that presents the contributors in a nicer layout or so.

It would be like the Help->License info one - cf. sfx2/source/appl/appserv.cxx - that would load an ODF document containing the output of - so that we can ship that with the binaries. We could whack that in readlicense_oo - cf. LICENSE.odt and add a build of d.lst goodness, and some scp2 to get it into the install.

Skills: Building, C++, creativity, design skills(?) Result: Help -> Credits uses Spaetz' nice work.

Remove obsolete BmpColorMode enum

Background: The vcl/inc/vcl/bitmap.hxx BmpColorMode enumeration was primarily used for rendering high-contrast icons manually. These code paths are now removed, but there are still some vestigal uses. These should be removed, and the associated IMAGE_DRAW_MONOCHROME_* enumerations also expunged from the code.

Skills: C++, building

Completed: mordocai, 2011-2-1

Remove obsolete Hyperlink Bar

Background: There is a toolbar for inserting hyperlinks that's rarely used, but continues to occupy the precious menu space (View - Toolbar - Hyperlink Bar). This toolbar has been carried over from the ancient StarOffice time, and its design clearly shows its age. Let's remove this toolbar and all code associated with this cruft.

The Hyperlink Bar is implemented in the SvxHyperlinkDlg class. It's a good idea to remove this class as well as other classes used only by SvxHyperlinkDlg (such as HyperCombo and HyperFixedText).

Note that, this class is instantiated indirectly via SvxHyperlinkDlgWrapper class, which should be removed also upon removal of SvxHyperlinkDlg. Each application modules (sc, sw, and sd) contain reference to SvxHyperlinkDlgWrapper in order to register this dialog when loading the application. All of there references need to be removed as well.

Internally, each menu item corresponds with a "command", which is identified in two ways. One is by a numeric ID which is typically defined as a macro, and the other is by a UNO command name, prefixed by ".uno:". The Hyperlink Bar menu item is associated with the numerical ID SID_HYPERLINK_INSERT, and also with the UNO command .uno:InsertHyperlink. Use this knowledge when looking for the code to remove throughout the code base.

Also note that there is at least one place where this command is referenced by its hard-coded numerical value. The internal value of SID_HYPERLINK_INSERT is 10360, so, look out for some odd places where this command may be referenced by the hard-coded value of 10360.

Modules to look in are:

  • officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu - command definition
  • sc - calc
  • sd - impress and draw
  • sw - writer
  • svx - implementation for the Hyperlink Bar.
  • framework (and probably sfx2?) - misc framework stuff.
  • helpcontent2 - on-line help

Skills: C++, build, code analysis

Completed by: Alfonso Eusebio - 11/Feb/2011

add slide thumbnails to HTML export

Background: for a long time we've had a nice slide-gallery feature for HTML export lurking around in patches/test/sd-export-html-thumbnails.diff [1] - it needs resurrecting, applying, testing, whatever polish we can give it, and including.

Skills: building, simple C++, ability to grok HTML.

Completed by: Julien Nabet - 25/Mar/2011

Improve order of filters in the Open dialog

The order of filters in the Open dialog is more or less arbitrary, and it would make sense to order them better; eg. group the MS filters together, and sort them by the version (probably leading by the newer formats), etc.

Skills: C++, build, code analysis

Completed by: Matus Kukan - 2011-04-06

Programming Tasks

Export OLE objects as PDF / graphics

Background: It is not currently possible to export eg. a chart by itself as a PDF or PNG - but this would be a nice feature. We need to add a context menu to OLE2 object frames, to allow this please see tdf#30944 for a few sketchy code pointers to the UI side. Some bug fixes remain here, pwrt. expansion to calc and elsewhere.

Skills: building, C++, code reading, patience

Easy to solve bugs

Leave / return cursor to original position after Find & Replace All

Background: An oft requested improvement (since 2002!) for After executing a "replace all", the cursor should be left where it was before before the "replace all", rather than at the position of the last replacement. More info at i#8288.

Completed: mattias, 2010-12-02T00:49:00


Removal of duplicated template classes in Calc filter code

Background: Calc filter code contains several template classes that should be replaced with boost equivalent, because having own template classes when boost has perfectly usable alternatives unnecessarily increase the learning curve for new hackers.

The following classes should be replaced with boost's equivalent:

  • ScfNoCopy -> boost::noncopyable (done)
  • ScfNoInstance -> boost::noncopyable (done)
  • ScfRef -> boost::intrusive_ptr or boost::shared_ptr (done)
  • ScfRefMap -> boost::ptr_map or std::map (done)
  • ScfDelList -> boost::ptr_list (?) (done)

which are all declared in sc/source/filter/inc/ftools.hxx.

Skills: building, hacking in C++, boost, smart pointers

Completed: Nigel Hawkins hfinished removal of ScfNoCopy, ScfNoInstance, ScfRef, and ScfDelList, and Kohei Yoshida did most of ScfRefMap.

Allow one autofilter per sheet, not per document

Background: Calc only allows one automatic autofilter per document. Let's say you have auto-filter on Sheet1. As soon as you enter another auto-filter on Sheet2, the first filter on Sheet1 disappears. The workaround is to manually define range via Data > Range before setting the autofilter, but that's not optimal from usability's POV. Calc should allow one automatic autofilter per sheet. This also affects interoperability with Excel, since Excel allows one autofilter per sheet.

Code pointers: ScDocShell::GetDBData() needs to be modified to allow multiple anonymous DB ranges for handling unnamed ranges. Let's first allow one anonymous DB range per sheet which makes handling of importing and exporting with Excel documents easier. Once that's in place, we can probably use that new functionality in the Excel import and export to map Excel's builtin ranges to the new multi-anonymous ranges.

Skills: building, debugging, medium C++, ability to read and understand C++ code.


Completed: by Markus Mohrhard on 2011-03-30