The getTizenWindowInfo function depends on Tizen platform.
It has been moved to TizenDeviceImpl.
This change helps in running and implementing UTC.
Change-Id: Icfe725a21e9178244ae7b9698c1be13fa60efb95
#define _MOCK_DEVICE_IMPL_H_
#include "config.h"
+#include "AccessibleNode.h"
#include "IDevice.h"
#include <set>
*/
const Size2D<int> getScreenSize() override;
+ /**
+ * @copydoc IDevice::getWindowRoot()
+ */
+ std::vector<std::shared_ptr<AccessibleNode>> getWindowRoot() const override;
+
protected:
/**
* @brief TBD
#include "config.h"
#include "IDevice.h"
+#include "TizenWindow.h"
#include <set>
#include <efl_util.h>
*/
const Size2D<int> getScreenSize() override;
+ /**
+ * @copydoc IDevice::getWindowRoot()
+ */
+ std::vector<std::shared_ptr<AccessibleNode>> getWindowRoot() const override;
+
protected:
/**
* @brief Press and release given key during duration time.
*/
int stopTimer(void);
+ /**
+ * @brief Gets currently window information from window system.
+ *
+ * @return TizenWindow ptr vector
+ *
+ * @since_tizen 7.0
+ */
+ std::vector<std::shared_ptr<TizenWindow>> getTizenWindowInfo() const;
+
private:
efl_util_inputgen_h mFakeTouchHandle;
efl_util_inputgen_h mFakeKeyboardHandle;
*/
Size2D<int> mScreenSize;
static std::mutex CaptureMutex;
+ static std::vector<std::shared_ptr<TizenWindow>> mTizenWindows;
};
}
--- /dev/null
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _TIZEN_WINDOW_H_
+#define _TIZEN_WINDOW_H_
+
+#include <gio/gio.h>
+
+namespace Aurum {
+
+class TizenWindow : public std::enable_shared_from_this<TizenWindow> {
+public:
+ TizenWindow(int pid, Rect<int> geometry, bool transformed, bool alpha, int opaque, int visibility, bool focused, bool mapped, int layer, std::string name);
+ ~TizenWindow();
+
+ int getPid();
+ Rect<int> getWindowGeometry();
+ bool isTransformed();
+ bool isAlpha();
+ int getOpaque();
+ int getVisibility();
+ bool isFocused();
+ bool isMapped();
+ std::string getName();
+private:
+ int mPid; // window's PID
+ Rect<int> mWindowGeometry; // window's geometry
+ bool mIsTransformed; // true : transformed window
+ bool mIsAlpha; // true : alpha
+ int mOpaque; // true : opaque state set window
+ int mVisibility; // 0 : visible
+ // 1 : partial visible
+ // 2 : hidden
+ // -1 : unknown
+ bool mIsFocused; // true : has focus
+ bool mIsMapped; // true : mapped
+ int mLayer; // 200 : normal layer
+ // 250 : above layer
+ // 650 ~ 800 : notification layer
+ std::string mName; // window name
+};
+
+}
+
+#endif
#include "config.h"
#include "Size2D.h"
+#include "AccessibleNode.h"
#include <string>
+
namespace Aurum {
/**
* @since_tizen 6.5
*/
virtual const Size2D<int> getScreenSize() = 0;
+
+ /**
+ * @brief Gets currently enabled applications root window.
+ *
+ * @return AccessibleNode ptr vector
+ *
+ * @since_tizen 7.5
+ */
+ virtual std::vector<std::shared_ptr<AccessibleNode>> getWindowRoot() const = 0;
};
}
+++ /dev/null
-/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#ifndef _TIZEN_WINDOW_H_
-#define _TIZEN_WINDOW_H_
-
-#include <gio/gio.h>
-
-namespace Aurum {
-
-class TizenWindow : public std::enable_shared_from_this<TizenWindow> {
-public:
- TizenWindow(int pid, Rect<int> geometry, bool transformed, bool alpha, int opaque, int visibility, bool focused, bool mapped, int layer, std::string name);
- ~TizenWindow();
-
- int getPid();
- Rect<int> getWindowGeometry();
- bool isTransformed();
- bool isAlpha();
- int getOpaque();
- int getVisibility();
- bool isFocused();
- bool isMapped();
- std::string getName();
-private:
- int mPid; // window's PID
- Rect<int> mWindowGeometry; // window's geometry
- bool mIsTransformed; // true : transformed window
- bool mIsAlpha; // true : alpha
- int mOpaque; // true : opaque state set window
- int mVisibility; // 0 : visible
- // 1 : partial visible
- // 2 : hidden
- // -1 : unknown
- bool mIsFocused; // true : has focus
- bool mIsMapped; // true : mapped
- int mLayer; // 200 : normal layer
- // 250 : above layer
- // 650 ~ 800 : notification layer
- std::string mName; // window name
-};
-
-}
-
-#endif
#include "UiObject.h"
#include "UiSelector.h"
-#include "TizenWindow.h"
#include "IDevice.h"
#include "ISearchable.h"
*
* @since_tizen 6.5
*/
- std::vector<std::shared_ptr<AccessibleNode>> getWindowRoot() const;
-
- /**
- * @brief Gets currently window information from window system.
- *
- * @return TizenWindow ptr vector
- *
- * @since_tizen 7.0
- */
- std::vector<std::shared_ptr<TizenWindow>> getTizenWindowInfo() const;
+ std::vector<std::shared_ptr<AccessibleNode>> getWindowRoot() const override;
#ifdef MQTT_ENABLED
/**
private:
IDevice *mDeviceImpl;
const Waiter *mWaiter;
- static std::vector<std::shared_ptr<TizenWindow>> mTizenWindows;
bool mIsWithSA;
#ifdef MQTT_ENABLED
static std::shared_ptr<ScreenAnalyzerWatcher> mSAWatcher;
'./inc/UiDevice.h',
'./inc/UiObject.h',
'./inc/UiSelector.h',
- './inc/TizenWindow.h',
'./inc/Sel.h',
'./inc/Until.h',
'./inc/Waiter.h',
*/
#include "Aurum.h"
-
+#include "AccessibleWatcher.h"
#include "MockDeviceImpl.h"
#include <functional>
long long rtn = (t.tv_sec + t.tv_nsec/NANO_SEC) * MICRO_SEC;
return rtn;
}
+
+std::vector<std::shared_ptr<AccessibleNode>> MockDeviceImpl::getWindowRoot() const
+{
+ std::vector<std::shared_ptr<AccessibleNode>> ret{};
+
+ auto apps = AccessibleWatcher::getInstance()->getApplications();
+
+ for (auto app : apps)
+ {
+ auto wins = app->getWindows();
+ std::transform(wins.begin(), wins.end(), std::back_inserter(ret),
+ [&](std::shared_ptr<AccessibleWindow> window) {
+ return window->getAccessibleNode();
+ }
+ );
+ }
+
+ return ret;
+}
+
#include <tdm_helper.h>
#include <tbm_surface.h>
#include <system_info.h>
+#include <gio/gio.h>
using namespace Aurum;
using namespace AurumInternal;
#define NANO_SEC 1000000000.0
#define MICRO_SEC 1000000
+#define WM_BUS_NAME "org.enlightenment.wm"
+#define WM_OBJECT_PATH "/org/enlightenment/wm"
+#define WM_INTERFACE_NAME "org.enlightenment.wm.proc"
+#define WM_METHOD_NAME_INFO "GetVisibleWinInfo_v2"
std::mutex TizenDeviceImpl::CaptureMutex = std::mutex{};
+std::vector<std::shared_ptr<TizenWindow>> TizenDeviceImpl::mTizenWindows;
+static GDBusConnection *system_conn;
TizenDeviceImpl::TizenDeviceImpl()
: mFakeTouchHandle{0}, mFakeKeyboardHandle{0}, mFakeWheelHandle{0}, tStart{}, isTimerStarted{false}, mTouchSeq{}
}
return false;
}
+
+std::vector<std::shared_ptr<AccessibleNode>> TizenDeviceImpl::getWindowRoot() const
+{
+ LOGI("Request window info");
+ getTizenWindowInfo();
+
+ std::vector<std::shared_ptr<AccessibleNode>> ret{};
+ std::unordered_map<int, std::shared_ptr<AccessibleApplication>> pidToAppNode{};
+
+ auto apps = AccessibleWatcher::getInstance()->getApplications();
+ for (auto app : apps)
+ {
+ app->getAccessibleNode()->updateName();
+ app->getAccessibleNode()->updatePid();
+ LOGI("App(%s) Pid(%d)", app->getPackageName().c_str(), app->getAccessibleNode()->getPid());
+ pidToAppNode[app->getAccessibleNode()->getPid()] = app;
+ }
+
+ for (auto tWin : mTizenWindows)
+ {
+ LOGI("Visible win (%d) (%d %d %d %d) (%s)", tWin->getPid(), tWin->getWindowGeometry().mTopLeft.x, tWin->getWindowGeometry().mTopLeft.y, tWin->getWindowGeometry().width(),
+ tWin->getWindowGeometry().height(), tWin->getName().c_str());
+
+ if (pidToAppNode.count(tWin->getPid()) == 0) continue;
+
+ LOGI("Active App : (%s) (%d)", tWin->getName().c_str(), tWin->getPid());
+ auto wins = pidToAppNode[tWin->getPid()]->getWindows();
+ std::transform(wins.begin(), wins.end(), std::back_inserter(ret),
+ [&](std::shared_ptr<AccessibleWindow> window) {
+ window->getAccessibleNode()->updateApplication();
+ LOGI("Target window add pkg: (%s), name (%s)", window->getAccessibleNode()->getPkg().c_str(), window->getTitle().c_str());
+ return window->getAccessibleNode();
+ }
+ );
+
+ pidToAppNode.erase(tWin->getPid());
+ }
+
+ return ret;
+}
+
+std::vector<std::shared_ptr<TizenWindow>> TizenDeviceImpl::getTizenWindowInfo() const
+{
+ GError *err = NULL;
+ GDBusMessage *msg;
+ GDBusMessage *reply;
+ GDBusConnection *conn;
+ GVariant *body;
+ GVariantIter *iter = NULL;
+ int idx = 0;
+ int pid;
+ int x;
+ int y;
+ int w;
+ int h;
+ gboolean transformed;
+ gboolean alpha;
+ int opaque;
+ int visibility;
+ gboolean focused;
+ gboolean mapped;
+ int layer;
+ char *name;
+
+ mTizenWindows.clear();
+
+ if (system_conn == NULL) {
+ conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+ if (conn == NULL) {
+ LOGE("g_bus_get_sync() is failed. %s", err->message);
+ g_error_free(err);
+ return mTizenWindows;
+ }
+ system_conn = conn;
+ }
+
+ msg = g_dbus_message_new_method_call(WM_BUS_NAME,
+ WM_OBJECT_PATH,
+ WM_INTERFACE_NAME,
+ WM_METHOD_NAME_INFO);
+ if (msg == NULL) {
+ LOGE("g_dbus_message_new_method_call() is failed.");
+ return mTizenWindows;
+ }
+
+ reply = g_dbus_connection_send_message_with_reply_sync(system_conn, msg,
+ G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, NULL, NULL, &err);
+
+ if (!reply) {
+ if (err != NULL) {
+ LOGE("Failed to get info [%s]", err->message);
+ g_error_free(err);
+ }
+ goto out;
+ }
+
+ body = g_dbus_message_get_body(reply);
+ if (!body) {
+ LOGE("Failed to get body");
+ goto out;
+ }
+
+ g_variant_get(body, "(a(iiiiibbiibbis))", &iter);
+ if (!iter) {
+ LOGE("Failed to get iter");
+ goto out;
+ }
+
+ LOGI("%-3s | %-6s | %-4s | %-4s | %-4s | %-4s | %-5s | %-5s | %-6s | %-3s | %-7s | %-6s | %-5s | %-20s", "No" ,"PID", "X", "Y", "W", "H", "Trans", "Alpha", "Opaque", "Vis", "Focused", "Mapped", "Layer", "Name");
+ while (g_variant_iter_loop(iter, "(iiiiibbiibbis)",
+ &pid,
+ &x,
+ &y,
+ &w,
+ &h,
+ &transformed,
+ &alpha,
+ &opaque,
+ &visibility,
+ &focused,
+ &mapped,
+ &layer,
+ &name)) {
+ LOGI("%-3d | %-6d | %-4d | %-4d | %-4d | %-4d | %-5d | %-5d | %-6d | %-3d | %-7d | %-6d | %-5d | %-20s", idx++, pid, x,y,w,h, transformed, alpha, opaque, visibility, focused, mapped, layer, name);
+ if (visibility == 0 && pid > 0)
+ {
+ Rect<int> geometry = {x, y, w, h};
+ std::string winName(name);
+ mTizenWindows.push_back(std::make_shared<Aurum::TizenWindow>(pid, geometry, transformed, alpha, opaque, visibility, focused, mapped, layer, winName));
+ }
+ }
+
+out:
+ if (iter)
+ g_variant_iter_free(iter);
+ if (msg)
+ g_object_unref(msg);
+ if (reply)
+ g_object_unref(reply);
+
+ return mTizenWindows;
+}
--- /dev/null
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "Aurum.h"
+#include "TizenWindow.h"
+
+using namespace Aurum;
+
+TizenWindow::TizenWindow(int pid, Rect<int> geometry, bool transformed, bool alpha, int opaque, int visibility, bool focused, bool mapped, int layer, std::string name)
+ : mPid(pid), mWindowGeometry(geometry), mIsTransformed(transformed), mIsAlpha(alpha), mOpaque(opaque), mVisibility(visibility), mIsFocused(focused), mIsMapped(mapped), mLayer(layer), mName(name)
+{
+
+}
+
+TizenWindow::~TizenWindow()
+{
+
+}
+
+int TizenWindow::getPid()
+{
+ return mPid;
+}
+
+Rect<int> TizenWindow::getWindowGeometry()
+{
+ return mWindowGeometry;
+}
+
+bool TizenWindow::isTransformed()
+{
+ return mIsTransformed;
+}
+
+bool TizenWindow::isAlpha()
+{
+ return mIsAlpha;
+}
+
+int TizenWindow::getOpaque()
+{
+ return mOpaque;
+}
+
+int TizenWindow::getVisibility()
+{
+ return mVisibility;
+}
+
+bool TizenWindow::isFocused()
+{
+ return mIsFocused;
+}
+
+bool TizenWindow::isMapped()
+{
+ return mIsMapped;
+}
+
+std::string TizenWindow::getName()
+{
+ return mName;
+}
\ No newline at end of file
if get_option('tizen') == true
libaurum_src += [
files('TizenDeviceImpl.cc'),
+ files('TizenWindow.cc'),
]
endif
+++ /dev/null
-/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include "Aurum.h"
-#include "TizenWindow.h"
-
-using namespace Aurum;
-
-TizenWindow::TizenWindow(int pid, Rect<int> geometry, bool transformed, bool alpha, int opaque, int visibility, bool focused, bool mapped, int layer, std::string name)
- : mPid(pid), mWindowGeometry(geometry), mIsTransformed(transformed), mIsAlpha(alpha), mOpaque(opaque), mVisibility(visibility), mIsFocused(focused), mIsMapped(mapped), mLayer(layer), mName(name)
-{
-
-}
-
-TizenWindow::~TizenWindow()
-{
-
-}
-
-int TizenWindow::getPid()
-{
- return mPid;
-}
-
-Rect<int> TizenWindow::getWindowGeometry()
-{
- return mWindowGeometry;
-}
-
-bool TizenWindow::isTransformed()
-{
- return mIsTransformed;
-}
-
-bool TizenWindow::isAlpha()
-{
- return mIsAlpha;
-}
-
-int TizenWindow::getOpaque()
-{
- return mOpaque;
-}
-
-int TizenWindow::getVisibility()
-{
- return mVisibility;
-}
-
-bool TizenWindow::isFocused()
-{
- return mIsFocused;
-}
-
-bool TizenWindow::isMapped()
-{
- return mIsMapped;
-}
-
-std::string TizenWindow::getName()
-{
- return mName;
-}
\ No newline at end of file
#include <thread>
#include <algorithm>
#include <iostream>
-#include <gio/gio.h>
#include <unordered_set>
#include <unordered_map>
using namespace Aurum;
using namespace AurumInternal;
-#define WM_BUS_NAME "org.enlightenment.wm"
-#define WM_OBJECT_PATH "/org/enlightenment/wm"
-#define WM_INTERFACE_NAME "org.enlightenment.wm.proc"
-#define WM_METHOD_NAME_INFO "GetVisibleWinInfo_v2"
-
-std::vector<std::shared_ptr<TizenWindow>> UiDevice::mTizenWindows;
std::once_flag UiDevice::mOnceFlag;
-static GDBusConnection *system_conn;
#ifdef MQTT_ENABLED
std::shared_ptr<ScreenAnalyzerWatcher> UiDevice::mSAWatcher;
return device;
}
-std::vector<std::shared_ptr<TizenWindow>> UiDevice::getTizenWindowInfo() const
-{
- GError *err = NULL;
- GDBusMessage *msg;
- GDBusMessage *reply;
- GDBusConnection *conn;
- GVariant *body;
- GVariantIter *iter = NULL;
- int idx = 0;
- int pid;
- int x;
- int y;
- int w;
- int h;
- gboolean transformed;
- gboolean alpha;
- int opaque;
- int visibility;
- gboolean focused;
- gboolean mapped;
- int layer;
- char *name;
-
- mTizenWindows.clear();
-
- if (system_conn == NULL) {
- conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
- if (conn == NULL) {
- LOGE("g_bus_get_sync() is failed. %s", err->message);
- g_error_free(err);
- return mTizenWindows;
- }
- system_conn = conn;
- }
-
- msg = g_dbus_message_new_method_call(WM_BUS_NAME,
- WM_OBJECT_PATH,
- WM_INTERFACE_NAME,
- WM_METHOD_NAME_INFO);
- if (msg == NULL) {
- LOGE("g_dbus_message_new_method_call() is failed.");
- return mTizenWindows;
- }
-
- reply = g_dbus_connection_send_message_with_reply_sync(system_conn, msg,
- G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, NULL, NULL, &err);
-
- if (!reply) {
- if (err != NULL) {
- LOGE("Failed to get info [%s]", err->message);
- g_error_free(err);
- }
- goto out;
- }
-
- body = g_dbus_message_get_body(reply);
- if (!body) {
- LOGE("Failed to get body");
- goto out;
- }
-
- g_variant_get(body, "(a(iiiiibbiibbis))", &iter);
- if (!iter) {
- LOGE("Failed to get iter");
- goto out;
- }
-
- LOGI("%-3s | %-6s | %-4s | %-4s | %-4s | %-4s | %-5s | %-5s | %-6s | %-3s | %-7s | %-6s | %-5s | %-20s", "No" ,"PID", "X", "Y", "W", "H", "Trans", "Alpha", "Opaque", "Vis", "Focused", "Mapped", "Layer", "Name");
- while (g_variant_iter_loop(iter, "(iiiiibbiibbis)",
- &pid,
- &x,
- &y,
- &w,
- &h,
- &transformed,
- &alpha,
- &opaque,
- &visibility,
- &focused,
- &mapped,
- &layer,
- &name)) {
- LOGI("%-3d | %-6d | %-4d | %-4d | %-4d | %-4d | %-5d | %-5d | %-6d | %-3d | %-7d | %-6d | %-5d | %-20s", idx++, pid, x,y,w,h, transformed, alpha, opaque, visibility, focused, mapped, layer, name);
- if (visibility == 0 && pid > 0)
- {
- Rect<int> geometry = {x, y, w, h};
- std::string winName(name);
- mTizenWindows.push_back(std::make_shared<Aurum::TizenWindow>(pid, geometry, transformed, alpha, opaque, visibility, focused, mapped, layer, winName));
- }
- }
-
-out:
- if (iter)
- g_variant_iter_free(iter);
- if (msg)
- g_object_unref(msg);
- if (reply)
- g_object_unref(reply);
-
- return mTizenWindows;
-}
-
std::vector<std::shared_ptr<AccessibleNode>> UiDevice::getWindowRoot() const
{
- LOGI("Request window info");
- getTizenWindowInfo();
-
- std::vector<std::shared_ptr<AccessibleNode>> ret{};
- std::unordered_map<int, std::shared_ptr<AccessibleApplication>> pidToAppNode{};
-
- auto apps = AccessibleWatcher::getInstance()->getApplications();
- for (auto app : apps)
- {
- app->getAccessibleNode()->updateName();
- app->getAccessibleNode()->updatePid();
- LOGI("App(%s) Pid(%d)", app->getPackageName().c_str(), app->getAccessibleNode()->getPid());
- pidToAppNode[app->getAccessibleNode()->getPid()] = app;
- }
-
- for (auto tWin : mTizenWindows)
- {
- LOGI("Visible win (%d) (%d %d %d %d) (%s)", tWin->getPid(), tWin->getWindowGeometry().mTopLeft.x, tWin->getWindowGeometry().mTopLeft.y, tWin->getWindowGeometry().width(),
- tWin->getWindowGeometry().height(), tWin->getName().c_str());
-
- if (pidToAppNode.count(tWin->getPid()) == 0) continue;
-
- LOGI("Active App : (%s) (%d)", tWin->getName().c_str(), tWin->getPid());
- auto wins = pidToAppNode[tWin->getPid()]->getWindows();
- std::transform(wins.begin(), wins.end(), std::back_inserter(ret),
- [&](std::shared_ptr<AccessibleWindow> window) {
- window->getAccessibleNode()->updateApplication();
- LOGI("Target window add pkg: (%s), name (%s)", window->getAccessibleNode()->getPkg().c_str(), window->getTitle().c_str());
- return window->getAccessibleNode();
- }
- );
-
- pidToAppNode.erase(tWin->getPid());
- }
-
- return ret;
+ return mDeviceImpl->getWindowRoot();
}
bool UiDevice::hasObject(const std::shared_ptr<UiSelector> selector) const
files('A11yEvent.cc'),
files('A11yEventHandler.cc'),
files('AurumXML.cc'),
- files('TizenWindow.cc'),
]
if get_option('mqtt_enabled') == true