[Qtcsharp-patches] Bugtussle/src/static/clib signalhookbase.cpp,1.4,1.5 signalhookbase.h,1.3,1.4
Status: Inactive
Brought to you by:
manyoso
From: Andreas H. <ah...@us...> - 2005-03-03 22:07:17
|
Update of /cvsroot/qtcsharp/Bugtussle/src/static/clib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30899/src/static/clib Modified Files: signalhookbase.cpp signalhookbase.h Log Message: Fixed OverrideHook bug (inheritance) Index: signalhookbase.h =================================================================== RCS file: /cvsroot/qtcsharp/Bugtussle/src/static/clib/signalhookbase.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** signalhookbase.h 13 Oct 2004 15:10:35 -0000 1.3 --- signalhookbase.h 3 Mar 2005 22:06:48 -0000 1.4 *************** *** 8,11 **** --- 8,12 ---- typedef void(*objectDestroyedHook)(void* hook, QObject* obj); + typedef bool(*eventFilterHook)(void* hook, QObject* sender, QEvent* event); class SignalHookBase: public QObject *************** *** 14,19 **** public: SignalHookBase(QObject* o); ! virtual ~SignalHookBase() {} ! public: inline void setObjectDestroyed(void* hookData, objectDestroyedHook hook) --- 15,24 ---- public: SignalHookBase(QObject* o); ! virtual ~SignalHookBase() ! { ! if(objectDestroyedCallback) ! objectDestroyedCallback(objectDestroyedCallbackData ? objectDestroyedCallbackData : this, owner); ! } ! public: inline void setObjectDestroyed(void* hookData, objectDestroyedHook hook) *************** *** 23,26 **** --- 28,41 ---- } + inline void setEventFilter(void* hookData, eventFilterHook hook) + { + eventFilterCallbackData = hookData; + eventFilterCallback = hook; + if (eventFilterCallback) + owner->installEventFilter(this); + else + owner->removeEventFilter(this); + } + inline const QObject* getOwner() const { *************** *** 28,31 **** --- 43,48 ---- } + bool eventFilter(QObject* sender, QEvent* event); + /* gcc does not support InstallSignalHook((void**){2}Callback, hook, ...) so we must typecast to (void*) and do the cast to (void**) in *************** *** 33,42 **** void InstallSignalHook(void* hookvarX, void* newhook, const char* signal, const char* slot); - public slots: - void ObjectDestroyedSlot(QObject* obj); - private: objectDestroyedHook objectDestroyedCallback; void* objectDestroyedCallbackData; protected: QObject* owner; --- 50,62 ---- void InstallSignalHook(void* hookvarX, void* newhook, const char* signal, const char* slot); private: objectDestroyedHook objectDestroyedCallback; void* objectDestroyedCallbackData; + eventFilterHook eventFilterCallback; + void* eventFilterCallbackData; + + public slots: + void objectDestroyedSlot(QObject* obj); + protected: QObject* owner; Index: signalhookbase.cpp =================================================================== RCS file: /cvsroot/qtcsharp/Bugtussle/src/static/clib/signalhookbase.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** signalhookbase.cpp 13 Oct 2004 15:10:35 -0000 1.4 --- signalhookbase.cpp 3 Mar 2005 22:06:47 -0000 1.5 *************** *** 1,3 **** --- 1,4 ---- #include "signalhookbase.h" + #include "qmessagebox.h" extern "C" { *************** *** 16,19 **** --- 17,24 ---- } + void QTC_EXPORT SignalHookBase_setEventFilter(SignalHookBase* handle, void* hookData, eventFilterHook hook) { + handle->setEventFilter(hookData, hook); + } + const QTC_EXPORT QObject* SignalHookBase_getOwner(SignalHookBase* handle) { return handle->getOwner(); *************** *** 24,29 **** SignalHookBase::SignalHookBase(QObject* o): QObject(o, 0) { owner = o; ! QObject::connect(owner, SIGNAL( destroyed(QObject*) ), this, SLOT( ObjectDestroyedSlot(QObject*) )); } --- 29,40 ---- SignalHookBase::SignalHookBase(QObject* o): QObject(o, 0) { + /* The signal hook is a child of the owner. So it will be destroyed when the + owner gets destroyed. */ owner = o; ! objectDestroyedCallback = 0; ! objectDestroyedCallbackData = 0; ! eventFilterCallback = 0; ! eventFilterCallbackData = 0; ! QObject::connect(owner, SIGNAL( destroyed(QObject*) ), this, SLOT( objectDestroyedSlot(QObject*) )); } *************** *** 41,49 **** } ! void SignalHookBase::ObjectDestroyedSlot(QObject* obj) { - if(objectDestroyedCallback) - objectDestroyedCallback(objectDestroyedCallbackData ? objectDestroyedCallbackData : this, obj); delete this; } --- 52,65 ---- } ! void SignalHookBase::objectDestroyedSlot(QObject* obj) { delete this; } + bool SignalHookBase::eventFilter(QObject* sender, QEvent* event) + { + if(eventFilterCallback) + return eventFilterCallback(eventFilterCallbackData ? eventFilterCallbackData : this, sender, event); + return false; + } + |