On Mon, 8 Apr 2013, Sebastian Sauer wrote:
Q_PRIVATE_SLOTS is indeed a problem. For moc-includes: The fundamental
problem here is that qmake uses a different moc filename layout then cmake.
It cannot be changed in qmake to match to the cmake ones. Lukely this days we
got automoc and that means in 99% of the cases we not need to include moc's
any longer.
Yes -- intend to do a little py script to remove all those moc includes
globally.
Lesser code, lesser error-prune, more portable, yay :) An
exception are classes like
test.h
class A : publci QObject
{
private:
class Private;
Private *d;
Q_PRIVATE_SLOT(d, SLOT(mySlot());
}
test.cpp
class A::Private
{
public:
void mySlot() {}
};
cause here the moc needs to be included in test.cpp to know about the mySlot
impl and be abel to call it.
Taken the very limited number of cases where we do that it may an idea to
just not use Q_PRIVATE_SLOT.
Well, I'm fine with having moc_bla.cpp includes where Q_PRIVATE_SLOT is
used. I don't think there's any real problem there.
5.1 is/was scheduled for this month iirc. So, it should hit soon. Its also
required for Android since Android-support got only introduced in 5.1.
Yeah, as soon as there's a beta tarball to download, I'll update my
development vm.
* kdelibs: add a shim "kofake" library that has enough of the KDE headers
and implementation to build. This mostly is ready, but there is some stuff
missing and currently libs/flake fails to build because of missing stuff.
Oh, interesting. iirc it worked/works for me fine with all of flake.
These are the linking errors I currently get:
Linking CXX shared library libflake.so
CMakeFiles/flake.dir/KoCanvasControllerWidget.cpp.o: In function
`qobject_cast<QGLWidget*>':
/usr/include/QtCore/qobject.h:473: undefined reference to
`QGLWidget::staticMetaObject'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o: In function
`ToolAction::qt_metacall(QMetaObject::Call, int, void**)':
/home/boud/kde/build/calligra/libs/flake/moc_KoToolManager_p.cpp:334:
undefined reference to `KAction::qt_metacall(QMetaObject::Call, int,
void**)'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o: In function `~KAction':
/home/boud/kde/src/calligra/fake/kaction.h:11: undefined reference to
`vtable for KAction'
/home/boud/kde/src/calligra/fake/kaction.h:11: undefined reference to
`vtable for KAction'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o: In function `KAction':
/home/boud/kde/src/calligra/fake/kaction.h:16: undefined reference to
`vtable for KAction'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o: In function
`ToolAction::qt_metacast(char const*)':
/home/boud/kde/build/calligra/libs/flake/moc_KoToolManager_p.cpp:329:
undefined reference to `KAction::qt_metacast(char const*)'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o:(.data.rel.ro._ZTI10ToolAction[_ZTI10ToolAction]+0x10):
undefined reference to `typeinfo for KAction'
CMakeFiles/flake.dir/KoToolManager_p.cpp.o:(.data.rel.ro+0x0): undefined
reference to `KAction::staticMetaObject'
CMakeFiles/flake.dir/KoToolManager.cpp.o: In function
`qobject_cast<KAction*>':
/usr/include/QtCore/qobject.h:473: undefined reference to
`KAction::staticMetaObject'
CMakeFiles/flake.dir/tools/KoPathTool.cpp.o: In function `KAction':
/home/boud/kde/src/calligra/fake/kaction.h:17: undefined reference to
`vtable for KAction'
/home/boud/kde/src/calligra/fake/kaction.h:17: undefined reference to
`vtable for KAction'
/home/boud/kde/src/calligra/fake/kaction.h:17: undefined reference to
`vtable for KAction'
/home/boud/kde/src/calligra/fake/kaction.h:17: undefined reference to
`vtable for KAction'
/home/boud/kde/src/calligra/fake/kaction.h:17: undefined reference to
`vtable for KAction'
CMakeFiles/flake.dir/tools/KoPathTool.cpp.o:/home/boud/kde/src/calligra/fake/kaction.h:17:
more undefined references to `vtable for KAction' follow
CMakeFiles/flake.dir/svg/SvgSavingContext.cpp.o: In function `Job':
/home/boud/kde/src/calligra/fake/kio/job.h:246: undefined reference to
`vtable for KIO::Job'
CMakeFiles/flake.dir/KoShapeController.cpp.o: In function
`KDialog::slotButtonClicked(int)':
/home/boud/kde/src/calligra/fake/kdialog.h:149: undefined reference to
`KDialog::buttonClicked(KDialog::ButtonCode)'
CMakeFiles/flake.dir/KoShapeController.cpp.o: In function `~KDialog':
/home/boud/kde/src/calligra/fake/kdialog.h:11: undefined reference to
`vtable for KDialog'
/home/boud/kde/src/calligra/fake/kdialog.h:11: undefined reference to
`vtable for KDialog'
CMakeFiles/flake.dir/KoShapeController.cpp.o:(.data.rel.ro._ZTV11KPageDialog[_ZTV11KPageDialog]+0x10):
undefined reference to `KDialog::metaObject() const'
CMakeFiles/flake.dir/KoShapeController.cpp.o:(.data.rel.ro._ZTV11KPageDialog[_ZTV11KPageDialog]+0x18):
undefined reference to `KDialog::qt_metacast(char const*)'
CMakeFiles/flake.dir/KoShapeController.cpp.o:(.data.rel.ro._ZTV11KPageDialog[_ZTV11KPageDialog]+0x20):
undefined reference to `KDialog::qt_metacall(QMetaObject::Call, int,
void**)'
CMakeFiles/flake.dir/KoShapeController.cpp.o:(.data.rel.ro._ZTI11KPageDialog[_ZTI11KPageDialog]+0x10):
undefined reference to `typeinfo for KDialog'
collect2: error: ld returned 1 exit status
make[2]: *** [libs/flake/libflake.so.14.0.0] Error 1
make[1]: *** [libs/flake/CMakeFiles/flake.dir/all] Error 2
make: *** [all] Error 2
makeobj[0]: Leaving directory `/home/boud/kde/build/calligra/libs/flake'
boud@linux-pb1y:~/kde/build/calligra/libs/flake>
* Replace KPluginLoader with Qt5 plugin loading
This will give us static plugins for free. That means its super easy to just
bundle multiple plugins into one or even compile everything static.
There is a limitation with plugins needing to inherit and declare interfaces.
In coffice I worked around this. So, in fact Qt plugins are 100% dynamic and
can handle everything you throw at them.
Yes, I don't foresee problems here -- it's mostly just manual/scriptable
work.
* replace kconfig with qsettings
I am not sure if that's a good idea. KConfig has a few advantages in KDE land
like configuration-overwrites, kiosk. Maybe we could just stick with KConfig
and under the hood map to QSettings if needed? Or maybe use an own KoConfig
that maps to either KConfig or QSettings?
The latter would be best, I guess. Though kiosk seems dead anyway.
The other such candidate is KAction vs QAction. KAction enables system-wide
shortcuts. But then do we have use for that? Maybe yes for specific things
like a "Create Screenshot" in Krita?
Nope -- nothing like that. For KAction, my biggest beef is that it is too
smart. For krita at least, I want to handle shortcut management myself,
because shortcuts are used for more than QAction-based actions
* replace KSaveFile with QSaveFile
* replace KTemporaryFile with QTemporaryFile
* replace KTempDir with QTemporaryDir
* replace KFileWidget/KFileDialog with QFileDialog (initial patch on
reviewboard)
There is no equivalent for KFileWidget in Qt and probably never will be.
Well, QDirModel+QListView but that would miss any proper KDE-integration. But
then I doubt there are much users of KFileWidget in Calligra
This is the full set:
kexi/main/startup/KexiStartupDialog.cpp
kexi/main/startup/KexiStartupFileHandler.cpp
kexi/widget/KexiConnectionSelectorWidget.cpp
kexi/widget/KexiFileWidget.cpp
krita/ui/kis_layer_manager.cc
libs/kokross/KoScriptManagerAdd.cpp
libs/main/KoExistingDocumentPane.cpp
libs/main/KoMainWindow.cpp
plugins/pictureshape/PictureShapeConfigWidget.cpp
plugins/vectorshape/VectorShapeConfigWidget.cpp
plugins/videoshape/SelectVideoWidget.cpp
But Yue has already started on it.
* port all tests from qtest_kde.h to QtTest or QtTestWidgets
* KApplication to QApplication
I am not sure about the KApplication/QApplication case either. KApp still
provides some additional functionality iirc. Could need some investigation.
That's what the porting guidelines recommend:
Changes in kdeui
KApplication/KUniqueApplication: use QApplication instead, but make
sure to:
Call QCoreApplication::setApplicationName("...")
Call QCoreApplication::setOrganizationDomain("kde.org")
Call QApplication::setApplicationDisplayName(i18n("...")) for GUI
programs
Use KDBusService for DBus registration, and optional "unique"
behavior
Boudewijn
_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel