Review Request: Provide (mostly) automatic synchronization between separate instances of KXMLGUIClient-derivatives

Thomas Friedrichsmeier thomas.friedrichsmeier at ruhr-uni-bochum.de
Tue Aug 11 13:19:00 BST 2009


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

(Updated 2009-08-11 12:19:00.042958)


Review request for Kate and kdelibs.


Changes
-------

Ok, I've worked a bit on style, naming, and making this yet easier to use.

As a demonstration / test case, I'll inline a very short additional diff that fixes the described GUI synchronization issues for kate.

Index: app/katemainwindow.cpp
===================================================================
--- app/katemainwindow.cpp	(revision 1009906)
+++ app/katemainwindow.cpp	(working copy)
@@ -63,6 +63,7 @@
 #include <KRecentFilesAction>
 #include <KToggleFullScreenAction>
 #include <KAboutData>
+#include <KXmlGuiClientSyncer>
 
 #include <QDragEnterEvent>
 #include <QEvent>
@@ -170,6 +171,7 @@
   setStandardToolBarMenuEnabled( true );
   setXMLFile( "kateui.rc" );
   createShellGUI ( true );
+  KXmlGuiClientSyncer::self ()->registerFactory (guiFactory ());
 
   kDebug() << "****************************************************************************" << sconfig;


Summary
-------

First to sum up the problem, I'm trying to solve. I'll use konqueror as an example:
1) Fire up two instances of konqueror. In one of the instances, set the shortcut of "Show History" to "Shift+F6". Now switch to the other instance: The change has not been propagated. Ok, perhaps you did not expect that to work in the first place, but now:
2) Fire up a single instance of konqueror, the open a new window (File->New Window). Do the same game as in 1. The change is not propagated between the two toplevel windows of the same konqueror instance, either. Finally:
3) Fire up a single instance of konqueror, with a single toplevel window. Open a second tab inside this window. Navigate both tabs to e.g. http://www.kde.org. Switch to tab A. Change the shortcut of "View Document Source" to "Shift+F6". Take a look at the "View"-menu to see the new shortcut. Now switch to tab B. Take another look at the "View"-menu. The shortcut is still at the previous setting, here. Switch back to tab A. The shortcut is back to the previous setting as well.
4) If you like to, play games 1-3 with modifying the toolbars, instead of shortcuts.

So much for the bug description. Konqueror is not really to blame, here, and neither is it the only application to be affected. The problem is that we're missing a mechanism to synchronize user settings between separate instances of KXMLGUIClients. That's what the new class KXmlGuiClientSyncer - contained in this patch - does. See the API-documentation within for usage details. For the "essence" of the code, see KXmlGuiClientSyncerPrivate::uiRcFileChanged().

Some points, I wasn't sure about:
1) Originally, I tried to incorporate this into KXMLGUIClient, directly (or rather KXMLGUIClientPrivate). That would have allowed for *fully* automatic synchronization, i.e. without having to register/watch the clients manually. However, kio depends on kdeui, and this would have added a cyclic dependency back to kio. Any idea on how to work around this? Or this semi-automatic solution safer in the first place?
2) I placed this inside kio, pretty much for the reason above. Is this appropriate?
3) Which kDebug area to use?


Diffs (updated)
-----

  trunk/KDE/kdelibs/includes/CMakeLists.txt 1006783 
  trunk/KDE/kdelibs/includes/KXmlGuiClientSyncer PRE-CREATION 
  trunk/KDE/kdelibs/kdeui/xmlgui/kxmlguiclient.h 1009993 
  trunk/KDE/kdelibs/kio/CMakeLists.txt 1006783 
  trunk/KDE/kdelibs/kio/kio/kxmlguiclientsyncer.h PRE-CREATION 
  trunk/KDE/kdelibs/kio/kio/kxmlguiclientsyncer.cpp PRE-CREATION 
  trunk/KDE/kdelibs/kio/kio/kxmlguiclientsyncer_p.h PRE-CREATION 

Diff: http://reviewboard.kde.org/r/1238/diff


Testing
-------


Thanks,

Thomas





More information about the kde-core-devel mailing list