Plugins depending on the standardoutputview with no Ui

Andreas Pakulat apaku at gmx.de
Wed Mar 23 13:56:14 UTC 2011


On 23.03.11 13:51:51, Julian Bäume wrote:
> Am Mittwoch, 23. März 2011, 13:16:53 schrieb Dmitry Risenberg:
> > 2011/3/23 Julian Bäume <julian at svg4all.de>:
> > > Am Mittwoch, 23. März 2011, 11:51:34 schrieb Dmitry Risenberg:
> > >> 2011/3/23 Andreas Pakulat <apaku at gmx.de>:
> > >> > On 23.03.11 11:18:18, Julian Bäume wrote:
> > >> >> Hi,
> > >> >> 
> > >> >> Am Mittwoch, 23. März 2011, 09:45:22 schrieb Andreas Pakulat:
> > >> >> > PS: The KDevPlatform codebase has not been written with non-gui
> > >> >> > apps in mind, hence you can always run into code-paths where
> > >> >> > suddenly ui is needed. As the no-ui mode usually is used without
> > >> >> > KApplication or at least without X11 connection, that means your
> > >> >> > app will crash at that point.
> > >> >> 
> > >> >> What’s the use for KDevelop::Core::NoUi then?
> > >> > 
> > >> > To get kdevplatform loaded into an app that uses KApplication without
> > >> > X11 connection (or QCoreApplication+KComponentData as the tests do).
> > >> > That however is a hack and you've to be rather careful what you do
> > >> > with the kdevplatform libs as not all code-paths have been tested or
> > >> > examined for necessity of this flag to disable certain things. In
> > >> > particular when errors occur the code may still try to show
> > >> > message-boxes or what-not to the user.
> > >> 
> > >> Can I check this flag to avoid showing a messagebox when code is
> > >> called from a no-gui test suite?
> > > 
> > > No, the plugins just won’t load, when they need the GUI and you set the
> > > NoUi flag.
> > 
> > The code itself is in kdevplatform (itemrepository.cpp), it does not
> > need GUI, but it shows a messagebox in case of an error, which causes
> > a crash when run from unit tests, so I think that checking for NoUi
> > flag will fix it, won't it?
> 
> Ahh, now I understand. A runtime check for the flag in the plugins to enable 
> message boxes. IMHO and as I understand Andreas, all of this is a hack. I 
> think, it would be more desireable to remove GUI-related code from the 
> plugins, that don’t essentially need it. Warnings or error messages could also 
> be written to stdout or something, in case no GUI is present. So error 
> handling should not be done by the plugins themselves, but somewhere else. In 
> "GUI-mode" the program would show a message box and in "test-mode" the test 
> will fail (or even pass, if the error is expected).

Thats no different than exposing the NoUi flag to plugins. A proper  fix
would be splitting libraries and code into gui and non-gui parts and only
gui parts would actually have code to handle errors. All the non-gui libs
and plugins would merely have an error-return-code or some other way of
transporting errors to their caller and the non-gui app would be
responsible for handling those errors. So for example the vcs API would be
extended to transport error-information from a vcs plugin back to the
caller, the cvs plugin would be a no-ui plugin that just provides these
error information. And in KDevelop there would be a cvs-gui plugin that
executes these calls and shows the errors in an outputview.

But thats theory, there's no way this will become reality with the current
codebase as its too big of a change (and there are too few tests to verify
nothing breaks when doing it). This separation would've needed to happen 5
years ago when we started the work on KDevelop4.

Andreas





More information about the KDevelop-devel mailing list