Create a KXMLGUIFactory for the context menu on the fly, if needed, instead of forcibly merging with the hosts GUI.

BUG: 153646

svn path=/trunk/KDE/kdebase/apps/konsole/; revision=747059
This commit is contained in:
Thomas Friedrichsmeier
2007-12-10 22:54:30 +00:00
parent 8928e03af4
commit ac511d63f0
2 changed files with 13 additions and 22 deletions

View File

@@ -73,11 +73,6 @@ Part::Part(QWidget* parentWidget , QObject* parent)
setupActions();
// FIXME we need this for the context menu and KPart ctor doesn't call the
// necessary KXMLGUIClient ctor
if (KXMLGUIClient *parentClient = dynamic_cast<KXMLGUIClient*>(parent))
parentClient->insertChildClient(this);
// setup global managers
if ( SessionManager::instance() == 0 )
SessionManager::setInstance( new SessionManager() );
@@ -204,23 +199,8 @@ void Part::activeViewChanged(SessionController* controller)
if ( controller == _pluggedController )
return;
qDebug() << "Looking for factory";
// find client with the necessary factory
KXMLGUIClient* client = this;
qDebug() << "First parent" << client->parentClient();
while ( client->parentClient() )
{
qDebug() << "Next parent" << client->parentClient();
qDebug() << "Factory" << client->factory();
client = client->parentClient();
}
if ( client->factory() )
{
client->factory()->removeClient(_pluggedController);
client->factory()->addClient(controller);
}
if (_pluggedController) removeChildClient (_pluggedController);
insertChildClient (controller);
_pluggedController = controller;
}

View File

@@ -36,6 +36,7 @@
#include <KToggleAction>
#include <KUrl>
#include <KXMLGUIFactory>
#include <KXMLGUIBuilder>
#include <kdebug.h>
#include <kcodecaction.h>
#include <kdeversion.h>
@@ -899,6 +900,16 @@ void SessionController::showDisplayContextMenu(TerminalDisplay* /*display*/ , in
{
QMenu* popup = 0;
// needed to make sure the popup menu is available, even if a hosting
// application did not merge our GUI.
if (!factory()) {
if (!clientBuilder()) {
setClientBuilder(new KXMLGUIBuilder(_view));
}
KXMLGUIFactory* f = new KXMLGUIFactory(clientBuilder(), this);
f->addClient(this);
}
if ( factory() )
popup = qobject_cast<QMenu*>(factory()->container("session-popup-menu",this));