Extending KCModuleProxy

Frans Englich frans.englich at telia.com
Fri Mar 19 21:02:23 GMT 2004

On Friday 19 March 2004 21:15, Matthias Kretz wrote:
> Ok, I won't come around to finish going through that patch today so I
> rather send what I wrote so far...
> On Wednesday 17 March 2004 19:42, Frans Englich wrote:
> > True, the thing is, kcmoduleproxy.diff is 24kb big and the kcmoduleproxy.
> > {cpp,h} is 21.2kb in total - the class is basically rewritten.
> > realModule() is rewritten that's perhaps why it appears as moved(in total
> > 99 lines removed, 810 added). But I can run it through indent though,
> > should I?
> Almost. Still most of the old code that was in there didn't change. And
> it's nice if the diff would show what exactly was changed and what not.
> Having to manually look for those changes somehow defeats the point of a
> diff.

Yes, absolutely true. But it's irrelevant because there was basically no white 
space changes.

cat kcmoduleproxy.diff | grep "^+.*" | wc -l
cat kcmoduleproxy.diff | grep "^-.*" | wc -l

Judging from the patch realModule is heavily rewritten and accounts for most 
of the removed lines(28l), all that was retabbed was two 6-8 liner functions, 
showEvent and moduleChanged(16l in total) and the rest was header(30l) or 
misc. changes(~25). _AFAICT_
FYI, I did not change those two functions, if it's of any help.

> > > - - The changed signal is not identical to the one of the embedded KCM.
> > > The changed signal of the proxy is only emitted if the KCM really
> > > changed. If changed() == true and the KCM emits changed(true) the proxy
> > > won't emit the changed signal.
> >
> > Ok, that was my /intention/ too :)
> >
> > Sorry, you will have to be a little bit more specific. in realModule() I
> > do:
> I'm sorry this didn't come through as I meant: What I wanted to say was
> that the documentation for the changed signal was wrong where it says:
> "This signal is relayed from the encapsulated module, and is equivalent to
> the module's own changed(bool) signal."
> It was supposed to not be the same and has to, after your changes, still
> behave that way (which I think it does, from what I've seen).

Ups, could be a good idea to update the docs ;-)

> [snip the code I wrote myself ;-) ]
> > KControl's ConfigModule do lazy loading on ProxyWidget(which loads
> > ProxyView which loads a KCModule..). I would say the things KCModuleProxy
> > is supposed to do, is of interest for all cases where KCModules are
> > used(such as KControl).
> If I understand correctly KControl's code can be simplified using the new
> KCModuleProxy?

Yes, quite heavily. About 4-5 classes I think(which also would lead to feature 
gain). Dunno if it's worth doing before KDE 4 though, considering how much is 
going on in that area.

> > Yes, lazy loading was thrown out in my patch but it's back now(AFAICT).
> > It was easy to do - I merged realModule and init.
> Looks good.
> > The removal was intentional because I thought 95% of the cases one module
> > would be shown and the rest about 3-5 modules(configure dialogs). But
> > since it back, twisted games like in Kontact is possible. FYI, Kontact
> > without lazy loading is unacceptable slow.
> Even if it's only 3 modules. It still takes awefully long to load one of
> them - think of all the disk accesses. Lazy loading for KCMs is a _must_

Yeah, and resources shouldn't be wasted just because it's "acceptable". 
Definitely a nice feature.

> > New versions attached(kstdgui committed). kcmultidialog.cpp#351 crashes
> > because KCModuleProxyPrivate* d; is not initialized. Which is really
> > weird to me since I do it in KCMultiDialog's constructors, AFAICT.
> I'll look into this if you give me more time. 

I found the problem. The pointer was zeroed in the init function...

> (I still know that code 
> pretty good. But I'm sick and can't concentrate...)

Hope you will recover! 


More information about the kde-core-devel mailing list