summaryrefslogtreecommitdiff
path: root/svx/source/customshapes
AgeCommit message (Collapse)Author
2019-11-22Extend loplugin:external to warn about classesStephan Bergmann
...following up on 314f15bff08b76bf96acf99141776ef64d2f1355 "Extend loplugin:external to warn about enums". Cases where free functions were moved into an unnamed namespace along with a class, to not break ADL, are in: filter/source/svg/svgexport.cxx sc/source/filter/excel/xelink.cxx sc/source/filter/excel/xilink.cxx svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx All other free functions mentioning moved classes appear to be harmless and not give rise to (silent, even) ADL breakage. (One remaining TODO in compilerplugins/clang/external.cxx is that derived classes are not covered by computeAffectedTypes, even though they could also be affected by ADL-breakage--- but don't seem to be in any acutal case across the code base.) For friend declarations using elaborate type specifiers, like class C1 {}; class C2 { friend class C1; }; * If C2 (but not C1) is moved into an unnamed namespace, the friend declaration must be changed to not use an elaborate type specifier (i.e., "friend C1;"; see C++17 [namespace.memdef]/3: "If the name in a friend declaration is neither qualified nor a template-id and the declaration is a function or an elaborated-type-specifier, the lookup to determine whether the entity has been previously declared shall not consider any scopes outside the innermost enclosing namespace.") * If C1 (but not C2) is moved into an unnamed namespace, the friend declaration must be changed too, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71882> "elaborated-type-specifier friend not looked up in unnamed namespace". Apart from that, to keep changes simple and mostly mechanical (which should help avoid regressions), out-of-line definitions of class members have been left in the enclosing (named) namespace. But explicit specializations of class templates had to be moved into the unnamed namespace to appease <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92598> "explicit specialization of template from unnamed namespace using unqualified-id in enclosing namespace". Also, accompanying declarations (of e.g. typedefs or static variables) that could arguably be moved into the unnamed namespace too have been left alone. And in some cases, mention of affected types in blacklists in other loplugins needed to be adapted. And sc/qa/unit/mark_test.cxx uses a hack of including other .cxx, one of which is sc/source/core/data/segmenttree.cxx where e.g. ScFlatUInt16SegmentsImpl is not moved into an unnamed namespace (because it is declared in sc/inc/segmenttree.hxx), but its base ScFlatSegmentsImpl is. GCC warns about such combinations with enabled-by-default -Wsubobject-linkage, but "The compiler doesn’t give this warning for types defined in the main .C file, as those are unlikely to have multiple definitions." (<https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Warning-Options.html>) The warned-about classes also don't have multiple definitions in the given test, so disable the warning when including the .cxx. Change-Id: Ib694094c0d8168be68f8fe90dfd0acbb66a3f1e4 Reviewed-on: https://gerrit.libreoffice.org/83239 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-11-12use std::move when popping stuff off stacksNoel Grandin
Change-Id: I6ba0ee8afee1a9579045643cd0118cf19599d5b9 Reviewed-on: https://gerrit.libreoffice.org/82497 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-10-02loplugin:stringadd in svxNoel Grandin
Change-Id: I47944e589c5261d26d5ef0c116a9173bf6ed1f03 Reviewed-on: https://gerrit.libreoffice.org/79983 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-09-28tdf#127785 correct calculation of text rectangle in flipped shapeRegina Henschel
The calculation had used a wrong corner. That resulted in negative width or height. Thus the entire shape frame was used as fallback instead of the smaller text rectangle. Change-Id: Ia18d9630dc83c0556115609575f26dcfa71bdb13 Reviewed-on: https://gerrit.libreoffice.org/79774 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-09-06use unique_ptr in DoConvertToPolyObjNoel Grandin
Change-Id: Ia7f9ff4d8f7b9834b6634e5c126bd65014dacf19 Reviewed-on: https://gerrit.libreoffice.org/78684 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-09-03loplugin:constmethod in svxNoel Grandin
Change-Id: I6ae7c04479e3ea8ecd7535c33224a5e7095b64bb Reviewed-on: https://gerrit.libreoffice.org/78396 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-08-20loplugin:constvars in svxNoel Grandin
Change-Id: I42d04c84c87a792456f36013e1f05159ccf7cd1e Reviewed-on: https://gerrit.libreoffice.org/77808 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-08-15loplugin:sequenceloop in svtools..svxNoel Grandin
Change-Id: I81b54f6db69491492b2bc16f48b2296ad96e137d Reviewed-on: https://gerrit.libreoffice.org/77529 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-08-15replace ".get->" with "->"Noel Grandin
Change-Id: I327a6fda1fe0170da33e06b735f09a39421c8a58 Reviewed-on: https://gerrit.libreoffice.org/77469 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-08-03Fix typosAndrea Gelmini
Change-Id: Iaf2691b60796300f6c3acf56f60dcc526685eeb9 Reviewed-on: https://gerrit.libreoffice.org/76855 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2019-07-31Improved loplugin:stringconstant (now that GCC 7 supports it): svxStephan Bergmann
Change-Id: Idbdee862f96a3d9e6baaa7203528a423c017eb80 Reviewed-on: https://gerrit.libreoffice.org/76640 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-07-25tdf#126537 correct reverse calc for handle in ooxml-parallelogramRegina Henschel
Reverse calculation of handle position of ooxml-parallelogram shape has to follow the x/ss*100000 pattern. Error was, that it was not listed in that section. Change-Id: I846c21fe12c7e64e0c947e32d4b680fba60a5e50 Reviewed-on: https://gerrit.libreoffice.org/76311 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-07-09Simplify Sequence iterations in svxArkadiy Illarionov
Use range-based loops, STL and comphelper functions Change-Id: If6d190cf72b8653c1c3fbe9a6a6e47f10f1a6765 Reviewed-on: https://gerrit.libreoffice.org/75255 Tested-by: Jenkins Reviewed-by: Arkadiy Illarionov <qarkai@gmail.com>
2019-07-08use BitmapEx in EnhancedCustomShape2d::AdaptObjColorNoel Grandin
instead of Bitmap Change-Id: Ibcdef2a076f29590f1a8a43f90b1cec95e75d413 Reviewed-on: https://gerrit.libreoffice.org/75199 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-06-17Add comphelper::getUnoTunnelImplementation templateArkadiy Illarionov
Use it instead of classname::getImplementation from UNO3_GETIMPLEMENTATION_* Change-Id: Ifcc8cfcd6369c576250008c76ce31ba79ea3a596 Reviewed-on: https://gerrit.libreoffice.org/74107 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-06-11tdf#42949 Fix IWYU warnings in include/svx/[sS][v-Z]*Gabor Kelemen
Found with bin/find-unneeded-includes Only removal proposals are dealt with here. Change-Id: Ie2a4122d67d2d40732e6fd00b584f33edd802c5b Reviewed-on: https://gerrit.libreoffice.org/73476 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2019-06-10tdf#125782 use correct 'current point' for quadraticcurvetoRegina Henschel
Use the same way to get the 'current point' as in command arcangleto. The error was visible in shape teardrop. Change-Id: Ie7af2b9111150bae7e3ea492eeb439a0cc2bfe7c Reviewed-on: https://gerrit.libreoffice.org/73723 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-06-03tdf#125640 correct Beziercurve control points in doublewave shapesRegina Henschel
To follow the way doublewave shapes are drawn in MS Office binary format and specified for DrawingML, it is necessary, that the paths for the two wave parts are equal. That was not the case. Change-Id: Ieeb3f7cf9feca7dd3263f813a074821ea84ef902 Reviewed-on: https://gerrit.libreoffice.org/73358 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-05-24tdf#125445 Add methods for handles in gear6 and gear9 shapesRegina Henschel
The shapes 'gear6' and 'gear9' need very special methods to calculate the adjustment value from the handle position. Inserting these methods shifts the other cases one level down, therefore the patch looks large. The gear6 and gear9 shapes do not fit to the common test pattern, so they are not included in the unit test. Change-Id: I809e92d87118303332be87512062c431f235d859 Reviewed-on: https://gerrit.libreoffice.org/72796 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-05-22tdf#42949 Fix IWYU warnings in include/svx/[h-r]*Gabor Kelemen
Found with bin/find-unneeded-includes Only removal proposals are dealt with here. Change-Id: Ib7e1d0f7483aa8b5cab320278714f2d5f36fdbd9 Reviewed-on: https://gerrit.libreoffice.org/72534 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2019-05-17tdf#115813 unit test for handle position of OOXML shapesRegina Henschel
The patch contains some additions to tdf#115813 and a unit test. The test covers nearly all OOXML preset shapes with handles. Only some shapes do not fit to the test pattern: swooshArrow and polar handle shapes arc, blockArc, chord, circularArror, mathNotEqual, pie, leftCircularArrow, leftRightCicularArrow. The shapes star24 and star32 are excluded because of tdf#125181. The shapes gear6 and gear9 are excluded because a correct handle movement is not yet implemented. Connector shapes are inserted as ordinary shapes to prevent converting. The error string is designed to identify the affected shape. Change-Id: Icd3358f3701ac2db2cc61eb045ae10bc4b72b9ca Reviewed-on: https://gerrit.libreoffice.org/72229 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-05-16tdf#42949 Fix IWYU warnings in include/svx/[e-g]*Gabor Kelemen
Found with bin/find-unneeded-includes Only removal proposals are dealt with here. Change-Id: I861d3f0fa15ee3b7e0e830c4fac2e5794ea4071b Reviewed-on: https://gerrit.libreoffice.org/72213 Tested-by: Jenkins Reviewed-by: Michael Stahl <Michael.Stahl@cib.de>
2019-05-10tdf#62699 Drop pass-through header file include/svx/svdattr.hxxGabor Kelemen
Change-Id: I04289589196ac69b31f75989d9252c79d03c890f Reviewed-on: https://gerrit.libreoffice.org/71633 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2019-05-09tdf#125126 Use individual methods for polar handles in OOXML shapesRegina Henschel
Polar handles of preset custom shapes from OOXML import have shown the error, that handles are jumping or not movable or direction of handle movement was opposite to change of shape outline. Reason was that for backwards calculation a single method was used. But the meaning of the adjustment value is special to the handle and thus the backwards calculation too. Change-Id: Ia57b07ddc23efeb32ba569ce84d47b535e801750 Reviewed-on: https://gerrit.libreoffice.org/71831 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-05-03Use hasElements to check Sequence emptiness in sfx2..svxArkadiy Illarionov
Similar to clang-tidy readability-container-size-empty Change-Id: Icabd773f3b924d465b33e8581175f1fcf70c282e Reviewed-on: https://gerrit.libreoffice.org/71704 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-05-01Fix typoAndrea Gelmini
Change-Id: I1c7c7c1fdbcf442e367fe3f61c1c6c9eeadc0a95 Reviewed-on: https://gerrit.libreoffice.org/71612 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2019-04-30tdf#115813 Get correct adjust value from XY handle of ooxml-shapeRegina Henschel
If an adjust value is not directly bind to a handle parameter but via formulas, the calculation of the adjust value depends on the individual shape. The error was, that one calculation method was applied to any OOXML-shape. User noticed, that handles did not stick to the position, where they are released but jumped to unexpected positions. The patch calculates guide formulas backwards to get an adjust value. The patch solves the problem for preset OOXML-shapes until some day a general method for any shape is implemented. Change-Id: I1a47082d5110a63530a273665d80348c119dc08b Reviewed-on: https://gerrit.libreoffice.org/71258 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-04-24tdf#124787 mso-spt143 (RingOutside) has angles in degreeRegina Henschel
When reworking command U the shape 'RingOutside' was not considered. Although it is a 'mso-' shape, it has angles in degree and not in fixed-point number in its defaults. The patch removes in addition the changes introduced by Symphony, which erroneously used total width and height instead of radii for the ellipse size. Change-Id: Iede8e346681796fb3e147dbcfaaa08ed8fe87c54 Reviewed-on: https://gerrit.libreoffice.org/70941 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-04-16tdf#124740 Handle position is already scaled for ooxml-foo shapesRegina Henschel
If a 'ooxml-foo' shape has a path internal coordinate system by using w and h attribute, the position of the handle was out of place. Because in 'ooxml-foo' shapes the handle position is not directly connected to the adjustment value but via formulas, the handle position is already scaled when calculating the position. Change-Id: I84ef8c5ea3bbe94a1bfd9d8ba17b97248086234f Reviewed-on: https://gerrit.libreoffice.org/70783 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-04-15improve loplugin simplifyconstructNoel Grandin
to find stuff like OUString s = OUString("xxx") Change-Id: Ie7ed074c1ae012734c67a2a89c564c1900a4ab04 Reviewed-on: https://gerrit.libreoffice.org/70697 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-04-14loplugin:sequentialassign in svtools..svxNoel Grandin
Change-Id: I465a2479f347303e6d4faa39cb0a0f05aec3bf07 Reviewed-on: https://gerrit.libreoffice.org/70719 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-03-25Removed executable permission on data filesAndrea Gelmini
Change-Id: Ic21b28fd094f706dd7b1de32907d75e28f27494a Reviewed-on: https://gerrit.libreoffice.org/69558 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2019-03-21tdf#124212 make adjustment handle work alwaysRegina Henschel
In method SetHandleControllerPosition() all transformations are reversed to get the coordinates in shape inner coordinate system from the outer position. The error was, that the first transformation, the move in method GetPoint was forgotten. In case of default viewBox '0 0 21600 21600' it is not visible. But the error is noticeable, if left or top do not equal zero. Change-Id: Icc3f4f2c603826151c95b8b9eea5030fb5805d67 Reviewed-on: https://gerrit.libreoffice.org/69439 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-03-14tdf#122899 use unsigned integer for mso_sptArcRegina Henschel
The path coordinates were read as sal_Int16. But for a mso_sptArc shape the values are unsigned integer. I correct it for this shape type only, because I don't know, whether other places actually need sal_Int16. The change from 0xa504 to 0xa604 in the defaults means a change from 'ClockwiseArcTo' to 'ClockwiseArc' so that an implicit moveto is used, same as in VML command 'wr'. Change-Id: Ib9c594c15d5a97048595efd644a4a6e8774fcefd Reviewed-on: https://gerrit.libreoffice.org/68941 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-03-04tdf#121845 rework custom shape path command U and TRegina Henschel
The patch covers several errors, see comments in the bug report. Change-Id: I6cdaf3e8951dab21b314ef61e12ffa3b3ee481dc Reviewed-on: https://gerrit.libreoffice.org/68029 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2019-02-26svdtrans: nPi -> M_PI; nPi180 -> F_PI18000 to remove duplicatesMike Kaganski
Change-Id: Ia2c103a5b530d007f750e4a034b253b3ec5406ec Reviewed-on: https://gerrit.libreoffice.org/68368 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2019-02-22loplugin:unusedfields in svxNoel Grandin
Change-Id: I9f6a21066224c449d3fcc8a0d97cb32dae0a65f6 Reviewed-on: https://gerrit.libreoffice.org/68193 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-02-12o3tl::make_unique -> std::make_unique in svx/Gabor Kelemen
Since it is now possible to use C++14, it's time to replace the temporary solution with the standard one Change-Id: Ic91b7170b10299001167e78ade1d24c16ce9319e Reviewed-on: https://gerrit.libreoffice.org/67475 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2019-02-11new loplugin writeonlyvarsNoel Grandin
largely based on the relevant portion of the unusedfields loplugin, but adapted for local vars Change-Id: Ic522a941573940e8f75c88f90ba5f37508ca49b1 Reviewed-on: https://gerrit.libreoffice.org/66835 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-02-10loplugin:indentation in svxNoel Grandin
Change-Id: Ifea8e24fb76025715ab2ff495d3949223584070a Reviewed-on: https://gerrit.libreoffice.org/67567 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-01-11Drop o3tl/clamp.hxx, use C++17 std::clamp insteadStephan Bergmann
Change-Id: I5043c787dcc3b78bc7fdff130564801194e39f46 Reviewed-on: https://gerrit.libreoffice.org/66177 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-23tdf#121761, tdf#121952 Accurate ellipsequadrant in custom shapeRegina Henschel
The current solution uses one, bad valued Bezier curve and does not toggle direction. The patch uses the more accurate solution from basegfx and simplifies the decision tree. In addition it extracts the calculation in double from GetPoint, so they can be used directly instead of double->long->double conversion. Change-Id: I298f49415d1b7624b36ca561647f2e58af5eb5c6 Reviewed-on: https://gerrit.libreoffice.org/65203 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2018-12-13tdf#121890 ODF custom shapes use left and top from viewBoxRegina Henschel
MS custom shapes use always zero for identifier left and top in the formulas of the shape geometry. But custom shapes in ODF use the left and top value from the svg:viewBox attribute, see table 11 in section 19.171 draw:formula; part 1 of the spec. Change-Id: Ief4b9d9b8797e165a494d049f32c5a46880044c2 Reviewed-on: https://gerrit.libreoffice.org/64704 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2018-12-08Remove obsolete SAL_FALLTHROUGH completelyStephan Bergmann
...after 7ffdd830d5fb52f2ca25aa80277d22ea6d89970b "HAVE_CPP_ATTRIBUTE_FALLTHROUGH is always true now" Change-Id: I54e5ff4e036a6bb3e5774d1c0524158aae18e937 Reviewed-on: https://gerrit.libreoffice.org/64800 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-12-05loplugin:unnecessaryparen include more assignmentsNoel Grandin
Change-Id: I9fb8366634b31230b732dd38a98f800075529714 Reviewed-on: https://gerrit.libreoffice.org/64510 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-12-04Remove obsolete CLANG_VERSION checksStephan Bergmann
...now that the (Linux) Clang baseline has been bumped ot 5.0.2 (see <https://lists.freedesktop.org/archives/libreoffice/2018-November/081435.html> "minutes of ESC call ..."). (This commit precedes a commit that will actually enforce Clang >= 5.0.2 in configure.ac. However, it was easier to do it in this order, as that other commit will drop CLANG_VERSION when building with Apple Clang (where version numbers are different from upstream), so these checks would start to fail there.) Change-Id: Icb3df0d0cf476e14c5453f02bdfc9e5bed066ca1 Reviewed-on: https://gerrit.libreoffice.org/63898 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2018-11-21Simplify containers iterations in svx/source/[a-e]*Arkadiy Illarionov
Use range-based loop or replace with STL functions Change-Id: I7a24407f9e8f38b4903a643210ca4511372d91f2 Reviewed-on: https://gerrit.libreoffice.org/63687 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-11-16tdf#121305 Increase accuracy of custom shape circleRegina Henschel
The old implementation has used 4 segments and a questionable control point distance. The patch changes this to use the common implementation in basegfx. The method in basegfx is extended to allow to set the start quarter, so that the custom shape circle can get the same start quarter as it has before. The method descriptions in basegfx are adapted to the current implementation. Change-Id: I3a40f81827227ee0037d336bdf3c1ec6fdd64b4b Reviewed-on: https://gerrit.libreoffice.org/63366 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
2018-10-22pvs-studio: V668 no sense testing against null as memory was allocated by newCaolán McNamara
category V668 complete Change-Id: I986d4cb89a7c72d54d71ea01fc598a9958deee24 Reviewed-on: https://gerrit.libreoffice.org/62138 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-10-22pvs-studio: V728 An excessive check can be simplifiedCaolán McNamara
for... "The '(A && !B) || (!A && B)' expression is equivalent to the 'bool(A) != bool(B)' expression" subcases, where the args are already bool Change-Id: Ica8b5c4974c513f7f7ad8acf17ca931e85ebc8af Reviewed-on: https://gerrit.libreoffice.org/62146 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>