From 2264a206d262f07f6c6d91df867383d6413e0c3f Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 26 Jan 2015 15:10:18 -0500 Subject: [PATCH] Check virtual mode bases better --- include/modes.h | 4 ++++ src/modes.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/modes.h b/include/modes.h index 9c5916c0f..729e979d4 100644 --- a/include/modes.h +++ b/include/modes.h @@ -107,6 +107,8 @@ class CoreExport ChannelMode : public Mode bool CanSet(User *u) const anope_override; + virtual void Check() { } + /** 'wrap' this channel mode and param to the underlying mode and param */ virtual ChannelMode *Wrap(Anope::string ¶m); @@ -215,6 +217,8 @@ class CoreExport ChannelModeVirtual : public T ~ChannelModeVirtual(); + void Check() anope_override; + ChannelMode *Wrap(Anope::string ¶m) anope_override; ChannelMode *Unwrap(ChannelMode *cm, Anope::string ¶m) = 0; diff --git a/src/modes.cpp b/src/modes.cpp index dafe2ddca..38266f95f 100644 --- a/src/modes.cpp +++ b/src/modes.cpp @@ -213,7 +213,7 @@ ChannelModeVirtual::~ChannelModeVirtual() } template -ChannelMode *ChannelModeVirtual::Wrap(Anope::string ¶m) +void ChannelModeVirtual::Check() { if (basech == NULL) { @@ -221,7 +221,11 @@ ChannelMode *ChannelModeVirtual::Wrap(Anope::string ¶m) if (basech) basech->listeners.push_back(this); } +} +template +ChannelMode *ChannelModeVirtual::Wrap(Anope::string ¶m) +{ return basech; } @@ -453,6 +457,9 @@ bool ModeManager::AddChannelMode(ChannelMode *cm) FOREACH_MOD(OnChannelModeAdd, (cm)); + for (unsigned int i = 0; i < ChannelModes.size(); ++i) + ChannelModes[i]->Check(); + return true; }