[AT-SPI] Add API for blocking automatic Bridge initialization
[platform/core/uifw/dali-adaptor.git] / dali / internal / system / windows / callback-manager-win.cpp
1 /*\r
2  * Copyright (c) 2021 Samsung Electronics Co., Ltd.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  *\r
16  */\r
17 \r
18 // CLASS HEADER\r
19 #include <dali/internal/system/windows/callback-manager-win.h>\r
20 \r
21 // EXTERNAL INCLUDES\r
22 #include <Windows.h>\r
23 #include <dali/integration-api/debug.h>\r
24 \r
25 // INTERNAL INCLUDES\r
26 #include <dali/internal/window-system/windows/platform-implement-win.h>\r
27 \r
28 namespace Dali\r
29 {\r
30 namespace Internal\r
31 {\r
32 namespace Adaptor\r
33 {\r
34 WinCallbackManager::WinCallbackManager()\r
35 : mRunning(false)\r
36 {\r
37 }\r
38 \r
39 void WinCallbackManager::Start()\r
40 {\r
41   DALI_ASSERT_DEBUG(mRunning == false);\r
42   mRunning = true;\r
43 }\r
44 \r
45 void WinCallbackManager::Stop()\r
46 {\r
47   // make sure we're not called twice\r
48   DALI_ASSERT_DEBUG(mRunning == true);\r
49 \r
50   mRunning = false;\r
51 }\r
52 \r
53 bool WinCallbackManager::AddIdleCallback(CallbackBase* callback, bool hasReturnValue)\r
54 {\r
55   if(!mRunning)\r
56   {\r
57     return false;\r
58   }\r
59 \r
60   mCallbacks.insert(callback);\r
61 \r
62   WindowsPlatform::PostWinThreadMessage(WIN_CALLBACK_EVENT, reinterpret_cast<uint64_t>(callback), 0);\r
63 \r
64   return true;\r
65 }\r
66 \r
67 void WinCallbackManager::RemoveIdleCallback(CallbackBase* callback)\r
68 {\r
69   //Wait for deal\r
70 }\r
71 \r
72 bool WinCallbackManager::ProcessIdle()\r
73 {\r
74   const bool idleProcessed = !mCallbacks.empty();\r
75 \r
76   for(CallbackBase* cb : mCallbacks)\r
77   {\r
78     Dali::CallbackBase::Execute(*cb);\r
79   }\r
80   mCallbacks.clear();\r
81 \r
82   return idleProcessed;\r
83 }\r
84 \r
85 void WinCallbackManager::ClearIdleCallbacks()\r
86 {\r
87   mCallbacks.clear();\r
88 }\r
89 \r
90 bool WinCallbackManager::AddIdleEntererCallback(CallbackBase* callback)\r
91 {\r
92   return AddIdleCallback(callback, true);\r
93 }\r
94 \r
95 void WinCallbackManager::RemoveIdleEntererCallback(CallbackBase* callback)\r
96 {\r
97 }\r
98 \r
99 // Creates a concrete interface for CallbackManager\r
100 CallbackManager* CallbackManager::New()\r
101 {\r
102   return new WinCallbackManager;\r
103 }\r
104 \r
105 } // namespace Adaptor\r
106 \r
107 } // namespace Internal\r
108 \r
109 } // namespace Dali\r