diff --git a/src/pluginmanager.cpp b/src/pluginmanager.cpp
index c08aab4..babedd3 100644
--- a/src/pluginmanager.cpp
+++ b/src/pluginmanager.cpp
@@ -147,6 +147,7 @@ void PluginManager::loadEnabledPlugins()
void PluginManager::optionChanged(const QString& option)
//QString("%1.%2").arg(loadOptionPrefix).arg(shortNames_[plugin]);
//TODO(mck): implement this... for now, enabling/disabling requires psi restart
@@ -236,7 +237,7 @@ QStringList PluginManager::availablePlugins()
QWidget* PluginManager::optionsWidget(const QString& plugin)
- if (hosts_.contains(plugin)) {
+ if (hosts_.contains(plugin) && hosts_[plugin]->isEnabled()) {
widget = hosts_[plugin]->optionsWidget();
qWarning("Attempting to get options for %s which doesn't exist", qPrintable(plugin));
@@ -254,19 +255,60 @@ QWidget* PluginManager::optionsWidget(const QString& plugin)
* \param event Incoming event
* \return Continue processing the event; true if the event should be silently discarded.
-bool PluginManager::processMessage(const PsiAccount* account, const QString& jidFrom, const QString& body, const QString& subject)
+bool PluginManager::processMessage(const PsiAccount* account, const QString& jidFrom,
+ QString& body, QString& subject)
foreach (PluginHost* host, hosts_.values()) {
- if (host->processMessage(accountIds_[account], jidFrom, body, subject)) {
+ if (host->processMessage(accountIds_[account], jidFrom, body, subject)) {
+bool PluginManager::processMessage(const PsiAccount* account, const QString& jidFrom,
+ QDomElement& htmlBody, QString& subject)
+ foreach (PluginHost* host, hosts_.values()) {
+ if (host->processMessage(accountIds_[account], jidFrom, htmlBody, subject)) {
+ * process an outgoing message
+bool PluginManager::processOutgoingMessage(const PsiAccount* account, const QString& jidTo,
+ QString& body, QString& subject)
+ foreach (PluginHost* host, hosts_.values()) {
+ if (host->processOutgoingMessage(accountIds_[account], jidTo,
* \brief Give each plugin the opportunity to process the incoming event
* Each plugin is passed the event in turn. Any plugin may then modify the event
@@ -280,10 +322,13 @@ bool PluginManager::processEvent(const PsiAccount* account, QDomElement& event)
foreach (PluginHost* host, hosts_.values()) {