DefineGroups getting lost after switching KParts

Thomas Friedrichsmeier thomas.friedrichsmeier at
Fri Jun 25 12:47:26 BST 2010


as a short introductory summary:
- This is a regression between KDE 4.3 and 4.4.
- I did not figure out, exactly under which circumstances it occurs, and in 
fact my attempts at producing a minimal testcase all failed.
- I can pinpoint the problem to a sub-portion of commit #912265 by David 
Faure, and thus I can provide a patch that fixes this problem, but causes 
failures in kxmlgui_unittest, instead.

The long version:
- Problem description -
In RKWard we have a host of different KParts, many of which contain child 
clients. The main window's ui.rc sets up some <DefineGroup>s, and some of the 
KParts make use of these groups. Up until KDE 4.3.4, this worked fine, actions 
appeared where they were supposed to. It still works fine in KDE 4.4 as long as 
there has only been exactly one call to 
KParts::MainWindow::createGUI(KParts::Part*), i.e. there has not been any 
switching between active parts. As soon as a part is switched, the actions are 
placed as though the <DefineGroups> did not exist.

I do not know, whether the <DefineGroups> have really been purged, somehow, but 
the visible effect suggests that exactly this has happened.

When forcing a full rebuild of the GUI using code like this:

	KXMLGUIFactory* fact = factory ();
	QList<KXMLGUIClient*> clients = fact->clients ();
	for (int i = clients.size () - 1; i >= 0; --i) {
		fact->removeClient (clients[i]);
	for (int i = 0; i < clients.size (); ++i) {
		fact->addClient (clients[i]);

all actions are once again placed correctly, up and until the active part is 

- Reproducing the problem -
As mentioned above, I have not managed to create a testcase. For testing with 
RKWard, click on the "Script File" tool button. Notice how Edit->Paste Special 
is all the way at the bottom of the Edit-menu (KParts have already been 
switched during startup). Select Windows->Detach. Edit->Paste Special is now 
placed correctly (as near to the regular Paste action as I could place it). To 
play with variants inside the main window, modify rkward.cpp->partChanged() to 
e.g. query you before switching parts.

- The patch -
I have no idea, why this is related to the problem. But the attached patch (a 
partial revert of 912265) fixes the problem, at the cost of failing 
KXmlGui_UnitTest::testUiStandardsMerging .

- Now what? -
Frankly, I don't understand all that merging code, and I have no idea, on how 
to debug this. I will gladly provide more info or try to debug this further, 
if you can give me some pointers on how to proceed.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: definegroups_vanishing.diff
Type: text/x-patch
Size: 1401 bytes
Desc: not available
URL: <>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <>

More information about the kde-core-devel mailing list