Blob Blame History Raw
From 363186a29685890b181c40ad176abc4faba2746d Mon Sep 17 00:00:00 2001
From: Robin Lee <cheeselee@fedoraproject.org>
Date: Sat, 21 Nov 2020 17:50:38 +0800
Subject: [PATCH 3/4] fix: use Q_GLOBAL_STATIC to initialize eventHanlder and
 eventFilter

Initialisation of static global object eventProcessor requires
eventHanlder and eventFilter initialized first. But that's not
guaranteed by C++ standard and the program will crash. Instead,
use Q_GLOBAL_STATIC to initialize the latter two object.

Log: use Q_GLOBAL_STATIC to initialize eventHanlder and eventFilter
Signed-off-by: Robin Lee <cheeselee@fedoraproject.org>
---
 .../interfaces/dfmeventdispatcher.cpp         | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/dde-file-manager-lib/interfaces/dfmeventdispatcher.cpp b/dde-file-manager-lib/interfaces/dfmeventdispatcher.cpp
index 4f3a3a6b7..d92a5a2a3 100644
--- a/dde-file-manager-lib/interfaces/dfmeventdispatcher.cpp
+++ b/dde-file-manager-lib/interfaces/dfmeventdispatcher.cpp
@@ -110,8 +110,8 @@ void DFMEventFuture::operator =(const DFMEventFuture &other)
 }
 
 namespace DFMEventDispatcherData {
-static QList<DFMAbstractEventHandler *> eventHandler;
-static QList<DFMAbstractEventHandler *> eventFilter;
+Q_GLOBAL_STATIC(QList<DFMAbstractEventHandler*>, eventHandler)
+Q_GLOBAL_STATIC(QList<DFMAbstractEventHandler*>, eventFilter)
 
 Q_GLOBAL_STATIC(QThreadPool, threadPool)
 }
@@ -138,7 +138,7 @@ QVariant DFMEventDispatcher::processEvent(const QSharedPointer<DFMEvent> &event,
 
     QVariant result;
 
-    for (DFMAbstractEventHandler *handler : DFMEventDispatcherData::eventFilter) {
+    for (DFMAbstractEventHandler *handler : *DFMEventDispatcherData::eventFilter) {
         if (handler->fmEventFilter(event, target, &result))
             return result;
     }
@@ -146,7 +146,7 @@ QVariant DFMEventDispatcher::processEvent(const QSharedPointer<DFMEvent> &event,
     if (target) {
         target->fmEvent(event, &result);
     } else {
-        for (DFMAbstractEventHandler *handler : DFMEventDispatcherData::eventHandler) {
+        for (DFMAbstractEventHandler *handler : *DFMEventDispatcherData::eventHandler) {
             if (handler->fmEvent(event, &result))
                 return result;
         }
@@ -179,14 +179,14 @@ QVariant DFMEventDispatcher::processEventWithEventLoop(const QSharedPointer<DFME
 
 void DFMEventDispatcher::installEventFilter(DFMAbstractEventHandler *handler)
 {
-    if (!DFMEventDispatcherData::eventFilter.contains(handler)) {
-        DFMEventDispatcherData::eventFilter.append(handler);
+    if (!DFMEventDispatcherData::eventFilter->contains(handler)) {
+        DFMEventDispatcherData::eventFilter->append(handler);
     }
 }
 
 void DFMEventDispatcher::removeEventFilter(DFMAbstractEventHandler *handler)
 {
-    DFMEventDispatcherData::eventFilter.removeOne(handler);
+    DFMEventDispatcherData::eventFilter->removeOne(handler);
 }
 
 DFMEventDispatcher::State DFMEventDispatcher::state() const
@@ -204,13 +204,13 @@ DFMEventDispatcher::DFMEventDispatcher()
 
 void DFMEventDispatcher::installEventHandler(DFMAbstractEventHandler *handler)
 {
-    if (!DFMEventDispatcherData::eventHandler.contains(handler))
-        DFMEventDispatcherData::eventHandler.append(handler);
+    if (!DFMEventDispatcherData::eventHandler->contains(handler))
+        DFMEventDispatcherData::eventHandler->append(handler);
 }
 
 void DFMEventDispatcher::removeEventHandler(DFMAbstractEventHandler *handler)
 {
-    DFMEventDispatcherData::eventHandler.removeOne(handler);
+    DFMEventDispatcherData::eventHandler->removeOne(handler);
 }
 
 DFM_END_NAMESPACE
-- 
2.26.2