File tree Expand file tree Collapse file tree 3 files changed +26
-2
lines changed
src/core/modules/listeners Expand file tree Collapse file tree 3 files changed +26
-2
lines changed Original file line number Diff line number Diff line change 2929// -----------------------------------------------------------------------------
3030#include " listeners_manager.h"
3131
32-
3332// -----------------------------------------------------------------------------
3433// Adds a callable to the end of the CListenerManager vector.
3534// -----------------------------------------------------------------------------
@@ -41,6 +40,9 @@ void CListenerManager::RegisterListener(PyObject* pCallable)
4140 // Is the callable already in the vector?
4241 if ( !IsRegistered (oCallable) )
4342 {
43+ if (!GetCount ())
44+ Initialize ();
45+
4446 m_vecCallables.AddToTail (oCallable);
4547 }
4648 else {
@@ -65,6 +67,9 @@ void CListenerManager::UnregisterListener(PyObject* pCallable)
6567 else {
6668 m_vecCallables.Remove (index);
6769 }
70+
71+ if (!GetCount ())
72+ Finalize ();
6873}
6974
7075
@@ -91,6 +96,19 @@ int CListenerManager::GetCount()
9196 return m_vecCallables.Count ();
9297}
9398
99+ void CListenerManager::Initialize ()
100+ {
101+ override initialize = get_override (" initialize" );
102+ if (!initialize.is_none ())
103+ initialize ();
104+ }
105+ void CListenerManager::Finalize ()
106+ {
107+ override finalize = get_override (" finalize" );
108+ if (!finalize.is_none ())
109+ finalize ();
110+ }
111+
94112
95113// -----------------------------------------------------------------------------
96114// Return whether or not the given callback is registered.
Original file line number Diff line number Diff line change 7979// -----------------------------------------------------------------------------
8080// CListenerManager class.
8181// -----------------------------------------------------------------------------
82- class CListenerManager
82+ class CListenerManager : public wrapper <CListenerManager>
8383{
8484public:
8585 void RegisterListener (PyObject* pCallable);
@@ -90,6 +90,9 @@ class CListenerManager
9090 object __getitem__ (unsigned int index);
9191 void clear ();
9292
93+ virtual void Initialize ();
94+ virtual void Finalize ();
95+
9396 int FindCallback (object oCallback);
9497
9598public:
Original file line number Diff line number Diff line change @@ -119,6 +119,9 @@ void export_listener_managers(scope _listeners)
119119 &CListenerManager::clear,
120120 " Remove all registered callbacks."
121121 )
122+
123+ .def (" initialize" , &CListenerManager::Initialize)
124+ .def (" finalize" , &CListenerManager::Finalize)
122125 ;
123126
124127 _listeners.attr (" on_client_active_listener_manager" ) = object (ptr (GetOnClientActiveListenerManager ()));
You can’t perform that action at this time.
0 commit comments