[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    Re: Review Request: Use in-memory dom document when editing toolbars,
From:       "David Faure" <faure () kde ! org>
Date:       2009-09-25 11:48:30
Message-ID: 20090925114830.8962.67501 () localhost
[Download RAW message or body]



> On 2009-09-25 10:09:18, Thomas Friedrichsmeier wrote:
> > I see, I'm a bit late to reply. But anyway:
> > 
> > I have not really tested this, as I do not generally have the time to follow SVN \
> > closely. I do not think this will affect me / my application in any way, but: 
> > In light of this: http://reviewboard.kde.org/r/1238/, I think it would generally \
> > be cleaner if XMLGUI-changes are always written to disc somewhere. At least if \
> > any third application is expected to embed this client. (The details of the \
> > linked patch don't matter too much, here, but to solve the synchronization \
> > problems outlined in that review request, hosting applications will probably \
> > always rely on reloading the XML from disc one way or another. Alternative: \
> > Provide public API to make an XMLGUIClient reload the settings from the \
> > localXMLFile, only).

Thanks for the feedback.

Well, I don't see how the two things are contradictory. If the user edits toolbars, \
we still save the result to a file, and other instances of the application can reload \
that, i.e. update the QDomDocument inside their kxmlguiclient.
The only thing I'm changing here is that kedittoolbar starts from the domdocument of \
the guiclient from memory, rather than from disk. But for the GUI to be correct \
already, surely your "syncer" has to update the domdocument of the guiclient, so no \
problem?

I think the confusion is about which "kxmlguiclient changes" we're talking about. The \
use case I see for setDomDocument() (which means, dynamic changes not on disk), is \
the case where applications hardcode stuff like "remove those actions that should not \
appear in this context" (e.g. kaddressbookpart-inside-kontact). This is not a \
user-configured change, it should not be written to disk upfront (if it was, it would \
mess up kaddressbook-standalone, while at least now it only does that when the user \
configure toolbars; corner case).

You are right about the fact that the "syncer" means reloading from disk, which in \
the kaddressbookpart-inside-kontact case [if kontact wasn't a uniqueapplication ;)] \
would mean that those dynamic changes to the XML would have to be redone. Just like \
they are currently redone when editing toolbars, btw. (cf \
MainWindow::slotNewToolbarConfig() in kontact). In fact this isn't the only thing \
that needs to be done after rebuilding the GUI (from edittoolbars), the other thing \
is plugging back any ActionLists. For that reason, the "syncer" probably breaks \
actionlists right now... With the current infrastructure, it sounds like what we need \
is a kxmlguifactory signal that apps would connect to that same slotNewToolbarConfig \
slot, which is where the code for "stuff that has to be done after createGUI" is \
located. It would be emitted by the method you mention it should have, for \
removing+readding all clients, moving that code out of kedittoolbarwidget.
Well there's probably a better design for all this, but reviewboard isn't the best \
place for thinking about and discussing design :-)
(hmm, and now I'm commenting on r/1238 in the comments for r/1694 :-)

Anyway, going back to this patch, I think that overall the future syncer doesn't \
prevent kedittoolbar starting from the in-memory domdocument in order to allow \
dynamic changes, but feel free to prove me wrong :)

PS: I don't understand your "Alternative" suggestion.


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviewboard.kde.org/r/1694/#review2466
-----------------------------------------------------------


On 2009-09-22 18:38:22, David Faure wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviewboard.kde.org/r/1694/
> -----------------------------------------------------------
> 
> (Updated 2009-09-22 18:38:22)
> 
> 
> Review request for kdelibs.
> 
> 
> Summary
> -------
> 
> Users of KXmlGuiClient::setDOMDocument probably noticed that the dynamic changes
> made to the guiclient's XML, where not taken into account in KEditToolBar. 
> 
> This is because KEditToolBar loads the XML file again from disk, rather than using
> the in-memory XML tree. (And this in turn is probably because in KDE3, we had
> KXMLGUIClient::conserveMemory which got rid of the in-memory xml tree, but we \
> removed it for KDE4 because it broke any kind of dynamic changes like action lists, \
> plugins etc.) 
> So the fix is simple: using the in-memory domDocument() instead. The question is \
> what it breaks. I noticed that the ui_standards.rc merging left the name and \
> version attributes of ui_standards.rc into the toplevel tag -- fixed in r1026838.
> 
> If your app does unusual stuff around xmlguiclients and/or toolbar editing, please
> test this patch before I commit it.
> 
> The reason for all this is bug 207296, but surely I'm not the first user of \
> setDOMDocument. I see that knotes, kopete, and kross use it already, at least.
> 
> 
> This addresses bug 207296.
> https://bugs.kde.org/show_bug.cgi?id=207296
> 
> 
> Diffs
> -----
> 
> trunk/KDE/kdelibs/kdeui/dialogs/kedittoolbar.cpp 1025321 
> 
> Diff: http://reviewboard.kde.org/r/1694/diff
> 
> 
> Testing
> -------
> 
> Editing toolbars in kontact, konqueror, kate.
> 
> [found an unrelated bug while testing in konq, the Tools menu moves to first \
> position, even w/o the patch...] 
> 
> Thanks,
> 
> David
> 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic