Skip to content

Commit 12a7da7

Browse files
committed
Added initialize/finalize methods to ListenerManager
1 parent 3340e46 commit 12a7da7

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

src/core/modules/listeners/listeners_manager.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
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.

src/core/modules/listeners/listeners_manager.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
//-----------------------------------------------------------------------------
8080
// CListenerManager class.
8181
//-----------------------------------------------------------------------------
82-
class CListenerManager
82+
class CListenerManager: public wrapper<CListenerManager>
8383
{
8484
public:
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

9598
public:

src/core/modules/listeners/listeners_wrap.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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()));

0 commit comments

Comments
 (0)