summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunho Kang <hhstark.kang@samsung.com>2016-11-28 21:56:24 +0900
committerHyunho Kang <hhstark.kang@samsung.com>2016-12-12 11:13:42 +0900
commitf26a9b64624c91e7632a7683338932952483e924 (patch)
tree8ecad6760782c1175282596c10d2d8236a26bfe0
parent93173ef30ba4c0a6366db304a10d76e517074429 (diff)
downloadscreen-connector-f26a9b64624c91e7632a7683338932952483e924.tar.gz
screen-connector-f26a9b64624c91e7632a7683338932952483e924.tar.bz2
screen-connector-f26a9b64624c91e7632a7683338932952483e924.zip
- screen_connector_watcher - screen_connector_watcher_evas Change-Id: I884dcd1139825dc67a5b3a18e7cbe18d92cc150d Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
-rw-r--r--CMakeLists.txt7
-rw-r--r--LICENSE204
-rw-r--r--packaging/libscreen_connector.spec143
-rw-r--r--packaging/libscreen_connector_provider.manifest5
-rw-r--r--packaging/libscreen_connector_watcher.manifest5
-rw-r--r--packaging/libscreen_connector_watcher_evas.manifest5
-rw-r--r--screen_connector_provider/CMakeLists.txt47
-rw-r--r--screen_connector_provider/LICENSE204
-rw-r--r--screen_connector_provider/include/screen_connector_provider.h33
-rw-r--r--screen_connector_provider/screen_connector_provider.pc.in11
-rw-r--r--screen_connector_provider/src/screen_connector_provider.c191
-rw-r--r--screen_connector_watcher/CMakeLists.txt47
-rw-r--r--screen_connector_watcher/LICENSE204
-rw-r--r--screen_connector_watcher/include/screen_connector_watcher.h61
-rw-r--r--screen_connector_watcher/screen_connector_watcher.pc.in11
-rw-r--r--screen_connector_watcher/src/screen_connector_watcher.c790
-rw-r--r--screen_connector_watcher_evas/CMakeLists.txt44
-rw-r--r--screen_connector_watcher_evas/LICENSE204
-rw-r--r--screen_connector_watcher_evas/include/screen_connector_watcher_evas.h69
-rw-r--r--screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in12
-rw-r--r--screen_connector_watcher_evas/src/screen_connector_watcher_evas.c129
21 files changed, 2426 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..8d5a8a9
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,7 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+ADD_SUBDIRECTORY(screen_connector_provider)
+ADD_SUBDIRECTORY(screen_connector_watcher)
+ADD_SUBDIRECTORY(screen_connector_watcher_evas)
+
+ADD_DEPENDENCIES(screen_connector_watcher_evas screen_connector_watcher) \ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..9c13a9b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/packaging/libscreen_connector.spec b/packaging/libscreen_connector.spec
new file mode 100644
index 0000000..c419aa0
--- /dev/null
+++ b/packaging/libscreen_connector.spec
@@ -0,0 +1,143 @@
+Name: libscreen_connector
+Summary: Library for developing the application
+Version: 1.0
+Release: 1
+Group: Applications/Core Applications
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+Source1001: %{name}_watcher.manifest
+Source1002: %{name}_watcher_evas.manifest
+Source1003: %{name}_provider.manifest
+BuildRequires: cmake
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(aul)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(gio-2.0)
+BuildRequires: pkgconfig(wayland-tbm-client)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(wayland-client)
+BuildRequires: pkgconfig(ecore-wayland)
+
+%description
+API for creating a new instance of the widget and managing its life-cycle.
+
+%package devel
+Summary: Development Library for widget Viewer Application (dev)
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description devel
+Header and package configuration files for the widget viewer development
+
+%prep
+%setup -q
+cp %{SOURCE1001} .
+cp %{SOURCE1002} .
+cp %{SOURCE1003} .
+
+%build
+%cmake . -DTZ_SYS_SHARE=/usr/share
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+
+#################################################
+# libscreen_connector_watcher
+#################################################
+%package -n %{name}_watcher
+Summary: Library for developing the screen connector watcher
+Group: Applications/Core Applications
+License: Apache-2.0
+
+%description -n %{name}_watcher
+Provider APIs to develop the screen connector watcher application.
+
+%package -n %{name}_watcher-devel
+Summary: Screen connector watcher application development library (dev)
+Group: Development/Libraries
+Requires: %{name}_watcher
+
+%description -n %{name}_watcher-devel
+Header & package configuration files to support development of the widget viewer applications.
+
+%post -n %{name}_watcher -p /sbin/ldconfig
+%postun -n %{name}_watcher -p /sbin/ldconfig
+
+%files -n %{name}_watcher
+%manifest %{name}_watcher.manifest
+%attr(0644,root,root) %{_libdir}/%{name}_watcher.so*
+%{_datarootdir}/license/%{name}_watcher
+
+%files -n %{name}_watcher-devel
+%{_includedir}/screen_connector_watcher/*.h
+%{_libdir}/pkgconfig/screen_connector_watcher.pc
+
+
+#################################################
+# libscreen_connector_provider
+#################################################
+%package -n %{name}_provider
+Summary: Library for developing the screen connector provider
+Group: Applications/Core Applications
+License: Apache-2.0
+
+%description -n %{name}_provider
+Provider APIs to develop the screen connector provider application.
+
+%package -n %{name}_provider-devel
+Summary: Screen connector provider application development library (dev)
+Group: Development/Libraries
+Requires: %{name}_provider
+
+%description -n %{name}_provider-devel
+Header & package configuration files to support development of the widget viewer applications.
+
+%post -n %{name}_provider -p /sbin/ldconfig
+%postun -n %{name}_provider -p /sbin/ldconfig
+
+%files -n %{name}_provider
+%manifest %{name}_provider.manifest
+%attr(0644,root,root) %{_libdir}/%{name}_provider.so*
+%{_datarootdir}/license/%{name}_provider
+
+%files -n %{name}_provider-devel
+%{_includedir}/screen_connector_provider/*.h
+%{_libdir}/pkgconfig/screen_connector_provider.pc
+
+
+#################################################
+# libscreen_connector_watcher_evas
+#################################################
+%package -n %{name}_watcher_evas
+Summary: Library for developing the screen connector watcher evas
+Group: Applications/Core Applications
+License: Apache-2.0
+
+%description -n %{name}_watcher_evas
+Provider APIs to develop the widget viewer EFL application.
+
+%package -n %{name}_watcher_evas-devel
+Summary: Screen connector watcher evas application development library (dev)
+Group: Development/Libraries
+Requires: %{name}_watcher_evas
+
+%description -n %{name}_watcher_evas-devel
+Header & package configuration files to support development of the widget viewer applications.
+
+%post -n %{name}_watcher_evas -p /sbin/ldconfig
+%postun -n %{name}_watcher_evas -p /sbin/ldconfig
+
+%files -n %{name}_watcher_evas
+%manifest %{name}_watcher_evas.manifest
+%attr(0644,root,root) %{_libdir}/%{name}_watcher_evas.so*
+%{_datarootdir}/license/%{name}_watcher_evas
+
+%files -n %{name}_watcher_evas-devel
+%{_includedir}/screen_connector_watcher_evas/*.h
+%{_libdir}/pkgconfig/screen_connector_watcher_evas.pc
+
+
+# End of a file \ No newline at end of file
diff --git a/packaging/libscreen_connector_provider.manifest b/packaging/libscreen_connector_provider.manifest
new file mode 100644
index 0000000..a76fdba
--- /dev/null
+++ b/packaging/libscreen_connector_provider.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
diff --git a/packaging/libscreen_connector_watcher.manifest b/packaging/libscreen_connector_watcher.manifest
new file mode 100644
index 0000000..a76fdba
--- /dev/null
+++ b/packaging/libscreen_connector_watcher.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
diff --git a/packaging/libscreen_connector_watcher_evas.manifest b/packaging/libscreen_connector_watcher_evas.manifest
new file mode 100644
index 0000000..a76fdba
--- /dev/null
+++ b/packaging/libscreen_connector_watcher_evas.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
diff --git a/screen_connector_provider/CMakeLists.txt b/screen_connector_provider/CMakeLists.txt
new file mode 100644
index 0000000..d509838
--- /dev/null
+++ b/screen_connector_provider/CMakeLists.txt
@@ -0,0 +1,47 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(screen_connector_provider C)
+
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
+SET(PROJECT_NAME "${PROJECT_NAME}")
+SET(LIBDIR ${LIB_INSTALL_DIR})
+SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
+SET(VERSION_MAJOR 1)
+SET(VERSION "${VERSION_MAJOR}.0.0")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(screen_connector_provider REQUIRED
+ dlog
+ aul
+ wayland-tbm-client
+ elementary
+ wayland-client
+ ecore-wayland
+ tizen-remote-surface-client
+)
+
+FOREACH(flag ${screen_connector_provider_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+AUX_SOURCE_DIRECTORY(src SOURCES)
+ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES})
+
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_provider_LDFLAGS} "-lpthread")
+
+CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h")
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}")
diff --git a/screen_connector_provider/LICENSE b/screen_connector_provider/LICENSE
new file mode 100644
index 0000000..9c13a9b
--- /dev/null
+++ b/screen_connector_provider/LICENSE
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/screen_connector_provider/include/screen_connector_provider.h b/screen_connector_provider/include/screen_connector_provider.h
new file mode 100644
index 0000000..4f3dab6
--- /dev/null
+++ b/screen_connector_provider/include/screen_connector_provider.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 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 __SCREEN_CONNECTOR_PROVIDER_H__
+#define __SCREEN_CONNECTOR_PROVIDER_H__
+#include <Evas.h>
+#include <wayland-tbm-client.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+int screen_connector_provider_remote_enable(const char *id, struct wl_surface *surface);
+int screen_connector_provider_init();
+int screen_connector_provider_fini();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/screen_connector_provider/screen_connector_provider.pc.in b/screen_connector_provider/screen_connector_provider.pc.in
new file mode 100644
index 0000000..31589fe
--- /dev/null
+++ b/screen_connector_provider/screen_connector_provider.pc.in
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: screen_connector_provider
+Description: Support development of the Screen Connector Provider library
+Version: @VERSION@
+Libs: -L${libdir} -lscreen_connector_provider
+Cflags: -I${includedir}
+cppflags: -I${includedir}
diff --git a/screen_connector_provider/src/screen_connector_provider.c b/screen_connector_provider/src/screen_connector_provider.c
new file mode 100644
index 0000000..26575fe
--- /dev/null
+++ b/screen_connector_provider/src/screen_connector_provider.c
@@ -0,0 +1,191 @@
+/*
+ * Screen Connector Watcher
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <errno.h>
+#include <glib.h>
+#include <sys/mman.h>
+
+#include <dlog.h>
+#include <wayland-client.h>
+#include <Ecore_Wayland.h>
+#include <Elementary.h>
+#include <wayland-extension/tizen-extension-client-protocol.h>
+#include <tizen-remote-surface-client-protocol.h>
+#include <aul_screen_connector.h>
+
+#include "screen_connector_provider.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "SC_PROVIDER"
+
+static int __init_count;
+static struct tizen_remote_surface_manager *__rsm;
+
+struct __remote_surface_s {
+ struct wl_surface *surface;
+ struct tizen_remote_surface_provider *rsp;
+ char *id;
+ Ecore_Wl_Window *win;
+};
+
+static void __rsp_resource_id_cb(void *data, struct tizen_remote_surface_provider *provider, uint32_t res_id)
+{
+
+ LOGE("add app screen : %d", res_id);
+ aul_screen_connector_add_app_screen(res_id);
+}
+
+static void __rsp_visibility_cb(void *data, struct tizen_remote_surface_provider *provider, uint32_t visibility)
+{
+ struct __remote_surface_s *remote = (struct __remote_surface_s *)data;
+ Ecore_Wl_Event_Window_Visibility_Change *ev;
+
+ ev = calloc(1, sizeof(Ecore_Wl_Event_Window_Visibility_Change));
+ if (!ev) {
+ LOGE("out of memory");
+ return;
+ }
+
+ ev->win = ecore_wl_window_id_get(remote->win);
+
+ if (visibility == TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE)
+ ev->fully_obscured = 0;
+ else
+ ev->fully_obscured = 1;
+
+ LOGD("visibility changed:%d", visibility);
+
+ ecore_event_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, ev, NULL, NULL);
+}
+
+static const struct tizen_remote_surface_provider_listener __rsp_listener = {
+ __rsp_resource_id_cb,
+ __rsp_visibility_cb,
+};
+
+EXPORT_API int screen_connector_provider_remote_enable(const char *id, struct wl_surface *surface)
+{
+ struct __remote_surface_s *remote;
+ struct wl_display *display;
+
+ if (!__rsm) {
+ LOGE("__rsm is not ready");
+ return -1;
+ }
+
+ if (!surface || !id) {
+ LOGE("invalid parameter");
+ return -1;
+ }
+
+ display = ecore_wl_display_get();
+ if (!display) {
+ LOGE("Fail to get");
+ return -1;
+ }
+
+ remote = (struct __remote_surface_s *)malloc(sizeof(struct __remote_surface_s));
+ if (!remote) {
+ LOGE("out of memory");
+ return -1;
+ }
+
+ remote->surface = surface;
+ remote->win = ecore_wl_window_surface_find(surface);
+ if (!remote->win) {
+ LOGE("failed to find win");
+ free(remote);
+ return -1;
+ }
+
+ remote->rsp = tizen_remote_surface_manager_create_provider(__rsm, surface);
+ if (!remote->rsp) {
+ LOGE("failed to create provider");
+ free(remote);
+ return -1;
+ }
+
+ remote->id = strdup(id);
+ if (!remote->id) {
+ free(remote);
+ LOGE("out of memory");
+ return -1;
+ }
+
+ tizen_remote_surface_provider_add_listener(remote->rsp, &__rsp_listener, remote);
+
+ wl_display_roundtrip(display);
+ LOGD("%d surface remote enable");
+
+ return 0;
+}
+
+EXPORT_API int screen_connector_provider_init()
+{
+ int ret = 0;
+ struct wl_registry *registry;
+ Ecore_Wl_Global *global;
+ Eina_Inlist *globals;
+
+ if (__init_count > 0) {
+ return 0;
+ }
+ ecore_wl_init(NULL);
+
+ registry = ecore_wl_registry_get();
+ globals = ecore_wl_globals_get();
+
+ if (!registry || !globals) {
+ LOGE("could not get registry(%p) or global list(%p)", registry,
+ globals);
+ return -1;
+ }
+
+ EINA_INLIST_FOREACH(globals, global) {
+ if (!strcmp(global->interface, "tizen_remote_surface_manager")) {
+ __rsm = wl_registry_bind(registry, global->id,
+ &tizen_remote_surface_manager_interface, 1);
+ }
+ }
+
+ if (!__rsm) {
+ LOGE("could not get remote surface manager");
+ return -1;
+ }
+ __init_count++;
+
+ return ret;
+}
+
+EXPORT_API int screen_connector_provider_fini()
+{
+ int ret = 0;
+
+ if (__init_count > 1)
+ return 0;
+
+ if (__rsm)
+ tizen_remote_surface_manager_destroy(__rsm);
+
+ ecore_wl_shutdown();
+
+ __init_count--;
+ return ret;
+}
diff --git a/screen_connector_watcher/CMakeLists.txt b/screen_connector_watcher/CMakeLists.txt
new file mode 100644
index 0000000..56ac0a4
--- /dev/null
+++ b/screen_connector_watcher/CMakeLists.txt
@@ -0,0 +1,47 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(screen_connector_watcher C)
+
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
+SET(PROJECT_NAME "${PROJECT_NAME}")
+SET(LIBDIR ${LIB_INSTALL_DIR})
+SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
+SET(VERSION_MAJOR 1)
+SET(VERSION "${VERSION_MAJOR}.0.0")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(screen_connector_watcher REQUIRED
+ dlog
+ aul
+ wayland-tbm-client
+ elementary
+ wayland-client
+ ecore-wayland
+ tizen-remote-surface-client
+)
+
+FOREACH(flag ${screen_connector_watcher_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+AUX_SOURCE_DIRECTORY(src SOURCES)
+ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES})
+
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_watcher_LDFLAGS} "-lpthread")
+
+CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h")
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}")
diff --git a/screen_connector_watcher/LICENSE b/screen_connector_watcher/LICENSE
new file mode 100644
index 0000000..9c13a9b
--- /dev/null
+++ b/screen_connector_watcher/LICENSE
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/screen_connector_watcher/include/screen_connector_watcher.h b/screen_connector_watcher/include/screen_connector_watcher.h
new file mode 100644
index 0000000..7179bad
--- /dev/null
+++ b/screen_connector_watcher/include/screen_connector_watcher.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 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 __SCREEN_CONNECTOR_WATCHER_H__
+#define __SCREEN_CONNECTOR_WATCHER_H__
+
+#include <Evas.h>
+#include <wayland-tbm-client.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ VISIBILITY_TYPE_UNOBSCURED = 0,
+ VISIBILITY_TYPE_PARTIALLY_OBSCURED,
+ VISIBILITY_TYPE_FULLY_OBSCURED,
+} visibility_type;
+
+typedef void (*screen_connector_watcher_added_cb)(const char *appid, Evas_Object *image, void *data);
+typedef void (*screen_connector_watcher_removed_cb)(const char *appid, void *data);
+typedef void (*screen_connector_watcher_updated_cb)(const char *appid, Evas_Object *image, void *data);
+
+typedef struct _screen_connector_watcher_ops {
+ screen_connector_watcher_added_cb added;
+ screen_connector_watcher_removed_cb removed;
+ screen_connector_watcher_updated_cb updated;
+} screen_connector_watcher_ops;
+
+typedef struct _screen_connector_watcher_h *screen_connector_watcher_h;
+
+int screen_connector_watcher_init(Evas_Object *win);
+int screen_connector_watcher_fini();
+screen_connector_watcher_h screen_connector_watcher_add(screen_connector_watcher_ops *ops, char *id, void *data);
+int screen_connector_watcher_remove(screen_connector_watcher_h h);
+int screen_connector_watcher_update(const char *appid);
+
+int screen_connector_watcher_start_visibility_notify();
+int screen_connector_watcher_stop_visibility_notify();
+int screen_connector_watcher_freeze_visibility(Evas_Object *obj, visibility_type type);
+int screen_connector_watcher_thaw_visibility(Evas_Object *obj);
+int screen_connector_watcher_send_mouse_up(Evas_Object *obj);
+int screen_connector_watcher_send_touch_cancel(Evas_Object *obj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/screen_connector_watcher/screen_connector_watcher.pc.in b/screen_connector_watcher/screen_connector_watcher.pc.in
new file mode 100644
index 0000000..fdc9a3d
--- /dev/null
+++ b/screen_connector_watcher/screen_connector_watcher.pc.in
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: screen_connector_watcher
+Description: Support development of the Screen Connector Watcher library
+Version: @VERSION@
+Libs: -L${libdir} -lscreen_connector_watcher
+Cflags: -I${includedir}
+cppflags: -I${includedir}
diff --git a/screen_connector_watcher/src/screen_connector_watcher.c b/screen_connector_watcher/src/screen_connector_watcher.c
new file mode 100644
index 0000000..8a6ce7a
--- /dev/null
+++ b/screen_connector_watcher/src/screen_connector_watcher.c
@@ -0,0 +1,790 @@
+/*
+ * Screen Connector Watcher
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <errno.h>
+#include <glib.h>
+#include <sys/mman.h>
+
+#include <dlog.h>
+#include <wayland-client.h>
+#include <Ecore_Wayland.h>
+#include <Elementary.h>
+#include <wayland-extension/tizen-extension-client-protocol.h>
+#include <tizen-remote-surface-client-protocol.h>
+#include <aul_screen_connector.h>
+
+#include "screen_connector_watcher.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "SC_WATCHER"
+
+struct _screen_connector_watcher_h{
+ void *surface_info;
+};
+
+typedef struct _screen_connector_surface_info {
+ int pid;
+ int surface_id;
+ char *appid;
+ struct tizen_remote_surface *surface;
+ int freeze;
+ bool is_init;
+ bool cancel_touch;
+ Evas_Object *img_tbm;
+ Evas_Object *img_file;
+ screen_connector_watcher_ops *ops;
+ void *data;
+}screen_connector_surface_info;
+
+static Ecore_Event_Handler *__visibility_listener;
+static struct tizen_remote_surface_manager *__rsm;
+static struct wayland_tbm_client *__tbm_client;
+static struct wl_tbm *__tbm;
+static int __init_count;
+static Evas_Object *__viewer_win;
+static GHashTable *__surface_tbl;
+static GList *__surface_list;
+static GList *__pending_surface_list;
+static aul_screen_viewer_handler __aul_cbs;
+
+static bool __obj_is_visible(Evas_Object *obj)
+{
+ int x, y, w, h;
+ Ecore_Wl_Window *window = NULL;
+ int window_x, window_y, window_w, window_h;
+ int rotation;
+
+ window = elm_win_wl_window_get(__viewer_win);
+ ecore_wl_window_geometry_get(window, &window_x, &window_y, &window_w, &window_h);
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ rotation = ecore_wl_window_rotation_get(window);
+
+ if (x >= 0 && x < window_w &&
+ y >= 0 && y < window_h &&
+ (rotation == 0 || rotation == 180)) {
+ LOGD("x %d, y %d w %d h %d, window_w %d window_h %d rotation %d",
+ x, y, w, h, window_w, window_h, rotation);
+ return true;
+ } else if (x >= 0 && x < window_h &&
+ y >= 0 && y < window_w &&
+ (rotation == 90 || rotation == 270)) {
+ LOGD("x %d, y %d w %d h %d, window_w %d window_h %d rotation %d",
+ x, y, w, h, window_w, window_h, rotation);
+ return true;
+ }
+ return false;
+}
+
+static int __set_visibility(screen_connector_surface_info *surface_info, visibility_type type)
+{
+ int obscured;
+
+ if (!surface_info) {
+ LOGE("obj not found");
+ return -1;
+ }
+
+ switch (type) {
+ case VISIBILITY_TYPE_UNOBSCURED:
+ case VISIBILITY_TYPE_PARTIALLY_OBSCURED:
+ obscured = TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE;
+ break;
+ case VISIBILITY_TYPE_FULLY_OBSCURED:
+ obscured = TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE;
+ break;
+ default:
+ return -1;
+ }
+
+ if (surface_info->surface)
+ tizen_remote_surface_transfer_visibility(surface_info->surface, obscured);
+
+ return 0;
+}
+
+static void __obj_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data;
+
+ if (!surface_info->is_init) {
+ surface_info->is_init = true;
+ return;
+ }
+
+ if (__obj_is_visible(obj))
+ __set_visibility(surface_info, VISIBILITY_TYPE_UNOBSCURED);
+ else
+ __set_visibility(surface_info, VISIBILITY_TYPE_FULLY_OBSCURED);
+}
+
+static void __rs_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data;
+ Evas_Event_Mouse_Down *ev = event_info;
+ const char *desc = evas_device_description_get(ev->dev);
+ int x;
+ int y;
+ int w;
+ int h;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ LOGD("mouse down: %d %d", ev->canvas.x - x, ev->canvas.y - y);
+
+ if (desc == NULL)
+ desc = "";
+
+ tizen_remote_surface_transfer_mouse_event(surface_info->surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN,
+ 0,
+ ev->button,
+ ev->canvas.x - x,
+ ev->canvas.y - y,
+ wl_fixed_from_double(ev->radius_x),
+ wl_fixed_from_double(ev->radius_y),
+ wl_fixed_from_double(ev->pressure),
+ wl_fixed_from_double(ev->angle),
+ evas_device_class_get(ev->dev),
+ evas_device_subclass_get(ev->dev),
+ desc,
+ ev->timestamp);
+}
+
+static void __rs_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data;
+ Evas_Event_Mouse_Up *ev = event_info;
+ const char *desc = evas_device_description_get(ev->dev);
+ int x;
+ int y;
+ int w;
+ int h;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ LOGD("mouse up: %d %d", ev->canvas.x - x, ev->canvas.y - y);
+
+ if (desc == NULL)
+ desc = "";
+
+ tizen_remote_surface_transfer_mouse_event(surface_info->surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP,
+ 0,
+ ev->button,
+ ev->canvas.x - x,
+ ev->canvas.y - y,
+ wl_fixed_from_double(ev->radius_x),
+ wl_fixed_from_double(ev->radius_y),
+ wl_fixed_from_double(ev->pressure),
+ wl_fixed_from_double(ev->angle),
+ evas_device_class_get(ev->dev),
+ evas_device_subclass_get(ev->dev),
+ desc,
+ ev->timestamp);
+
+}
+
+static void __rs_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data;
+ Evas_Event_Mouse_Move *ev = event_info;
+ const char *desc = evas_device_description_get(ev->dev);
+ int x;
+ int y;
+ int w;
+ int h;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+ LOGD("mouse move: %d %d", ev->cur.canvas.x - x, ev->cur.canvas.y - y);
+
+ if (desc == NULL)
+ desc = "";
+
+ tizen_remote_surface_transfer_mouse_event(surface_info->surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE,
+ 0,
+ 0,
+ ev->cur.canvas.x - x,
+ ev->cur.canvas.y - y,
+ wl_fixed_from_double(ev->radius_x),
+ wl_fixed_from_double(ev->radius_y),
+ wl_fixed_from_double(ev->pressure),
+ wl_fixed_from_double(ev->angle),
+ evas_device_class_get(ev->dev),
+ evas_device_subclass_get(ev->dev),
+ desc,
+ ev->timestamp);
+
+}
+
+static void __rs_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data;
+ Evas_Event_Mouse_Wheel *ev = event_info;
+ const char *desc = evas_device_description_get(ev->dev);
+
+ LOGD("mouse wheel");
+
+ if (desc == NULL)
+ desc = "";
+
+ tizen_remote_surface_transfer_mouse_wheel(surface_info->surface,
+ ev->direction,
+ ev->z,
+ evas_device_class_get(ev->dev),
+ evas_device_subclass_get(ev->dev),
+ desc,
+ ev->timestamp);
+
+}
+
+static void __rs_cb_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ LOGD("show");
+}
+
+static void __rs_cb_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ LOGD("hide");
+}
+
+static void __buffer_changed(void *data, struct tizen_remote_surface *trs, uint32_t type, struct wl_buffer *tbm,
+ int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys)
+{
+ screen_connector_surface_info *surface_info;
+ bool is_added = false;
+ Evas_Native_Surface ns;
+ tbm_surface_h tbm_surface;
+ int width, height;
+ char *map;
+ char format[] = "png";
+ char plug_id[256];
+
+ surface_info = (screen_connector_surface_info *)data;
+ if (surface_info->img_tbm == NULL) {
+
+ LOGD("first added !!!! %d, %d %s", (surface_info->img_tbm == NULL), type, surface_info->appid);
+ surface_info->img_tbm = evas_object_image_filled_add(
+ evas_object_evas_get(__viewer_win));
+
+ /* Image alpha set */
+ evas_object_image_alpha_set(surface_info->img_tbm, 1);
+
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ __rs_cb_mouse_down, surface_info);
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_MOUSE_UP,
+ __rs_cb_mouse_up, surface_info);
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ __rs_cb_mouse_move, surface_info);
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_MOUSE_WHEEL,
+ __rs_cb_mouse_wheel, surface_info);
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_SHOW,
+ __rs_cb_show, surface_info);
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_HIDE,
+ __rs_cb_hide, surface_info);
+
+ /* Store surface_info */
+ g_hash_table_insert(__surface_tbl, surface_info->img_tbm, surface_info);
+
+ /* Set data to use in accessibility */
+ snprintf(plug_id, sizeof(plug_id), "%s:%d", surface_info->appid, surface_info->pid);
+ evas_object_data_set(surface_info->img_tbm, "___PLUGID", strdup(plug_id));
+ evas_object_event_callback_add(surface_info->img_tbm,
+ EVAS_CALLBACK_MOVE, __obj_move_cb, surface_info);
+
+ is_added = true;
+ }
+
+ /* check type of given buffer */
+ if (type == 0) {//if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM) {
+
+ /* get tbm surface from buffer */
+ tbm_surface = wl_buffer_get_user_data(tbm);
+ width = tbm_surface_get_width(tbm_surface);
+ height = tbm_surface_get_height(tbm_surface);
+
+ memset(&ns, 0, sizeof(Evas_Native_Surface));
+ ns.version = EVAS_NATIVE_SURFACE_VERSION;
+ ns.type = EVAS_NATIVE_SURFACE_TBM;
+ ns.data.tbm.buffer = tbm_surface;
+
+ evas_object_resize(surface_info->img_tbm, width, height);
+ evas_object_image_size_set(surface_info->img_tbm, width, height);
+ evas_object_image_native_surface_set(surface_info->img_tbm, &ns); /* set native surface */
+ evas_object_image_pixels_dirty_set(surface_info->img_tbm, EINA_TRUE); /* set dirty for image updating */
+
+ //evas_object_del(surface_info->img_file); /* delete previous object for the image file type */
+
+ } else if (type == 1) {//} else if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_IMAGE_FILE) {
+
+ if (!surface_info->img_file) {
+ surface_info->img_file = evas_object_image_filled_add(
+ evas_object_evas_get(__viewer_win));
+ }
+
+ map = mmap(NULL, img_file_size, PROT_READ, MAP_SHARED, img_file_fd, 0);
+ evas_object_image_memfile_set(surface_info->img_file, map, img_file_size, format, NULL);
+ evas_object_image_size_get(surface_info->img_tbm, &width, &height);
+ evas_object_image_fill_set(surface_info->img_file, 0, 0, width, height);
+ evas_object_resize(surface_info->img_file, width, height);
+ munmap(map, img_file_size);
+ close(img_file_fd); /* close passed fd */
+
+ evas_object_image_native_surface_set(surface_info->img_tbm, NULL); /* set null to previous object for the tbm type */
+ }
+
+ if (is_added) {
+ LOGD("call added !!!! %s", surface_info->appid);
+ surface_info->ops->added(surface_info->appid, surface_info->img_tbm,
+ surface_info->data);
+ } else {
+ LOGD("call updated !!!! %s", surface_info->appid);
+ surface_info->ops->updated(surface_info->appid, surface_info->img_tbm,
+ surface_info->data);
+ }
+
+}
+
+static void __buffer_updated(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time)
+{
+ __buffer_changed(data, trs, 0, buffer, 0, 0, 0, NULL);
+}
+
+static void __free_surface_info(screen_connector_surface_info *surface_info)
+{
+ if (!surface_info)
+ return;
+
+ if (surface_info->appid)
+ free(surface_info->appid);
+
+ if (surface_info->img_tbm) {
+ evas_object_del(surface_info->img_tbm);
+ surface_info->img_tbm = NULL;
+ }
+
+ if (surface_info->ops)
+ free(surface_info->ops);
+
+ free(surface_info);
+}
+
+static void __buffer_missing(void *data, struct tizen_remote_surface *trs)
+{
+ screen_connector_surface_info *surface_info;
+ char *plug_id;
+
+ LOGD("missing");
+ surface_info = (screen_connector_surface_info *)data;
+ if (!surface_info) {
+ LOGE("Null surface_info");
+ return;
+ }
+
+ g_hash_table_remove(__surface_tbl, surface_info->img_tbm);
+
+ /* Remove data used in accessibility */
+ plug_id = evas_object_data_del(surface_info->img_tbm, "___PLUGID");
+ free(plug_id);
+
+ surface_info->ops->removed(surface_info->appid, surface_info->data);
+ __free_surface_info(surface_info);
+}
+
+#if 0
+static const struct tizen_remote_surface_listener __rs_listener = {
+ __buffer_updated,
+ __buffer_missing,
+ __buffer_changed,
+};
+#else
+static const struct tizen_remote_surface_listener __rs_listener = {
+ __buffer_updated,
+ __buffer_missing,
+};
+#endif
+
+
+static void __app_removed(const char *appid, const int pid, void *data)
+{
+}
+
+static void __redirect_surface(screen_connector_surface_info *surface_info)
+{
+ surface_info->surface =
+ tizen_remote_surface_manager_create_surface(__rsm, (uint32_t)surface_info->surface_id, __tbm);
+ tizen_remote_surface_add_listener(surface_info->surface, &__rs_listener,
+ surface_info);
+ tizen_remote_surface_redirect(surface_info->surface);
+
+}
+
+static screen_connector_surface_info *__create_surface_info(char *appid)
+{
+ screen_connector_surface_info *surface_info = NULL;
+ surface_info = (screen_connector_surface_info *)calloc(1, sizeof(screen_connector_surface_info));
+ if (surface_info == NULL) {
+ LOGE("surface_info calloc fail");
+ return NULL;
+ }
+
+ surface_info->img_file = NULL;
+ surface_info->img_tbm = NULL;
+ surface_info->appid = strdup(appid);
+
+ return surface_info;
+}
+
+static void __app_added(const char *appid, const int pid, const unsigned int surface_id, void *data)
+{
+ LOGD("__app_added pid: %d, surface_id: %d, appid: %s", pid, surface_id, appid);
+ screen_connector_surface_info *surface_info = NULL;
+ screen_connector_surface_info *cur_info = NULL;
+ GList *surface_list = __surface_list;
+
+ for (; surface_list != NULL; surface_list = surface_list->next) {
+ cur_info = (screen_connector_surface_info *)surface_list->data;
+ if (strcmp(cur_info->appid, appid) == 0) {
+ surface_info = cur_info;
+ __surface_list = g_list_remove(__surface_list, cur_info);
+ break;
+ }
+ }
+
+ if (surface_info == NULL) {
+ surface_info = __create_surface_info((char *)appid);
+ surface_info->pid = pid;
+ surface_info->surface_id = surface_id;
+ __pending_surface_list = g_list_append(__pending_surface_list, surface_info);
+ return;
+ }
+
+ surface_info->surface_id = surface_id;
+ surface_info->pid = pid;
+ if (surface_id > 0)
+ __redirect_surface(surface_info);
+ else
+ LOGE("bad tbm message received. missing arguments");
+
+}
+
+static void __send_visibility(gpointer key, gpointer value, gpointer user_data)
+{
+ screen_connector_surface_info *surface_info = (screen_connector_surface_info *)value;
+ Evas_Object *evas_obj = (Evas_Object *)key;
+ unsigned int event = GPOINTER_TO_INT(user_data);
+ int ret;
+ visibility_type type;
+
+ if (surface_info->freeze)
+ return;
+
+ if (!__obj_is_visible(evas_obj))
+ return;
+
+ if (event)
+ type = VISIBILITY_TYPE_FULLY_OBSCURED;
+ else
+ type = VISIBILITY_TYPE_UNOBSCURED;
+
+ ret = __set_visibility(surface_info, type);
+ if (ret == -1)
+ LOGE("failed to set object visibility set %p to %d", evas_obj, type);
+}
+
+static Eina_Bool __visibility_cb(void *data, int type, void *event)
+{
+ Ecore_Wl_Event_Window_Visibility_Change *ev = event;
+
+ LOGD("visibility change: %d %d", (unsigned int)ev->win,
+ (unsigned int)ev->fully_obscured);
+
+ if (!__surface_tbl)
+ return ECORE_CALLBACK_RENEW;
+
+ g_hash_table_foreach(__surface_tbl, __send_visibility,
+ GINT_TO_POINTER(ev->fully_obscured));
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+EXPORT_API int screen_connector_watcher_start_visibility_notify()
+{
+ if (__visibility_listener)
+ return 0;
+
+ __visibility_listener = ecore_event_handler_add(
+ ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, __visibility_cb, NULL);
+
+ return 0;
+}
+
+
+EXPORT_API int screen_connector_watcher_stop_visibility_notify()
+{
+ if (!__visibility_listener)
+ return 0;
+
+ ecore_event_handler_del(__visibility_listener);
+ __visibility_listener = NULL;
+
+ return 0;
+}
+
+EXPORT_API int screen_connector_watcher_freeze_visibility(Evas_Object *obj, visibility_type type)
+{
+ screen_connector_surface_info *surface_info;
+
+ surface_info = (screen_connector_surface_info *)g_hash_table_lookup(__surface_tbl, obj);
+ if (!surface_info) {
+ LOGE("obj not found");
+ return -1;
+ }
+ surface_info->freeze = 1;
+
+ return __set_visibility(surface_info, type);
+}
+
+EXPORT_API int screen_connector_watcher_thaw_visibility(Evas_Object *obj)
+{
+ screen_connector_surface_info *surface_info;
+
+ surface_info = (screen_connector_surface_info *)g_hash_table_lookup(__surface_tbl, obj);
+ if (!surface_info) {
+ LOGE("obj not found");
+ return -1;
+ }
+ surface_info->freeze = 0;
+
+ return 0;
+}
+
+EXPORT_API int screen_connector_watcher_send_mouse_up(Evas_Object *obj)
+{
+ screen_connector_surface_info *surface_info;
+ int x;
+ int y;
+ int w;
+ int h;
+ unsigned int timestamp;
+
+ surface_info = g_hash_table_lookup(__surface_tbl, obj);
+ if (!surface_info) {
+ LOGE("unknown object. not widget object.");
+ return -1;
+ }
+
+ if (!surface_info->img_tbm) {
+ LOGE("surface not yet initialized.");
+ return -1;
+ }
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ timestamp = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff);
+ tizen_remote_surface_transfer_mouse_event(surface_info->surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP,
+ 0,
+ 1,
+ w / 2,
+ h / 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ TIZEN_INPUT_DEVICE_CLAS_MOUSE,
+ TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
+ "",
+ timestamp);
+
+ return 0;
+}
+
+EXPORT_API int screen_connector_watcher_send_touch_cancel(Evas_Object *obj)
+{
+ screen_connector_surface_info *surface_info;
+
+ surface_info = g_hash_table_lookup(__surface_tbl, obj);
+ if (!surface_info) {
+ LOGE("unknown object. not widget object.");
+ return -1;
+ }
+
+ if (surface_info->img_tbm) {
+ tizen_remote_surface_transfer_touch_cancel(surface_info->surface);
+ surface_info->cancel_touch = true;
+ } else {
+ LOGE("surface not yet initialized.");
+ return -1;
+ }
+
+ return 0;
+}
+
+EXPORT_API int screen_connector_watcher_init(Evas_Object *win)
+{
+ int ret = 0;
+ struct wl_registry *registry;
+ Ecore_Wl_Global *global;
+ Eina_Inlist *globals;
+
+ __viewer_win = win;
+
+ if (__init_count > 0) {
+ return 0;
+ }
+ ecore_wl_init(NULL);
+
+ registry = ecore_wl_registry_get();
+ globals = ecore_wl_globals_get();
+
+ if (!registry || !globals) {
+ LOGE("could not get registry(%p) or global list(%p)", registry,
+ globals);
+ return -1;
+ }
+
+ EINA_INLIST_FOREACH(globals, global) {
+ if (!strcmp(global->interface, "tizen_remote_surface_manager")) {
+ __rsm = wl_registry_bind(registry, global->id,
+ &tizen_remote_surface_manager_interface, 1);
+ }
+ }
+
+ if (!__rsm) {
+ LOGE("could not get remote surface manager");
+ return -1;
+ }
+
+ __tbm_client = (struct wayland_tbm_client *)wayland_tbm_client_init(ecore_wl_display_get());
+ if (!__tbm_client) {
+ LOGE("could not get tbm client");
+ return -1;
+ }
+
+ __tbm = (struct wl_tbm *)wayland_tbm_client_get_wl_tbm(__tbm_client);
+ if (!__tbm) {
+ LOGE("could not get tbm");
+ return -1;
+ }
+
+ __surface_tbl = g_hash_table_new(g_direct_hash, g_direct_equal);
+ if (!__surface_tbl) {
+ LOGE("failed to create table");
+ return -1;
+ }
+
+ __aul_cbs.app_added = __app_added;
+ __aul_cbs.app_removed = __app_removed;
+ aul_screen_connector_add_screen_viewer(&__aul_cbs, NULL);
+
+ __init_count++;
+
+ return ret;
+}
+
+EXPORT_API int screen_connector_watcher_fini()
+{
+ int ret = 0;
+
+ if (__init_count > 1)
+ return 0;
+
+ if (__tbm_client)
+ wayland_tbm_client_deinit(__tbm_client);
+
+ if (__rsm)
+ tizen_remote_surface_manager_destroy(__rsm);
+
+ if (__surface_tbl)
+ g_hash_table_destroy(__surface_tbl);
+
+ ecore_wl_shutdown();
+
+ __init_count--;
+ return ret;
+}
+
+EXPORT_API screen_connector_watcher_h screen_connector_watcher_add(screen_connector_watcher_ops *ops, char *id, void *data)
+{
+
+ screen_connector_watcher_h w_handle;
+ screen_connector_watcher_ops *watcher_ops;
+ screen_connector_surface_info *surface_info = NULL;
+ screen_connector_surface_info *cur_info = NULL;
+ GList *surface_list = __pending_surface_list;
+
+ watcher_ops = (screen_connector_watcher_ops *)calloc(1, sizeof(screen_connector_watcher_ops *));
+ if (watcher_ops == NULL) {
+ LOGE("watcher_ops calloc fail");
+ return NULL;
+ }
+
+ watcher_ops->added = ops->added;
+ watcher_ops->removed = ops->removed;
+ watcher_ops->updated = ops->updated;
+
+ w_handle = (screen_connector_watcher_h)calloc(1, sizeof(struct _screen_connector_watcher_h));
+ if (watcher_ops == NULL) {
+ LOGE("w_handle calloc fail");
+ return NULL;
+ }
+
+ for (; surface_list != NULL; surface_list = surface_list->next) {
+ cur_info = (screen_connector_surface_info *)surface_list->data;
+ if (strcmp(cur_info->appid, id) == 0) {
+ surface_info = cur_info;
+ __pending_surface_list = g_list_remove(__pending_surface_list, cur_info);
+ break;
+ }
+ }
+
+ if (surface_info != NULL) {
+ surface_info->ops = watcher_ops;
+ surface_info->data = data;
+ __redirect_surface(surface_info);
+ } else {
+ surface_info = __create_surface_info(id);
+ surface_info->ops = watcher_ops;
+ surface_info->data = data;
+ __surface_list = g_list_append(__surface_list, surface_info);
+ }
+
+ w_handle->surface_info = surface_info;
+ return w_handle;
+}
+
+EXPORT_API int screen_connector_watcher_remove(screen_connector_watcher_h h)
+{
+ int ret = 0;
+ return ret;
+}
+
+EXPORT_API int screen_connector_watcher_update(const char *appid)
+{
+ int ret = 0;
+ return ret;
+}
diff --git a/screen_connector_watcher_evas/CMakeLists.txt b/screen_connector_watcher_evas/CMakeLists.txt
new file mode 100644
index 0000000..bb8e182
--- /dev/null
+++ b/screen_connector_watcher_evas/CMakeLists.txt
@@ -0,0 +1,44 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(screen_connector_watcher_evas C)
+
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
+SET(PROJECT_NAME "${PROJECT_NAME}")
+SET(LIBDIR ${LIB_INSTALL_DIR})
+SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
+SET(VERSION_MAJOR 1)
+SET(VERSION "${VERSION_MAJOR}.0.0")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(screen_connector_watcher_evas REQUIRED
+ elementary
+ dlog
+ aul
+)
+
+FOREACH(flag ${screen_connector_watcher_evas_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../screen_connector_watcher/include)
+
+AUX_SOURCE_DIRECTORY(src SOURCES)
+ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES})
+
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_watcher_evas_LDFLAGS} "-lpthread")
+
+CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h")
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}")
diff --git a/screen_connector_watcher_evas/LICENSE b/screen_connector_watcher_evas/LICENSE
new file mode 100644
index 0000000..a06208b
--- /dev/null
+++ b/screen_connector_watcher_evas/LICENSE
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+
diff --git a/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h b/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h
new file mode 100644
index 0000000..06ebdf7
--- /dev/null
+++ b/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016 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 __SCREEN_CONNECTOR_WATCHER_EVAS_H
+#define __SCREEN_CONNECTOR_WATCHER_EVAS_H
+
+#include <Evas.h>
+#include <tizen.h>
+#include <tizen_type.h>
+
+#include "screen_connector_watcher.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file screen_connector_watcher_evas.h
+ * @brief This file declares API of libscreen_connector library
+ * @since_tizen 3.0
+ */
+
+/**
+ * @addtogroup CAPI_SCREEN_CONNECTOR_WATCHER_EVAS_MODULE
+ * @{
+ */
+
+typedef void (*screen_connector_watcher_evas_added_cb)(const char *appid, Evas_Object *image, void *data);
+typedef void (*screen_connector_watcher_evas_removed_cb)(const char *appid, void *data);
+typedef void (*screen_connector_watcher_evas_updated_cb)(const char *appid, Evas_Object *image, void *data);
+
+typedef struct _screen_connector_watcher_evas_ops {
+ screen_connector_watcher_evas_added_cb added;
+ screen_connector_watcher_evas_removed_cb removed;
+ screen_connector_watcher_evas_updated_cb updated;
+}screen_connector_watcher_evas_ops;
+
+typedef struct _screen_connector_watcher_evas_h *screen_connector_watcher_evas_h;
+
+int screen_connector_watcher_evas_init(Evas_Object *win);
+int screen_connector_watcher_evas_fini();
+screen_connector_watcher_evas_h screen_connector_watcher_evas_add(screen_connector_watcher_evas_ops *ops, char *id, void *data);
+int screen_connector_watcher_evas_remove(screen_connector_watcher_evas_h handle);
+int screen_connector_watcher_evas_update(const char *appid);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of a file */
diff --git a/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in b/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in
new file mode 100644
index 0000000..a86b8a4
--- /dev/null
+++ b/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in
@@ -0,0 +1,12 @@
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: screen_connector_watcher_evas
+Description: Support development of the screen connector watcher EVAS library
+Version: @VERSION@
+Requires: screen_connector_watcher
+Libs: -L${libdir} -lscreen_connector_watcher_evas -lscreen_connector_watcher
+Cflags: -I${includedir}
+cppflags: -I${includedir}
diff --git a/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c
new file mode 100644
index 0000000..ffd1589
--- /dev/null
+++ b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c
@@ -0,0 +1,129 @@
+/*
+ * Screen Connector Watcher Evas
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * 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 <stdio.h>
+#include <errno.h>
+#include <glib.h>
+
+#include <dlog.h>
+
+#include "screen_connector_watcher.h"
+#include "screen_connector_watcher_evas.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "SC_WATCHER_EVAS"
+
+struct _screen_connector_watcher_evas_h {
+ screen_connector_watcher_evas_ops *ops;
+ screen_connector_watcher_h watcher_h;
+ void *data;
+};
+
+static void __destroy_watcher_evas_handle(screen_connector_watcher_evas_h h)
+{
+ if (!h)
+ return;
+ free(h->ops);
+ free(h);
+}
+
+EXPORT_API int screen_connector_watcher_evas_init(Evas_Object *win)
+{
+ int ret = 0;
+ ret = screen_connector_watcher_init(win);
+ return ret;
+}
+
+EXPORT_API int screen_connector_watcher_evas_fini()
+{
+ int ret = 0;
+ ret = screen_connector_watcher_fini();
+ return ret;
+}
+
+static void __watcher_added_cb(const char *appid, Evas_Object *image, void *data)
+{
+ screen_connector_watcher_evas_h handle;
+
+ handle = (screen_connector_watcher_evas_h)data;
+ handle->ops->added(appid, image, handle->data);
+}
+
+static void __watcher_removed_cb(const char *appid, void *data)
+{
+ screen_connector_watcher_evas_h handle;
+
+ handle = (screen_connector_watcher_evas_h)data;
+ handle->ops->removed(appid, handle->data);
+}
+
+static void __watcher_updated_cb(const char *appid, Evas_Object *image, void *data)
+{
+ screen_connector_watcher_evas_h handle;
+
+ handle = (screen_connector_watcher_evas_h)data;
+ handle->ops->updated(appid, image, handle->data);
+}
+
+EXPORT_API screen_connector_watcher_evas_h screen_connector_watcher_evas_add(screen_connector_watcher_evas_ops *ops, char *id, void *data)
+{
+ screen_connector_watcher_evas_h handle;
+ screen_connector_watcher_evas_ops *evas_ops;
+ screen_connector_watcher_ops *watcher_ops;
+
+ watcher_ops = (screen_connector_watcher_ops *)calloc(1, sizeof(screen_connector_watcher_ops));
+ watcher_ops->added = __watcher_added_cb;
+ watcher_ops->removed = __watcher_removed_cb;
+ watcher_ops->updated = __watcher_updated_cb;
+
+ evas_ops = (screen_connector_watcher_evas_ops *)calloc(1, sizeof(screen_connector_watcher_evas_ops));
+ if (evas_ops == NULL) {
+ LOGE("evas_ops calloc fail");
+ return NULL;
+ }
+
+ memcpy(evas_ops, ops, sizeof(screen_connector_watcher_evas_ops));
+ handle = (screen_connector_watcher_evas_h)calloc(1, sizeof(struct _screen_connector_watcher_evas_h));
+ if (handle == NULL) {
+ LOGE("handle calloc fail");
+ return NULL;
+ }
+ handle->ops = evas_ops;
+ handle->data = data;
+ handle->watcher_h = screen_connector_watcher_add(watcher_ops, id, handle);
+
+ return handle;
+}
+
+EXPORT_API int screen_connector_watcher_evas_remove(screen_connector_watcher_evas_h handle)
+{
+ int ret = 0;
+ ret = screen_connector_watcher_remove(handle->watcher_h);
+ __destroy_watcher_evas_handle(handle);
+ return ret;
+}
+
+EXPORT_API int screen_connector_watcher_evas_update(const char *appid)
+{
+ int ret = 0;
+ ret = screen_connector_watcher_update(appid);
+ return ret;
+}
+/* End of a file */