[AT-SPI] Fixing reseting of delay for CoalescableMessages 34/276734/9
authorLukasz Oleksak <l.oleksak@samsung.com>
Thu, 23 Jun 2022 14:38:38 +0000 (16:38 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Thu, 7 Jul 2022 15:59:34 +0000 (17:59 +0200)
Change-Id: I672b26051c84b69d5a56bcb2e4a8dd5782213578

dali/internal/accessibility/bridge/bridge-base.cpp
dali/internal/accessibility/bridge/bridge-base.h

index d25a2f6..261d5f4 100644 (file)
@@ -46,15 +46,17 @@ void BridgeBase::AddCoalescableMessage(CoalescableMessages kind, Dali::Accessibi
   {
     delay = 0;
   }
+  auto countdownBase = static_cast<unsigned int>(delay * 10);
 
-  auto it = mCoalescableMessages.insert({{kind, obj}, {static_cast<unsigned int>(delay * 10), {}}});
+  auto it = mCoalescableMessages.insert({{kind, obj}, {countdownBase, countdownBase, {}}});
   if(it.second)
   {
     functor();
   }
   else
   {
-    it.first->second.second = std::move(functor);
+    std::get<1>(it.first->second) = countdownBase;
+    std::get<2>(it.first->second) = std::move(functor);
   }
 
   if(!tickTimer)
@@ -73,16 +75,20 @@ bool BridgeBase::TickCoalescableMessages()
 {
   for(auto it = mCoalescableMessages.begin(); it != mCoalescableMessages.end();)
   {
-    if(it->second.first)
+    auto& countdown     = std::get<0>(it->second);
+    auto  countdownBase = std::get<1>(it->second);
+    auto& functor       = std::get<2>(it->second);
+    if(countdown)
     {
-      --it->second.first;
+      --countdown;
     }
     else
     {
-      if(it->second.second)
+      if(functor)
       {
-        it->second.second();
-        it->second.second = {};
+        functor();
+        functor = {};
+        countdown = countdownBase;
       }
       else
       {
index a4f24e2..5ab2a03 100644 (file)
@@ -23,6 +23,7 @@
 #include <dali/public-api/dali-adaptor-version.h>
 #include <dali/public-api/signals/connection-tracker.h>
 #include <memory>
+#include <tuple>
 
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/proxy-accessible.h>
@@ -300,7 +301,7 @@ struct hash<std::pair<CoalescableMessages, Dali::Accessibility::Accessible*>>
  */
 class BridgeBase : public Dali::Accessibility::Bridge, public Dali::ConnectionTracker
 {
-  std::unordered_map<std::pair<CoalescableMessages, Dali::Accessibility::Accessible*>, std::pair<unsigned int, std::function<void()>>> mCoalescableMessages;
+  std::unordered_map<std::pair<CoalescableMessages, Dali::Accessibility::Accessible*>, std::tuple<unsigned int, unsigned int, std::function<void()>>> mCoalescableMessages;
 
   /**
    * @brief Removes all CoalescableMessages using Tick signal.