Frameworks/Epics/kdelibs cleanups: Difference between revisions
Grundleborg (talk | contribs) No edit summary |
|||
(295 intermediate revisions by 28 users not shown) | |||
Line 16: | Line 16: | ||
{{FeatureDone|move kascii and kasciitest to kde4support (easy)|Christoph Cullmann}} | {{FeatureDone|move kascii and kasciitest to kde4support (easy)|Christoph Cullmann}} | ||
{{FeatureDone|Port away from KGlobalSettings::singleClick() (easy)|Dominik Haumann}} | {{FeatureDone|Port away from KGlobalSettings::singleClick() (easy)|Dominik Haumann}} | ||
{{ | {{FeatureDone|#cmakedefine -> #cmakedefine01, #ifdef -> #if, in order to catch missing includes (easy)|Nicolas Lécureuil}} | ||
{{ | {{FeatureDone|Port from KCmdLineArgs+KApp to QApp+setApplicationName in all unittests that don't use args (easy)|Jeremy Whiting}} | ||
{{ | {{FeatureDone|kio/netaccess.h: there are some "TODOs" about deprecating most methods in favour of job+exec (TODO: compare with synchronousRun) (normal)|Àlex Fiestas}} | ||
{{FeatureDone|Port all of kdelibs from NetAccess::synchronousRun to job->exec, including unittests. This will make it possible to move kio/tests/jobtest.cpp and jobremotetest to staging/kio (and only link them to kiocore). There's a left use in accessmanager.cpp|Aleix Pol}} | |||
Line 29: | Line 30: | ||
{{FeatureDone|Port kcmdlineargs from KUrl to QUrl, then move KUrl out of kcoreaddons, and into kdecore for now, final destination will be kde4support. (easy)|Matt Williams}} | {{FeatureDone|Port kcmdlineargs from KUrl to QUrl, then move KUrl out of kcoreaddons, and into kdecore for now, final destination will be kde4support. (easy)|Matt Williams}} | ||
{{ | {{FeatureDone|Port kdelibs from KProcess to QProcess (except kpty and KRun) (easy). Warning: Need to port some functionnality to Qt 5|Martin Sandsmark}} | ||
{{FeatureDone|Update qmimetype in kdelibs from the one soon merged to Qt5, port all of kdelibs to the API changes. (normal)|David Faure}} | {{FeatureDone|Update qmimetype in kdelibs from the one soon merged to Qt5, port all of kdelibs to the API changes. (normal)|David Faure}} | ||
Line 43: | Line 44: | ||
{{FeatureDone|Move KDialog saveDialogSize+restoreDialogSize to static methods taking a QDialog.|Benjamin Port}} | {{FeatureDone|Move KDialog saveDialogSize+restoreDialogSize to static methods taking a QDialog.|Benjamin Port}} | ||
{{FeatureDone|Go through all users of KEMailSettings (e.g. in lxr.kde.org) to find which methods are actually used, deprecate the others|Martin Klapetek}} | |||
{{ | {{FeatureDone|Replace usage of KSocketFactory by the implementation of the method (it's very short).|Kevin Ottens}} | ||
{{FeatureDone|Move KFileMetaInfoItem and PredicateProperties from kio, as well as kfile/kfilemetadatareader* to kde4support | |||
https://git.reviewboard.kde.org/r/111897/|[email protected]}} | |||
{{FeatureDone|Finish deprecating methods marked as @deprecated (add macro+ifdef, ensure kdelibs doesn't use).|Benjamin Port and Kevin Ottens}} | |||
{{FeatureDone|Move kio/kfile/kdiskfreespace.cpp to kde4support https://git.reviewboard.kde.org/r/111605/|[email protected]}} | |||
{{FeatureDone|Move K4AboutData and KComponentData to kde4support (not used anymore, apparently)|[email protected]}} | |||
{{FeatureDone|Replace signals: with Q_SIGNALS: and slots with Q_SLOTS: everywhere in kdelibs (to make moving less work) https://git.reviewboard.kde.org/r/111609|[email protected]}} | |||
{{FeatureDone|Move tests that didn't follow their classes. E.g. kcompositejobtest from kdecore/tests to kcoreaddons/autotests.|Kevin Ottens}} | |||
{{FeatureDone|Move KDialogQueue into separate files.|Benjamin Port}} | {{FeatureDone|Move KDialogQueue into separate files.|Benjamin Port}} | ||
{{ | {{FeatureDone|Port all of kdelibs (except kde*support and classes aimed for tier4) from KDialog to QDialog|Kevin Ottens}} | ||
{{FeatureDone|Port from KGlobalSettings::desktopGeometry to QApplication::desktop()->screenGeometry (very easy)|Stephen Kelly}} | {{FeatureDone|Port from KGlobalSettings::desktopGeometry to QApplication::desktop()->screenGeometry (very easy)|Stephen Kelly}} | ||
Line 72: | Line 85: | ||
For a walk through example, see [http://thread.gmane.org/gmane.comp.kde.devel.frameworks/319/focus=328 this thread] | For a walk through example, see [http://thread.gmane.org/gmane.comp.kde.devel.frameworks/319/focus=328 this thread] | ||
{{ | {{FeatureDone|Another thing that should be done is using Find packages from ECM or CMake. (normal) | ||
For example, run 'git grep find_package' in tier1/solid. Some of the results are provided by CMake, and some come from the local kdelibs/cmake/modules folder. The kdelibs/cmake/modules folder should not need to be used. For example find_package(Flex) in solid should be replaced with find_package(FLEX) which is provided by CMake. | For example, run 'git grep find_package' in tier1/solid. Some of the results are provided by CMake, and some come from the local kdelibs/cmake/modules folder. The kdelibs/cmake/modules folder should not need to be used. For example find_package(Flex) in solid should be replaced with find_package(FLEX) which is provided by CMake. | ||
Line 85: | Line 98: | ||
It also works with solid, because the packages it searches for are optional | It also works with solid, because the packages it searches for are optional | ||
and the FindFoo.cmake files are not found.|George Goldberg (grundleborg) | and the FindFoo.cmake files are not found.|George Goldberg (grundleborg) | ||
{{ | Frameworks Done: | ||
*tier1/itemmodels (except for autotests) | |||
*tier1/karchive | |||
*tier1/kcodecs | |||
*tier1/kcoreaddons | |||
*tier1/kdbusaddons | |||
*tier1/kideltime | |||
*tier1/kjs (*) | |||
*tier1/kplotting | |||
*tier1/kwidgetsaddons | |||
*tier1/kwindowsystem | |||
*tier1/solid (*) | |||
*tier1/sonnet (*) | |||
*tier1/threadweaver | |||
*tier2/kauth (*) | |||
*'''tier2/kconfig''' has problems building. need to resolve these first. | |||
(*) Means that there are still FindFOO.cmake files in the framework's directory. | |||
}} | |||
{{FeatureDone|Find out what should be part of the link interface and what should not be. (normal but long), [[Frameworks/Epics/kdelibs_cleanups/link_private_details|details...]]|[email protected], Kevin Ottens}} | |||
{{FeatureDone|Port from K_GLOBAL_STATIC to Q_GLOBAL_STATIC where the Qt4 API is sufficient|Albert Astals Cid}} | {{FeatureDone|Port from K_GLOBAL_STATIC to Q_GLOBAL_STATIC where the Qt4 API is sufficient|Albert Astals Cid}} | ||
{{ | {{FeatureDone|Port from K_GLOBAL_STATIC to Q_GLOBAL_STATIC needs Qt 5.1 changes|?}} | ||
{{ | {{FeatureDone|Porting in [[KDE_Core/KLocale/Frameworks]]|Closed by Kevin Ottens as it is largely non actionable anyway.}} | ||
{{ | {{FeatureDone|Make kioslave/file portable: port away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile. | ||
|Martin Klapetek}} | |||
{{ | {{FeatureDone|Port kfile/kdiroperator.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|David Gil https://git.reviewboard.kde.org/r/111701/}} | ||
{{FeatureDone|Port kio/kfile/krecentdocument.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|David Gil https://git.reviewboard.kde.org/r/111675/}} | |||
{{FeatureDone|Port kio/src/core/authinfo.h away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|David Gil https://git.reviewboard.kde.org/r/111636/}} | |||
{{FeatureDone|Port kded/kded.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek https://git.reviewboard.kde.org/r/111857/}} | |||
https:// | {{FeatureDone|Port kdesu/client.cpp and kdesu/process.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | ||
| | https://git.reviewboard.kde.org/r/111886/|[email protected]}} | ||
{{FeatureDone|Port khtml/khtml_part.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Vishesh Handa}} | |||
{{FeatureDone|Port kinit/kinit.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek http://git.reviewboard.kde.org/r/111890}} | |||
{{FeatureDone|Port kinit/klauncher.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek https://git.reviewboard.kde.org/r/111887}} | |||
{{FeatureDone|Port kinit/klauncher_main.cpp: away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek https://git.reviewboard.kde.org/r/111887}} | |||
{{FeatureDone|Port kio/tests/fileundomanagertest.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek https://git.reviewboard.kde.org/r/111891}} | |||
{{FeatureDone|Port kio/tests/kiotesthelper.h away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Martin Klapetek https://git.reviewboard.kde.org/r/111891}} | |||
{{FeatureDone|Port kioslave/ftp/ftp.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Vishesh Handa}} | |||
{{FeatureDone|Port kpty/kpty.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls|Kevin Ottens}} | |||
{{ | {{FeatureDone|KDEGuiAddons should be renamed and maybe repurposed|Kevin Ottens}} | ||
{{ | {{FeatureDone|qWarning << QUrl::errorString() rather than QMessageBox with QUrl::toString() (which is empty) to the user when the URL is invalid (grep for "Invalid URL"?)|Martin Klapetek}} | ||
{{ | {{FeatureDone|kdeui/colors/kcolorhelpers_p.h has at least a copy in | ||
kdeguiaddons, and perhaps another in kcolorwidgets. Resolve that.| | kdeguiaddons, and perhaps another in kcolorwidgets. Resolve that.|Kévin Ottens}} | ||
{{ | {{FeatureDone|Port all of kdelibs from KIcon to QIcon / KDE:::icon(), then move KIcon out (easy)|David Faure}} | ||
{{FeatureDone|Port all of | {{FeatureDone|Port all uses of time_t to QDateTime (or qint64 when serializing). Ignore kdecore and karchive, other people are reworking these bits anyway.|David Gil}} | ||
{{FeatureDone|Make use of qplatformdefs.h definitions instead of using the POSIX versions directly. | Aurélien Gâteau (Away until September, feel free to take over this task if necessary) --Taken over by Martin Klapetek }} | |||
{{FeatureDone|Partly revert commit b03e81a61311ae1b64b0d37415477f9c08fe6142 which ported KFileItem to QFile::Permissions. Quoting David Faure: | |||
"Port back from QFile::Permissions to mode_t given that mode_t is available in win32-msvc*/qplatformdefs.h | |||
(not everywhere, but in the places where the above commits did a half job at porting from mode_t to QFile::Permissions). | |||
QFile::Permissions is more limited (no suid bits) and having to convert between mode_t and QFile::Permissions is just extra work." https://git.reviewboard.kde.org/r/112481/ | Aurélien Gâteau}} | |||
{{ | {{FeatureDone|KGlobalSettings is initalized by KApplication. Find out if any parts of it work without that, and split it into parts that work without the initialization and parts that don't. | ||
Conclusion: Let's just bury KGlobalSettings 10m underground. | |||
https://git.reviewboard.kde.org/r/111348/|[email protected]}} | |||
{{FeatureDone|Port away from and deprecate KHBox/KVBox|Albert Astals Cid}} | {{FeatureDone|Port away from and deprecate KHBox/KVBox|Albert Astals Cid}} | ||
{{ | {{FeatureDone|Port KStandardAction from KAction to QAction|Kevin Ottens}} | ||
{{FeatureDone|Move KTabBar to kde4support and port users in kdelibs to QTabbar. preferably KTabWidget should go the same way, but needs a feature in Qt (see the qt5.1 epic)|Kevin Kin-Foo}} | |||
{{FeatureDone|Use tr() again (rather than QCoreApplication::translate with empty context) in all tier1+tier2+staging frameworks (except the ones which will go to tier3, they can use i18n)|George Goldberg (grundleborg) | |||
done, however there are some incorrect uses of QObject::tr() still floating around which need fixing in a later patch.}} | |||
{{FeatureDone|Move KDialog to kde4support (once all other KDialog related cleanups are done)|Kevin Ottens}} | |||
{{FeatureDone|Move KRestrictedLine to kde4support|Kevin Kin-Foo}} | |||
{{FeatureDone|Move KDialogButtonBox to kde4support|David Faure}} | |||
{{FeatureDone|Move KDoubleValidator to kde4support|David Faure}} | |||
{{FeatureDone|Move KListWidget to kde4support (replace uses with QListWidget)|Martin Klapetek}} | |||
{{FeatureDone|Move KMenu to kde4support (once QMenu supports title items and keyboard navigation)|Kevin Ottens}} | |||
{{FeatureDone|Move KPushButton DnD support to an event filter|Kevin Ottens}} | |||
{{FeatureDone|Once KPushButton DnD and delayed menu support are out, move KPushButton to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KSplashScreen to kde4support|David Faure}} | |||
{{FeatureDone|Replace KUndoStack with two methods in a namespace|Tobias Koenig}} | |||
{{FeatureDone|Move KShortcut in kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move all global shortcut facilities of KAction in KGlobalAccel (which would then register QActions)|Valentin Rusu}} | |||
{{FeatureDone|Move all gesture facilities of KAction in KGestureMap (which would then register QActions)|Valentin Rusu}} | |||
{{FeatureDone|Move KAction::event to an event filter, see how to make it available to all QAction instances when using the consistency framework|Kevin Ottens}} | |||
{{FeatureDone|Once KAction has no original feature left, move it to kde4support|Kevin Ottens}} | |||
{{FeatureDone|KApplication::*Timestamp methods go to a new QObject subclass in tier4/kinterprocesswindowing|Kevin Ottens}} | |||
{{FeatureDone|KApplication::sessionConfig go to kconfig-gui, probably has a static method there|Kevin Ottens}} | |||
{{FeatureDone|KApplication::*startupId go with KStartupInfo to kwindowsystem|Kevin Ottens}} | |||
{{FeatureDone|Move KApplication to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KStatusBar to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KColorDialog to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KMenuBar to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KToolBar to xmlgui|Miquel i Aleix}} | |||
{{FeatureDone|Move KMainWindow to xmlgui|Miquel i Aleix}} | |||
{{FeatureDone|Move KInputDialog to kde4support once its features are in Qt (see the Contributions to Qt5 epic)| David Gil}} | |||
{{FeatureDone|Move KDateTime to kde4support once its features are in Qt (see the 5.1 epic)|Kevin Ottens}} | |||
{{FeatureDone|Split WId methods of KMessageBox into tier4/kinterprocesswindowing|Valentin Rusu}} | |||
{{FeatureDone|Split queued methods of KMessageBox into kde4support|Valentin Rusu}} | |||
{{FeatureDone|Implement queueing directly in KDialogJobUiDelegate|Àlex Fiestas <[email protected]> https://git.reviewboard.kde.org/r/113516/}} | |||
{{FeatureDone|Add a KMessageBoxDontAskAgainInterface, with a QHash based private implementation in KMessageBox|David Faure}} | |||
{{FeatureDone|Add a setter to KMessageBox in order to change the KMessageBoxDontAskAgainInterface implementation used by KMessageBox and an implementation set in our FrameworkIntegrationPlugin which uses KConfig|David Faure}} | |||
{{FeatureDone|Move rest of KMessageBox to kwidgets|Valentin Rusu}} | |||
{{FeatureDone|Move KProgressDialog to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Move KFileDialog to kde4support once the QUrl static methods are in Qt (see the 5.1 epic) https://git.reviewboard.kde.org/r/112037/ - cannot move to kde4support, but all uses of KFileDialog have been removed except for KEncodingFileDialog|Teo Mrnjavac <[email protected]>}} | |||
{{FeatureDone|Make KEncodingFileDialog static-only in order to reduce KFileDialog usage|Teo Mrnjavac <[email protected]>}} | |||
{{FeatureDone|Rework QFileDialog instances to prefer QFileDialog::setMimeTypeFilters() rather than manually converting mime types to globs (when https://codereview.qt-project.org/#change,63345 is merged)|Teo Mrnjavac <[email protected]>}} | |||
{{FeatureDone|Have KMessageWidget look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic)|Àlex Fiestas}} | |||
{{FeatureDone|Have KMainWindow look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic)|Àlex Fiestas}} | |||
{{FeatureDone|Move KFadeWidgetEffect to kde4support|Kevin Ottens}} | |||
{{FeatureDone|Have KIO widgets look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic)|[email protected]}} | |||
{{FeatureDone|Have a way to trigger the reloading of the toolbar settings, was done by KGlobalSettings::toolbarAppareanceChanged. Unittested by ktoolbar_unittest. A simple DBus signal could do.)|Àlex fiestas}} | |||
{{FeatureDone|Implement KStyle::styleHint() to support the opaqueResize and animate flags (not existing yet, see 5.1 epic) value of those flags picked like KGlobalSettings did|Àlex Fiestas}} | |||
{{FeatureDone|Port uses of KGlobalSettings::(in)active(Title/Text)Color() in khtml to use KColorScheme instead|[email protected] https://git.reviewboard.kde.org/r/111171/}} | |||
{{FeatureDone|KGlobalSettings font methods: Make sure that kdeplatformtheme loads the font settings properly. Waiting for https://codereview.qt-project.org/#change,59808|[email protected]}} | |||
{{FeatureDone|KGlobalSettings::isMultiHead should be duplicated in plasma-framework, it only reads an environment variable, should see how to translate the Windows version|Kevin Ottens}} | |||
{{FeatureDone|KGlobalSettings::createApplicationPalette/createNewApplicationPalette: Make sure that kdeplatformtheme provides what we need | |||
https://git.reviewboard.kde.org/r/111405/|[email protected]}} | |||
{{FeatureDone|Move KGlobalSettings to kde4support. Depends on many other tasks here|Aleix Pol}} | |||
{{FeatureDone|Move KStyle to tier4/consistency|Kevin Ottens}} | |||
{{FeatureDone|Import QCommandLineArguments from gitorious into libkdeqt5staging|David Faure}} | |||
{{FeatureDone|Use Q_COREAPP_STARTUP_FUNCTION to initialize KCrash|David Faure}} | |||
{{FeatureDone|Use Q_COREAPP_STARTUP_FUNCTION to initialize KCheckAccelerators|David Faure}} | |||
{{FeatureDone|Add the necessary to the integration plugin so that calling QDesktopServices::openUrl("help:/") is exactly the same as using KHelpClient::invokeHelp() | |||
https://git.reviewboard.kde.org/r/111298/ | |||
{{FeatureDone|Make KLocalizedString::isApplicationTranslatedInto and QLocale::uiLanguages codes compatible. See https://git.reviewboard.kde.org/r/111178|Vishesh Handa}} | |||
{{FeatureDone|KDocTools needs to use tr to remove KI18n dependency|Kevin Ottens}} | |||
{{FeatureDone|Evaluate if KConfigWidgets can be merged with another framework: With its recent growth and the dependencies changes it seems to well stand on its own now.|Kevin Ottens}} | |||
{{FeatureDone|Add helper code to Sonnet to make it easy to install on a QTextEdit | Aurélien Gâteau}} | |||
{{FeatureDone|Refactor KTextEdit to use Sonnet::TextEditDecorator, to avoid code duplication | David Edmundson}} | |||
{{FeatureDone|KStyle 1/3: Copy KStyle as K4Style in KDE4Support https://git.reviewboard.kde.org/r/112217| [email protected]}} | |||
{{FeatureDone|KStyle 2/3: Remove everything from KStyle which is not a reimplementation of the following methods: polish, unpolish, eventFilter, styleHint, pixelMetrics, standardIcons https://git.reviewboard.kde.org/r/112519/| [email protected]}} | |||
{{FeatureDone|KStyle 3/3: From what remains of KStyle after the previous two tasks, evaluate what is here to enforce platform settings and what might make style developers life too hard, keep only the parts about platform settings and let go the rest (this work should be coordinated with Hugo Pereira Da Costa)| [email protected]}} | |||
{{ | {{FeatureDone|Port kmimetypechooser.cpp from KRun to QProcess, then move it to a widgets framework that can use KConfig+KCoreAddons (but not kiowidgets, it doesn't use kio)| Vishesh Handa}} | ||
{{ | {{FeatureDone|Check if KScanDialog is still used. If not, deprecated. If yes, move to a framework that can use KService and KPageDialog, but not kiowidgets, it doesn't use kio| Àlex Fiestas}} | ||
{{FeatureDone|Remove KTextEditSpellInterface. See TODOs inside ktextedit.h| Martin Sandsmark https://git.reviewboard.kde.org/r/113578/}} | |||
{{FeatureDone|Update QCommandLineParser from the version that landed in qtbase dev and fix compilation (including plasma-framework). At least one thing changed, positionalArguments() and addHelpOption(str) is now setApplicationDescription(str)+addHelpOption(). Please do this before QCommandLineParser reaches qt5.git, or we'll be in trouble.| Martin Gräßlin}} | |||
{{FeatureDone|Port KJob to QEventLoopLocker. This provides the replacement of KGlobal::{de,}ref()| Albert Astal Cid, committed by Aurélien Gâteau}} | |||
{{FeatureDone|Port kfile/ from NetAccess to exec(). Then move NetAccess to kde4support, after ensuring all methods are documented as deprecated with a replacement solution (ask David if you don't find the replacement).| Àlex Fiestas}} | |||
{{FeatureDone|Move find_packages() from kdelibs/CMakeLists.txt to kdelibs/$tier/$framework/CMakeLists.txt:| Aleix Pol}} | |||
{{FeatureDone|Remove all links to libkdeqt5staging, since QCommandLineParser is in Qt https://git.reviewboard.kde.org/r/112557/| [email protected]}} | |||
{{FeatureDone|All uses of NOGUI should be ported to ecm_mark_nongui_executable() -- Not as simple as it sound: real test on Windows and Mac OS is required to decide what is the best behavior.| Aleix Pol}} | |||
{{FeatureDone|Figure out forward includes, moving them to kde4support and finding an automated alternative for the modules|Aleix Pol}} | |||
{{FeatureDone|Figure out a replacement for KF5/Qt5 for KLocale::formatByteSize and KLocale::formatDuration | |||
Suggested steps: | |||
* The obviously place to move it is k18n, as either part of | |||
KLocalizedString or in a new KByteFormatter class? | |||
* Move KLocale::BinarySizeUnits, KLocale::BinaryUnitDialect, and | |||
KLocale::formatByteSize() | |||
* Do we make it a pure static method? Or require an instance to be created? | |||
* If static-only then don't need setBinaryUnitDialect(), and | |||
binaryUnitDialect() will become a static defaultBinaryUnitDialect() (There currently are no users of setBinaryUnitDialect, according to LXR) | |||
* No locale file overrides the default BinaryUnitDialect, so we only | |||
have to worry about reading any user override from kglobals | |||
* Default to using QLocale() for number formatting, but need to be | |||
able to set a different locale to use. If static-only then just add | |||
an extra parameter to override the locale, otherwise will need a | |||
setLocale() | |||
* Don't forget the tests :-) | |||
| John Layt}} | |||
{{FeatureDone|Test all KDirWatch backends | |||
The todo is probably | |||
* Let kdirwatch honour a environment variable like KDIRWATCH_METHOD for backend selection -- done by dfaure | |||
* Modify the current test to run multiple times with different values of said variable | |||
* Fix the code to get the tests to pass | |||
the two first are probably much easier than the third | |||
Current state is that inotify backend passes all tests and is the default on linux and only available on linux. QFSW-backend is the only available on windows and fails similar on both linux and windows. The stat and fam backends aren't tested anywhere. | |||
See also http://thread.gmane.org/gmane.comp.kde.devel.frameworks/6962 | |||
|Àlex Fiestas <[email protected]>}} | |||
{{FeatureDone|Clean up imageformat plugins in KGuiAddons: there are broken plugins, and no easy way to test them|Alex Merry <[email protected]>}} | |||
|} | |} |
Latest revision as of 08:45, 13 December 2013
Cleaning up kdelibs
Next to the other efforts for kdelibs modularization, there's also some cleanup tasks which needs to be done accross the whole kdelibs codebase. Tasks in here are probably more suitable for short term, bite sized involvement.
Note: For most of those tasks we try to put an estimation of the difficulty can be: easy, normal, hard (somewhat like in video games). ;-)
Status | Description | Contact |
---|---|---|
DONE | remove kglobal.h include from staging/kwidgets/src/icons/kiconloader.h, fix compilation by adding the header where necessary (easy) | Christoph Cullmann |
DONE | move ktypelist.h from kdecore/util to kde4support (easy) | Christoph Cullmann |
DONE | move kentrymaptest from kdecore/tests to kconfig/autotests (easy) | Christoph Cullmann |
DONE | move kascii and kasciitest to kde4support (easy) | Christoph Cullmann |
DONE | Port away from KGlobalSettings::singleClick() (easy) | Dominik Haumann |
DONE | #cmakedefine -> #cmakedefine01, #ifdef -> #if, in order to catch missing includes (easy) | Nicolas Lécureuil |
DONE | Port from KCmdLineArgs+KApp to QApp+setApplicationName in all unittests that don't use args (easy) | Jeremy Whiting |
DONE | kio/netaccess.h: there are some "TODOs" about deprecating most methods in favour of job+exec (TODO: compare with synchronousRun) (normal) | Àlex Fiestas |
DONE | Port all of kdelibs from NetAccess::synchronousRun to job->exec, including unittests. This will make it possible to move kio/tests/jobtest.cpp and jobremotetest to staging/kio (and only link them to kiocore). There's a left use in accessmanager.cpp | Aleix Pol
|
DONE | Fix kfileplacesmodeltest (normal) | Benjamin Port
|
DONE | Move to kcoreaddons the tests in kdecore/tests that are actually tests for classes in kcoreaddons, except kurltest (easy) | Anne-Marie Mahfouf
|
DONE | "cp kurlmimetest.cpp kurlmimedatatest.cpp" and port the second one to KUrlMimeData (in order to test both the deprecated API and the new API). After that, move the old one (kurlmimetest) to kde4support. (normal) | Lambert Clara
|
DONE | Port kcmdlineargs from KUrl to QUrl, then move KUrl out of kcoreaddons, and into kdecore for now, final destination will be kde4support. (easy) | Matt Williams
|
DONE | Port kdelibs from KProcess to QProcess (except kpty and KRun) (easy). Warning: Need to port some functionnality to Qt 5 | Martin Sandsmark
|
DONE | Update qmimetype in kdelibs from the one soon merged to Qt5, port all of kdelibs to the API changes. (normal) | David Faure
|
DONE | Create a staging/kconfig framework out of kdecore/config + kdecore/kernel/kauthorized*. Code should be ready (no more dependencies on the rest of kdecore). (normal) | David
|
DONE | Port all of kdelibs from KGlobal::config() to KSharedConfig::openConfig(), adjust includes (easy) | Claus Christensen
|
DONE | Port all of kdelibs from KMimeType to QMimeType, see KDE5PORTING.html for details (easy) | David Faure
|
DONE | deprecate KLineEdit::clickMessage, by applying https://git.reviewboard.kde.org/r/101360/diff/#index_header and porting kdelibs (easy and quick) | Benjamin Port
|
DONE | Move KDialog saveDialogSize+restoreDialogSize to static methods taking a QDialog. | Benjamin Port
|
DONE | Go through all users of KEMailSettings (e.g. in lxr.kde.org) to find which methods are actually used, deprecate the others | Martin Klapetek
|
DONE | Replace usage of KSocketFactory by the implementation of the method (it's very short). | Kevin Ottens
|
DONE | Move KFileMetaInfoItem and PredicateProperties from kio, as well as kfile/kfilemetadatareader* to kde4support | [email protected]
|
DONE | Finish deprecating methods marked as @deprecated (add macro+ifdef, ensure kdelibs doesn't use). | Benjamin Port and Kevin Ottens
|
DONE | Move kio/kfile/kdiskfreespace.cpp to kde4support https://git.reviewboard.kde.org/r/111605/ | [email protected]
|
DONE | Move K4AboutData and KComponentData to kde4support (not used anymore, apparently) | [email protected]
|
DONE | Replace signals: with Q_SIGNALS: and slots with Q_SLOTS: everywhere in kdelibs (to make moving less work) https://git.reviewboard.kde.org/r/111609 | [email protected]
|
DONE | Move tests that didn't follow their classes. E.g. kcompositejobtest from kdecore/tests to kcoreaddons/autotests. | Kevin Ottens
|
DONE | Move KDialogQueue into separate files. | Benjamin Port
|
DONE | Port all of kdelibs (except kde*support and classes aimed for tier4) from KDialog to QDialog | Kevin Ottens
|
DONE | Port from KGlobalSettings::desktopGeometry to QApplication::desktop()->screenGeometry (very easy) | Stephen Kelly
|
DONE | extract KProtocolInfo out of ksycoca, making it simply read from installed files on demand. (normal) | David Faure
|
DONE | move KProtocolInfo to KIO, requires to split out its unittests from kmimetypetest, and to somehow sort out the call to KProtocolInfo inside kmimetype (normal) | David Faure
|
DONE | when gpgmepp is not found, make plasma only skip the Signature class, rather than skipping all of plasma (easy) | David Faure
|
DONE | One of the things we need to remove is all of the use of the Q_WS_* defines. (easy)
git grep Q_WS_ Some of them should be ported to a Q_OS_ define (eg, some of Q_WS_WIN should be ported to Q_OS_WIN), but *not all of them*, so this can't just be changed with a script. It should be done manually. Some of them need to be ported to QPA (lighthouse) in some way. |
Kevin Ottens
|
DONE | Another thing that should be done is using Find packages from ECM or CMake. (normal)
For example, run 'git grep find_package' in tier1/solid. Some of the results are provided by CMake, and some come from the local kdelibs/cmake/modules folder. The kdelibs/cmake/modules folder should not need to be used. For example find_package(Flex) in solid should be replaced with find_package(FLEX) which is provided by CMake. The goal is to be able to run cd tier1/solid && mkdir build && cd build && cmake .. && make for each framework. This is already possible with the itemmodels framework. It also works with solid, because the packages it searches for are optional and the FindFoo.cmake files are not found. |
George Goldberg (grundleborg)
Frameworks Done:
(*) Means that there are still FindFOO.cmake files in the framework's directory.
|
DONE | Find out what should be part of the link interface and what should not be. (normal but long), details... | [email protected], Kevin Ottens |
DONE | Port from K_GLOBAL_STATIC to Q_GLOBAL_STATIC where the Qt4 API is sufficient | Albert Astals Cid |
DONE | Port from K_GLOBAL_STATIC to Q_GLOBAL_STATIC needs Qt 5.1 changes | ?
|
DONE | Porting in KDE_Core/KLocale/Frameworks | Closed by Kevin Ottens as it is largely non actionable anyway.
|
DONE | Make kioslave/file portable: port away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile. | Martin Klapetek
|
DONE | Port kfile/kdiroperator.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | David Gil https://git.reviewboard.kde.org/r/111701/ |
DONE | Port kio/kfile/krecentdocument.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | David Gil https://git.reviewboard.kde.org/r/111675/ |
DONE | Port kio/src/core/authinfo.h away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | David Gil https://git.reviewboard.kde.org/r/111636/
|
DONE | Port kded/kded.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek https://git.reviewboard.kde.org/r/111857/ |
DONE | Port kdesu/client.cpp and kdesu/process.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | [email protected] |
DONE | Port khtml/khtml_part.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Vishesh Handa |
DONE | Port kinit/kinit.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek http://git.reviewboard.kde.org/r/111890 |
DONE | Port kinit/klauncher.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek https://git.reviewboard.kde.org/r/111887 |
DONE | Port kinit/klauncher_main.cpp: away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek https://git.reviewboard.kde.org/r/111887 |
DONE | Port kio/tests/fileundomanagertest.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek https://git.reviewboard.kde.org/r/111891 |
DONE | Port kio/tests/kiotesthelper.h away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Martin Klapetek https://git.reviewboard.kde.org/r/111891 |
DONE | Port kioslave/ftp/ftp.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Vishesh Handa |
DONE | Port kpty/kpty.cpp away from kde_file.h, i.e. from KDE::open/rename/stat/lstat/access/... to QFile and/or Qt equivalents of kde_file.h calls | Kevin Ottens
|
DONE | KDEGuiAddons should be renamed and maybe repurposed | Kevin Ottens
|
DONE | qWarning << QUrl::errorString() rather than QMessageBox with QUrl::toString() (which is empty) to the user when the URL is invalid (grep for "Invalid URL"?) | Martin Klapetek
|
DONE | kdeui/colors/kcolorhelpers_p.h has at least a copy in
kdeguiaddons, and perhaps another in kcolorwidgets. Resolve that. |
Kévin Ottens
|
DONE | Port all of kdelibs from KIcon to QIcon / KDE:::icon(), then move KIcon out (easy) | David Faure
|
DONE | Port all uses of time_t to QDateTime (or qint64 when serializing). Ignore kdecore and karchive, other people are reworking these bits anyway. | David Gil
|
DONE | Make use of qplatformdefs.h definitions instead of using the POSIX versions directly. | Aurélien Gâteau (Away until September, feel free to take over this task if necessary) --Taken over by Martin Klapetek |
DONE | Partly revert commit b03e81a61311ae1b64b0d37415477f9c08fe6142 which ported KFileItem to QFile::Permissions. Quoting David Faure:
"Port back from QFile::Permissions to mode_t given that mode_t is available in win32-msvc*/qplatformdefs.h (not everywhere, but in the places where the above commits did a half job at porting from mode_t to QFile::Permissions). QFile::Permissions is more limited (no suid bits) and having to convert between mode_t and QFile::Permissions is just extra work." https://git.reviewboard.kde.org/r/112481/ |
Aurélien Gâteau
|
DONE | KGlobalSettings is initalized by KApplication. Find out if any parts of it work without that, and split it into parts that work without the initialization and parts that don't.
Conclusion: Let's just bury KGlobalSettings 10m underground. https://git.reviewboard.kde.org/r/111348/ |
[email protected]
|
DONE | Port away from and deprecate KHBox/KVBox | Albert Astals Cid
|
DONE | Port KStandardAction from KAction to QAction | Kevin Ottens
|
DONE | Move KTabBar to kde4support and port users in kdelibs to QTabbar. preferably KTabWidget should go the same way, but needs a feature in Qt (see the qt5.1 epic) | Kevin Kin-Foo
|
DONE | Use tr() again (rather than QCoreApplication::translate with empty context) in all tier1+tier2+staging frameworks (except the ones which will go to tier3, they can use i18n) | George Goldberg (grundleborg)
done, however there are some incorrect uses of QObject::tr() still floating around which need fixing in a later patch.
|
DONE | Move KDialog to kde4support (once all other KDialog related cleanups are done) | Kevin Ottens
|
DONE | Move KRestrictedLine to kde4support | Kevin Kin-Foo
|
DONE | Move KDialogButtonBox to kde4support | David Faure
|
DONE | Move KDoubleValidator to kde4support | David Faure
|
DONE | Move KListWidget to kde4support (replace uses with QListWidget) | Martin Klapetek
|
DONE | Move KMenu to kde4support (once QMenu supports title items and keyboard navigation) | Kevin Ottens
|
DONE | Move KPushButton DnD support to an event filter | Kevin Ottens
|
DONE | Once KPushButton DnD and delayed menu support are out, move KPushButton to kde4support | Kevin Ottens
|
DONE | Move KSplashScreen to kde4support | David Faure
|
DONE | Replace KUndoStack with two methods in a namespace | Tobias Koenig
|
DONE | Move KShortcut in kde4support | Kevin Ottens
|
DONE | Move all global shortcut facilities of KAction in KGlobalAccel (which would then register QActions) | Valentin Rusu
|
DONE | Move all gesture facilities of KAction in KGestureMap (which would then register QActions) | Valentin Rusu
|
DONE | Move KAction::event to an event filter, see how to make it available to all QAction instances when using the consistency framework | Kevin Ottens
|
DONE | Once KAction has no original feature left, move it to kde4support | Kevin Ottens
|
DONE | KApplication::*Timestamp methods go to a new QObject subclass in tier4/kinterprocesswindowing | Kevin Ottens
|
DONE | KApplication::sessionConfig go to kconfig-gui, probably has a static method there | Kevin Ottens
|
DONE | KApplication::*startupId go with KStartupInfo to kwindowsystem | Kevin Ottens
|
DONE | Move KApplication to kde4support | Kevin Ottens
|
DONE | Move KStatusBar to kde4support | Kevin Ottens
|
DONE | Move KColorDialog to kde4support | Kevin Ottens
|
DONE | Move KMenuBar to kde4support | Kevin Ottens
|
DONE | Move KToolBar to xmlgui | Miquel i Aleix
|
DONE | Move KMainWindow to xmlgui | Miquel i Aleix
|
DONE | Move KInputDialog to kde4support once its features are in Qt (see the Contributions to Qt5 epic) | David Gil
|
DONE | Move KDateTime to kde4support once its features are in Qt (see the 5.1 epic) | Kevin Ottens
|
DONE | Split WId methods of KMessageBox into tier4/kinterprocesswindowing | Valentin Rusu
|
DONE | Split queued methods of KMessageBox into kde4support | Valentin Rusu
|
DONE | Implement queueing directly in KDialogJobUiDelegate | Àlex Fiestas <[email protected]> https://git.reviewboard.kde.org/r/113516/
|
DONE | Add a KMessageBoxDontAskAgainInterface, with a QHash based private implementation in KMessageBox | David Faure
|
DONE | Add a setter to KMessageBox in order to change the KMessageBoxDontAskAgainInterface implementation used by KMessageBox and an implementation set in our FrameworkIntegrationPlugin which uses KConfig | David Faure
|
DONE | Move rest of KMessageBox to kwidgets | Valentin Rusu
|
DONE | Move KProgressDialog to kde4support | Kevin Ottens
|
DONE | Move KFileDialog to kde4support once the QUrl static methods are in Qt (see the 5.1 epic) https://git.reviewboard.kde.org/r/112037/ - cannot move to kde4support, but all uses of KFileDialog have been removed except for KEncodingFileDialog | Teo Mrnjavac <[email protected]>
|
DONE | Make KEncodingFileDialog static-only in order to reduce KFileDialog usage | Teo Mrnjavac <[email protected]>
|
DONE | Rework QFileDialog instances to prefer QFileDialog::setMimeTypeFilters() rather than manually converting mime types to globs (when https://codereview.qt-project.org/#change,63345 is merged) | Teo Mrnjavac <[email protected]>
|
DONE | Have KMessageWidget look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic) | Àlex Fiestas
|
DONE | Have KMainWindow look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic) | Àlex Fiestas
|
DONE | Move KFadeWidgetEffect to kde4support | Kevin Ottens
|
DONE | Have KIO widgets look at the styleHint() flag to decide to animate or not (not existing yet, see 5.1 epic) | [email protected]
|
DONE | Have a way to trigger the reloading of the toolbar settings, was done by KGlobalSettings::toolbarAppareanceChanged. Unittested by ktoolbar_unittest. A simple DBus signal could do.) | Àlex fiestas
|
DONE | Implement KStyle::styleHint() to support the opaqueResize and animate flags (not existing yet, see 5.1 epic) value of those flags picked like KGlobalSettings did | Àlex Fiestas
|
DONE | Port uses of KGlobalSettings::(in)active(Title/Text)Color() in khtml to use KColorScheme instead | [email protected] https://git.reviewboard.kde.org/r/111171/
|
DONE | KGlobalSettings font methods: Make sure that kdeplatformtheme loads the font settings properly. Waiting for https://codereview.qt-project.org/#change,59808 | [email protected]
|
DONE | KGlobalSettings::isMultiHead should be duplicated in plasma-framework, it only reads an environment variable, should see how to translate the Windows version | Kevin Ottens
|
DONE | KGlobalSettings::createApplicationPalette/createNewApplicationPalette: Make sure that kdeplatformtheme provides what we need | [email protected]
|
DONE | Move KGlobalSettings to kde4support. Depends on many other tasks here | Aleix Pol
|
DONE | Move KStyle to tier4/consistency | Kevin Ottens
|
DONE | Import QCommandLineArguments from gitorious into libkdeqt5staging | David Faure
|
DONE | Use Q_COREAPP_STARTUP_FUNCTION to initialize KCrash | David Faure
|
DONE | Use Q_COREAPP_STARTUP_FUNCTION to initialize KCheckAccelerators | David Faure
|
DONE | Add the necessary to the integration plugin so that calling QDesktopServices::openUrl("help:/") is exactly the same as using KHelpClient::invokeHelp() | [email protected]
|
DONE | Make KLocalizedString::isApplicationTranslatedInto and QLocale::uiLanguages codes compatible. See https://git.reviewboard.kde.org/r/111178 | Vishesh Handa
|
DONE | KDocTools needs to use tr to remove KI18n dependency | Kevin Ottens
|
DONE | Evaluate if KConfigWidgets can be merged with another framework: With its recent growth and the dependencies changes it seems to well stand on its own now. | Kevin Ottens
|
DONE | Add helper code to Sonnet to make it easy to install on a QTextEdit | Aurélien Gâteau |
DONE | Refactor KTextEdit to use Sonnet::TextEditDecorator, to avoid code duplication | David Edmundson
|
DONE | KStyle 1/3: Copy KStyle as K4Style in KDE4Support https://git.reviewboard.kde.org/r/112217 | [email protected] |
DONE | KStyle 2/3: Remove everything from KStyle which is not a reimplementation of the following methods: polish, unpolish, eventFilter, styleHint, pixelMetrics, standardIcons https://git.reviewboard.kde.org/r/112519/ | [email protected] |
DONE | KStyle 3/3: From what remains of KStyle after the previous two tasks, evaluate what is here to enforce platform settings and what might make style developers life too hard, keep only the parts about platform settings and let go the rest (this work should be coordinated with Hugo Pereira Da Costa) | [email protected]
|
DONE | Port kmimetypechooser.cpp from KRun to QProcess, then move it to a widgets framework that can use KConfig+KCoreAddons (but not kiowidgets, it doesn't use kio) | Vishesh Handa
|
DONE | Check if KScanDialog is still used. If not, deprecated. If yes, move to a framework that can use KService and KPageDialog, but not kiowidgets, it doesn't use kio | Àlex Fiestas |
DONE | Remove KTextEditSpellInterface. See TODOs inside ktextedit.h | Martin Sandsmark https://git.reviewboard.kde.org/r/113578/ |
DONE | Update QCommandLineParser from the version that landed in qtbase dev and fix compilation (including plasma-framework). At least one thing changed, positionalArguments() and addHelpOption(str) is now setApplicationDescription(str)+addHelpOption(). Please do this before QCommandLineParser reaches qt5.git, or we'll be in trouble. | Martin Gräßlin |
DONE | Port KJob to QEventLoopLocker. This provides the replacement of KGlobal::{de,}ref() | Albert Astal Cid, committed by Aurélien Gâteau |
DONE | Port kfile/ from NetAccess to exec(). Then move NetAccess to kde4support, after ensuring all methods are documented as deprecated with a replacement solution (ask David if you don't find the replacement). | Àlex Fiestas |
DONE | Move find_packages() from kdelibs/CMakeLists.txt to kdelibs/$tier/$framework/CMakeLists.txt: | Aleix Pol |
DONE | Remove all links to libkdeqt5staging, since QCommandLineParser is in Qt https://git.reviewboard.kde.org/r/112557/ | [email protected] |
DONE | All uses of NOGUI should be ported to ecm_mark_nongui_executable() -- Not as simple as it sound: real test on Windows and Mac OS is required to decide what is the best behavior. | Aleix Pol |
DONE | Figure out forward includes, moving them to kde4support and finding an automated alternative for the modules | Aleix Pol |
DONE | Figure out a replacement for KF5/Qt5 for KLocale::formatByteSize and KLocale::formatDuration
Suggested steps:
KLocalizedString or in a new KByteFormatter class?
KLocale::formatByteSize()
binaryUnitDialect() will become a static defaultBinaryUnitDialect() (There currently are no users of setBinaryUnitDialect, according to LXR)
have to worry about reading any user override from kglobals
able to set a different locale to use. If static-only then just add an extra parameter to override the locale, otherwise will need a setLocale()
|
John Layt |
DONE | Test all KDirWatch backends
The todo is probably
the two first are probably much easier than the third Current state is that inotify backend passes all tests and is the default on linux and only available on linux. QFSW-backend is the only available on windows and fails similar on both linux and windows. The stat and fam backends aren't tested anywhere. See also http://thread.gmane.org/gmane.comp.kde.devel.frameworks/6962 |
Àlex Fiestas <[email protected]> |
DONE | Clean up imageformat plugins in KGuiAddons: there are broken plugins, and no easy way to test them | Alex Merry <[email protected]> |